← All hunts high TLP:CLEAR Part 2 of 2

Appliance Persistence and Identity Abuse

An adversary has modified appliance scheduled tasks to disable MFA and is exfiltrating credentials via native Slack webhook integrations.

Based on research by Unit 42 2026-09-20 9 steps · 3 queries T1556 T1566 T1684.001

Brief

Why Now

Unit 42 recently detailed a technique in Identity Abuse Through Trusted Communication Channels (https://unit42.paloaltonetworks.com/communication-channel-identity-risks/) where adversaries exploit the trust in collaboration platforms. Instead of targeting users directly, attackers compromise network appliances to manipulate identity controls and exfiltrate data.

Scoping the Appliance

The hunt begins with hb_scheduled_job to find persistence. The scoping query looks for tasks that modify authentication configurations, specifically searching for command lines that contain sed, auth sufficient, or mfa. This identifies appliances where the adversary has already gained high-level access and is attempting to weaken the identity boundary.

Correlating Network and Identity Signals

Once the scope is narrowed to suspicious appliances, the hunt moves to hb_http_activity. The adversary uses the native Slack webhook functionality for exfiltration. The hunt identifies POST requests to hooks.slack.com that use script-based user agents like curl or python-requests. These are compared against hb_auth_signin logs to find successful logins where MFA was reported as disabled. This correlation ensures the hunt focuses on malicious activity rather than legitimate IT notifications.

Triage and Verdict

An analyst evaluates the combined evidence. A host showing unauthorized task modifications, outbound Slack traffic from a script, and subsequent MFA-less logins for associated accounts receives a malicious verdict. This multi-surface approach is necessary because each signal alone might be benign in a complex environment.

Blind Spots

This hunt faces visibility gaps regarding deep OS-level modifications that do not use the scheduled task system. Additionally, while the hunt identifies the exfiltration channel and the tool used, the lack of TLS inspection on outbound HTTPS traffic means the specific credentials or secrets being stolen remain hidden.

In this series

Steps

  1. Suspicious scheduled tasks on appliances

    Query · scoping

    Identify tasks that reference MFA or credential modification, indicating unauthorized persistence.

    reads hb_scheduled_jobsql
    SELECT device_hostname, job_name, job_cmd_line, job_user_name, time FROM hb_scheduled_job WHERE (LOWER(job_cmd_line) LIKE '%.conf%' OR LOWER(job_cmd_line) LIKE '%/etc/%' OR LOWER(job_cmd_line) LIKE '%sed -i%' OR LOWER(job_cmd_line) LIKE '%auth sufficient%' OR LOWER(job_cmd_line) LIKE '%mfa%' OR LOWER(job_cmd_line) LIKE '%2fa%' OR LOWER(job_cmd_line) LIKE '%password%' OR LOWER(job_cmd_line) LIKE '%disable%') AND time >= datetime('now', '-{{lookback_days}} days')

    What a hit looks like. Tasks that modify authentication or collect secrets. Results identify potential appliance hosts for subsequent pivots.

  2. Slack webhook exfiltration attempts

    Query · detection candidate

    Detect outbound POST requests to Slack hooks from script-based tools, isolating traffic patterns atypical for standard appliance integrations.

    reads hb_http_activitysql
    SELECT device_hostname, url_hostname, url_path, user_agent, http_method, COUNT(*) as request_count, MIN(time) as first_seen FROM hb_http_activity WHERE url_hostname = '{{slack_hook_domain}}' AND http_method = 'POST' AND (instr(',' || LOWER('{{suspicious_user_agents}}') || ',', ',' || LOWER(user_agent) || ',') > 0) AND ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0) AND time >= datetime('now', '-{{lookback_days}} days') GROUP BY device_hostname, url_hostname, url_path, user_agent HAVING request_count <= 10

    What a hit looks like. Outbound Slack traffic from a scoped appliance using a generic tool like curl. Silence suggests no active exfiltration via this channel.

  3. Logins without MFA to sensitive services

    Query · enrichment

    Find successful authentications where MFA was bypassed, confirming the impact of the appliance modification.

    reads hb_auth_signinsql
    SELECT actor_user_name, dst_endpoint_name, provider, src_endpoint_ip, mfa, status, time FROM hb_auth_signin WHERE (LOWER(mfa) IN ('false', '0', 'no', 'disabled') OR mfa IS NULL) AND status_id = 1 AND ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || dst_endpoint_name || ',') > 0) AND time >= datetime('now', '-{{lookback_days}} days')

    What a hit looks like. Success logins for privileged accounts without MFA. Focus on accounts associated with the compromised appliances.

  4. Triage appliance persistence and identity signals

    Agent triage

    Evaluate whether the combination of script-based persistence, Slack exfiltration, and MFA-less logins indicates a confirmed appliance compromise.

  5. Route based on compromise verdict

    Decision

    Determine the next move based on the strength of the evidence.

  6. Isolate host and revoke credentials

    Response action

    Contain the breach by isolating the appliance and disabling the compromised user accounts.

  7. Forensic audit of appliance configuration

    Analyst task

    Conduct a manual review of the appliance's configuration to identify hidden persistence.

  8. Close out

    Analyst task

    Record findings and verify remediation.

