Analysis

  • max time kernel
    149s
  • max time network
    150s
  • platform
    windows10-2004_x64
  • resource
    win10v2004-20260513-en
  • resource tags

    arch:x64arch:x86image:win10v2004-20260513-enlocale:en-usos:windows10-2004-x64systemwindows
  • submitted
    09/07/2026, 02:25

General

  • Target
    2026-07-09_1761c0f5eae9dd20b70ec469a384fb9e_akira_glassworm_rusty-stealer.exe
  • Size 7.3MB
  • Sample260709-cws1macz2s
  • SHA256 fe679e131aae76becde6a4405e94202de9f5b12ec4bff736abaf0eb8c1624e44
  • MD5 SHA1 SHA512 SSDEEP TLSH

Malware Config

Signatures

  • Drops file in Drivers directory 1 IoCs
  • Command and Scripting Interpreter: PowerShell 1 TTPs 2 IoCs

    Run Powershell to get system information.

  • Hide Artifacts: Ignore Process Interrupts 1 TTPs 2 IoCs

    Command interpreters often include specific commands/flags that ignore errors and other hangups.

  • Gathers network information 2 TTPs 1 IoCs

    Uses commandline utility to view network configuration.

  • Suspicious behavior: EnumeratesProcesses 64 IoCs
  • Suspicious use of AdjustPrivilegeToken 64 IoCs
  • Suspicious use of WriteProcessMemory 4 IoCs

