migrateによる隠蔽化 「ハッキング・ラボのつくりかた」にそって

# はじめに
この記事は、[Kali Linux2022.1 でハッキングラボをつくってみる 6 Windows7をハッキングする編5(Metasploit Frameworkを使う後編）](https://qiita.com/kagirohi/items/8aac8d26ddc9c2e73167)でやりきれなかった部分となります。
この記事と上記リンクの記事は、『ハッキング・ラボのつくりかた』に沿った内容となっております。

:::note alert
注意事項
記事で紹介されている行為を他人や団体、インフラなどの許可を得ずに行った場合、犯罪となる可能性が有ります。
あくまでも、記事の内容は情報セキュリティの学習です。読者様の所有・管理の機器、システムでのみ実行してください。
また、読者さまのシステムにトラブルが起きたとしても、私は責任を負いかねます。
:::
## migrateによる隠蔽化の前にやっておくこと
同書p270に次のように記述されている。
>migrateコマンドにより、ペイロードのプロセスを隠蔽化できます。ただし、run persistenceコマンドで永続的なバックドアを作成済みの場合、すでにペイロードは隠蔽化されています。この実験は、run persistenceコマンドの実行前に行ってください

別に、migrateで隠蔽したペイロードもやられOSであるWindows7に転送するだけでいいだけかもしれないが、同じようなバックドアがあるとややこしくなると思い、すでに設けたバックドア（MetasploitFrameworkの`run persistence`でつくったやつ）を撤去する。また、手動で設置したペイロードもレジストリから撤去する。（必要ないし、起動するたびにダイアログを出してきてうっとおしいから）

詳しくは、過去記事[Kali Linux2022.1 でハッキングラボをつくってみる 5 Windows7をハッキングする編4(Metasploit Frameworkを使う中編）](https://qiita.com/kagirohi/items/70b2eef235cf548abd98#バックドアの設置)を参照してください。
### 手動で設置したバックドアの自動起動を無効化
手動でのバックドアの設置は、システム権限があるセッションのmeterpreterプロンプト上で、次のように行った。
```
reg setval -k HKLM\\software\\microsoft\\windows\\currentversion\\run -v backdoor -d 'C:\Windows\evil.exe'
```
バックドアの撤去（レジストリを編集してペイロードの自動起動を無効化する）するには、次を実行する。
``` :meterpreter >
reg deleteval -k HKLM\\software\\microsoft\\windows\\currentversion\\run -v backdoor
```

### run persistenceで設置したバックドアを撤去する
KaliLinux上で別に端末を立ち上げる。
```
cd /home/kali/.msf4/logs/persistence
ls *
```
![VirtualBox_kali-linux-2022.1-virtualbox-amd64_21_04_2022_06_29_54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535888/3d9c3bc5-2c22-0ab3-f396-cca127e85113.png)
ディレクトリと拡張子が.rcのファイルが確認できる。ディレクトリ名、ファイル名は「ホスト名_日付_数値列」となっている。各ファイルの内容を確認すると、

>rm C://Users//IEUser//AppData//Local//Temp//XFvmZJYZSTqe.vbs

> rm C://Users//IEUser//AppData//Local//Temp//MulSvr.vbs
reg deleteval -k 'HKLM\Software\Microsoft\Windows\CurrentVersion\Run' -v evOwBQvXbresAKC

記述されているコマンドを実行すると、バックドアを撤去することができる。
Windows側で「Sysinternals」の「Autoruns」を立ち上げ、バックドアとなっているvbsファイルを確認する。「XFvmZJYZSTqe.vbs」であることが確認できたので、`rm C://Users//IEUser//AppData//Local//Temp//XFvmZJYZSTqe.vbs`をmeterpreterプロンプト上で実行する。
```:meterpreter >
rm C://Users//IEUser//AppData//Local//Temp//XFvmZJYZSTqe.vbs
```
:::note
システム権限じゃなくても削除可能です
:::

Windowsを再起動する。
"exploit/multi/handler"でリバースシェルを待ち受けても応答なし。「Autoruns」からもvbsファイルが削除されていることが確認できた。バックドアの撤去完了。
## migrateによる隠蔽化
Windows7側で"evil.exe"を実行後に"exploit/multi/handler"でリバースシェルを待ち受ける。
migrateコマンドの引数に指定するプロセスは、現在の権限以下のものでないといけない。同一権限以下のプロセスを探すには、`ps`コマンドの出力結果の"User"に注目する。"explorer.exe"は同一権限になることが知られているので、これを利用。
```:meterpreter
getuid
ps | grep explorer.exe
```
migrateコマンドの引数に"explorer.exe"のPIDを指定する。
```
migrate <explorer.exeのPID>
```
Windows7のタスクマネージャ、Metaexploitの`ps`コマンドの実行結果から"evil.exe"が消えた。（隠蔽成功）

:::note warn
同書p271~272より
UACを機能を回避するモジュールなどsessionオプションを持つモジュールに、migrateで隠蔽化されたセッションを指定すると、攻撃に失敗する。
また、migrateしたセッションを閉じてから、新しいセッションでmigrateを試みるとエラーが出る。Windowsを再起動するしかない。
:::

:::note warn
「UACを機能を回避するモジュールなどsessionオプションを持つモジュールに、migrateで隠蔽化されたセッションを指定すると、攻撃に失敗する。」とあるが、やってみると接続から`getsystem`での権限昇格まで成功した。
:::

## システム権限でのセッションに隠蔽化
UACを回避→システム権限奪取→同一権限の"svchost.exe"のPIDを指定してmigrateする流れだが、管理者権限がとれていないmigrateを使ったセッションからのUAC回避ができる以上、解説は省略。

# 終わりに
migrateにより隠蔽化は、run persistenceよりも前のページで取り上げてほしかった。