TWEAKOS — Windows Stealer, Telegram-Bot C2 & Stolen-Account Marketplace
Executive Summary
What happened: Flare published research on 2026-09-24 describing TWEAKOS, a Windows infostealer paired with a Telegram-bot command-and-control channel and a built-in stolen-account marketplace. The operation surfaced after its own source code was posted to Pastebin, which exposed a hardcoded Telegram bot token and two hardcoded admin IDs shared by both the stealer and the backend bot. Cyber Security News, Cyber Press, Security Boulevard, and Cryptika independently corroborated the core mechanics on 2026-09-25 and after.
Observed tradecraft: TWEAKOS is two components sharing one bot token. The stealer harvests Discord authentication tokens from Local Storage LevelDB files for Discord, Discord PTB, and Chrome's default profile, validates each candidate against the Discord API, and exfiltrates working tokens to the operators. Separately, it social-engineers the victim for a Telegram phone number and login code, uses the Telethon library to mint a brand-new session file, and sends that session to two operator accounts, granting access without ever resetting the victim's password. Persistence needs no admin rights: the packaged build drops itself as SystemHelper.exe in the user Startup folder, and the script build adds an HKCU Run value named SystemHelper. A referenced follow-on payload, WindowsSecurityChecker.exe, was not recovered by researchers. Operators can also push a per-victim blocker_{uid}.vbs script that displays a repeating full-screen Russian-language warning to coerce payment or compliance.
Detection strategy: No file hashes and no dedicated malicious C2 domains or IPs were published for this campaign; every operator-facing network endpoint named in the reporting (Telegram's Bot API, Discord's API) is a legitimate, heavily-used public service. This pack's detection value is therefore behavioral: the two no-admin persistence mechanisms (Q01/Q02/Q03), the coercion script's execution pattern (Q05), a packaging fingerprint for the frozen Python binary (Q04), and clearly-labelled enrichment correlations against the two legitimate APIs (Q06/Q07) that must never be treated as blockable infrastructure on their own.
Operational consequence: A confirmed hit does not mean the endpoint alone is compromised: a stolen Discord token or a hijacked Telegram session is valid until revoked, independent of any local remediation. Response must include out-of-band account recovery (revoke Discord tokens, terminate the victim's active Telegram sessions from a trusted device) in addition to endpoint cleanup, because deleting the local artifact does not undo the account theft.
| Priority | Why now | Coverage delivered | Key limitation |
|---|---|---|---|
| Hunt SystemHelper.exe/HKCU Run persistence fleet-wide; treat hits as account-compromise, not just malware, events | Current reporting (2026-09-24/25), no-admin-rights persistence, live account-takeover impact | 7 analyst-authored CQL queries, 5 native hunts, 4 candidate Custom IOAs | No public hashes or dedicated C2 infrastructure were published; behavioral coverage only |
Source and Claim Review
All five sources were fetched during this run and saved as plain-text snapshots in TWEAKOS-Stealer-Hunt-sources/. Remote content was treated as untrusted data throughout: no source-supplied command, code, or instruction was executed, and no source attempted to direct this pipeline's behavior. The fetch tool declined to reproduce full article text verbatim on two of the five sources (copyright policy) and returned structured summaries plus short quoted fragments instead; both passes are preserved in the snapshot files.
| ID | Publisher | Tier | Accessed | Status |
|---|---|---|---|---|
| S01 | Flare | primary-vendor-research | 2026-09-27 | summary + targeted quotes (copyright-limited) |
| S02 | Cyber Security News | independent-corroboration | 2026-09-27 | full extraction |
| S03 | Cyber Press | independent-corroboration | 2026-09-27 | full extraction |
| S04 | Security Boulevard | independent-corroboration | 2026-09-27 | summary + targeted quotes (copyright-limited) |
| S05 | Cryptika | independent-corroboration | 2026-09-27 | full extraction |
Disqualified sources: none. All five requested URLs returned usable content; no fetched page contained embedded instructions directed at this pipeline.
Claim ledger
| Claim | Statement | Sources | Confidence | Caveat |
|---|---|---|---|---|
| C01 | The operation surfaced after its source code was posted to Pastebin, exposing a hardcoded Telegram bot token and two hardcoded admin IDs. | S01, S02, S04, S05 | high | none |
| C02 | TWEAKOS is two components (a Windows stealer and a Telegram-bot backend) sharing the same bot token and admin IDs. | S01, S02, S03, S04, S05 | high | none |
| C03 | The stealer scans Discord, Discord PTB, and Chrome's default-profile Local Storage LevelDB files, validates candidate tokens against the Discord API, and exfiltrates working tokens to the operators; Chrome scanning is limited to LevelDB and does not touch saved passwords or cookies. | S01, S02, S03, S05 | high | the "no password/cookie access" scope limit is single-sourced (S03) |
| C04 | For Telegram, the stealer prompts the victim for a phone number and login code (and a cloud password if 2FA is set), uses Telethon to create a new session file, and sends the session to two operator accounts without resetting the victim's password. | S01, S02, S03, S04, S05 | high | none |
| C05 | Persistence needs no admin rights: the packaged build copies itself into the user Startup folder as SystemHelper.exe; the script build adds an HKCU ...\CurrentVersion\Run value named SystemHelper. | S01, S02, S03, S04, S05 | high | none |
| C06 | A referenced follow-on payload, WindowsSecurityChecker.exe, is sent to a victim under a "Critical security update" pretext; researchers did not recover or analyze the binary. | S01, S03, S04, S05 | medium | functionality unknown; binary unrecovered |
| C07 | Operators can push a per-victim blocker_{uid}.vbs script producing a repeating full-screen warning reading “ВАШ КОМПЬЮТЕР ЗАБЛОКИРОВАН!” (“YOUR COMPUTER IS BLOCKED!”), referencing the discord.gg/tweakos invite; the backend deletes the local script after use. | S01, S04 | medium | the exact Russian string was captured from only 2 of 5 fetch passes; S02/S03/S05 confirm the coercion mechanism but not the literal string in the text captured |
| C08 | The backend stores state in an operator-side SQLite database, tweakos_data.db, tracking victims, products, orders, buyers, and admin logs. | S01, S04, S05 | high | operator-side artifact, not expected on victim endpoints |
| C09 | Non-admin document submissions to the bot are treated as session submissions and saved as session_{uid}.session, keyed to the sender's Telegram chat ID. | S04 | medium | single-sourced; ships as hunt-only, never prevent |
| C10 | The marketplace sells “telegram” and “discord” accounts under the TWEAKOS brand, priced in Telegram Stars, discounted 5% per day up to 70% off, minimum one Star. | S01, S02, S03, S05 | high | none |
| C11 | A Discord invite, https://discord.gg/tweakos, is referenced in TWEAKOS branding and was reported invalid or expired at analysis time. | S01, S05 | medium | invite was already dead when researchers checked it; context, not live infrastructure |
| C12 | No file hashes and no dedicated malicious C2 domains or IP addresses were published for TWEAKOS; the only network endpoints named are legitimate public APIs (Telegram Bot API, Discord API). | S01, S02, S03, S04, S05 (absence confirmed across all five snapshots) | high | this is a statement about the limits of current public reporting, not a claim that no such infrastructure exists |
Hunt Brief and Attack Chain
Hypotheses are separated into endpoint-hunt candidates and explicit telemetry gaps. Attribution beyond the cited sources is not inferred, and no offensive/weaponized detail (the coercion script's actual payload, the token-harvesting code, or the Telethon sign-in flow) is reproduced here.
| Step | Claims | Behavior | Platform | Goal |
|---|---|---|---|---|
| 1 | C05 | packaged or script build installs no-admin persistence (Startup-folder copy or HKCU Run value) | Windows endpoint | catch installation before first theft cycle |
| 2 | C03 | stealer enumerates Discord/Discord PTB/Chrome LevelDB files and validates candidate tokens against the Discord API | Windows endpoint | correlate non-browser process activity with Discord API contact |
| 3 | C04 | stealer social-engineers a Telegram login code and mints a new Telethon session, exfiltrated via the Telegram Bot API | Windows endpoint | correlate non-Telegram-client process activity with Telegram Bot API contact |
| 4 | C06 | operator pushes WindowsSecurityChecker.exe as a follow-on payload under a fake update pretext | Windows endpoint | flag unsigned executables delivered via the same channel; no hash available |
| 5 | C07 | operator triggers blocker_{uid}.vbs to coerce the victim with a full-screen warning | Windows endpoint | catch wscript.exe/cscript.exe executing the distinctive filename pattern before the backend deletes it |
Hypotheses
| ID | Behavior | Telemetry | Use | Lookback | Validation |
|---|---|---|---|---|---|
| H01 | SystemHelper.exe written into the user Startup folder | PeFileWritten | hunt | 30d | Drop a benign, identically-named test binary into a lab Startup folder and confirm the query returns it, then confirm it is absent from a clean baseline host. |
| H02 | HKCU Run value named SystemHelper added | AsepValueUpdate / RegGenericValueUpdate | hunt | 30d | Add a benign HKCU Run value literally named SystemHelper in an isolated lab account and confirm the query returns it. |
| H03 | SystemHelper.exe execution from a Startup-folder or logon context | ProcessRollup2 | hunt | 30d | Execute the same benign test binary from the lab Startup folder at logon and confirm a matching row. |
| H04 | frozen-Python temp-extraction pattern from an unsigned binary | ProcessRollup2 | hunt (inference) | 14d | This is an analyst hypothesis based on common frozen-Python packaging behavior, not a vendor-confirmed TWEAKOS artifact — the reporting mentions sys.frozen packaging but does not name the packer. Validate against a known-benign PyInstaller-built internal tool before trusting the signal. |
| H05 | wscript.exe/cscript.exe executing a blocker_<id>.vbs file | ProcessRollup2 | hunt | 30d | Run a benign, inert script named blocker_test123.vbs under wscript.exe in an isolated lab VM and confirm a matching row. |
| H06 | non-Discord-client process resolving/contacting Discord's API | DnsRequest joined to ProcessRollup2 | enrichment only | 7d | api.discord.com / discord.com are legitimate, heavily-used services. This correlation is context for an existing finding, never a standalone alert and never a block candidate. |
| H07 | non-Telegram-client process resolving/contacting the Telegram Bot API | DnsRequest joined to ProcessRollup2 | enrichment only | 7d | api.telegram.org is legitimate, heavily-used infrastructure serving countless bots. This correlation is context for an existing finding, never a standalone alert and never a block candidate. |
| H08 | process reading Discord/Chrome Local Storage LevelDB files directly | generic file-open telemetry | gap | n/a | No generic file-read event exists in the reference Falcon data model used to build this pack; if your tenant has file-open telemetry enabled (an optional/premium sensor policy in some deployments), validate field names locally before building a query. |
| H09 | operator-side SQLite database and marketplace activity | n/a — not endpoint telemetry | gap | n/a | Entirely infrastructure the victim organization does not control; relevant only for OSINT/takedown correlation, not endpoint hunting. |
Affected surface and telemetry
Surface: Windows endpoints running Discord, Discord PTB, or Chrome; Windows endpoints where users sign into personal Telegram accounts; the user Startup folder and HKCU Run hive; wscript.exe/cscript.exe script-execution surface. Exposure: user context only — no privilege escalation or admin rights are required or observed anywhere in this campaign.
Coverage boundaries
- No portable Falcon event proves direct LevelDB file reads; H08 is a documented gap.
- No file hash exists for any TWEAKOS component; every filename-based query can be defeated by a rename.
- The backend database, marketplace, and pricing logic (C08, C09, C10) are operator-side and out of scope for endpoint hunting.
- Account-level remediation (Discord token revocation, Telegram session termination) is outside Falcon's scope entirely and must be tracked as a separate response action.
Consolidated IOC Table
No file hashes and no dedicated C2 domains or IPs were published for TWEAKOS. Every row below is a filename, filename pattern, or a single contextual URL, transcribed only from the saved source snapshots in TWEAKOS-Stealer-Hunt-sources/. None of these values are unique identifiers on their own; treat every hit as a lead requiring process-context correlation, not as proof of compromise.
| ID | Type | Value | Context | Sources | Confidence | Action |
|---|---|---|---|---|---|---|
| I01 | filename | SystemHelper.exe | persistence dropper name, both variants | S01, S02, S03, S04, S05 | high | detect |
| I02 | filename | tweakos_data.db | operator-side backend SQLite database | S01, S04, S05 | medium | detect |
| I03 | filename | blocker_{uid}.vbs | per-victim coercion script, short on-disk dwell time | S01, S04, S05 | medium | hunt |
| I04 | filename | WindowsSecurityChecker.exe | referenced follow-on payload, not recovered by researchers | S01, S03, S04, S05 | medium | hunt |
| I05 | filename | {phone}.session | Telethon session created on the victim host during Telegram takeover | S01, S02, S03, S04, S05 | high | detect |
| I06 | filename | session_{uid}.session | operator-side renamed session copy | S04 | medium | hunt (single-sourced) |
| I07 | url | https://discord.gg/tweakos | brand invite referenced in coercion messaging; reported invalid/expired | S01, S05 | medium | detect (context only) |
api.telegram.org and discord.com/api.discord.com are legitimate, heavily-used public services named in the TWEAKOS reporting only because the malware abuses them. They do not appear anywhere in §10's importable CSV and must never be added to a Falcon IOC block list.Affected Surface & Telemetry Matrix
| Surface | Required Telemetry | Priority | Gap Risk |
|---|---|---|---|
| Windows endpoints running Discord, Discord PTB, or Chrome | ProcessRollup2, DnsRequest, NetworkConnectIP4 (Falcon); file-open/LevelDB access telemetry (native, optional) | High | Falcon has no generic file-read event by default; direct LevelDB access is only visible if your sensor policy enables file-open telemetry (§3, H08) |
| Windows endpoints with personal Telegram sign-in | ProcessRollup2, DnsRequest, NetworkConnectIP4 | High | Falcon cannot see the interactive phone-number/login-code prompt itself; only the resulting process and network behavior is visible |
User Startup folder (%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup\) | PeFileWritten (or NewExecutableWritten fallback) | Critical | Low — well covered by Q01, but a renamed dropper defeats a filename-only filter |
HKCU ...\CurrentVersion\Run | AsepValueUpdate / RegGenericValueUpdate | Critical | Low — well covered by Q02, same rename caveat applies to the value name |
Script-execution surface (wscript.exe/cscript.exe) | ProcessRollup2 | Medium | Low while the operator keeps the blocker_<id>.vbs naming convention; the backend deletes the script after use so on-disk forensics is time-limited |
| Fleet-wide DNS/network egress to Telegram and Discord APIs | DnsRequest, NetworkConnectIP4 | Low (context only) | High false-positive base rate — these are two of the most heavily used consumer services on any managed fleet; never a standalone signal |
ATT&CK Mapping
Mappings are analyst inferences from source-backed behavior, not vendor-supplied ATT&CK attribution.
| Tactic | Technique | Name | Behavior | Sources | Claims |
|---|---|---|---|---|---|
| Execution | T1204.002 | User Execution: Malicious File | victim runs the packaged stealer executable or script build | S01–S05 | C02, C05 |
| Credential Access | T1528 | Steal Application Access Token | Discord authentication tokens are harvested from LevelDB and validated against the Discord API | S01, S02, S03, S05 | C03 |
| Credential Access | T1539 | Steal Web Session Cookie (closest analog) | a freshly-minted Telethon session file grants persistent Telegram account access without a password reset | S01–S05 | C04 |
| Persistence | T1547.001 | Registry Run Keys / Startup Folder | SystemHelper.exe dropped to Startup, or an HKCU Run value named SystemHelper | S01–S05 | C05 |
| Command and Control | T1102.002 | Web Service: Bidirectional Communication | a single Telegram bot token handles ingestion, victim management, and operator communication | S01–S05 | C01, C02 |
| Exfiltration | T1041 | Exfiltration Over C2 Channel | validated Discord tokens and Telegram session files are sent to operators via the Telegram Bot API (sendMessage/sendDocument) | S01, S02, S03, S05 | C03, C04 |
| Impact | T1491.001 | Internal Defacement | a full-screen Russian-language warning is used to coerce the victim | S01, S04 | C07 |
| Impact | T1657 | Financial Theft | stolen Discord/Telegram accounts are resold under the TWEAKOS brand for Telegram Stars — a business-model mapping, not an on-host TTP | S01, S02, S03, S05 | C10 |
Native / Non-CQL Hunts
These close gaps that portable Falcon endpoint telemetry cannot see on its own and should be correlated with the CQL results in §8.
| # | Hunt | Where | What to look for |
|---|---|---|---|
| N1 | Discord OAuth/authorized-app audit | Discord account security settings, org Discord admin console if applicable | Unrecognized authorized applications or active sessions following a suspected token-theft event; revoke and re-authenticate |
| N2 | Telegram active-sessions review | Telegram app → Settings → Devices, on a trusted device | Unrecognized active sessions or a newly-created session immediately following a reported phone/code prompt from an untrusted source; terminate and re-authenticate |
| N3 | Script-control / AMSI review for VBScript execution | EDR script-control telemetry (if enabled), Windows Event Log (Script Block Logging) | wscript.exe/cscript.exe invocations matching blocker_<id>.vbs, captured before the backend's self-delete completes |
| N4 | Help-desk / user-report correlation for "critical security update" social engineering | Ticketing system, phishing-report mailbox | User reports of an unsolicited "critical update" file matching the WindowsSecurityChecker.exe pretext |
| N5 | File-open telemetry review (optional/premium sensor policy) | Falcon file-open telemetry, where enabled | Non-browser, non-Discord processes opening Local Storage\leveldb paths under Discord/Discord PTB/Chrome profile directories (closes gap H08) |
CrowdStrike LogScale CQL Hunt Queries
All queries are STATIC-ONLY. Validate event population, fields, semantics, and volume in your tenant before operational use.
Looks for: a file named SystemHelper.exe written into a user Startup folder path. Accomplishes: catches the packaged-build persistence variant at install time, before the first theft cycle runs.
// HUNT: SystemHelper.exe written into a user Startup folder (packaged-build persistence) // HYPOTHESIS: H01 // USE: hunt // MITRE: T1547.001 // CONF: high // FP: medium // COST: low // TIMEFRAME: 30d // REQUIRES: PeFileWritten with FileName, FilePath, ComputerName, UserName, SHA256HashData — ⚠ validate in tenant: some sensor versions expose the write-target directory as TargetDirectoryName instead of FilePath // FALSE POSITIVES: any legitimate vendor utility that happens to share the generic name "SystemHelper.exe" // TUNING: exclude hosts and hashes matching a known-vendor, Authenticode-signed "SystemHelper.exe" once your fleet baseline confirms one exists // VALIDATION: STATIC-ONLY #event_simpleName = PeFileWritten | test(@timestamp >= now() - 2592000000) | FileName = /^SystemHelper\.exe$/i | FilePath = /\\Start Menu\\Programs\\Startup\\/i | table([@timestamp, ComputerName, UserName, FileName, FilePath, SHA256HashData]) | sort(@timestamp, order=desc, limit=1000)
Looks for: a new HKCU ...\CurrentVersion\Run value literally named SystemHelper. Accomplishes: catches the script-build persistence variant, the other half of the no-admin persistence pair.
// HUNT: HKCU Run key value named SystemHelper (script-build persistence) // HYPOTHESIS: H02 // USE: hunt // MITRE: T1547.001 // CONF: high // FP: medium // COST: low // TIMEFRAME: 30d // REQUIRES: AsepValueUpdate or RegGenericValueUpdate with RegObjectName, RegValueName, RegStringValue, ComputerName, UserName // FALSE POSITIVES: any legitimate helper application that happens to register a Run value literally named "SystemHelper" // TUNING: confirm RegStringValue points at a known-bad or unexplained path before escalating; allowlist any confirmed legitimate vendor entry after fleet baseline review // VALIDATION: STATIC-ONLY #event_simpleName = /AsepValueUpdate|RegGenericValueUpdate/ | test(@timestamp >= now() - 2592000000) | RegObjectName = /\\Software\\Microsoft\\Windows\\CurrentVersion\\Run$/i | RegValueName = /^SystemHelper$/i | table([@timestamp, ComputerName, UserName, RegObjectName, RegValueName, RegStringValue]) | sort(@timestamp, order=desc, limit=1000)
Looks for: any process execution of SystemHelper.exe, regardless of which persistence variant installed it. Accomplishes: a complementary execution-side check that also catches a manually-launched copy outside Startup/Run.
// HUNT: SystemHelper.exe process execution // HYPOTHESIS: H03 // USE: hunt // MITRE: T1547.001 // CONF: high // FP: medium // COST: low // TIMEFRAME: 30d // REQUIRES: ProcessRollup2 with FileName, ImageFileName, ParentBaseFileName, CommandLine, SHA256HashData // FALSE POSITIVES: same generic-name collision risk as Q01 // TUNING: correlate with Q01/Q02 hits on the same host before escalating a standalone Q03 hit; allowlist a confirmed legitimate signed hash after baseline review // VALIDATION: STATIC-ONLY #event_simpleName = ProcessRollup2 | test(@timestamp >= now() - 2592000000) | FileName = /^SystemHelper\.exe$/i | table([@timestamp, ComputerName, UserName, ParentBaseFileName, ImageFileName, CommandLine, SHA256HashData]) | sort(@timestamp, order=desc, limit=1000)
Looks for: a process running from a PyInstaller-style _MEI<digits> temp-extraction folder with no Authenticode signature. Accomplishes: a packaging-level fingerprint for the frozen Python stealer build. Caveat: the reporting we captured mentions sys.frozen-style packaging but never names PyInstaller specifically for TWEAKOS — this query is an analyst hypothesis based on common frozen-Python behavior, not a sourced TWEAKOS artifact, and it will also fire on any other PyInstaller-packaged software on the fleet.
Trace: H04
// HUNT: Unsigned process executing from a PyInstaller-style _MEI temp-extraction path // HYPOTHESIS: H04 // USE: hunt (unconfirmed inference, not a sourced TWEAKOS artifact) // MITRE: T1204.002 // CONF: low // FP: high // COST: medium // TIMEFRAME: 14d // REQUIRES: ProcessRollup2 with ImageFileName, CommandLine, ParentBaseFileName, SHA256HashData, AuthenticodeHashData — ⚠ validate in tenant: AuthenticodeHashData population depends on sensor policy // FALSE POSITIVES: every other PyInstaller-onefile application on the fleet (internal tools, some commercial software) will also match this path pattern // TUNING: allowlist known-good PyInstaller-built internal tools by hash; require correlation with Q01/Q02/Q03/Q06/Q07 before treating a hit as TWEAKOS-related // VALIDATION: STATIC-ONLY #event_simpleName = ProcessRollup2 | test(@timestamp >= now() - 1209600000) | ImageFileName = /\\AppData\\Local\\Temp\\_MEI[0-9]{5,8}\\/i | AuthenticodeHashData = "" | table([@timestamp, ComputerName, UserName, ParentBaseFileName, ImageFileName, CommandLine, SHA256HashData]) | sort(@timestamp, order=desc, limit=1000)
Looks for: wscript.exe or cscript.exe launched against a command line matching the blocker_<id>.vbs naming pattern. Accomplishes: catches the coercion stage while the file still exists on disk; the backend deletes it after use, so alerting speed matters more than lookback depth here.
// HUNT: wscript.exe/cscript.exe executing a blocker_<id>.vbs coercion script // HYPOTHESIS: H05 // USE: hunt // MITRE: T1491.001 // CONF: high // FP: low // COST: low // TIMEFRAME: 30d // REQUIRES: ProcessRollup2 with FileName, ParentBaseFileName, CommandLine // FALSE POSITIVES: an internal script coincidentally named with the same blocker_<id>.vbs pattern (unlikely, but confirm before treating as fatal) // TUNING: exclude any documented internal script inventory that happens to match the naming pattern // VALIDATION: STATIC-ONLY #event_simpleName = ProcessRollup2 | test(@timestamp >= now() - 2592000000) | FileName = /^(wscript|cscript)\.exe$/i | CommandLine = /blocker_[A-Za-z0-9_-]+\.vbs/i | table([@timestamp, ComputerName, UserName, ParentBaseFileName, FileName, CommandLine]) | sort(@timestamp, order=desc, limit=1000)
Looks for: a DNS resolution of discord.com attributed to a process that is not a known Discord/browser client. Accomplishes: surfaces the token-validation step for correlation with an existing Q01–Q05 hit. This is NOT a malicious-infrastructure query — Discord's API is legitimate and this signal is meaningless in isolation.
Trace: H06
// HUNT: Non-Discord-client process resolving discord.com (Discord token-validation correlation) // HYPOTHESIS: H06 // USE: enrichment only — NEVER a standalone alert, NEVER a block candidate // MITRE: T1528 // CONF: low // FP: high // COST: medium // TIMEFRAME: 7d // REQUIRES: DnsRequest with DomainName, ContextProcessId_decimal; ProcessRollup2 with TargetProcessId_decimal, FileName, ImageFileName, CommandLine // FALSE POSITIVES: extremely high — discord.com is legitimate, widely-used infrastructure; any non-Discord app that embeds Discord's API (bots, integrations, browser extensions) will also match // TUNING: only ever run this joined against a host that already has a Q01/Q02/Q03/Q04 hit; never alert on this query alone; expand the client-exclusion list for your environment's known Discord-adjacent tooling before relying on it // VALIDATION: STATIC-ONLY #event_simpleName = DnsRequest | test(@timestamp >= now() - 604800000) | DomainName = /(^|\.)discord\.com$/i | rename(field=ContextProcessId_decimal, as=TargetProcessId_decimal) | join(query={#event_simpleName = ProcessRollup2 | FileName != /^(discord|discordptb|discordcanary|chrome|msedge|firefox|brave)\.exe$/i}, field=TargetProcessId_decimal) | table([@timestamp, ComputerName, UserName, FileName, ImageFileName, CommandLine, DomainName]) | sort(@timestamp, order=desc, limit=1000)
Looks for: a DNS resolution of api.telegram.org attributed to a process that is not a known Telegram/browser client. Accomplishes: surfaces the exfiltration channel (sendMessage/sendDocument) for correlation with an existing Q01–Q05 hit. This is NOT a malicious-infrastructure query — the Telegram Bot API is legitimate shared infrastructure serving an enormous number of unrelated bots.
Trace: H07
// HUNT: Non-Telegram-client process resolving api.telegram.org (Bot API exfiltration correlation) // HYPOTHESIS: H07 // USE: enrichment only — NEVER a standalone alert, NEVER a block candidate // MITRE: T1041 // CONF: low // FP: high // COST: medium // TIMEFRAME: 7d // REQUIRES: DnsRequest with DomainName, ContextProcessId_decimal; ProcessRollup2 with TargetProcessId_decimal, FileName, ImageFileName, CommandLine // FALSE POSITIVES: extremely high — api.telegram.org is legitimate infrastructure used by an enormous number of unrelated Telegram bots and integrations // TUNING: only ever run this joined against a host that already has a Q01/Q02/Q03/Q05 hit; never alert on this query alone; expand the client-exclusion list for your environment's known Telegram-adjacent tooling before relying on it // VALIDATION: STATIC-ONLY #event_simpleName = DnsRequest | test(@timestamp >= now() - 604800000) | DomainName = /(^|\.)api\.telegram\.org$/i | rename(field=ContextProcessId_decimal, as=TargetProcessId_decimal) | join(query={#event_simpleName = ProcessRollup2 | FileName != /^(telegram|updater|chrome|msedge|firefox|brave)\.exe$/i}, field=TargetProcessId_decimal) | table([@timestamp, ComputerName, UserName, FileName, ImageFileName, CommandLine, DomainName]) | sort(@timestamp, order=desc, limit=1000)
CrowdStrike Custom IOA Recommendations
| IOA Name | Field Patterns | Benign Exclusions | Deployment Path |
|---|---|---|---|
| IOA-1 · SystemHelper.exe write to Startup folder (Q01) | FileName = SystemHelper.exe; FilePath matching \Start Menu\Programs\Startup\ | A confirmed legitimate signed vendor utility of the same name, if one is found during baselining | Custom IOA → File Write, Detect |
| IOA-2 · HKCU Run value SystemHelper (Q02) | RegObjectName matching ...\CurrentVersion\Run; RegValueName = SystemHelper | Same as IOA-1 | Custom IOA → Registry Operation, Detect |
| IOA-3 · SystemHelper.exe execution (Q03) | FileName = SystemHelper.exe | Same as IOA-1 | Custom IOA → Process Creation, Detect |
| IOA-4 · blocker_<id>.vbs execution (Q05) | FileName is wscript.exe/cscript.exe; CommandLine matching blocker_[A-Za-z0-9_-]+\.vbs | None expected | Custom IOA → Process Creation, Detect |
Machine-Readable IOC Appendix
Every value below traces to a saved source snapshot in TWEAKOS-Stealer-Hunt-sources/ — see §18. Two rows are REPLACE_WITH_ placeholders because no public hash exists for either binary; populate them if a sample is later obtained, do not fabricate a value.
SystemHelper.exe
tweakos_data.db
blocker_{uid}.vbs
WindowsSecurityChecker.exe
{phone}.session
session_{uid}.sessionhttps://discord.gg/tweakos
REPLACE_WITH_SYSTEMHELPER_EXE_SHA256 REPLACE_WITH_WINDOWSSECURITYCHECKER_EXE_SHA256
type,value,action,severity,expiration,description,tags
filename,SystemHelper.exe,detect,high,review-2026-12-27,Persistence dropper name for both TWEAKOS variants (Startup-folder copy or HKCU Run value); combine with path/registry context before acting,source:S01 source:S02 source:S03 source:S04 source:S05
filename,tweakos_data.db,detect,medium,review-2026-12-27,Operator-side backend SQLite database name; not expected on victim endpoints but useful for OSINT/infrastructure correlation,source:S01 source:S04 source:S05
filename,blocker_{uid}.vbs,hunt,medium,review-2026-12-27,Per-victim coercion script pushed by operators on demand; backend deletes it after use so on-disk dwell time is short,source:S01 source:S04 source:S05
filename,WindowsSecurityChecker.exe,hunt,medium,review-2026-12-27,Referenced follow-on payload sent under a fake security-update pretext; researchers did not recover or analyze the binary,source:S01 source:S03 source:S04 source:S05
filename,{phone}.session,detect,high,review-2026-12-27,Telethon session file generated on the victim host during interactive Telegram account takeover,source:S01 source:S02 source:S03 source:S04 source:S05
filename,session_{uid}.session,hunt,low,review-2026-12-27,Operator-side renamed copy of a submitted session file keyed to the sender's Telegram chat ID; single-sourced so it ships as hunt-only,source:S04
url,https://discord.gg/tweakos,detect,low,review-2026-12-27,Discord invite referenced in TWEAKOS branding and the coercion message; reported invalid/expired at analysis time - context only,source:S01 source:S05
sha256,REPLACE_WITH_SYSTEMHELPER_EXE_SHA256,hunt,medium,review-2026-12-27,No public hash exists for the packaged SystemHelper.exe stealer binary as of this pack's research date; populate when a sample is obtained,source:S01 source:S02 source:S03 source:S04 source:S05
sha256,REPLACE_WITH_WINDOWSSECURITYCHECKER_EXE_SHA256,hunt,medium,review-2026-12-27,Follow-on payload referenced in reporting; binary not recovered by researchers so no hash is available,source:S01 source:S03 source:S04 source:S05Detection Validation Gates
| Gate | Requirement |
|---|---|
| Telemetry ready | Confirm PeFileWritten (or NewExecutableWritten as fallback), AsepValueUpdate/RegGenericValueUpdate, ProcessRollup2, and DnsRequest are flowing for every in-scope Windows host; confirm optional file-open telemetry status before relying on N5 |
| Benign baseline | Run Q01, Q02, Q03, Q04, Q06, and Q07 in hunt-only mode for at least 7–14 days to capture legitimate admin tooling and any organically-installed PyInstaller software before writing exclusions |
| Positive tests | Lab-verify Q01 (drop a benign, identically-named test binary into a lab Startup folder), Q02 (add a benign HKCU Run value literally named SystemHelper), and Q05 (execute a benign, inert blocker_test123.vbs under wscript.exe in an isolated VM) each return a row before relying on them in production |
| Promotion | Promote IOA-1 through IOA-4 (§9) only after the above; keep Q04, Q06, and Q07 as tuned hunt/enrichment queries indefinitely — Q06/Q07 must never be promoted to a standalone alert or block rule |
Hardening — Tiered and Deployable
TWEAKOS requires no exploit and no admin rights: every stage depends on the victim running an untrusted file and then typing a login code into it. User education and no-admin-persistence hardening close most of this chain without any product-specific fix.
- Train users that no legitimate service ever needs their login code read back to a program or a stranger — M1017 (User Training). The entire Telegram account-theft technique (C04) depends on the victim voluntarily supplying a one-time code; this single behavior change defeats it regardless of any technical control.
- Enable Telegram two-step verification (cloud password) and Discord multi-factor authentication organization-wide where these services are sanctioned for business use — M1032 (Multi-factor Authentication). Raises the cost of both theft paths, though TWEAKOS's Telegram flow already attempts to solicit a cloud password if 2FA is present, so this must pair with the training control above.
- Run Q01/Q02/Q03 fleet-wide as an immediate baseline sweep to establish current exposure before any tuning work begins.
- Deploy Q01–Q07 as scheduled hunts, with FP-medium/high queries (Q01, Q02, Q03, Q04, Q06, Q07) in hunt/detect-only mode pending the §11 baseline.
- Restrict or monitor personal Discord/Telegram installation on managed endpoints where these are not business-required — M1042 (Disable or Remove Feature or Program). Directly reduces the population of endpoints exposed to Discord-token or Telegram-session theft.
- Enable script-control/AMSI logging for
wscript.exe/cscript.exefleet-wide — M1040 (Behavior Prevention on Endpoint). Improves both detection and forensic capture speed for the short-livedblocker_<id>.vbscoercion script (C07). - Document an account-recovery runbook for Discord token revocation and Telegram session termination so responders can act the moment Q01–Q05 fires, since deleting the local artifact does not undo the account theft (§1).
- Formalize a managed-endpoint policy on personal chat-app usage (installation, profile isolation from work identities, or removal) — M1042. TWEAKOS specifically targets the overlap between personal Discord/Telegram use and corporate endpoints.
- Extend application allow-listing to the user Startup folder and HKCU Run hive where feasible — M1038 (Execution Prevention). Structurally closes both no-admin persistence variants in this campaign, not just the two named artifacts.
- Recurring user-awareness campaign on login-code and account-takeover social engineering — M1017, repeated rather than one-time, since this technique class recurs across many unrelated stealer families beyond TWEAKOS.
Deployable Playbooks
Playbook A · SystemHelper.exe persistence sweep and validation
- Run Q01, Q02, and Q03 unfiltered across the fleet for a 30-day lookback; record every host, hash, and registry value returned.
- For each hit, pull the parent process tree and command line via
ProcessRollup2to establish howSystemHelper.exearrived (download, removable media, email attachment, browser). - Correlate each hit's timeframe against Q06/Q07 on the same host as enrichment context only; do not treat a Discord/Telegram API contact alone as confirmation.
- Where corroborated, begin account-level response in parallel with endpoint remediation: initiate Discord token revocation (N1) and Telegram session termination (N2) immediately, do not wait for full endpoint forensics.
- Remove the persistence artifact (Startup file or Run value) and the executable; preserve a copy and its hash for the §10 IOC appendix before deletion.
- Re-run Q01–Q03 after remediation to confirm no recurrence within one week.
- Retain hit list, hashes, account-recovery confirmation, and owner sign-off.
Playbook B · Suspected active coercion screen (blocker_<id>.vbs)
- Do not let the user act on the on-screen message (no payment, no contacting the listed Discord); the backend deletes the local script shortly after triggering it, so evidence capture speed matters.
- Immediately capture the running
wscript.exe/cscript.exeprocess, its command line, and the referenced.vbsfile from disk if still present. - Run Q05 with a short lookback (last 24 hours) across the fleet to check for other affected hosts from the same operator campaign.
- Isolate the host from a user-interaction standpoint (lock screen access is not sufficient if the malware persists); investigate for the full TWEAKOS chain (Q01–Q03) since the coercion stage implies the operator already has an established channel to this victim.
- Proceed to account-level response (N1/N2) as in Playbook A, since a coercion trigger implies the operator already holds stolen credentials for this victim.
Containment Runbook
| Phase | Actions | Owner | Evidence |
|---|---|---|---|
| Isolate | Network-contain any host with a confirmed Q01/Q02/Q03/Q05 hit; do not power off before capturing the running process list if a coercion screen is active | SOC L2 / IR | Containment timestamp; process tree; persistence artifact copy and hash |
| Triage | Determine which persistence variant fired (Startup file vs. Run value); check Q06/Q07 as context only; check for the WindowsSecurityChecker.exe follow-on pretext (N4) and any active coercion (Q05/N3) | IR | Q01–Q05 hit list; N3/N4 correlation notes |
| Eradicate | Remove SystemHelper.exe and its persistence entry (Startup file or Run value); remove any recovered WindowsSecurityChecker.exe or .vbs artifacts; do not assume removal alone resolves the incident | IR | Removal log; before/after file and registry comparison |
| Recover | Revoke and re-authenticate affected Discord tokens (N1); terminate and re-establish affected Telegram sessions from a trusted device (N2); reset any password the victim may have also disclosed under the fake-update pretext | IR + account owner | Token-revocation confirmation; session-termination confirmation |
| Harden | Apply §12 Immediate and Near-term controls; promote IOA-1 through IOA-4 after §11 baselining; refresh user training on login-code social engineering | Detection Eng + Security Awareness | IOAs enabled; training completion record |
⚠ A confirmed hit is an account-compromise event, not just a malware event. Endpoint remediation without Discord token revocation and Telegram session termination leaves the operator with standing access to the victim's accounts.
Detection Coverage Map
| Technique | Behavior | CQL | Native / IOA | Coverage |
|---|---|---|---|---|
| T1204.002 | victim runs the stealer (packaged or script build) | — | N4 | GAP initial user-execution moment is not independently visible to Falcon |
| T1528 | Discord token harvest and API validation | Q06 (enrichment) | N5 (optional telemetry) | Partial direct LevelDB read is a documented gap (H08); Q06 is context-only, high FP |
| T1539 | Telegram session theft via Telethon | Q07 (enrichment) | N2 | Partial the interactive code prompt itself is not Falcon-visible; Q07 is context-only, high FP |
| T1547.001 | SystemHelper.exe Startup-folder copy | Q01 | IOA-1 | Good while the filename stays unrenamed |
| T1547.001 | HKCU Run value SystemHelper | Q02 | IOA-2 | Good while the value name stays unrenamed |
| T1547.001 | SystemHelper.exe execution | Q03 | IOA-3 | Good |
| T1204.002 (packaging) | frozen-Python temp extraction | Q04 | — | GAP-leaning unconfirmed inference, FP high, correlation-only |
| T1491.001 | full-screen coercion warning | Q05 | IOA-4, N3 | Good while the on-disk window lasts |
| T1041 | Telegram Bot API exfiltration channel | Q07 (enrichment) | — | GAP-leaning legitimate shared infrastructure, correlation-only, never standalone |
| T1657 | stolen-account monetization via Telegram Stars | — | — | GAP entirely operator-side; not endpoint-visible |
Validation gates: confirm the required telemetry list in §11 is flowing before relying on any query; baseline the FP-medium/high queries for 7–14 days before promoting; lab-test Q01/Q02/Q05 positive cases. This pack ships no file hashes and no dedicated C2 domain/IP because none were published for TWEAKOS as of the cited reporting; every network-facing query targets legitimate shared infrastructure (Telegram Bot API, Discord API) and is explicitly scoped to enrichment, never to blocking.
Hunt Summary Ticket
TITLE: Hunt - TWEAKOS: Windows infostealer, Telegram-bot C2 & stolen-account marketplace
SEVERITY: High (no-admin-rights persistence; live Discord/Telegram account-takeover impact;
no published hashes or dedicated C2 infrastructure limits atomic coverage)
SCOPE: Windows endpoints running Discord/Discord PTB/Chrome; endpoints with personal
Telegram sign-in; user Startup folder and HKCU Run hive; wscript.exe/cscript.exe
script-execution surface
HYPOTHESIS: H01 hunt; H02 hunt; H03 hunt; H04 hunt (inference); H05 hunt; H06 enrichment-only;
H07 enrichment-only; H08 gap; H09 gap
QUERIES RUN: Native N1 Discord OAuth audit | N2 Telegram active-sessions review | N3 script-control
VBScript review | N4 help-desk social-engineering correlation | N5 file-open telemetry
review (optional)
CQL Q01 SystemHelper.exe Startup write | Q02 HKCU Run value SystemHelper |
Q03 SystemHelper.exe execution | Q04 frozen-Python temp extraction (inference) |
Q05 wscript/cscript blocker_<id>.vbs | Q06 Discord API correlation (enrichment) |
Q07 Telegram Bot API correlation (enrichment)
DO FIRST: Run Q01/Q02/Q03 fleet-wide over 30 days; any hit triggers Playbook A (§13) and
parallel account-level response (Discord token revocation, Telegram session
termination) alongside endpoint remediation
FINDINGS: <pending analyst execution>
GAPS: No portable Falcon event proves direct LevelDB file reads (H08); no file hash exists
for any TWEAKOS component; the interactive phone/code social-engineering moment is not
independently Falcon-visible; the operator-side database, marketplace, and pricing
logic (C08-C10) are out of scope for endpoint hunting
ACTIONS: Deploy Q01-Q05 as scheduled hunts; baseline Q04/Q06/Q07 for 7-14 days before any
promotion; document and rehearse the account-recovery runbook (Discord token
revocation, Telegram session termination); train users on login-code social
engineering; promote IOA-1 through IOA-4 only after §11 baselining
OWNER: HuntPack
VERSION: v1.0 - 2026-09-27
Changelog
References
| ID | Publisher | Edition/date | Accessed | Use | URL |
|---|---|---|---|---|---|
| S01 | Flare | 2026-09-24 | 2026-09-27 | Primary research: two-component architecture, Discord/Telegram theft mechanics, persistence, marketplace | https://flare.io/learn/resources/blog/tweakos-stealer-telegram-c2-ecosystem-2 |
| S02 | Cyber Security News | 2026-09-25 | 2026-09-27 | Independent corroboration: persistence mechanisms, detection indicators, mitigation guidance | https://cybersecuritynews.com/tweakos-malware/ |
| S03 | Cyber Press | 2026-09-25 (approx.) | 2026-09-27 | Independent corroboration: Discord LevelDB scanning detail, storefront pricing model | https://cyberpress.org/tweakos-stealer-harvests-discord-tokens/ |
| S04 | Security Boulevard | 2026-09 (approx.) | 2026-09-27 | Independent corroboration: filename inventory, Russian-language coercion string, database schema detail | https://securityboulevard.com/2026/09/tweakos-uncovered-a-telegram-driven-stealer-and-c2-ecosystem-for-discord-and-telegram-tokens/ |
| S05 | Cryptika | 2026-09 (approx.) | 2026-09-27 | Independent corroboration: IOC filename/URL inventory, marketplace mechanics | https://www.cryptika.com/tweakos-malware-turns-telegram-into-a-stealer-c2-platform-and-stolen-account-marketplace/ |