Coverage

Scenario coverage

StageCoveredHow, or why not
Modification of Authentication Process
T1556
Yes suspicious-appliance-jobs, non-mfa-logins
Exfiltration via Native Slack Webhook
T1556
Yes exfiltration-webhooks
Identity Phishing via Collaboration Tools
T1566
Out of scope Belongs to another part of the 'Identity Abuse Through Trusted Communication Channels' series.
Impersonation of Trusted Personas
T1684.001
Out of scope Belongs to another part of the 'Identity Abuse Through Trusted Communication Channels' series.
User-Executed Malicious Payloads
T1566
Out of scope Belongs to another part of the 'Identity Abuse Through Trusted Communication Channels' series.

Blind spots

  • Needs Deep OS-level auditing on network appliances. Low-level persistence within the appliance OS would be missed by hb_scheduled_job. It would answer whether the adversary modified an internal configuration file or binary that does not appear in the scheduled task list.
  • Needs TLS inspection for outbound HTTPS. We can detect the destination and the exfiltration tool (curl), but cannot confirm which specific credentials or tokens were stolen. It would answer the specific content of the exfiltrated data.

Parameters & data

Parameters

ParameterTypeDefaultWhat it is
lookback_daysnumber14Days of history to examine.
scope_hostslist[host]Hostnames of appliances or services to focus on; leave empty to scan the whole estate.
slack_hook_domaindomainhooks.slack.comSlack webhook endpoint used for exfiltration.
suspicious_user_agentslist[string]curl, python-requests, wget, go-http-clientUser agents typically used by scripts rather than standard integrations.

Telemetry

SourceCategoryTelemetry
Endpoint telemetry (hb_ surfaces)endpointendpoint
Identity / sign-in telemetryidentityidentity
Web server / proxy logssiemnetwork

Source

Download hunt.md Definition (JSON) An open hunt.md file; it runs anywhere that reads the format.
---
analysis: A standard detection rule on Slack webhooks would trigger on legitimate
  IT notifications. This hunt is effective because it pivots from suspicious security-related
  task modifications to specific exfiltration behaviors and then corroborates with
  identity-provider anomalies (MFA bypass) to confirm malicious intent.
blind_spots:
- id: appliance-visibility-gap
  question: whether the adversary modified an internal configuration file or binary
    that does not appear in the scheduled task list
  requires: Deep OS-level auditing on network appliances
  risk: Low-level persistence within the appliance OS would be missed by hb_scheduled_job.
  stage: authentication-process-modification
- id: webhook-content-blindness
  question: the specific content of the exfiltrated data
  requires: TLS inspection for outbound HTTPS
  risk: We can detect the destination and the exfiltration tool (curl), but cannot
    confirm which specific credentials or tokens were stolen.
  stage: credential-exfiltration-webhook
