序章
サイバー セキュリティ ベンダーと研究者は、PowerShell がサイバー攻撃者によってバックドアのインストール、 悪意のあるコードの実行、または企業内で目的を達成するためにどのように使用されているかを何年にもわたって報告してきました。セキュリティは、敵対者、研究者、ブルー チームの間のいたちごっこです。 PowerShell の柔軟性と機能により、従来の検出は困難かつ重要なものになりました。このブログ投稿では、FireEye が人工知能と機械学習を活用して、PowerShell を使用する攻撃者の水準を引き上げている方法を説明します。
この投稿では、次のことを学びます。
- 従来の「署名ベース」または「ルールベース」の検出エンジンでは、悪意のある PowerShell の検出が困難な理由。
- 自然言語処理 (NLP) を適用してこの課題に取り組む方法。
- 難読化されている場合でも、NLP モデルが悪意のある PowerShell コマンドを検出する方法。
- 攻撃者がセキュリティ ソリューションをバイパスするためのコストを増加させる一方で、検出エンジンのセキュリティ コンテンツのリリース時間を短縮する可能性があるという経済性。
バックグラウンド
PowerShell は、攻撃の実行に使用される最も一般的なツールの 1 つです。 FireEye Dynamic Threat Intelligence (DTI) Cloud から収集されたデータは、悪意のある PowerShell 攻撃が 2017 年を通じて増加していることを示しています (図 1)。

FireEye は、PowerShell の悪用を何年も追跡してきました。 2014 年、Mandiant のインシデント対応調査員は、PowerShell 攻撃で使用される戦術、技術、および手順 (TTP) と、PowerShellの悪用によって生成されたディスク、ログ、およびメモリ内のフォレンジック アーティファクトをカバーする Black Hat の論文を公開しました。 2016 年には、 PowerShell のログ記録を改善する方法に関するブログ記事を公開しました。最近では、 APT32に関する詳細なレポートで、図 2 に示されているように、この攻撃者が偵察とラテラル ムーブメントの手順に PowerShell を使用していることが明らかになりました。

悪意のある PowerShell コマンドの例を詳しく見てみましょう (図 3)。

以下は、 引数の簡単な説明です。
- -NoProfile – PowerShell エンジンの起動時に、現在のユーザーのプロファイル セットアップ スクリプトを実行しないことを示します。
- -NonI – -NonInteractive の省略形で、ユーザーにインタラクティブなプロンプトが表示されないことを意味します。
- -W Hidden – 「-WindowStyle Hidden」の短縮形で、PowerShell セッション ウィンドウを非表示で開始する必要があることを示します。
- -Exec Bypass – 「-ExecutionPolicy Bypass」の省略形で、現在の PowerShell セッションの実行ポリシーを無効にします (デフォルトでは実行が許可されません)。実行ポリシーはセキュリティ境界を意図したものではないことに注意してください。
- -encodedcommand – 次のテキストのチャンクが base64 でエンコードされたコマンドであることを示します。
Base64 でデコードされた部分には何が隠されていますか?図 4 は、デコードされたコマンドを示しています。

興味深いことに、デコードされたコマンドは、ステルス ファイルレス ネットワーク アクセスとリモート コンテンツ実行を明らかにします!
- IEXは、ローカル マシンで提供されるコマンドを実行するInvoke-Expressionコマンドレットのエイリアスです。
- new-objectコマンドレットは、.NET Framework または COM オブジェクト (ここではnet.webclientオブジェクト) のインスタンスを作成します。
- downloadstringは、コンテンツを <url> からメモリ バッファにダウンロードします (次にIEXが実行されます)。
同様の悪意のある PowerShell 戦術が、 CVE-2017-10271 を悪用して暗号通貨マイナーを配信する最近のクリプトジャッキング攻撃で使用されたことに言及する価値があります。この攻撃には、実行可能ファイルを直接ダウンロードするのではなく、PowerShell スクリプトを配信するためにエクスプロイトが利用されていました。この PowerShell コマンドは、ホスト上に実質的にゼロのファイル アーティファクトを残し、従来のアンチウイルスが検出するのを困難にするため、特にステルスです。
攻撃者が PowerShell を好む理由はいくつかあります。
- PowerShell は、Microsoft Windows で強力なシステム管理スクリプト ツールとして広く採用されています。
- ほとんどの攻撃者のロジックは、悪意のあるバイナリをインストールしなくても PowerShell で記述できます。これにより、エンドポイントのフットプリントを最小限に抑えることができます。
- 柔軟な PowerShell 構文により、シグネチャ ベースの検出ルールに組み合わせの複雑さが課せられます。
さらに、経済的な観点から:
- 不快なことに、攻撃者が PowerShell を変更して署名ベースのルールをバイパスするコストは、特にオープン ソースの難読化ツールを使用すると非常に低くなります。
- 防御的には、新しい脅威に対して手作りの署名ベースのルールを更新することは時間がかかり、専門家に限定されます。
次に、FireEye が PowerShell の脅威研究とデータ サイエンスを組み合わせてこの脅威に対抗し、攻撃者の水準を引き上げている方法を共有したいと思います。
悪意のある PowerShell を検出するための自然言語処理
機械学習を使用して、PowerShell コマンドが悪意があるかどうかを予測できますか?
FireEye の利点の 1 つは、FireEye のソリューションとサービスのグローバル展開から収集した高品質の PowerShell サンプルのリポジトリです。社内の PowerShell エキスパートと緊密に協力して、悪意のあるコマンドと、企業ネットワークで見つかった無害なコマンドで構成される大規模なトレーニング セットを作成しました。
PowerShell コーパスを確認した後、これが NLP の問題空間にうまく適合することにすぐに気付きました。 Amazon Alexa が音声コマンドを解釈するのと同様に、PowerShell コマンド テキストを解釈する NLP モデルを構築しました。
私たちが取り組んだ技術的課題の 1 つは、 同義語、言語学で研究される問題。たとえば、「NOL」、「NOLO」、および「NOLOGO」は、PowerShell 構文で同じセマンティクスを持ちます。 NLP では、ステミングアルゴリズムが単語を元の形式に減らします。たとえば、「Innovating」は「Innovate」にステミングされます。
図 5 に示すように、 trieと呼ばれる効率的なデータ構造を使用して、PowerShell コマンド構文用のプレフィックス ツリー ベースのステマーを作成しました。

