Back to Intelligence

ShinyHunters Claims 284M Record Theft from McKesson — Healthcare Defenders' Detection and Response Playbook

SA
Security Arsenal Team
August 31, 2026
13 min read

McKesson Corporation — one of the largest healthcare distributors in North America and a critical artery of the U.S. pharmaceutical supply chain — has disclosed a cyberattack via a Form 8-K filing with the U.S. Securities and Exchange Commission. The extortion group ShinyHunters claims responsibility, alleging theft of approximately 284 million records from the healthcare giant.

If the claimed volume is accurate, this would rank among the largest healthcare-adjacent breaches in U.S. history — exceeding Change Healthcare's ~190 million affected individuals and dwarfing the Anthem and HCA Healthcare incidents. For defenders, the specifics matter: McKesson touches prescription distribution, pharmacy management systems, and provider data flows across nearly every hospital and retail pharmacy in the country. A compromise at this layer is not just a privacy event — it is a supply chain integrity event.

ShinyHunters is not a ransomware operator. The group specializes in credential-based intrusion, mass data theft from databases and SaaS platforms, and pure extortion — steal quietly, demand payment, leak publicly if refused. Their historical tradecraft (the Snowflake customer campaign, OAuth token abuse against Salesforce-integrated SaaS, voice phishing against identity providers) tells us exactly where defenders should be hunting: identity, bulk data access, and egress.

This post breaks down what we know, how this class of attack unfolds, and what your SOC should be detecting and hunting today.

Technical Analysis

What happened

  • Victim: McKesson Corporation (healthcare distribution, pharmaceutical supply chain, pharmacy technology)
  • Disclosure vehicle: SEC Form 8-K — indicating the company assessed the incident as potentially material to investors under the SEC's cybersecurity disclosure rules
  • Threat actor: ShinyHunters, a financially motivated extortion group active since 2020 with a track record of large-scale database theft and public leak-site extortion
  • Claimed impact: ~284 million records exfiltrated

The 8-K filing itself is significant. Companies do not file 8-Ks for trivial events. The filing signals that McKesson's counsel and IR leadership assessed the incident as material — which typically correlates with confirmed unauthorized access to sensitive systems and a lengthy investigation, regulatory notification (HHS OCR under HIPAA, state attorneys general), and potential class-action exposure.

