サイバー犯罪者がPowerShellスクリプトを悪用する5つの手口

サイバーセキュリティの世界では、常に機密情報を巡る激しいせめぎ合いが、サイバー犯罪者と企業の間で展開されています。サイバー犯罪者は機密データに不正にアクセスするために、企業は機密データを保護するために、それぞれの陣営が自由に最適なツールを選択します。その中でも、PowerShellは攻撃側と防御側の両方で広く使用されているツールです。この記事では、PowerShellがサイバー攻撃においてどのように使用されているかを解説します。

PowerShellとは?

PowerShellを単なるコマンドラインインタープリターとみなすことは、その機能を過小評価していることになります。PowerShellは、コマンドプロンプトのようなシェルの機能をすべて備えているだけでなく、管理者がタスクを自動化するためのスクリプト言語としても使用されています。Active Directoryを例に挙げると、手動でActive Directoryの管理を行えば何時間もかかります。一方で、PowerShellスクリプトまたはコマンドを1つ活用すれば大量の操作を一括で実行できます。Active Directory管理センターやActive DirectoryユーザーとコンピューターなどのGUIツールよりも、PowerShellの方が多くの管理者に好まれています。

図1:PowerShellのウィンドウ

PowerShellスクリプトには、さまざまな要素が関係しています。この記事で説明する概念をより深く理解するために、PowerShellスクリプトに関わる3つの重要な要素を詳しく見ていきましょう。

  • コマンドレット(cmdlet):PowerShellは、コマンドレットと呼ばれる軽量のコマンドを使用します。コマンドレットは通常、「動詞-コマンド」または「動詞-名詞」という形式で記述され、その独自の形式により簡単に見分けられます。たとえば、Active Directoryのユーザーアカウントを検索するコマンドレット「Search-ADAccount」は、「Search」が動詞で「ADAccount」が名詞という形式になっています。コマンドレットは、一般的なコマンドと同様に、コンピューターに「何をするべきか」を指示する機能を持っています。
  • モジュール:モジュールとは、コマンド、コマンドレット、スクリプト、関数などを特定の目的のためにパッケージ化したものです。モジュールは、コード、モジュールを動作させるための補助的なスクリプトやヘルプファイル、マニフェストファイル、ディレクトリの4つの主要な要素で構成されています。マニフェストファイルは、目録のようにモジュールの内容を一覧表示し、その処理方法を定義します。
  • トランスクリプト:トランスクリプトは、PowerShellセッション中に実行されたコマンドとその出力内容をすべて記録する機能です。トランスクリプトを生成するには、管理者やユーザーが機能を有効にする必要があります。トランスクリプトの有効化は、PowerShellコマンドか、グループポリシーの変更によって実行できます。コマンドを使用する場合は、Start-transcriptコマンドで記録を開始し、その後記録を終了するためにStop-transcriptコマンドを入力します。この2つのコマンドの間に実行されたすべての内容が、My Documentsフォルダにテキストファイルとして格納されます。グループポリシーの変更によってトランスクリプトの有効化する方法については、この記事の後半で説明します。

サイバー攻撃者がPowerShellを使用してサイバー攻撃を実行する5つの方法

管理者に重宝されるPowerShellですが、追跡が難しいため、ハッカーが攻撃に悪用するツールとしても知られています。PowerShellは、Windows環境においてデフォルトで許可リストに登録されています。そのため、サイバー犯罪者がPowerShellを使えば、比較的容易に特権を昇格して悪意のあるスクリプトを実行できます。