私たちが開発した全体的な NLP パイプラインは、次の表にまとめられています。
NLP キー モジュール |
機能性 |
デコーダ |
エンコードされたテキストを検出してデコードする |
固有表現認識 (NER) |
IP、URL、電子メール、レジストリ キーなどのエンティティを検出して認識します。 |
トークナイザー |
PowerShell コマンドをトークンのリストにトークン化する |
ステマー |
トークンを意味的に同一のトークンにステム処理し、トライを使用 |
語彙ベクトライザー |
トークンのリストを機械学習に適した形式にベクトル化する |
教師あり分類器 |
二項分類アルゴリズム:
|
推論 |
予測が行われた理由の説明。アナリストが予測を検証できるようにします。 |
NLP パイプラインを介して前述の例をストリーミングする際の主な手順は次のとおりです。
- Base64 コマンドを検出してデコードする (存在する場合)
- <URL> などの Named Entity Recognition (NER) を使用してエンティティを認識します。
- クリア テキストと難読化されたコマンドの両方を含む、テキスト全体をトークン化する
- 各トークンを語幹化し、語彙に基づいてベクトル化します
- 教師あり学習モデルを使用して悪意のある可能性を予測する

さらに重要なことは、エンド ツー エンドの機械学習パイプライン (図 7) を確立したことです。これにより、再ラベル付けと再トレーニング、および製品への機械学習モデルのリリースを通じて、攻撃者と共に常に進化できるようになりました。

フィールドで検証された値
この機械学習モデルの実装と最適化に成功し、ホスト上でミリ秒単位で予測を行うことができる研究用エンドポイント エージェントに適合する最小限のフットプリントになりました。 2018 年を通して、この PowerShell 機械学習検出エンジンをインシデント対応エンゲージメントに展開してきました。初期のフィールド検証により、次のような悪意のある PowerShell 攻撃の検出が確認されました。
- Kovter などのコモディティ マルウェア。
- レッドチームの侵入テスト活動。
- 従来のシグネチャをバイパスした新しい亜種ですが、高い確率的信頼性を備えた機械学習によって検出されました。
PowerShell 機械学習検出エンジンによってもたらされる固有の値には、次のものがあります。
- 機械学習モデルは、精選されたコーパスから悪意のあるパターンを自動的に学習します。ブール式と正規表現に基づく従来の検出シグネチャ ルール エンジンとは対照的に、NLP モデルは運用コストが低く、セキュリティ コンテンツのリリース時間を大幅に短縮します。
- このモデルは、特定のパターンの暗黙的に学習された非線形の組み合わせによって、未知の PowerShell コマンドに対して確率論的推論を実行します。これにより、攻撃者がバイパスするコストが増加します。
このイノベーションの最終的な価値は、より広範な脅威の状況に合わせて進化し、敵に対する競争力を生み出すことです。
謝辞
謝辞:
- Daniel Bohannon、Christopher Glyer、Nick Carr による脅威研究のサポート。
- DTI 統計を提供してくれた FireEye Labs の Alex Rivlin、HeeJong Lee、および Benjamin Chang。
- Caleb Madrigal によるエンドポイント サポートの調査。
- FireEye ICE-DS チーム。
参照: https://www.mandiant.com/resources/blog/malicious-powershell-detection-via-machine-learning
Comments