How ShinyHunters attacks typically work (defender's view of the attack chain)

No CVE has been publicly associated with this intrusion — and that is the point. ShinyHunters' recent campaigns have overwhelmingly relied on stolen credentials and abused legitimate access rather than software exploits:

  1. Initial access — identity compromise. ShinyHunters' hallmark entry vectors include voice phishing (vishing) against help desks and end users to reset MFA or enroll attacker-controlled devices, infostealer-harvested credentials purchased on criminal markets, and abuse of third-party OAuth tokens granted to SaaS integrations. Healthcare IT environments with large third-party integration footprints (EHR connectors, pharmacy management integrations, analytics platforms) are especially exposed.
  2. Access to data stores without MFA enforcement. Cloud databases and SaaS tenants configured for password-only authentication or with stale service accounts and OAuth grants allow direct connection using stolen credentials — no malware, no exploit, nothing for EDR to catch.
  3. Bulk reconnaissance and exfiltration via legitimate tooling. The group enumerates databases and executes mass exports using the platform's own capabilities — SQL clients, SaaS bulk export APIs, report-generation endpoints — blending in with normal administrative traffic. Exfiltration typically routes through cloud storage, file-sharing services, or direct transfer to attacker infrastructure over TLS.
  4. Extortion. Weeks or months after the theft, the victim receives a ransom demand with sample data as proof. Public leak threats follow if payment is refused.

Exploitation status

This is confirmed active criminal activity — a disclosed breach at a Fortune 10-scale healthcare company with an extortion claim on the record. There is no CVE, no CISA KEV entry, and no PoC because the attack vector is credential and access abuse, not a software flaw. The defensive lesson is identical to the Snowflake and Salesforce/SaaS supply-chain campaigns: if your monitoring assumes malware, you will miss this entirely.

Why healthcare environments are uniquely exposed

  • Massive PHI aggregations in centralized databases (a single successful export is a nine-figure regulatory event)
  • Dense third-party integration meshes: PBMs, EHR vendors, e-prescribing networks, analytics platforms
  • Legacy service accounts with broad database read permissions and no MFA capability
  • Help desks under constant pressure, making vishing-based MFA reset attacks highly effective

Detection & Response

The detections below target the behaviors that define this threat class: anomalous bulk data access and export, suspicious identity events consistent with vishing/MFA fatigue, and large-scale egress from data-bearing systems. Tune thresholds against your own baselines — a claims-processing system legitimately exports data, but it does so on a schedule, from known hosts, with known accounts.

Sigma Rules

YAML
---
title: Bulk Database Export Utility Execution on Non-Approved Host
id: 4e7a2c91-3b58-4f6d-9a21-8c1d5e6f7a2b
status: experimental
description: Detects execution of bulk data export/database client utilities (bcp, sqlcmd, mysqldump, pg_dump) on systems outside approved database administration hosts, consistent with mass data theft tradecraft used by extortion groups such as ShinyHunters.
references:
  - https://attack.mitre.org/techniques/T1530/
  - https://attack.mitre.org/techniques/T1567/
author: Security Arsenal
date: 2026/04/06
tags:
  - attack.collection
  - attack.exfiltration
  - attack.t1530
  - attack.t1567
logsource:
  category: process_creation
  product: windows
detection:
  selection_tools:
    Image|endswith:
      - '\bcp.exe'
      - '\sqlcmd.exe'
      - '\mysqldump.exe'
      - '\pg_dump.exe'
      - '\mysqlpump.exe'
  selection_args:
    CommandLine|contains:
      - 'queryout'
      - ' out '
      - '--all-databases'
      - '--tab='
      - '-f '
  condition: selection_tools and selection_args
falsepositives:
  - Scheduled ETL and backup jobs on approved database administration hosts (whitelist by host and service account)
  - Legitimate DBA activity during maintenance windows
level: high
---
title: Archive Staging of Database Export Files
id: 8b3d5f12-7c49-4a1e-b6d3-2f9a4c8e1d57
status: experimental
description: Detects creation of large compressed archives from directories or file types commonly used for database exports (CSV, SQL dumps, TSV), indicating staging of stolen data prior to exfiltration.
references:
  - https://attack.mitre.org/techniques/T1560/001/
author: Security Arsenal
date: 2026/04/06
tags:
  - attack.collection
  - attack.t1560.001
logsource:
  category: process_creation
  product: windows
detection:
  selection:
    Image|endswith:
      - '\7z.exe'
      - '\7za.exe'
      - '\rar.exe'
      - '\winrar.exe'
      - '\tar.exe'
  selection_cli:
    CommandLine|contains:
      - '.csv'
      - '.sql'
      - '.tsv'
      - '.dump'
      - 'export'
      - 'backup'
  condition: selection and selection_cli
falsepositives:
  - Legitimate backup and archival operations by IT staff (whitelist approved accounts and paths)
level: medium
---
title: Suspicious MFA Device Enrollment or Password Reset Following Help Desk Interaction
id: 2f6c9a84-1d37-4e5b-a9f2-6b8d3e4c5f19
status: experimental
description: Detects rapid sequence of account password reset followed by new MFA factor enrollment, a pattern consistent with voice-phishing (vishing) attacks against help desks used by extortion groups for initial access.
references:
  - https://attack.mitre.org/techniques/T1656/
  - https://attack.mitre.org/techniques/T1078/
author: Security Arsenal
date: 2026/04/06
tags:
  - attack.persistence
  - attack.initial_access
  - attack.t1656
  - attack.t1078
logsource:
  product: azure
  service: auditlogs
detection:
  selection_reset:
    OperationName|contains:
      - 'Reset password'
      - 'Change password (self-service)'
  selection_mfa:
    OperationName|contains:
      - 'Add registered device'
      - 'Register security info'
      - 'Add authentication method'
  condition: selection_reset or selection_mfa
falsepositives:
  - Legitimate self-service password resets and MFA enrollment (correlate per-user within short time windows and alert only on reset+enrollment sequences within 30 minutes)
level: high

KQL — Microsoft Sentinel / Defender Hunt Queries

These hunts target bulk data egress and identity anomalies. Run the identity query against your Entra ID audit ingestion and the egress query against network and process telemetry.

KQL — Microsoft Sentinel / Defender
// Hunt 1: Massive outbound data transfer from database or application servers
// Identifies hosts sending unusually large volumes externally in 24h windows
let threshold_gb = 50;
DeviceNetworkEvents
| where TimeGenerated > ago(7d)
| where RemoteIPType == "Public"
| extend TotalMB = round(BytesSent / 1048576.0, 2)
| summarize TotalBytesSent = sum(BytesSent), Destinations = dcount(RemoteIP), 
    TopDestinations = make_set(RemoteUrl, 10) by DeviceName, bin(TimeGenerated, 1d)
| where TotalBytesSent > (threshold_gb * 1073741824)
| project TimeGenerated, DeviceName, TotalSentGB = round(TotalBytesSent / 1073741824.0, 2), Destinations, TopDestinations
| sort by TotalSentGB desc;

// Hunt 2: Password reset followed by MFA method change within 30 minutes (vishing pattern)
let lookback = 7d;
let resets = AuditLogs
| where TimeGenerated > ago(lookback)
| where OperationName has_any ("Reset password (by admin)", "Reset password (self-service)")
| extend UserPrincipal = tostring(TargetResources[0].userPrincipalName)
| project ResetTime = TimeGenerated, UserPrincipal, ResetInitiator = tostring(InitiatedBy.user.userPrincipalName);
let mfachanges = AuditLogs
| where TimeGenerated > ago(lookback)
| where OperationName has_any ("Add registered device", "User registered security info", "Add strong authentication phone app")
| extend UserPrincipal = tostring(TargetResources[0].userPrincipalName)
| project MFATime = TimeGenerated, UserPrincipal, MFAMethod = tostring(TargetResources[0].modifiedProperties[0].newValue);
resets
| join kind=inner mfachanges on UserPrincipal
| extend DeltaMinutes = datetime_diff('minute', MFATime, ResetTime)
| where DeltaMinutes between (0 .. 30)
| project UserPrincipal, ResetTime, ResetInitiator, MFATime, DeltaMinutes
| sort by ResetTime desc;

// Hunt 3: Bulk export tooling execution across the fleet (Defender process telemetry)
DeviceProcessEvents
| where TimeGenerated > ago(7d)
| where FileName in~ ("bcp.exe", "sqlcmd.exe", "mysqldump.exe", "pg_dump.exe")
    or ProcessCommandLine has_any ("queryout", "--all-databases", "--tab=")
| project TimeGenerated, DeviceName, AccountName, FileName, ProcessCommandLine, InitiatingProcessAccountName
| sort by TimeGenerated desc;

Velociraptor VQL — Endpoint Forensic Hunt

This artifact hunts for data staging artifacts: recently created large archives and database export files in user-writable and temp paths, plus running export utilities.

VQL — Velociraptor
-- Hunt for bulk data staging artifacts and export utility execution
-- Deploy across servers hosting PHI databases and adjacent application tiers

SELECT Pid, Name, CommandLine, Exe, Username, CreateTime
FROM pslist()
WHERE CommandLine =~ '(queryout|--all-databases|--tab=|pg_dump|mysqldump)'
   OR Exe =~ '(?i)(bcp|sqlcmd|mysqldump|pg_dump)\.exe$'

-- Also hunt staged export files in suspicious locations
SELECT FullPath, Size, Mtime, Btime
FROM glob(globs=[
    'C:/Users/*/AppData/Local/Temp/**/*.zip',
    'C:/Users/*/AppData/Local/Temp/**/*.7z',
    'C:/Users/*/AppData/Local/Temp/**/*.csv',
    'C:/Users/*/Downloads/**/*.sql',
    'C:/ProgramData/**/*.dump'
])
WHERE Size > 104857600
  AND Mtime > (now() - 604800)
ORDER BY Size DESC

Remediation & Verification Script

The following PowerShell script helps IR teams and healthcare IT administrators verify hardening posture on Windows-based database and application servers: audit for unauthorized export tooling usage, confirm LAPS/credential hygiene, and validate that bulk export tools are restricted.

PowerShell
# McKesson/ShinyHunters-Style Threat: Data Exfiltration Exposure Assessment
# Run elevated on database/application servers. Review output before making changes.

$report = @()

# 1. Check for presence of bulk export tools on systems that should not have them
$exportTools = @('bcp.exe','sqlcmd.exe','mysqldump.exe','pg_dump.exe','mysqlpump.exe')
$foundTools = @()
foreach ($path in @("$env:ProgramFiles", "${env:ProgramFiles(x86)}", 'C:\Tools', 'C:\Utils')) {
    if (Test-Path $path) {
        foreach ($tool in $exportTools) {
            $found = Get-ChildItem -Path $path -Filter $tool -Recurse -ErrorAction SilentlyContinue | Select-Object -First 3
            if ($found) { $foundTools += $found.FullName }
        }
    }
}
$report += "[EXPORT TOOLS PRESENT] $($foundTools -join '; ')"

# 2. Audit recent large file creation in temp/download paths (staging artifacts)
$stagingPaths = @("$env:TEMP", 'C:\ProgramData', 'C:\Users\Public')
foreach ($sp in $stagingPaths) {
    if (Test-Path $sp) {
        $large = Get-ChildItem -Path $sp -Recurse -ErrorAction SilentlyContinue |
            Where-Object { $_.Length -gt 100MB -and $_.LastWriteTime -gt (Get-Date).AddDays(-7) -and
                           $_.Extension -match '\.(zip|7z|rar|csv|sql|tsv|dump)$' } |
            Select-Object FullName, Length, LastWriteTime
        foreach ($f in $large) { $report += "[STAGING ARTIFACT] $($f.FullName) - $([math]::Round($f.Length/1MB))MB - $($f.LastWriteTime)" }
    }
}

# 3. Verify WDAC/AppLocker policy is in place restricting export utilities
$applocker = Get-AppLockerPolicy -Effective -ErrorAction SilentlyContinue
if ($null -eq $applocker) {
    $report += "[GAP] No effective AppLocker policy found - export utilities cannot be restricted. Deploy WDAC or AppLocker rules blocking bcp.exe/sqlcmd.exe outside approved DBA groups."
} else {
    $report += "[OK] AppLocker policy present - verify executable rules cover database client tools."
}

# 4. Check audit policy for sensitive process and file access auditing
$audit = auditpol /get /subcategory:"Process Creation" 2>$null
if ($audit -notmatch 'Success and Failure|Success') {
    $report += "[GAP] Process Creation auditing not fully enabled - run: auditpol /set /subcategory:'Process Creation' /success:enable"
} else { $report += "[OK] Process Creation auditing enabled." }

$cmdAudit = (Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\Audit' -Name ProcessCreationIncludeCmdLine_Enabled -ErrorAction SilentlyContinue).ProcessCreationIncludeCmdLine_Enabled
if ($cmdAudit -ne 1) {
    $report += "[GAP] Command-line auditing disabled - set HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\Audit\ProcessCreationIncludeCmdLine_Enabled = 1"
} else { $report += "[OK] Command-line auditing enabled." }

# 5. Verify LAPS is deployed (local admin credential hygiene)
$laps = Get-ItemProperty 'HKLM:\SOFTWARE\Policies\Microsoft Services\AdmPwd' -ErrorAction SilentlyContinue
if ($null -eq $laps) {
    $report += "[GAP] Legacy LAPS policy not detected - verify Windows LAPS (2023+) or legacy LAPS deployment for local admin rotation."
} else { $report += "[OK] LAPS policy registry keys present." }

$report | Out-File "$env:USERPROFILE\Desktop\exfil_exposure_assessment.txt" -Encoding utf8
Write-Host "Assessment complete. Results written to Desktop\exfil_exposure_assessment.txt"
$report

Remediation

Because this intrusion class abuses identity and legitimate access rather than a patchable flaw, remediation is architectural, not a patch cycle. Prioritize the following, in order:

Identity and access (highest priority — this is the front door):

  1. Phishing-resistant MFA everywhere, including help-desk-initiated resets. Enforce FIDO2/passkeys or certificate-based authentication for all users with access to PHI repositories. Critically: require in-person or video-verified identity proofing for any MFA reset or new factor enrollment — ShinyHunters' vishing playbook dies here.
  2. Eliminate password-only authentication on databases and SaaS tenants. Every cloud database, analytics platform, and SaaS integration must require MFA-backed or key-based auth. Audit for legacy authentication endpoints still accepting basic credentials and disable them.
  3. OAuth grant and service account audit. Inventory every third-party OAuth token, API key, and service account with read access to data stores. Revoke anything unused in 90 days. Scope surviving grants to minimum necessary tables/records. This directly addresses the SaaS supply-chain vector this actor has exploited repeatedly.

Data access governance:

  1. Baseline and alert on bulk access. Implement database activity monitoring (DAM) that alerts on row-volume anomalies — a service account that normally reads 10,000 rows/day exporting 50 million should page the SOC, not log quietly. Deploy egress data-loss prevention tuned to PHI patterns (MRN formats, NDC codes, NPI numbers).
  2. Restrict export tooling. Use WDAC or AppLocker to constrain bcp, sqlcmd, and equivalent utilities to approved DBA accounts on approved hosts. Alert on any execution elsewhere (see Sigma rule above).

Network egress:

  1. Egress filtering and TLS inspection on data-bearing segments. Database servers should have no business uploading gigabytes to consumer file-sharing or unfamiliar cloud storage endpoints. Default-deny egress for server VLANs with explicit allowlists.

Regulatory and IR readiness:

  1. HIPAA obligations: If your investigation confirms PHI compromise, the 60-day breach notification clock under the HIPAA Breach Notification Rule (45 CFR 164.400-414) applies, plus HHS OCR reporting and, for incidents affecting 500+ individuals, media notification. State AG notification timelines vary and several are shorter. Engage breach counsel early — McKesson's 8-K demonstrates how quickly disclosure obligations compound.
  2. Preserve evidence now. Extortion actors often sit in environments for weeks before disclosure. Retain VPN logs, IdP sign-in logs (full retention, not default 30-day), database audit logs, and egress flow records before they age out. If your IdP sign-in logs only retain 30 days, export and archive them today.

If you discover evidence of compromise consistent with this threat class — unexplained bulk exports, anomalous MFA enrollments, service accounts accessing data stores from unfamiliar geographies — activate your IR retainer immediately. Do not attempt to negotiate with extortion actors directly, and involve the FBI and HHS/HSCC information-sharing channels early.

Related Resources

Security Arsenal Healthcare Cybersecurity AlertMonitor Platform Book a SOC Assessment healthcare Intel Hub

Is your security operations ready?

Get a free SOC assessment or see how AlertMonitor cuts through alert noise with automated triage.