coverage:
- stage: authentication-process-modification
  status: covered
  steps:
  - suspicious-appliance-jobs
  - non-mfa-logins
- stage: credential-exfiltration-webhook
  status: covered
  steps:
  - exfiltration-webhooks
- reason: Belongs to another part of the 'Identity Abuse Through Trusted Communication
    Channels' series.
  stage: initial-access-collaboration-phishing
  status: out_of_scope
- reason: Belongs to another part of the 'Identity Abuse Through Trusted Communication
    Channels' series.
  stage: trusted-channel-impersonation
  status: out_of_scope
- reason: Belongs to another part of the 'Identity Abuse Through Trusted Communication
    Channels' series.
  stage: endpoint-payload-execution
  status: out_of_scope
guardrails:
  claims: no_unsupported
  evidence: citation_required
  missing_data: not_benign
  telemetry: untrusted
hunt:
  applicability: campaign-specific
  handoff: promote-to-detection
  justification: Compromised network appliances provide deep persistence; monitoring
    for script-driven MFA removal and native webhook exfiltration protects the core
    identity boundary even when traditional endpoint logs are unavailable.
  methodology: model-assisted
  trigger: intel-report
hypothesis: An adversary has modified appliance scheduled tasks to disable MFA and
  is exfiltrating credentials via native Slack webhook integrations.
labels:
- hunt
- attack.t1556
- attack.t1566
- attack.t1684.001
name: Appliance Persistence and Identity Abuse
parameters:
  lookback_days:
    default: '14'
    description: Days of history to examine.
    type: number
  scope_hosts:
    default: []
    description: Hostnames of appliances or services to focus on; leave empty to scan
      the whole estate.
    type: list[host]
  slack_hook_domain:
    default: hooks.slack.com
    description: Slack webhook endpoint used for exfiltration.
    from:
      kind: article
      observed: '2026-08-20'
      ref: unit42-comm-channels
    type: domain
  suspicious_user_agents:
    default:
    - curl
    - python-requests
    - wget
    - go-http-client
    description: User agents typically used by scripts rather than standard integrations.
    type: list[string]
provenance:
  authors:
  - name: Huntbase hunt generation
    org: huntbase.io
  generated:
    by: huntbase-hunt-generation
    from: https://unit42.paloaltonetworks.com/communication-channel-identity-risks/
    gates:
    - dry-run
    - lint
    model: hb_google/gemini-3-flash-preview
rationale: Focus on hostnames indicating network infrastructure (e.g., vpn-*, fw-*).
  Use the output of the first query to populate the scope_hosts parameter for the
  parallel branch.
references:
- name: "Unit 42 \u2014 Identity Abuse Through Trusted Communication Channels"
  url: https://unit42.paloaltonetworks.com/communication-channel-identity-risks/
related:
- hunt: initial-access-collaboration-phishing
  reason: This hunt focuses on post-compromise appliance persistence; the initial
    phishing via Teams or Slack is handled by a separate hunt focusing on communication
    logs.
  relation: out-of-scope-alternative
- hunt: collaboration-platform-phishing-and-execution
  relation: follows
scenario:
  stages:
  - name: Identity Phishing via Collaboration Tools
    observables:
    - hooks.slack.com
    - Google Sites authentication links
    - External federation chat requests in Microsoft Teams
    - Requests to approve MFA notifications
    slug: initial-access-collaboration-phishing
    tactic: initial-access
    techniques:
    - T1566
  - name: Impersonation of Trusted Personas
    observables:
    - Google Meet interview sessions
    - IT support impersonation
    - Recruitment-themed social engineering
    - Malicious GitHub repository cloning
    slug: trusted-channel-impersonation
    tactic: stealth
    techniques:
    - T1684.001
  - name: User-Executed Malicious Payloads
    observables:
    - WinRAR.exe
    - lpk.dll
    - npm install
    - Explorer.exe launching RAR files
    - Extraction of masquerading DLLs
    slug: endpoint-payload-execution
    tactic: execution
    techniques:
    - T1566
  - name: Modification of Authentication Process
    observables:
    - Removal of MFA/2FA from privileged accounts
    - Scripts on VPN/firewall appliances disabling security settings
    - Creation of weekly scheduled tasks for credential collection
    slug: authentication-process-modification
    tactic: persistence
    techniques:
    - T1556
  - name: Exfiltration via Native Slack Webhook
    observables:
    - POST requests to hooks.slack.com
    - curl user-agent in outbound appliance traffic
    - Native Slack notification integrations on network hardware
    slug: credential-exfiltration-webhook
    tactic: exfiltration
    techniques:
    - T1556
  summary: Threat actors exploit trusted collaboration platforms like Microsoft Teams
    and Slack to deliver phishing links and impersonate internal stakeholders for
    initial access. Post-compromise, they maintain persistence by modifying authentication
    settings on network appliances and use native Slack webhook integrations to exfiltrate
    credentials and sensitive data.