PowerShellは、主に攻撃者が侵入に成功した後に用いるツールです。PowerShellは多くのユーザーアカウントでデフォルトで使用可能になっており、悪用されやすくなっています。ハッカーがネットワークへの侵入に成功すれば、管理者権限でのプログラム実行や、わずか数回の簡単なコマンドによる特権昇格が可能になってしまいます。以下では、サイバー犯罪者がPowerShellを使用してサイバー攻撃を実行する5つの方法をご紹介します。

  1. 1. PowerShellスクリプト: MITRE ATT&CK®フレームワーク では、PowerShellは「コマンドとスクリプトインタープリター(Command and Scripting Interpreter)」に分類されるサブテクニックの1つです。サイバー犯罪者は多くの場合、目的の情報を窃取する手段、または悪意のあるコードをリモートで実行する手段として、PowerShellコマンドレットを悪用します。また、ディスクにファイルを保存することなく、メモリー内でマルウェアをダウンロード・実行する際にもPowerShellが使用されます。サイバー攻撃に使われるPowerShellコマンドレットとしては、Invoke-CommandStart-Processなどが挙げられます。Invoke-Commandはリモートでコマンドを実行する際に、Start-Processはローカルでアプリケーションやプロセスを実行する際に使用されます。
  2. 2. ドメイン検出: 企業ネットワークへの侵入後、攻撃者はローカル管理者権限で特定のコマンドレットを実行することで、既存のドメイン、グループ、ユーザーアカウントやコンピューターアカウントのリストを取得できます。その後、アカウントやグループに割り当てられた権限をリスト上で確認し、次に侵害する対象を選定します。Windows環境で攻撃者がよく悪用するコマンドレットには、Get-ADDomain (ディレクトリ内のドメイン情報を取得)、Get-ADUser(ディレクトリ内のユーザー情報を取得)、 Get-ADComputer(ディレクトリ内のコンピューター情報を取得)、Get-ADGroupMember(特定のグループに属するユーザーの一覧を取得)などがあります。このようなコマンドレットを実行すると、各オブジェクトに関する多くの情報を取得できます。特に Get-ADComputerを使用すると、各ホストの詳細な情報が出力されます。
  3. 3. 特権昇格:PowerShellへのアクセス権限があれば、権限の昇格を簡単に実行できます。前述のとおり、攻撃者はローカル管理者になりすまし、取得したコンピューターの一覧の中から攻撃対象を選びます。その後、Get-Aclコマンドレットを実行して、標的のアクセス制御リスト(ACL)を確認します。
    権限の一覧を取得した後、攻撃者は標的のコンピューターに対して高い権限を持っているユーザーグループを探します。そして、 Get-ADGroupMemberコマンドレットを使用し、グループに属するメンバーの情報を取得します。次いで、そのグループの中に、攻撃者が既にアクセス権を持っているアカウントがないかを調べます。該当するアカウントを見つけ、乗っ取りが成功すれば、攻撃者は PS-Execコマンドを使って、標的のコンピューター上で悪意のあるスクリプトを実行します。

  4. 4. 水平展開:水平展開とは、最初のホストを侵害した後、攻撃者が別のホストを狙ってネットワーク内を移動する攻撃手法のことです。一般的な水平展開では、WinRM(Windows Remote Management)か、Cobalt Strikeのいずれかが使用されます。WinRMは、すべてのWindowsマシンに組み込まれているリモート接続用のツールです。一方、Cobalt Strikeは、攻撃シミュレーションに使用されるペネトレーションテスト(侵入テスト)ツールです。
    PowerShellを使用した水平展開は、次の2つの方法で行われます。

    • ネットワークに侵入した後、攻撃者はローカル管理者権限でPowerShellを実行し、自身の権限を高いレベルに引き上げます。その後、PS-Execコマンドを使用して別のホストでスクリプトを実行することにより、最終的にリモート接続で特権アクセスを行います。
    • 攻撃拡大の足掛かりとなるクライアントに接続する別の方法として、攻撃者はWinRMを使用することがあります。WinRMを使用して別のクライアントに接続するには、接続先のクライアントでリスナーが有効になっている必要があり、リスナーの有効化はPowerShellで実施できます。WinRMの代わりとして、攻撃者がCobalt Strikeで攻撃を図っている場合は、PowerShellを使用してCobalt Strikeを起動できます。
  5. 5. ファイルレスマルウェア:ファイルレスマルウェアは、従来のマルウェアのように悪意のある実行可能ファイルではなく、標的のマシン上のネイティブツールを利用します。ファイルレスマルウェアはハードディスクドライブではなく、コンピューターのメモリー内で実行されるため、検知が困難です。ファイルレスマルウェアを実行する際には、攻撃の追跡を回避しやすいPowerShellがよく使用されます。攻撃者は、リモートにある攻撃対象のシステム上でコマンドを実行し、ファイルレスマルウェアを動作させるために、PowerShellのInvoke-Commandコマンドレットを使います。

WindowsシステムにおけるPowerShellのログ機能

