OSINT cluster research: username/account enumeration engines #180
Labels
No labels
bug
design
documentation
duplicate
enhancement
good first issue
help wanted
invalid
question
research
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
nsaspy/starintel-auto-research#180
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Goal
Deeply compare the major username/account enumeration engines used by modern OSINT stacks, especially Maigret, WhatsMyName, Sherlock, Nexfil, and Blackbird.
Architecture rule
This is one Identity Domain Server capability cluster, not five new actor projects.
The research must extract the distinct techniques and data models each engine contributes, then define one StarIntel capability contract with provider/registry-specific strategies behind it.
Required comparison
For each engine enumerate and verify:
StarIntel target
Research a single capability family such as
identity.enumerateAccountswith:found | notFound | unknown | partial | blockedoutcomesImplementation preference
StarLang first. Extend StarLang where needed. Common Lisp next. Python only as a last-resort adapter.
Output gate
Stage findings in the internal OSINT tool ledger and this issue. Do not modify ARARD/ARADR conclusions until explicit human instruction to add research.
Deep finding: WhatsMyName
Upstream:
WebBreacher/WhatsMyName.What it actually is now
WhatsMyName is primarily a community-maintained username detection dataset, not the checker runtime. Since 2023 the project intentionally removed bundled checker scripts and focuses on
wmn-data.json.Feature/mechanism inventory
What StarIntel needs from it
Do not make WhatsMyName an actor. Split the concept into:
identityPlatformRegistrydatasetThe registry should carry at least platform ID, category/tags, profile URL template, probe URL/method, positive/negative/error signatures, expected status behavior, side-effect policy, health state, last validation evidence, and source/license metadata.
This is the cleanest evidence so far that
user-huntshould stop owning WMN-specific data semantics and instead consume a generic platform registry.Deep finding: Sherlock
Upstream:
sherlock-project/sherlock.Feature/mechanism inventory
{?}substitutions for_,-, and.variantsWhat StarIntel needs from it
Sherlock adds two useful ideas beyond basic WMN consumption:
StarIntel should express username variants as generated candidate observations with derivation provenance, then fan them through the same
identity.enumerateAccountscontract. Do not make a separate Sherlock capability family.The provider result must distinguish transient server errors from true not-found; a 5xx cannot collapse to
notFound.Deep finding: NExfil
Upstream:
thewhiteh4t/nexfil.Feature/mechanism inventory
What StarIntel needs from it
NExfil is mostly a performance reference, not a distinct capability. Pull these ideas into
identity.enumerateAccounts:fast,balanced,exhaustive)Do not port NExfil wholesale unless later benchmarking shows a probe technique absent from the shared registry strategy.
Deep finding: Blackbird
Upstream:
p1ngul1n0/blackbird.Feature/mechanism inventory
What StarIntel needs from it
Blackbird's useful delta is post-enumeration interpretation, not another checker runtime.
StarIntel should keep raw account observations separate from any inferred behavioral/technical profile. A later analysis capability may consume only an explicitly policy-approved projection of those observations and emit claims with provenance/confidence.
So the target split is:
identity.enumerateAccounts-> factual/observational resultsidentity.resolveIdentity-> correlationDo not let an LLM summary become the evidence layer, and do not duplicate WMN enumeration just to reproduce Blackbird.
ARDR research checkpoint — READY_FOR_DESIGN
StarIntel problem solved
This research is directly tied to
lost-rob0t/starintel-server#45: the dormantsource/actor-systems/user-finder.lispstill performs a WMN download at load time, uses duplicated/unbounded concurrency layers, has no robust typed partial/error model, and publishes generated documents directly to Rabbit instead of canonical ingest. The target is therefore not “adopt five OSINT tools”; it is to replace the broken username-enumeration subsystem with one bounded Identity Domain Server capability.Current implementation evidence
Current
user-finder.lispproves the old architectural boundary is wrong:*wmn-data*is fetched remotely during load;found | notFound | unknown | blocked | partialresults;lparallel:pmapcarwraps additionalsubmit-taskcalls, creating two concurrency layers;Upstream findings
WhatsMyName
Current WMN is intentionally a data registry, not a checker runtime. Its maintained
wmn-data.jsondescribes how to test sites and its JSON schema is a useful source-registry contract. Upstream explicitly focuses on public sites where the username is present directly in the profile URL and detection can distinguish existing vs missing accounts. WMN is therefore a strong registry/provider input, not a StarIntel runtime architecture.Useful semantics to retain:
Sherlock
Sherlock demonstrates multiple per-site detection strategies rather than one universal status-code test. Its site definitions support URL templates, username regex constraints and detection based on status/body/redirect-style behavior. The reusable StarIntel lesson is typed probe strategies, not Sherlock's Python runtime.
Maigret
Current Maigret extends the registry model substantially. Its site model includes stable site metadata, disabled state, tags, identifier type, custom headers, activation requirements, username regex, request method/payload/GET params, response-presence/absence indicators, known claimed/unclaimed usernames and site ranking/filtering. It also supports site health/self-check behavior, retries, tags/country filtering and page-derived identifier pivots. Recent upstream false-positive bot issues show that provider drift is an active operational problem, not an edge case.
Reusable semantics:
username, other ids) rather than assuming every probe accepts the same identifier;Blackbird / Nexfil
They remain useful comparison points and downstream registry/probe consumers, but current evidence does not justify making either runtime an architectural dependency. Blackbird is already described by WMN as a WMN consumer, reinforcing the registry/runtime separation. Nexfil-style broad platform-count coverage is not itself a capability StarIntel should encode; coverage belongs in versioned registry data and quality metrics.
StarIntel design conclusions
identity.enumerateAccounts(final spelling follows StarLang conventions).user-huntas a bespoke forever-loop actor.found | notFound | unknown | blocked | unavailable | failed; aggregate run may besuccess | partial | cancelled | failedand retains every per-provider reason.notFoundrequires a probe-specific negative condition. Timeout, challenge, rate-limit, parse drift or ambiguous response can never be coerced to not-found.StarLang classification
Adversarial findings
Rejected:
Research transition
Research state:
READY_FOR_DESIGN.No implementation approval is implied. ARDR may proceed to design under #170, but implementation remains operator-only.