PsKillについてのメモ

PsKillとは
Windows Sysinternalsより提供されている、プロセスをkillするためのコマンドライン・ツール。ローカルホストのプロセスだけでなく、リモートホストのプロセスも終了させることができる。

コマンドの書式は以下の通り。

Usage: pskill [- ] [-t] [\\computer [-u username] [-p password]] <process name | process id>

詳しくはこちらを参照。

実行の流れ

  • ローカルホストでPsKillを実行する。
  • ローカルホスト上のプロセスをkillする場合は、TerminateProcessを呼び出してプロセスを終了させる。
  • リモートホスト上のプロセスをkillする場合は、PSKLLSVC.EXEというファイルがリモートホストのADMIN$共有フォルダに作成され、PSKLLSVC.EXEを起動するためのWindows サービスがインストールされる。(サービス名: PSKLLSVC)
  • ローカルホストのPsKillから渡されたkill命令をリモートホストのPSKLLSVC.EXEが名前付きパイプ経由で受け取って、プロセスを終了させる。

さっとPsKill (MD5: BFFE1A4F100B09935765C40683378D4D) のバイナリを見てみる。ここではリモートホストのプロセスを終了させる際の流れに注目してみる。

PsKillのリソースセクションにKILLSVCというexeファイルが埋め込まれている。KILLSVCは後に抽出されてリモートホストのADMIN$共有フォルダに作成される。

上述したKILLSVC (PSKLLSVC.EXE)を起動するためのPSKLLSVCというWindowsサービスがリモートホストにインストールされる。

ローカルホスト側でpskllsvcという名前付きパイプが作成される。

WriteFileで名前付きパイプへデータの書き込みを行い、ReadFileで名前付きパイプからデータを読み込む。

リモートホストに作成されるPSKLLSVC.exeを確認してみる。

pskllsvcという名前付きパイプを作成し、ConnectNamedPipeでクライアントからの接続を待ち受ける。

ReadFileで名前付きパイプからデータを読み込み、WriteFileで名前付きパイプへデータを書き込む。

以上。

Leave a Reply

Your email address will not be published. Required fields are marked *