This hunt identifies the presence of PureLogs Stealer, a credential and data theft malware, by correlating its known IOCs against Azure Sentinel telemetry to detect active compromise. Proactively hunting for these indicators is critical because this stealer often operates silently to exfiltrate sensitive information, allowing the SOC to identify and isolate affected assets before the adversary achieves their objective.
Malware Family: PureLogs Stealer Total IOCs: 8 IOC Types: ip:port, url
| Type | Value | Threat Type | First Seen | Confidence |
|---|---|---|---|---|
| ip:port | 64[.]89[.]160[.]140:587 | botnet_cc | 2026-09-07 | 75% |
| url | hxxps://pullout.ezgateway.net:587/discord | botnet_cc | 2026-09-07 | 100% |
| url | hxxps://pullout.ezgateway.net:587/filesearch/req | botnet_cc | 2026-09-07 | 100% |
| url | hxxps://pullout.ezgateway.net:587/finish | botnet_cc | 2026-09-07 | 100% |
| url | hxxps://pullout.ezgateway.net:587/plugin | botnet_cc | 2026-09-07 | 100% |
| url | hxxps://pullout.ezgateway.net:587/userinfo | botnet_cc | 2026-09-07 | 100% |
| url | hxxps://pullout.ezgateway.net:587/browser | botnet_cc | 2026-09-07 | 100% |
| url | hxxps://pullout.ezgateway.net:587/ping | botnet_cc | 2026-09-07 | 100% |
// Hunt for network connections to known malicious IPs
// Source: ThreatFox - PureLogs Stealer
let malicious_ips = dynamic(["64.89.160.140"]);
CommonSecurityLog
| where DestinationIP in (malicious_ips) or SourceIP in (malicious_ips)
| project TimeGenerated, SourceIP, DestinationIP, DestinationPort, DeviceAction, Activity
| order by TimeGenerated desc
// Hunt in Defender for Endpoint network events
let malicious_ips = dynamic(["64.89.160.140"]);
DeviceNetworkEvents
| where RemoteIP in (malicious_ips)
| project Timestamp, DeviceName, RemoteIP, RemotePort, InitiatingProcessFileName, ActionType
| order by Timestamp desc
// Hunt for access to known malicious URLs
// Source: ThreatFox - PureLogs Stealer
let malicious_urls = dynamic(["https://pullout.ezgateway.net:587/discord", "https://pullout.ezgateway.net:587/filesearch/req", "https://pullout.ezgateway.net:587/finish", "https://pullout.ezgateway.net:587/plugin", "https://pullout.ezgateway.net:587/userinfo", "https://pullout.ezgateway.net:587/browser", "https://pullout.ezgateway.net:587/ping"]);
UrlClickEvents
| where Url has_any (malicious_urls)
| project Timestamp, AccountUpn, Url, ActionType, IsClickedThrough
| order by Timestamp desc
| Sentinel Table | Notes |
|---|---|
CommonSecurityLog | Ensure this data connector is enabled |
DeviceNetworkEvents | Ensure this data connector is enabled |
UrlClickEvents | Ensure this data connector is enabled |
PureLogs (or a similarly named internal utility) to parse and store application logs in a central data lake, triggering matches on the binary name or specific hash if the tool is built from the same open-source base.
jenkins.exe, azure-agent.exe, github-actions.exe) or where the command line contains specific arguments like --parse or --upload that indicate legitimate log processing rather than credential theft.C:\Users\Public\Temp directory, which inadvertently executes a helper script named purelogs_clean.ps1 that matches the IOC filename pattern.
%TEMP%, C:\Windows\Temp) and the parent process is powershell.exe or pwsh.exe with a scheduled task ID (e.g., Task Scheduler or cron equivalent) that is whitelisted in the CMDB.SEC_REDTEAM_TEST) or where the machine name matches a known test environment pattern (e.g., *TEST*, *SIM*), or where the process is executed from a dedicated test directory like C:\RedTeam\Tools\.