PowerShellはWindowsに標準搭載されるコマンドラインツールだが、OSレベルでの操作が可能というメリットがセキュリティの観点からはリスクになり得る。実際、PowerShellを悪用した攻撃手法なども登場している。この記事では、PowerShellの利点を整理した上で、セキュリティ上のリスクと、それを軽減する方法について解説する。
タスクの自動化や、構成管理の効率化に役立つPowerShell
Windowsに標準搭載されているPowerShellはコマンドの実行を通して、タスクの自動化やWindowsの構成管理を行うことができるコマンドラインツールだ。Windows 7以降のOSに搭載され、以前のOSで搭載されていたコマンドプロンプトの代替として利用されるようになっている。キーボードで操作するCUI(キャラクターユーザーインターフェース)の一つとして機能する。
PowerShellはコマンドプロンプトと同様に、コマンドを用いてのファイル・フォルダ移動が実行できる。コマンドレットと呼ばれるプログラムがあらかじめ用意されており、ファイルの移動や文字列の検索といった基本的な操作はコマンドレットで簡単に行うことができる。他にも、レジストリ、環境変数、ネットワーク変数なども編集できるので、サーバー管理にも活用できる。また、他のマイクロソフト社製品と連携し、VBAのようにOffice製品の操作を行う機能が提供されている。
PowerShellは.NETフレームワークをベースにしている。高級言語に近い文法でスクリプトが記述できるのが特徴で、条件分岐、繰り返し、配列、正規表現といった基本的な処理から、オブジェクト指向プログラミングまで対応する。簡易なスクリプトだけではなく、保守性のある高度なプログラムに拡張できる点もポイントだ。
PowerShell悪用で想定されるリスク
PowerShellはパソコンやサーバーの操作に役立つ一方、悪意のある攻撃者に狙われると、セキュリティ上の大きなリスクになり得る。それはPowerShellの構造上、セキュリティソフトによる検知が難しいことが理由だ。主に、検知を回避するためにPowerShellの難読化の機能を悪用した攻撃、添付されたスクリプトが別のスクリプトをダウンロード、さらにペイロードのダウンロードに至るような複数の段階に分けた攻撃、あるいはファイルレスマルウェアによる攻撃といった手口がある。ここではファイルレスマルウェアとランサムウェアを例に、PowerShellが悪用されるシナリオを解説する。
ファイルレスマルウェア
ファイルレスマルウェアはここ数年、世界的な規模で猛威を振るう「Emotet」と呼ばれるマルウェアが採用する攻撃手法であり、さまざまなセキュリティベンダーでも頻繁に注意喚起がなされている。一般的なマルウェアはメールの添付ファイルのような、ディスクに保存されるファイルに身を潜める。そのため、ウイルスソフトは疑わしいファイルを検索して、マルウェアを検知する。一方でファイルレスマルウェアでは、マルウェアはファイルとして存在しない。PowerShellを悪用し、メモリ上で実行されるので痕跡が残らず、従来のセキュリティ技術では検知が難しいという課題がある。
PowerShellを悪用するファイルレスマルウェアは、以下のような流れで実行される。
- ユーザーが悪意のあるメールやWebサイトに含まれるリンクをクリックする。
- コンピュータ―内のPowerShellでスクリプトが実行される。
- PowerShellによる動作でC&Cサーバーへデータが抜き出される。
- あるいは、他のサーバーからマルウェアがダウンロードされ、端末の感染に至る。
ファイルレスマルウェアの手法で攻撃を行うEmotetの場合、Wordファイルに組み込まれたマクロを有効化することで、悪意のあるコードをダウンロードするPowerShellが実行され、被害に至っている。
2018年には航空業界や石油業界を対象に標的型メールが送られる事例が続いていた。そのメールに添付されたファイルを開くと、PowerShell内でコマンドが実行され、マルウェアがダウンロードされる仕組みとなっていた。また、2020年には日本企業でも、ファイルレスマルウェアに起因する不正アクセスが発生している。
ランサムウェア
ランサムウェアにおいてPowerShellが悪用されたケースとして「PowerWare」と呼ばれる攻撃が知られている。Word形式のファイルにPowerShellを実行させるマクロを埋め込み、ランサムウェアのプログラムをダウンロードした上で、ディスクを不正に暗号化させ、身代金を要求する仕組みが用いられた。
Word形式であったため、正常なファイルとの判別がつきづらく、受信したユーザーが安易にマクロを有効化させてしまうリスクが高い。また、PowerShellが実行される間もファイルが保存されるような痕跡を残さないため、検知は非常に難しいとされる。
問題発生時に有効なPowerShellの実行ポリシー適用
PowerShellのセキュリティリスクを軽減するには、実行ポリシーを設定し、運用していくことが欠かせない。PowerShellの実行ポリシーとは、どのような条件でスクリプトの実行を許可するかを設定するものだ。具体的には、以下の設定が可能となる。
Restricted | すべてのスクリプト実行を禁止。 |
---|---|
All Signed | 署名があるスクリプトを許可。 |
Remote Signed | 端末内に保存されたスクリプト、または、インターネットからダウンロードしたもののうち、署名があるスクリプトは許可。 |
Unrestricted | 署名されていないスクリプトも含めて実行許可。インターネットからダウンロードしたものは明示的な許可が必要。 |
Bypass | すべてのスクリプトの実行を許可。 |
UnrestrictedやBypassはセキュリティ上の懸念があるため、推奨されない。スクリプトを開発・実行する管理担当者であれば、AllSignedかRemoteSignedの設定が想定されるが、署名されたスクリプトであっても悪意のあるものを実行するリスクは考慮する必要がある。また、一般ユーザーであれば、Restrictedにしておくのが安全な設定となる。ただし、すべてのポリシーに共通するのはコマンドラインを用いてスクリプトが実行されるリスクだ。そのためにも、運用において規則を定めるなどといった対策も欠かせない。
PowerShellの利用を制限するにはActive Directoryのグループポリシーを用いて、各端末におけるPowerShellの利用を一括で無効化する方法もある。企業・組織内では管理者権限で個別のユーザーでの利用を制限・禁止することも可能だ。PowerShellによる操作範囲を限定できるため、リスクが高いスクリプトの実行を禁止することで安全性が高まる。
PowerShell実行を制御してリスクを低減
企業・組織内では管理者がセキュリティ対策を講じても、個別のユーザーがPowerShellを実行するようなことがあれば、その対策もほとんど意味のないものとなりかねない。そのため、企業・組織内で利用ポリシーを設定する、あるいは、そもそも管理者権限を与えないという対策が必要となる。
また、防御が難しいファイルレスマルウェアなどのリスクを考慮し、問題発生時に素早く検知・対処できる備えも求められる。以下の対策は検知・対処に有効な施策として考えられる。
EDR導入で実行ログから検知
EDR(Endpoint Detection and Response)は各端末における不審なネットワークアクセスや設定変更等の状況を監視し、組織内に侵入した脅威を検知するソリューションである。PowerShellの悪用を検知するためには、EDRを導入し利用が想定されていないツールのログを検知する方法が考えられる。
パーソナルファイアウォールで外部通信を遮断
パーソナルファイアウォールはパソコンに導入できるファイアウォール製品であり、個々のアプリケーションごとに通信の許可・拒否を設定できる。このパーソナルファイアウォールを用いて、PowerShellが外部通信する場合に遮断する手法もある。
PowerShellを悪用した攻撃は、スパムメールなどに添付されたファイルが原因となる。そのため、疑わしいメール・ファイルは開かないといった基本的なセキュリティ対策を徹底することも重要だ。PowerShellの管理担当者も含め、適切にセキュリティリスクを把握しておくことは、実施するべき対策の一つとなるだろう。
PowerShellはWindowsに標準搭載され、OSを容易に制御できる点がメリットとされてきたが、そのメリットが転じて攻撃者にとっても攻撃を仕掛ける際に都合のよいものとなってしまっている。今回紹介した対策を参考に、適切なポリシーを設定して防御を固めるようにしたい。