Detection · live

Backdoor scanner

The backdoor scanner audits the resources actually running on your server. It runs off-path on a schedule, so it never blocks gameplay; findings land in the dashboard for operator review. The deeper companion to the always-on Server analytics view.

What it protects against

The realistic threat is a malicious resource: dropped via a compromised dependency, included as a copy of a paid resource from a leak, or shipped by a member of the team who shouldn't have commit access. The scanner doesn't try to perfectly classify every resource as good or bad — it surfaces ones that look statistically off, and lets the operator decide.

How the scan works

Each finding has to survive three layers before it surfaces. The full architecture is on the False positives page; the short version for this scanner is:

  1. Pattern detection on every started resource, run on the FiveM server itself. Fast, by design noisy.
  2. Whitelist-first filter — hits inside known-clean frameworks (ESX, QBCore, ox-/qb-family, pma- and similar add-ons) and inside config files are filtered, unless the pattern belongs to the always-suspicious class (code execution, obfuscation, hardcoded exfiltration endpoints, anti-AC tampering).
  3. In-house AI severity grading on the surviving findings, classifying them into low / medium / high severity. Outage is fail-silent — findings reach the dashboard with a "grading…" badge and you can act before grading completes.

The grading runs on our own EU GPU server. Repeated snippets from standard frameworks are cached: the first time we grade an ESX or QBCore snippet, it's cached for every subsequent customer who hits the same snippet. That's also why the SHA-256 snippet-hash corpus matters — see the page on false positives for what we keep and what we don't.

Modes

The scanner is alert-only today: it never disables or removes a resource. Verdicts land in the dashboard and (if configured) post to a Discord webhook. The mode column therefore describes how strongly an alert is surfaced, not what gets executed.

ModeBehavior
observeFindings are written to the audit log and the dashboard's Resource hygiene tab. No notifications.
scoreSame as observe, plus a Discord-webhook notification if a webhook is configured. Useful for operators who want to be paged on findings.
enforceReserved. The scanner does not yet take automatic action against a resource — that will require explicit opt-in and a review queue.

Verdicts

VerdictWhat it means
clearedResource passed the scan. Either it's on the curated framework whitelist, or its content didn't match anything that survived all three filtering layers.
high_riskThe scan surfaced patterns strong enough to warrant operator review and the in-house severity grading classified them as elevated. Action stays manual — we don't auto-disable resources.
whitelistedOperator (or hoaxeye) marked this resource trusted. Whitelist entries are visible in the audit log with the reason.

Auto-alert on risk crossing

When a resource crosses into the high_risk bucket, the dashboard surfaces a banner at the top of the Resource hygiene tab. Edge-triggered (one alert per crossing, not per scan), with a one-hour cooldown to avoid spam during noisy scan windows. This works in tandem with the always-on Server analytics view, which tracks the same resource over time without the deeper backdoor-pattern pass.

Cadence & scope

03:00 – 05:00 UTC
Scan window
Daily slot inside which a server's scan can fire. Picked to land outside peak hours for the EU/NA player base.
3 days
Per-server cooldown
A server is not re-scanned until ~72 hours have passed since its last completed scan, so we don't pile up redundant work.
started resources
Scope
Only resources currently in a started state at scan time. Stopped resources are skipped — they can't backdoor anything that isn't running.
0 / 59 resources
Recent clean run
Smoke run on a representative test server (59 started resources). Zero findings — the expected outcome for clean servers under the current design.

Methodology: the clean-run number is from a real test server, not a synthetic benchmark. With a real backdoor planted in a framework resource as a validation, the same pipeline cleanly detected it at high severity.

Operator recommendation

  • All server types: leave the scanner running on the default cadence. Subscribe its Discord webhook to a private operator channel — not a public channel — so findings are visible to the team without leaking which signals fired.
  • Custom-resource-heavy stacks: on the first run, expect to whitelist a handful of internal resources. Use the audit-log entries as your changelog — they tell future you why a given resource was trusted.
  • See Server setup for the whitelist workflow in the dashboard, and Server analytics for the always-on companion view.