series:
  index: 2
  slug: identity-abuse-through-trusted-communication-channels
  title: Identity Abuse Through Trusted Communication Channels
  total: 2
severity: high
targets:
  analyst:
    name: Tier-2 analyst
    role: analyst
  endpoint:
    category: endpoint
    name: Endpoint telemetry (hb_ surfaces)
    telemetry:
    - endpoint
  hunter:
    agent: true
    name: Hunt agent
  identity:
    category: identity
    name: Identity / sign-in telemetry
    telemetry:
    - identity
  web:
    category: siem
    name: Web server / proxy logs
    telemetry:
    - network
tlp: clear
type: investigation
---


# Appliance Persistence and Identity Abuse

The adversary disables multifactor authentication and exfiltrates credentials by modifying network appliance configuration scripts. This hunt identifies these post-compromise activities. It focuses on the discovery of suspicious scheduled tasks referencing identity controls, correlated with outbound webhook traffic to Slack and successful sign-ins where MFA was bypassed. An analyst reviews the resulting behavioral signals to confirm an appliance-based intrusion.

## suspicious-appliance-jobs
<!-- Suspicious scheduled tasks on appliances -->
Identify tasks that reference MFA or credential modification, indicating unauthorized persistence.

```sqlite target=endpoint role=scoping params=(lookback_days=lookback_days)
~~~yaml
expected: Tasks that modify authentication or collect secrets. Results identify potential
  appliance hosts for subsequent pivots.
reads:
- device_hostname
- job_name
- job_cmd_line
- job_user_name
- time
silence: not_evidence_of_absence
source: hb_scheduled_job
verified: dry-run
verified_at: '2026-09-20'
~~~
SELECT device_hostname, job_name, job_cmd_line, job_user_name, time FROM hb_scheduled_job WHERE (LOWER(job_cmd_line) LIKE '%.conf%' OR LOWER(job_cmd_line) LIKE '%/etc/%' OR LOWER(job_cmd_line) LIKE '%sed -i%' OR LOWER(job_cmd_line) LIKE '%auth sufficient%' OR LOWER(job_cmd_line) LIKE '%mfa%' OR LOWER(job_cmd_line) LIKE '%2fa%' OR LOWER(job_cmd_line) LIKE '%password%' OR LOWER(job_cmd_line) LIKE '%disable%') AND time >= datetime('now', '-{{lookback_days}} days')
```

## parallel-signals
<!-- Correlate exfiltration and identity bypass -->
parallel:
- → exfiltration-webhooks
- → non-mfa-logins
join: → triage-evidence

## exfiltration-webhooks
<!-- Slack webhook exfiltration attempts -->
Detect outbound POST requests to Slack hooks from script-based tools, isolating traffic patterns atypical for standard appliance integrations.