Windowsには、PowerShellのアクティビティを追跡するためのログ機能が3つ用意されています。

  • モジュールログ:PowerShellでどのモジュールが起動されたかを追跡します。PowerShellに搭載されているActive Directoryモジュールを例として取り上げてみましょう。IT管理者がPowerShellを使用してユーザーの作成や、グループポリシーオブジェクトの変更を行うと、Active Directoryモジュールがバックグラウンドで実行されます。モジュールログ(イベントIDは4103)は、このようなモジュールの実行を記録します。モジュールログには、どのモジュールが実行されたかの情報は記録されますが、どのコマンドが実行されたかは正確に記録されない可能性があります。
  • スクリプトブロックログ:スクリプトブロックは、一括で実行できるスクリプトやコマンドレットのまとまりです。基本的に、中括弧で囲って記述されます。スクリプトブロックログ(イベントIDは4104)には、スクリプト全体、実行されたコマンド、実行したユーザーが記録されます。
  • トランスクリプトログ:トランスクリプトには、PowerShellのセッション中に実行されたスクリプト全体が記録されます。ログファイルは、「PowerShell_transcript」で始まる名前のテキストファイルとして、ユーザーのドキュメントフォルダ内に保存されます。セッション中に実行されたスクリプトのメタデータやタイムスタンプが記録されるため、フォレンジック分析の際に役立ちます。トランスクリプトログに実行されたスクリプト全体が記録されますが、生成される多くのデータはモジュールログとスクリプトブロックログにも記録されます。

PowerShellのログ機能は、特定のマシンに対してはローカルグループポリシーエディターで、ドメイン内のユーザーグループやOU(組織単位)に対してはグループポリシー管理エディターで有効化できます。以下では、グループポリシー管理エディターを使用した手順を6つの簡単なステップで紹介します。

  1. 1.[グループポリシー管理エディター]を開きます。

    図2:グループポリシー管理エディター

  2. 2.[コンピューターの構成]または[ユーザーの構成]の配下にある[管理用テンプレート]をクリックします。
  3. 3.[Windows コンポーネント]をクリックします。
  4. 4. 下にスクロールして[Windows PowerShell]をクリックします。
  5. 5.有効にするPowerShellログを選択します。ここではスクリプトブロックログを有効にします。
  6. 6.[PowerShellスクリプト ブロックのログ記録を有効にする]をダブルクリックします。[有効]ラジオボタンを選択して[適用]をクリックします

    他のPowerShellログの生成についても、同様の手順で有効にできます。大量のイベントログが生成されるため、PowerShellのログ機能を無効にしている組織が多いです。しかし、サイバーセキュリティのベストプラクティスとして、可能なら3種類すべて、難しければ少なくともスクリプトブロックのログ記録だけでも有効にすることを推奨します。

SIEMソリューションのActive Directory監査機能を活用したPowerShellの監査

IT管理者にとって、大量に生成されるイベントログを管理し、PowerShellスクリプトの実行状況を把握することは容易ではありません。そこで、Active Directoryの監査機能を備えたLog360などのSIEMソリューションを活用すれば、次のように管理業務を効率化できます。

  • モジュールログとスクリプトブロックログのレポートを活用すれば、ネットワーク上で悪意のあるコードが実行されていないかを監視できます。

    図3:ManageEngine Log360のモジュールログのレポート

    図4:ManageEngine Log360のスクリプトブロックログのレポート

  • PowerShellプロセス追跡レポートを活用すれば、PowerShellで実行されたすべてのプロセスを追跡できます。

    図5:ManageEngine Log360のPowerShellプロセス追跡レポート

  • アラート機能を活用すれば、SMSやメールでセキュリティアラートを即座に受信できます。

    図6:ManageEngine Log360のアラートプロファイル構成機能

  • 悪意のあるプロセスが検知され、アラートが起動された場合は、自動的にスクリプトを実行し、そのプロセスを強制終了できます。

    図7:ManageEngine Log360のスクリプトの実行機能

Log360を活用したPowerShellの監査について詳しく知りたい方は、 オンライン相談窓口にお問い合わせください。さらに、 30日間無料の評価版をダウンロードして、Log360をお試しいただくことも可能です。

Log360でPowerShell経由のサイバー攻撃をリアルタイムで検知!