2024年セキュリティの現状:競争が激化するAIの活用
先進的なサイバーセキュリティ対策を推進する組織がどのように課題を克服し、AIを活用してイノベーションを推進し、デジタルレジリエンスを強化しているかをご確認ください。
Splunk脅威調査チームは先日、悪質なPowerShellスクリプトの検出に役立つセキュリティコンテンツを生成するために、PowerShellのスクリプトブロックログに関するWindowsネイティブのイベントログを使用する方法を評価しました。この方法なら、PowerShellスクリプトの出力全体が「生の状態」で提供されるため、可視性をさらに向上できます。防御の強化に役立つソースには、モジュールログ、スクリプトブロックログ、トランスクリプトログの3つがあります。セキュリティコンテンツの生成では特に、スクリプトブロックログ(4104)に注目しました。このログを使用すれば、エンドポイントで実行されるPowerShellスクリプトを最も詳細に可視化できるためです。ただし、テストでの検証や本番環境で使用したい方、またはご興味のある方のために、3種類すべてのログを収集する方法もご紹介します。
コンテンツの生成を開始したとき、私たち調査チームは、新しい分析で使用するキーワードを洗い出すために作成したデータセットの評価方法が必要だと考えました。そこで、使用されているすべての標準フレームワーク、具体的にはEmpire、Cobalt Strike、Metasploit、Atomic Red Team、AtomicTestHarnessesを利用しました。スクリプトブロックログには大量のデータが記録されるため、新しい分析に使用するキーワードを絞り込みすぎないように注意しました。今回のリリースでは、4104イベントデータの検索に役立つハンティング分析を公開します。この検出では、不審なPowerShellの使用を最大限に検出できるように、2つのクエリー(Alex Teixeira氏提供)を結合しています。この検出は、こちらのセキュリティコンテンツリポジトリから入手できます。
私たちはデータを調べるうちに、各キーワードにスコアを追加するとより効果的であることに気づきました。その鍵を握っているのが各「eval」です。今回は、忠実度に基づいてスコアを設定しています。「$DoIt」はCobalt Strikeで使用される関数なので、スコアは4に設定しました。また、「IEX」などのキーワードは比較的よく使用されるので、スコアは2に設定しました。次の図に、疑わしいPowerShellスクリプトを検出するために使用しているスコアの例を示します。evalステートメントをコピー&ペーストすれば、新しいキーワードを簡単に追加できます。今回の例はすべてを網羅しているわけではありませんが、詳細な調査の出発点として役立つでしょう。
調査の手間をかけた甲斐あって、かなりの数の新しい分析を作成できました。これらを基に、GitHubのイシューまたはPRからコントリビューションを通じてカバー範囲を広げ、コミュニティに貢献していただけたら幸いです。
分析 |
Technique |
Tactic |
説明 |
T1059.001 |
デフォルトのPowerShell-Empireペイロードで常に使われる2つの値を検出します。 |
||
T1059.001 |
Mimikatzに関連するPowerShellスクリプトブロックコードでよく使われる文字列を検出します。 |
||
T1059.001、T1055 |
スクリプトブロック内でのGetProcAddressの使用を検出します。 |
||
T1059.001、T1027 |
スクリプトブロック内でのBase64の使用を検出します。 |
||
T1562 |
スクリプトブロック内で、AMSIを無効にするエンコードされたコマンドでよく使われるsystem.management.automation.amsiを検出します。 |
||
T1059.001 |
ドメインや信頼関係の列挙によく使われるコマンドを検出します。 |
||
PowerShell Loading .NET into Memory via System.Reflection.Assembly |
T1059.001 |
スクリプトブロック内で、悪質なPowerShellスクリプトの実行によく使われるsystem.reflection.assemblyの使用を検出します。 |
|
T1027.005 |
悪質なPowerShellスクリプトの実行によく使われるmutex関数を検出します。 |
||
T1059.001 |
イベントコード4104を介して、圧縮されたストリーミングデータを処理する不審なPowerShellスクリプトの実行を検出します。 |
||
T1140 |
スクリプトブロック内での、新規オブジェクトバックストアとしてのメモリーストリームの使用を検出します。 |
||
T1592 |
エンドポイントにインストールされているウイルス対策製品を調べる不審なPowerShellスクリプトの実行を検出します。 |
||
T1592 |
WMIでイベントクエリーを実行し、稼動中のプロセスまたはサービスを探す不審なPowerShellを検出します。 |
||
T1592 |
WMIでイベントクエリーを実行し、稼動中のプロセスまたはサービスを探す不審なPowerShellスクリプトの実行を検出します。 |
||
T1021.001 |
パブリックプロファイルで特定のローカルポートへの受信トラフィックを許可する不審なPowerShellコマンドを検出します。 |
||
T1114.001 |
エンドポイントで実行される既知のmailsniper.ps1関数を検出します。 |
||
T1490 |
WMIC PowerShellモジュールを使ってシャドーコピーを削除するPowerShellコマンドを検出します。 |
||
T1027.005 |
PowerShellのスクリプトブロックログを使って、smb1protocolの有効化を検出します。 |
||
T1546.003 |
永続化を確立するか権限昇格を実行するWMIイベントサブスクリプションを検出します。 |
PowerShellのログを有効にするには3つの方法があります。デプロイ方法によっては、または大規模なデプロイ環境では、レジストリかグループポリシーを使用するのがお勧めです。ラボ環境でのテストの場合は、どの方法でも問題ありません。
この方法は、デプロイまたはログインスクリプトを使用する場合に便利です。
PowerShellの動作ログは通常、次の場所にあります。
%SystemRoot%\system32\winevt\logs\Microsoft-Windows-PowerShell%4Operational.evtx
いずれのケースでも、Hurricane LabsではTim Ip氏が作成したスクリプトを参照し、流用、拡張しました。以下の機能を追加しています。
Invoke-SPLPowerShellAuditLoggingはこちらから入手できます。
Splunkユニバーサルフォワーダーで現在使用しているWindows inputs.confを更新するか、Invoke-SPLPowerShellAuditLoggingを使って入力ファイルを作成します。
[WinEventLog://Microsoft-Windows-PowerShell/Operational] source = XmlWinEventLog:Microsoft-Windows-PowerShell/Operational renderXml = 0 disabled = false index = win
[monitor://c:\pstransactions\] sourcetype = powershell:transcript disabled = false multiline_event_extra_waittime = true time_before_close = 300 index = win
`Invoke-SPLPowerShellAuditLogging -method CreateInputs`
より大規模な環境でポリシーを詳細に管理したい場合は、グループポリシー管理コンソールで新規オブジェクトを作成するか既存のオブジェクトを変更し、[コンピューターの構成] > [ポリシー] > [管理用テンプレート] > [Windowsコンポーネント] > [Windows PowerShell]に移動します。
ここで、目的のポリシーを有効にして、ログを開始します。重要な資産にのみ有効にすることも、必要であればすべての資産に有効にすることもできます。
この作業については、PowerShellログに関するさまざまな情報を参考にしました。主な情報源を以下に挙げます。
Atomic Red Team:Atomic Red TeamでInvoke-AtomicRedTeamを使って、PowerShellコマンドを簡単にシミュレートできます。まずは、こちらのWikiで詳細を確認してください。
ラボ設定または認可されたデバイスで、次のコマンドを実行して作業を開始します。
IEX (IWR 'https://raw.githubusercontent.com/redcanaryco/invoke-atomicredteam/master/install-atomicredteam.ps1' -UseBasicParsing);
Install-AtomicRedTeam -getAtomics -force
これにより、Invoke-AtomicRedTeamがインストールされます。その後、Atomic Red TeamからT1059.001を実行できます。
invoke-AtomicTest T1059.001
データが足りない場合は、AtomicTestHarnessesの使用を検討してください。
Out-ATHPowerShellCommandLineParameter -GenerateAllParamVariations -UseEncodedCommandParam -Execute
詳細は、オンデマンドのSplunk Tech Talk「Hunting for Malicious PowerShell using Script Block Logging (スクリプトブロックログを使って悪質なPowerShellを検出する)」でもご覧いただけます。
Splunkプラットフォームは、データを行動へとつなげる際に立ちはだかる障壁を取り除いて、オブザーバビリティチーム、IT運用チーム、セキュリティチームの能力を引き出し、組織のセキュリティ、レジリエンス(回復力)、イノベーションを強化します。
Splunkは、2003年に設立され、世界の21の地域で事業を展開し、7,500人以上の従業員が働くグローバル企業です。取得した特許数は1,020を超え、あらゆる環境間でデータを共有できるオープンで拡張性の高いプラットフォームを提供しています。Splunkプラットフォームを使用すれば、組織内のすべてのサービス間通信やビジネスプロセスをエンドツーエンドで可視化し、コンテキストに基づいて状況を把握できます。Splunkなら、強力なデータ基盤の構築が可能です。