```sqlite target=web role=detection-candidate params=(lookback_days=lookback_days, slack_hook_domain=slack_hook_domain, suspicious_user_agents=suspicious_user_agents, scope_hosts=scope_hosts)
~~~yaml
baseline:
  compare: first_seen
  window: '{{lookback_days}}d'
expected: Outbound Slack traffic from a scoped appliance using a generic tool like
  curl. Silence suggests no active exfiltration via this channel.
prevalence:
  by: device_hostname
  key:
  - user_agent
  - url_path
  rare_below: 3
reads:
- device_hostname
- url_hostname
- url_path
- user_agent
- http_method
- time
silence: not_evidence_of_absence
source: hb_http_activity
verified: dry-run
verified_at: '2026-09-20'
~~~
SELECT device_hostname, url_hostname, url_path, user_agent, http_method, COUNT(*) as request_count, MIN(time) as first_seen FROM hb_http_activity WHERE url_hostname = '{{slack_hook_domain}}' AND http_method = 'POST' AND (instr(',' || LOWER('{{suspicious_user_agents}}') || ',', ',' || LOWER(user_agent) || ',') > 0) AND ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || device_hostname || ',') > 0) AND time >= datetime('now', '-{{lookback_days}} days') GROUP BY device_hostname, url_hostname, url_path, user_agent HAVING request_count <= 10
```

## non-mfa-logins
<!-- Logins without MFA to sensitive services -->
Find successful authentications where MFA was bypassed, confirming the impact of the appliance modification.

```sqlite target=identity role=enrichment params=(lookback_days=lookback_days, scope_hosts=scope_hosts)
~~~yaml
expected: Success logins for privileged accounts without MFA. Focus on accounts associated
  with the compromised appliances.
reads:
- actor_user_name
- dst_endpoint_name
- provider
- src_endpoint_ip
- mfa
- status
- time
silence: not_evidence_of_absence
source: hb_auth_signin
verified: dry-run
verified_at: '2026-09-20'
~~~
SELECT actor_user_name, dst_endpoint_name, provider, src_endpoint_ip, mfa, status, time FROM hb_auth_signin WHERE (LOWER(mfa) IN ('false', '0', 'no', 'disabled') OR mfa IS NULL) AND status_id = 1 AND ('{{scope_hosts}}' = '' OR instr(',' || '{{scope_hosts}}' || ',', ',' || dst_endpoint_name || ',') > 0) AND time >= datetime('now', '-{{lookback_days}} days')
```

## triage-evidence
<!-- Triage appliance persistence and identity signals -->
```agent target=hunter
cite: required
context:
- suspicious-appliance-jobs
- exfiltration-webhooks
- non-mfa-logins
max_iterations: 5
objective: Determine if the scheduled tasks on potential appliances correlate with
  suspicious Slack webhooks and subsequent MFA-less logins for related accounts.
success_criteria: A verdict of malicious | suspicious | benign per host, citing the
  specific task commands and exfiltration timestamps.
tools:
- endpoint
- identity
- web
```

## route-investigation
<!-- Route based on compromise verdict -->
if~: "the triage verdict identifies at least one host with both suspicious scheduled jobs and outbound Slack webhook traffic using script-based user agents" (confidence: high, judge=hunter)
then: → isolate-and-remediate
indeterminate: → forensic-appliance-audit
unavailable: → forensic-appliance-audit (blind_spot: appliance-visibility-gap)
else: → forensic-appliance-audit

## isolate-and-remediate
<!-- Isolate host and revoke credentials -->
```action target=endpoint
~~~yaml
approval: required
~~~
Isolate the reporting device, disable the compromised user identities, and revoke all active sessions for those users.
```
→ forensic-appliance-audit

## forensic-appliance-audit
<!-- Forensic audit of appliance configuration -->
```manual target=analyst
Review all configured scripts, webhooks, and local user settings on the appliance management console to identify hidden persistence mechanisms or modified 2FA policies.
```
→ close-out

## close-out
<!-- Close out -->
```manual target=analyst
Record the findings, update the risk register regarding appliance visibility, and confirm the restoration of MFA controls.
```
→ end

Run it

Take this hunt into your environment.

Open it in Huntbase to run every step against your own connections, with Scout weighing the evidence and your analysts in command. Or take the open hunt.md file anywhere that reads the format.

Machine-drafted by huntbase-hunt-generation using hb_google/gemini-3-flash-preview, gated by dry-run, lint, then reviewed by a person.