Processes

  • C:\Users\Admin\AppData\Local\Temp\2026-07-09_1761c0f5eae9dd20b70ec469a384fb9e_akira_glassworm_rusty-stealer.exe
    "C:\Users\Admin\AppData\Local\Temp\2026-07-09_1761c0f5eae9dd20b70ec469a384fb9e_akira_glassworm_rusty-stealer.exe"
    1⤵
    • Drops file in Drivers directory
    • Suspicious behavior: EnumeratesProcesses
    • Suspicious use of WriteProcessMemory
    PID:1592
    • C:\Windows\system32\ipconfig.exe
      "ipconfig" /flushdns
      2⤵
      • Gathers network information
      PID:556
    • C:\Windows\System32\pnputil.exe
      "C:\Windows\System32\pnputil.exe" /enum-drivers
      2⤵
        PID:4528
      • C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
        "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -NonInteractive -Command " $ErrorActionPreference = 'Stop' $adapterLabel = 'Ethernet' $adapterHint = 'Ethernet' $adapterIfIndex = 6 $repairBinding = $false function Add-BindingCandidate([System.Collections.Generic.List[object]]$Candidates, [string]$Selector, [string]$Value, [string]$DisplayName) { if ([string]::IsNullOrWhiteSpace($Value)) { return } $normalizedKey = ($Selector + '|' + $Value).ToLowerInvariant() foreach ($candidate in $Candidates) { if ($candidate.Key -eq $normalizedKey) { return } } $Candidates.Add([PSCustomObject]@{ Selector = $Selector Value = $Value DisplayName = $DisplayName Key = $normalizedKey }) | Out-Null } function Get-LegacyAdapterMetadata { if ($null -eq $adapterIfIndex) { return $null } $legacyAdapter = $null try { $legacyAdapter = Get-CimInstance -ClassName Win32_NetworkAdapter -Filter ('InterfaceIndex = ' + $adapterIfIndex) -ErrorAction Stop | Select-Object -First 1 } catch { try { $legacyAdapter = Get-WmiObject Win32_NetworkAdapter -Filter ('InterfaceIndex = ' + $adapterIfIndex) -ErrorAction Stop | Select-Object -First 1 } catch { $legacyAdapter = $null } } if (-not $legacyAdapter) { return $null } return [PSCustomObject]@{ Name = [string]$legacyAdapter.NetConnectionID InterfaceDescription = [string]$legacyAdapter.Name IfIndex = $legacyAdapter.InterfaceIndex } } function Resolve-WinpkFilterCandidates { $candidates = [System.Collections.Generic.List[object]]::new() if ($null -ne $adapterIfIndex) { Add-BindingCandidate $candidates 'InterfaceIndex' ([string]$adapterIfIndex) $adapterLabel } if (-not [string]::IsNullOrWhiteSpace($adapterHint)) { Add-BindingCandidate $candidates 'Name' $adapterHint $adapterHint Add-BindingCandidate $candidates 'InterfaceDescription' $adapterHint $adapterHint } $legacyAdapter = Get-LegacyAdapterMetadata if ($legacyAdapter) { $displayName = if (-not [string]::IsNullOrWhiteSpace($legacyAdapter.Name)) { $legacyAdapter.Name } elseif (-not [string]::IsNullOrWhiteSpace($legacyAdapter.InterfaceDescription)) { $legacyAdapter.InterfaceDescription } else { $adapterLabel } Add-BindingCandidate $candidates 'Name' $legacyAdapter.Name $displayName Add-BindingCandidate $candidates 'InterfaceDescription' $legacyAdapter.InterfaceDescription $displayName } return $candidates } function Get-WinpkFilterBinding([object]$Candidate) { if ($Candidate.Selector -eq 'InterfaceIndex') { return Get-NetAdapter -InterfaceIndex ([int]$Candidate.Value) -ErrorAction SilentlyContinue | Get-NetAdapterBinding -ComponentID 'nt_ndisrd' -ErrorAction SilentlyContinue | Select-Object -First 1 } if ($Candidate.Selector -eq 'Name') { return Get-NetAdapterBinding -Name $Candidate.Value -ComponentID 'nt_ndisrd' -ErrorAction SilentlyContinue | Select-Object -First 1 } if ($Candidate.Selector -eq 'InterfaceDescription') { return Get-NetAdapterBinding -InterfaceDescription $Candidate.Value -ComponentID 'nt_ndisrd' -ErrorAction SilentlyContinue | Select-Object -First 1 } return $null } function Enable-WinpkFilterBinding([object]$Candidate) { if ($Candidate.Selector -eq 'InterfaceIndex') { $adapter = Get-NetAdapter -InterfaceIndex ([int]$Candidate.Value) -ErrorAction Stop | Select-Object -First 1 if (-not $adapter) { throw ('Could not resolve adapter by interface index: ' + $Candidate.Value) } Enable-NetAdapterBinding -Name $adapter.Name -ComponentID 'nt_ndisrd' -Confirm:$false -ErrorAction Stop | Out-Null return } if ($Candidate.Selector -eq 'Name') { Enable-NetAdapterBinding -Name $Candidate.Value -ComponentID 'nt_ndisrd' -Confirm:$false -ErrorAction Stop | Out-Null return } if ($Candidate.Selector -eq 'InterfaceDescription') { Enable-NetAdapterBinding -InterfaceDescription $Candidate.Value -ComponentID 'nt_ndisrd' -Confirm:$false -ErrorAction Stop | Out-Null return } throw ('Unsupported WinpkFilter binding selector: ' + $Candidate.Selector) } function Start-NDISRDService { $service = Get-Service -Name 'NDISRD' -ErrorAction SilentlyContinue if (-not $service) { throw 'NDISRD service is not installed.' } if ($service.Status -ne 'Running') { Write-Output 'Starting NDISRD service before WinpkFilter binding validation' Start-Service -Name 'NDISRD' -ErrorAction Stop $deadline = (Get-Date).AddSeconds(10) do { Start-Sleep -Milliseconds 250 $service = Get-Service -Name 'NDISRD' -ErrorAction Stop } while ($service.Status -ne 'Running' -and (Get-Date) -lt $deadline) if ($service.Status -ne 'Running') { throw 'NDISRD service did not reach Running state.' } } } try { $candidates = Resolve-WinpkFilterCandidates if ($candidates.Count -eq 0) { throw ('Could not resolve any adapter identifiers for WinpkFilter validation. ifIndex=' + $adapterIfIndex + ', hint=' + $adapterLabel) } $bindingCandidate = $null $binding = $null foreach ($candidate in $candidates) { $binding = Get-WinpkFilterBinding $candidate if ($binding) { $bindingCandidate = $candidate break } } if (-not $bindingCandidate) { throw ('winpkfilter_binding_missing: nt_ndisrd is not bound to adapter ''' + $adapterLabel + ''' (ifIndex=' + $adapterIfIndex + '). Repair the split tunnel driver, then try again.') } $adapterName = if ($binding.Name) { [string]$binding.Name } elseif ($bindingCandidate.DisplayName) { [string]$bindingCandidate.DisplayName } else { $adapterLabel } $adapterDescription = if ($binding.InterfaceDescription) { [string]$binding.InterfaceDescription } else { '' } Write-Output ('Using adapter ''' + $adapterName + ''' via ' + $bindingCandidate.Selector + ' (ifIndex=' + $adapterIfIndex + ', description=' + $adapterDescription + ') for WinpkFilter validation') Start-NDISRDService if (-not $binding.Enabled) { if (-not $repairBinding) { throw ('winpkfilter_binding_disabled: nt_ndisrd is disabled on adapter ''' + $adapterName + ''' (ifIndex=' + $adapterIfIndex + '). SwiftTunnel will enable it when connecting or when Repair driver is run.') } Write-Output ('Enabling WinpkFilter binding on adapter: ' + $adapterName) Enable-WinpkFilterBinding $bindingCandidate Start-Sleep -Seconds 2 $binding = Get-WinpkFilterBinding $bindingCandidate if (-not $binding) { throw ('WinpkFilter binding nt_ndisrd could not be queried after enabling on adapter: ' + $adapterName) } if (-not $binding.Enabled) { throw ('WinpkFilter binding nt_ndisrd is still disabled on adapter: ' + $adapterName) } Write-Output ('WinpkFilter binding enabled on adapter: ' + $adapterName) } else { Write-Output ('WinpkFilter binding already enabled on adapter: ' + $adapterName) } } catch { $errorText = $_.Exception.Message if ([string]::IsNullOrWhiteSpace($errorText)) { $errorText = ($_ | Out-String).Trim() } if ([string]::IsNullOrWhiteSpace($errorText)) { $errorText = 'PowerShell command failed without an exception message.' } if ($errorText -like 'winpkfilter_binding_missing:*' -or $errorText -like 'winpkfilter_binding_disabled:*') { [Console]::Error.WriteLine($errorText) } else { [Console]::Error.WriteLine('winpkfilter_binding_validation_failed: adapter ''' + $adapterLabel + ''': ' + $errorText) } exit 1 } "
        2⤵
        • Command and Scripting Interpreter: PowerShell
        • Hide Artifacts: Ignore Process Interrupts
        • Suspicious use of AdjustPrivilegeToken
        PID:3300
      • C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
        "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -NonInteractive -Command " $ErrorActionPreference = 'Stop' $adapterLabel = 'Ethernet' $adapterHint = 'Ethernet' $adapterIfIndex = 6 $repairBinding = $false function Add-BindingCandidate([System.Collections.Generic.List[object]]$Candidates, [string]$Selector, [string]$Value, [string]$DisplayName) { if ([string]::IsNullOrWhiteSpace($Value)) { return } $normalizedKey = ($Selector + '|' + $Value).ToLowerInvariant() foreach ($candidate in $Candidates) { if ($candidate.Key -eq $normalizedKey) { return } } $Candidates.Add([PSCustomObject]@{ Selector = $Selector Value = $Value DisplayName = $DisplayName Key = $normalizedKey }) | Out-Null } function Get-LegacyAdapterMetadata { if ($null -eq $adapterIfIndex) { return $null } $legacyAdapter = $null try { $legacyAdapter = Get-CimInstance -ClassName Win32_NetworkAdapter -Filter ('InterfaceIndex = ' + $adapterIfIndex) -ErrorAction Stop | Select-Object -First 1 } catch { try { $legacyAdapter = Get-WmiObject Win32_NetworkAdapter -Filter ('InterfaceIndex = ' + $adapterIfIndex) -ErrorAction Stop | Select-Object -First 1 } catch { $legacyAdapter = $null } } if (-not $legacyAdapter) { return $null } return [PSCustomObject]@{ Name = [string]$legacyAdapter.NetConnectionID InterfaceDescription = [string]$legacyAdapter.Name IfIndex = $legacyAdapter.InterfaceIndex } } function Resolve-WinpkFilterCandidates { $candidates = [System.Collections.Generic.List[object]]::new() if ($null -ne $adapterIfIndex) { Add-BindingCandidate $candidates 'InterfaceIndex' ([string]$adapterIfIndex) $adapterLabel } if (-not [string]::IsNullOrWhiteSpace($adapterHint)) { Add-BindingCandidate $candidates 'Name' $adapterHint $adapterHint Add-BindingCandidate $candidates 'InterfaceDescription' $adapterHint $adapterHint } $legacyAdapter = Get-LegacyAdapterMetadata if ($legacyAdapter) { $displayName = if (-not [string]::IsNullOrWhiteSpace($legacyAdapter.Name)) { $legacyAdapter.Name } elseif (-not [string]::IsNullOrWhiteSpace($legacyAdapter.InterfaceDescription)) { $legacyAdapter.InterfaceDescription } else { $adapterLabel } Add-BindingCandidate $candidates 'Name' $legacyAdapter.Name $displayName Add-BindingCandidate $candidates 'InterfaceDescription' $legacyAdapter.InterfaceDescription $displayName } return $candidates } function Get-WinpkFilterBinding([object]$Candidate) { if ($Candidate.Selector -eq 'InterfaceIndex') { return Get-NetAdapter -InterfaceIndex ([int]$Candidate.Value) -ErrorAction SilentlyContinue | Get-NetAdapterBinding -ComponentID 'nt_ndisrd' -ErrorAction SilentlyContinue | Select-Object -First 1 } if ($Candidate.Selector -eq 'Name') { return Get-NetAdapterBinding -Name $Candidate.Value -ComponentID 'nt_ndisrd' -ErrorAction SilentlyContinue | Select-Object -First 1 } if ($Candidate.Selector -eq 'InterfaceDescription') { return Get-NetAdapterBinding -InterfaceDescription $Candidate.Value -ComponentID 'nt_ndisrd' -ErrorAction SilentlyContinue | Select-Object -First 1 } return $null } function Enable-WinpkFilterBinding([object]$Candidate) { if ($Candidate.Selector -eq 'InterfaceIndex') { $adapter = Get-NetAdapter -InterfaceIndex ([int]$Candidate.Value) -ErrorAction Stop | Select-Object -First 1 if (-not $adapter) { throw ('Could not resolve adapter by interface index: ' + $Candidate.Value) } Enable-NetAdapterBinding -Name $adapter.Name -ComponentID 'nt_ndisrd' -Confirm:$false -ErrorAction Stop | Out-Null return } if ($Candidate.Selector -eq 'Name') { Enable-NetAdapterBinding -Name $Candidate.Value -ComponentID 'nt_ndisrd' -Confirm:$false -ErrorAction Stop | Out-Null return } if ($Candidate.Selector -eq 'InterfaceDescription') { Enable-NetAdapterBinding -InterfaceDescription $Candidate.Value -ComponentID 'nt_ndisrd' -Confirm:$false -ErrorAction Stop | Out-Null return } throw ('Unsupported WinpkFilter binding selector: ' + $Candidate.Selector) } function Start-NDISRDService { $service = Get-Service -Name 'NDISRD' -ErrorAction SilentlyContinue if (-not $service) { throw 'NDISRD service is not installed.' } if ($service.Status -ne 'Running') { Write-Output 'Starting NDISRD service before WinpkFilter binding validation' Start-Service -Name 'NDISRD' -ErrorAction Stop $deadline = (Get-Date).AddSeconds(10) do { Start-Sleep -Milliseconds 250 $service = Get-Service -Name 'NDISRD' -ErrorAction Stop } while ($service.Status -ne 'Running' -and (Get-Date) -lt $deadline) if ($service.Status -ne 'Running') { throw 'NDISRD service did not reach Running state.' } } } try { $candidates = Resolve-WinpkFilterCandidates if ($candidates.Count -eq 0) { throw ('Could not resolve any adapter identifiers for WinpkFilter validation. ifIndex=' + $adapterIfIndex + ', hint=' + $adapterLabel) } $bindingCandidate = $null $binding = $null foreach ($candidate in $candidates) { $binding = Get-WinpkFilterBinding $candidate if ($binding) { $bindingCandidate = $candidate break } } if (-not $bindingCandidate) { throw ('winpkfilter_binding_missing: nt_ndisrd is not bound to adapter ''' + $adapterLabel + ''' (ifIndex=' + $adapterIfIndex + '). Repair the split tunnel driver, then try again.') } $adapterName = if ($binding.Name) { [string]$binding.Name } elseif ($bindingCandidate.DisplayName) { [string]$bindingCandidate.DisplayName } else { $adapterLabel } $adapterDescription = if ($binding.InterfaceDescription) { [string]$binding.InterfaceDescription } else { '' } Write-Output ('Using adapter ''' + $adapterName + ''' via ' + $bindingCandidate.Selector + ' (ifIndex=' + $adapterIfIndex + ', description=' + $adapterDescription + ') for WinpkFilter validation') Start-NDISRDService if (-not $binding.Enabled) { if (-not $repairBinding) { throw ('winpkfilter_binding_disabled: nt_ndisrd is disabled on adapter ''' + $adapterName + ''' (ifIndex=' + $adapterIfIndex + '). SwiftTunnel will enable it when connecting or when Repair driver is run.') } Write-Output ('Enabling WinpkFilter binding on adapter: ' + $adapterName) Enable-WinpkFilterBinding $bindingCandidate Start-Sleep -Seconds 2 $binding = Get-WinpkFilterBinding $bindingCandidate if (-not $binding) { throw ('WinpkFilter binding nt_ndisrd could not be queried after enabling on adapter: ' + $adapterName) } if (-not $binding.Enabled) { throw ('WinpkFilter binding nt_ndisrd is still disabled on adapter: ' + $adapterName) } Write-Output ('WinpkFilter binding enabled on adapter: ' + $adapterName) } else { Write-Output ('WinpkFilter binding already enabled on adapter: ' + $adapterName) } } catch { $errorText = $_.Exception.Message if ([string]::IsNullOrWhiteSpace($errorText)) { $errorText = ($_ | Out-String).Trim() } if ([string]::IsNullOrWhiteSpace($errorText)) { $errorText = 'PowerShell command failed without an exception message.' } if ($errorText -like 'winpkfilter_binding_missing:*' -or $errorText -like 'winpkfilter_binding_disabled:*') { [Console]::Error.WriteLine($errorText) } else { [Console]::Error.WriteLine('winpkfilter_binding_validation_failed: adapter ''' + $adapterLabel + ''': ' + $errorText) } exit 1 } "
        2⤵
        • Command and Scripting Interpreter: PowerShell
        • Hide Artifacts: Ignore Process Interrupts
        PID:1532

    Network

          MITRE ATT&CK Enterprise v16

          Replay Monitor

          Loading Replay Monitor...

          Downloads

          powershell.exe.log

          • Path C:\Users\Admin\AppData\Local\Microsoft\CLR_v4.0\UsageLogs\powershell.exe.log
          • Size 3KB
          • SHA256 14b3616e9b73bbbd70d1cf8032825a1e5d22550590f08c218b7301a44c1d7bd9
          • MD5 SHA1 SHA512 TLSH

          StartupProfileData-NonInteractive

          • Path C:\Users\Admin\AppData\Local\Microsoft\Windows\PowerShell\StartupProfileData-NonInteractive
          • Size 1KB
          • SHA256 7172373de0f4017bbfe2d43a2af0288e497caca41bea0ee25fe2690ff8d58d98
          • MD5 SHA1 SHA512 TLSH

          __PSScriptPolicyTest_aabxrwkx.v02.ps1

          • Path C:\Users\Admin\AppData\Local\Temp\__PSScriptPolicyTest_aabxrwkx.v02.ps1
          • Size 60B
          • SHA256 96ad1146eb96877eab5942ae0736b82d8b5e2039a80d3d6932665c1a4c87dcf7
          • MD5 SHA1 SHA512 TLSH

          memory/1532-28-0x00000180E7630000-0x00000180E777E000-memory.dmp

          memory/3300-2-0x0000019A254C0000-0x0000019A254D0000-memory.dmp

          memory/3300-1-0x0000019A254C0000-0x0000019A254D0000-memory.dmp

          memory/3300-8-0x0000019A25440000-0x0000019A25462000-memory.dmp

          memory/3300-11-0x0000019A26520000-0x0000019A2654A000-memory.dmp

          memory/3300-12-0x0000019A26520000-0x0000019A26544000-memory.dmp

          memory/3300-13-0x0000019A254C0000-0x0000019A254D0000-memory.dmp

          memory/3300-14-0x0000019A254C0000-0x0000019A254D0000-memory.dmp

          memory/3300-17-0x0000019A26050000-0x0000019A2619E000-memory.dmp