
SessionGopherは、WinSCP、PuTTY、SuperPuTTY、FileZilla、Microsoft リモート デスクトップなどのリモートアクセスツールの保存されたセッション情報をWMIを使用して抽出するPowerShellツールです。リモートまたはローカルで実行できます。
Copyright 2017 FireEye、Brandon Arvanaghi(@arvanaghi)が作成
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
SessionGopher は、リモートアクセスツールの保存済みセッション情報を検出・復号する PowerShell ツールです。WMI 機能が組み込まれているため、リモートから実行できます。 最も有効な使い方は、Unix システム、ジャンプボックス、POS 端末に接続する可能性のあるシステムを特定することです。
SessionGopher は、HKEY_USERS ハイブをクエリして、ドメイン参加済みのマシンに一度でもログインしたすべてのユーザーを調査します。そして、PuTTY、WinSCP、SuperPuTTY、FileZilla、RDP の保存済みセッション情報を抽出します。WinSCP、FileZilla、SuperPuTTY の保存済みパスワードは自動的に抽出・復号されます。
Thorough モードで実行すると、すべてのドライブから PuTTY 秘密鍵ファイル(.ppk)を検索し、鍵そのものも含む関連する秘密鍵情報をすべて抽出します。また、リモートデスクトップ(.rdp)ファイルや RSA(.sdtid)ファイルも検索します。
-Thorough: すべてのドライブから PuTTY 秘密鍵(.ppk)、リモートデスクトップ接続(.rdp)、RSA(.sdtid)ファイルを検索します。
-o: データを .csv ファイルのフォルダに出力します
-iL: SessionGopher を実行するホストのリストが書かれたファイルを指定します。各ホストは改行で区切ります。-iL の後に対象ファイルのパスを指定します。
-AllDomain: SessionGopher が Active Directory でドメイン参加済みのシステムをすべてクエリし、それらすべてに対して実行します。
-Target: 対象とする特定のホスト。-Target の後に対象ホストを指定します。
. .\SessionGopher.ps1
Invoke-SessionGopher -Thorough
リモート実行する場合、-u および -p フラグを使ってリモートシステムの権限アカウントの資格情報を指定できます。-u と -p フラグを省略した場合、
SessionGopher はスクリプトを実行するアカウントのセキュリティコンテキストで実行されます(例:すでに DA アカウントでログインしている、ターゲットシステムのローカル管理者であるアカウントでログインしている、またはそれらのいずれかで runas を実行している場合は、資格情報を指定する必要はありません)。
Import-Module path\to\SessionGopher.ps1;
Invoke-SessionGopher -AllDomain -u domain.com\adm-arvanaghi -p s3cr3tP@ss
または
Import-Module path\to\SessionGopher.ps1;
Invoke-SessionGopher -iL computerlist.txt -u domain.com\adm-arvanaghi -p s3cr3tP@ss -o
または
Import-Module path\to\SessionGopher.ps1;
Invoke-SessionGopher -Target brandonArvanaghi_win7 -Thorough
これらのコマンドのいずれかに -Thorough を組み合わせることもできますが、リモートファイルシステム全体をクエリするため、処理時間が大幅に長くなることに注意してください。一度に少数のシステムのみをクエリする場合を除いて、-Thorough モードでの実行は推奨されません。
-o(CSV 出力)を追加してリモート実行すると、SessionGopher が見つけたすべてのセッションを蓄積し、その保存済みセッションが見つかった場所を正確に教えてくれるため、便利です。
SessionGopher に抽出したセッションの .csv をきれいにまとめたフォルダを作成させるには:
Import-Module path\to\SessionGopher.ps1;
Invoke-SessionGopher -AllDomain -o
...以上です。
HKEY_USERS 内のすべてのユーザーの保存済みセッション情報にアクセスするには、ローカル管理者権限が必要です。ローカル管理者権限がない場合でも、そのユーザーの保存済みセッション情報は取得できます。
[+] Digging on Win7-Arvanaghi ...
WinSCP Sessions
Session : [email protected]
Hostname : 198.273.212.334
Username : admin-anthony
Password : Super*p@ssw0rd
Session : [email protected]
Hostname : 204.332.455.213
Username : Freddy
Password : angelico1892
FileZilla Sessions
Name : BarrySite
Password : imr34llytheFl@sh
Host : 10.8.30.21
User : BarryAllen
Protocol : Use FTP over TLS if available
Account : BarryAllenAccount
Port : 22
PuTTY Sessions
Session : PointOfSaleTerminal
Hostname : 10.8.0.10
PuTTY Private Key Files (.ppk)
Path : C:\Users\Brandon Arvanaghi\Documents\mykey.ppk
Protocol : ssh-rsa
Comment : rsa-key-20170116
Private Key Encryption : none
Private Key : {AAABAEazxtDz6E9mDeONOmz07sG/n1eS1pjKI8fOCuuLnQC58LeCTlysOmZ1/iC4, g4HyRpmdKJGhIxj66/RQ135hVesyk02StleepK4+Tnvz3zmdr4Do5W99qKkrWI3D, T9GOxOIoR9Zc6j57D+fdesJq4ItEIxcQZlXC1F9KZcbXjSJ3iBmCsbG/aRJmMJNx,
nCMaZkySr4R4Z/E+l1JOzXaHh5WQ2P0K4YM1/6XG6C4VzDjvXwcY67MYsobTeCR2...}
Private MAC : b7e47819fee39a95eb374a97f939c3c868f880de
Microsoft Remote Desktop (RDP) Sessions
Hostname : us.greatsite.com
Username : Domain\tester
Microsoft Remote Desktop .rdp Files
Path : C:\Users\Brandon Arvanaghi\Desktop\config\PenTestLab-Win.RDP
Hostname : dc01.corp.hackerplaypen.com
Gateway : rds01.corp.hackerplaypen.com
Prompts for Credentials : No
Administrative Session : Does not connect to admin session on remote host
作成者: Brandon Arvanaghi(@arvanaghi)
このコードは当初 FireEye で開発されましたが、以降のアップデートは作者が FireEye 外で行っています。