MITRE ATT&CKからセキュリティ対策を読み解く【第2回 永続化編】
サイバーセキュリティ業界でよく耳にするMITRE ATT&CK。MITRE ATT&CKとは、サイバー攻撃で使用される戦術と手法を体系的にまとめたナレッジベースです。 これを読み解くことによって、サイバー攻撃の手法とその対策を理解することができます。 今回は、前回のフィッシングのような手段で侵入した攻撃者が、まず行おうとする「永続化」について解説します。
目次
ATT&CK V9
本題に入る前に……MITRE ATT&CK のバージョン9が2021年4月29日にリリースされましたね。
以下のような変更がありました。
参考URL(英語):https://medium.com/mitre-attack/attack-april-2021-release-39accaf23c81
- ATT&CK検出のためのデータソース(情報源)の記述の改良
- macOSに対する ATT&CK Technique の更新
- AWS、Azure、GCPについて、IaaSとして扱いを統合
- 攻撃を受けるプラットフォームとして、コンテナを追加
データソースの記述の改良は、これまで簡単なデータソース名のみでしたが、構造化されたことにより情報が詳細になり、また、GitHub上のyaml形式のファイルへの参照となったことで、プログラムから扱えるようになりました。
これにより、解析プログラムからATT&CKの情報と、検出される痕跡データを結び付けやすくなります。
今年はさらに、Linuxの記述の拡充、ICSドメインへのATT&CKのEnterpriseドメインとの関連付け、モバイル機器へのATT&CKの拡充などが計画されています。
なお、本ブログの記載は、V8に基づいておりますのでご承知ください。
永続化とは
「永続化(Persistence)」(TA0003)は、MITRE ATT&CK のTactics(戦術)の一つです。ATT&CKでは12種類のTacticsを定義しており、攻撃者は目的を達成するため、個々の攻撃手法(Techniques)を組み合わせ、一連の攻撃を行います。
Tactics(戦術) | 概要 |
初期アクセス(Initial Access) | ネットワークに侵入しようとするしている。 |
実行(Execution) | 悪意のあるコードを実行しようとしている。 |
永続化(Persistence) | 不正アクセスする環境を確保しようとしている。 |
権限昇格(Privilege Escalation) | より高いレベルの権限を取得しようとしている。 |
防衛回避(Defense Evasion) | 検知されないようにしようとしている。 |
認証情報アクセス(Credential Access) | アカウント名とパスワードを盗もうとしている。 |
探索(Discovery) | アクセス先の環境を理解しようとしている。 |
水平展開(Lateral Movement) | アクセス先の環境を移動しようとしている。 |
収集(Collection) | 目標に関心のあるデータを収集しようとしている。 |
コマンドアンドコントロール(C&C)(Command and Control) | 侵害されたシステムと通信して制御しようとしている。 |
持ち出し(Exfiltration) | データを盗もうとしている。 |
影響(Impact) | システムとデータを操作、中断、または破壊しようとしている。 |
攻撃者は重要な情報を盗み出そうとしますが、スピアフィッシングで侵入に成功した時点では、まだ盗み出せるかどうかがわかりません。
フィッシングでうまくユーザをだましてプログラムを起動させることができたとしても、そのプログラムをユーザが手動で終了したり、ログアウトしたりしてしまえば、チャンスはその一度きりしかありません。
攻撃者はその一回のチャンスで、まずは活動を継続するための足掛かりを作ろうとします。「橋頭堡を築く」……攻撃するための拠点づくりですね。
攻撃用のプログラムをずっと動かし続けたり、何かのきっかけで何度も起動されるように設定できれば、侵入したマシンで継続的に活動することができます。
その「ずっと動かし続ける」「何度でも起動されるように設定する」という戦術:Tactic が「永続化」です。
攻撃者側のプログラムが動いている時間が長くなれば、盗み出す価値のある情報の発見や、権限を昇格するための脆弱性の探索などのチャンスが増え、次の活動につなげていくことができます。
永続化で使われる ATT&CK Technique
永続化で使われる手法は、ATT&CK では18項目(細分類であるSub-Techniqueを除く)挙げられています。
今回は、Windows にて、侵入後にまず行われる、ユーザ権限で実行可能な手法に絞ってご紹介します。
ログオン時の自動実行(T1547)
ユーザが Windows にログオンしたときに、自動的にプログラムが実行されるように設定します。
レジストリRunキーやスタートアップフォルダにて、攻撃者のプログラムが起動されるように設定したり(T1547.001)、既にスタートアップに登録されているショートカットを改竄して攻撃者側プログラムを起動するようにする(T1547.009)などの手法があります。
ログオン時の初期化スクリプト(T1037)
Windows では、ユーザのログオン時に自動実行するスクリプトを指定できるので、そこに攻撃者側のプログラムを設定します。
ブラウザ拡張(T1176)
攻撃者が作成した、Chrome などのブラウザ向け拡張アドオンを登録し、ブラウザが起動するたびにそのアドオンが起動するようにします。
イベント起動による実行(T1546)
Explorer のファイル関連付けを変更することで、下記のようなことを仕掛けます。
- 正規のプログラムを起動する前に攻撃者側のプログラムを経由して起動(T1546.001)
- 攻撃者側が作成したスクリーンセーバーを登録し、ユーザが離席している間だけ攻撃者側プログラムが活動できるようにする(T1546.002)
- PowerShellプロファイル(PowerShell 起動時に必ず起動するプログラム)を登録する(T1546.13)
- より高度には、WMIイベントのサブスクリプションを登録し、システム中の状態変化に応じて攻撃者側プログラムが起動するようにする(T1546.003)
Office アプリケーションのスタートアップ(T1137)
下記の方法で、Officeアプリケーション利用時に攻撃者側のプログラムが起動するように仕掛けます。
- 攻撃者側がマクロを仕込んだ Office テンプレートをデフォルトのテンプレートの代わりに登録(T1137.001)
- Office プログラムの非公開のテスト機能のためのDLLを登録(T1137.002)
- 攻撃者側のプログラムを仕込んだ Outlook のルール、フォームを追加(T1137.003~5)
実行フローのハイジャック(T1574)
これは、ユーザが正規のプログラムを起動しようとするとき、攻撃者側が用意したプログラムを起動させたり、正規のライブラリ(DLL)ではなく、攻撃者側が用意したライブラリを読み込ませたりするものです。
下記その手法の一例です。
- PATH 環境変数を書き換え、攻撃者が作成した同名プログラムを起動させる(T1574.007)
- 空白を含むパスの不適切な扱いによりC:¥Program.exe のような実行ファイルを起動させる(T1574.009)
- ターゲットとするプログラムのすぐ横にそのプログラムが利用するEXEやDLLと同名の攻撃者側ファイルを置く(T1574.002/008)
- ターゲットとするプログラムのアプリケーションマニフェストを改竄し、攻撃者作成のDLLを読み込ませる(T1574.001)
これらの Technique 中、実行するものが EXE、DLL の場合、アンチウィルスに検知されてしまう可能性が高くなります。
また、EXE や DLL の添付ファイルやダウンロードは、アンチウィルスに比較的厳しくチェックされるので、最近では、システム(Windows)内部に元からあるコマンドを利用し、スクリプトを実行することが多くなってきています。
スクリプト実行は、「実行」Tacticsに含まれる「コマンドとスクリプトの実行環境」(T1059)が主に該当します。
スクリプトはバイナリの実行可能ファイルほどではないですが、外部との通信などを含め、様々な活動に利用可能です。前回フィッシングでも、危険な拡張子の中に、スクリプトファイルが含まれていましたが、永続化などの後続の攻撃段階でもよく利用されます。
DLL、EXE 等をスクリプト中に難読化テキストとして埋め込み、スクリプトで難読化解除して取り出し、DLL、EXEとして実行可能にする、ということも行われ、攻撃の手を広げることのできる危険なTechniqueです。
永続化を検出する方法
永続化で使われる Technique の痕跡が残る可能性のある検出項目(DataSource)を列挙すると、以下のようになります。
- API monitoring
- Authentication logs
- Binary file metadata
- Browser extensions
- DLL monitoring
- Environment variable
- File monitoring
- Loaded DLLs
- Netflow/Enclave netflow
- Packet capture
- Process command-line parameters
- Process monitoring
- Process use of network
- System calls
- WMI Objects
- Windows Registry
- Windows event logs
多いですね!
これでは、およそ考えつく痕跡情報のほとんど全てという状況です。
やみくもに全部モニタするのは無理がありますし、記録ログ量も多くなってしまって、攻撃者の行動を正常な操作と区別するのは困難です。
そこで要所要所を監視することを検討する必要が出てきます。
ATT&CK では、各Techniqueに対して、「Detection」として検出のポイントが示されているものがあり、また参考URLの記載を見て検出ポイントを抽出することができます(最初に示したように、V9からは、これらについての扱い方が変わりました)。
以下に、それらから抽出した、永続化に関係する設定変更の検知と、実行時の検知方法を示します。
なお、以下の痕跡は、ほぼ全てエンドポイント(エンドユーザ側端末)で検出する必要があり、Window 監査ログで取得できない場合は、何等かのモニタリングエージェント(例えば、Windows Sysinternalsのsysmon等)が必要になります。
設定変更の検知
以下の各検出ポイントを監視します。
検出対象 | 監視対象 | 監視項目 |
レジストリRunキー | レジストリ |
HKCU/HKLM¥Software¥Microsoft¥Windows¥CurrentVersion¥Run HKCU/HKLM¥Software¥Microsoft¥Windows¥CurrentVersion¥RunOnce |
スタートアップフォルダ | フォルダ |
%AppData%¥Microsoft¥Windows¥Start Menu¥Programs¥Startup |
ショートカットの改竄 | ファイル |
%USERPROFILE%Desktop¥*.lnk |
ログオン時の初期化スクリプト | レジストリ |
HKCU¥Environment¥UserInitMprLogonScript |
ブラウザ拡張(Chrome) | フォルダ |
%LocalAppData%¥Google¥Chrome¥User Data¥Default¥Extensions |
ブラウザ拡張(FireFox) | フォルダ |
%AppData%¥Mozilla¥Firefox¥Profiles¥プロファイル名¥extensions |
ブラウザ拡張(Edge) | フォルダ |
%LocalAppData%¥Microsoft\Edge¥User Data¥Default¥Extensions |
ファイル関連付けの操作 | レジストリ |
HKCU¥Software¥Microsoft¥Windows¥CurrentVersion¥Explorer¥FileExts |
悪意のあるスクリーンセーバー | レジストリ |
HKCU¥Control Panel¥Desktop の SCRNSAVE.exe、ScreenSaveActive、ScreenSaverIsSecure、ScreenSaveTimeout 各値 |
PowerShellプロファイル |
フォルダ ファイル |
$PsHome¥Profile.ps1 $PsHome¥Microsoft.{HostProgram}_profile.ps1 |
WMI イベントの登録 | ツール |
sysmonのイベントID 19, 20, 21 |
Office テンプレートの更新 | レジストリ |
HKCU¥Software¥Microsoft¥office¥word¥options¥GlobalDotName |
テンプレート指定レジストリの更新 | ファイル |
%AppData%¥Microsoft¥Templates¥Normal.dotm |
Office TEST DLL 読み込み指定 | レジストリ |
HKCU¥Software¥Microsoft¥Office test¥Special¥Perf |
Outlook のルール、フォームの追加 | レジストリ |
HKCU¥Software¥Microsoft¥Office¥Outlook¥Security¥ |
PATH環境変数の変更 | レジストリ |
HKCU¥Environment |
中途半端なパスの類似実行ファイル | ファイル |
C:¥Program.exe |
上記の設定情報の更新頻度は高くないと考えられるので、Windows監査ログによって、比較的低い負荷で行える可能性があります。
これらの記録について、正常な操作と区別するには、以下の観点で確認する必要があります。
- システムやソフトウェアの更新タイミングに合ったものかどうか。
- 更新を行ったプロセス、ユーザは信頼できるものか。
-
登録されたスクリプトやプログラムが信頼されうるものか。
通常正規のプログラムやスクリプトが置かれている場所かどうか。
ユーザ権限で書き込み可能なディレクトリのものではないか。
実行時の検知
上記のような設定変更が検知できなかった場合、実行された時に検知できれば良いのですが、それは実は困難です。
なぜなら、起動されたプロセスについて、上記の各ATT&CK Techniqueで起動されたものかどうかを簡単に区別する方法がないため、全てのプロセスの実行ファイルパスやパラメータを見て、悪意のあるものと正規のものを区別して検出する必要があるからです。
しかし、もし悪意のあるプロセスを正規のものと区別できれば、永続化だけではなく、色々な攻撃段階(ATT&CK Tactics)での検出に利用できます。
ここでちょっと考えてみましょう。
実行されるパターンは、以下のようになります。
-
攻撃者側が持ち込んだもの、あるいはそこから派生したものを実行可能ファイル(EXE)として実行する。
なお、持ち込んだものとその派生ファイル(名前の変更、難読化や暗号化の解除など)を合わせて、広い意味で「ペイロード」と呼ばれます。 - ペイロードを正規のプログラムにDLLとして読み込ませる。
- ペイロードをスクリプトとして実行させる。
- ペイロードをOfficeファイルやブラウザ拡張として読み込ませ、実行させる。
ペイロードであるかどうかは、ファイルがメール添付やブラウザからのダウンロードであるかどうか、その後の難読化・暗号化解除の処理によるファイルの読み書き、移動、コピー、名前の変更などによる派生ファイルであるかをトレースしなければならず、プロセスとファイル操作について、大量の記録を収集する必要があるので、やはり容易ではありません。
一方、先にも述べたように、攻撃者はなるべく検知されないように、Windows内にあるコマンドを利用して、スクリプトとして実行させるパターンが増えています。
ということは、その実行を検知し、悪意のあるものと正規のものを区別できれば有効です。
スクリプトの実行環境としては、以下のようなものがあります。
- powershell.exe(PowerShell)
- cscript.exe または wscript.exe
- cmd.exe(コマンドプロンプト)
- mshta.exe
- wmic.exe
- word.exe、excel.exeなどOfficeアプリケーション
Officeアプリケーションは別として、上記の中で一般のエンドユーザが日常的に起動するものはありませんよね?(古くからの Windowsユーザであれば、コマンドプロンプトは使うかも知れませんが……)
自組織内のエンドユーザが、それらを直接使う機会が稀なのであれば、その起動とコマンドラインパラメータから、正規の実行プロセス(システムやアプリケーションのアップデートなどメンテナンス時に起動される)と、悪意のあるものを区別できると思われます。
Office アプリケーションについては、マクロが悪意のある行動を起こすときは別プロセスを起動したりする場合があるので、Officeアプリケーションの子プロセスの起動を監視すると、悪意のある活動を検出できる可能性があります。
監視対象がこれらに絞られれば、全プロセスを検知するよりも効率的に検出できる可能性があります。
リスク低減・防御
永続化を防ぐ手段としては、以下のようなものがあります。
- まずは、フィッシングにひっかからないようにする。(前回のお話)
- VDI 環境とし、毎回環境がリセットされ、設定変更が永続しないように構成する。
-
一般のユーザ権限にて、上に挙げたスクリプトを実行できるプログラムの起動を禁止する。
・業務内容に応じて、ユーザをグループに分けて、プログラムの起動を制限する。
・アプリケーションのインストールやアップデート時などにスクリプト実行が必要な場合がありますが、エンドユーザでは行わず、組織の端末管理として別のアカウントで行うようにする。 -
Officeアプリケーションは禁止できないので、マクロ起動を制限する。
・スピアフィッシングでは、設定を回避するような手順をソーシャルエンジニアリングで指示してきたりもしますので、これも一般ユーザに対してポリシーで禁止しておいた方が安全です。
まとめ
スピアフィッシングをきっかけに、永続化によって攻撃者側プログラムが被害者のマシンに常駐するようになります。
今回は、まだ管理者権限は取られていないという想定なので、できることは限られています。
しかし、永続化した状況の中で攻撃者は、あの手この手で、脆弱なアプリケーションが動いていないか調べたり、管理者権限を取得(権限昇格)しようとしたりし始めます。
さらにこれらのプログラムは、C&C(Command and Control)サーバーと通信し、指令を受けたり、調べた環境で有効な追加の攻撃ツールをダウンロードしたりするかも知れません。
このように、永続化により足掛かりを作られてしまうと、色々な活動を許してしまうことになるので、この段階でうまく阻止・検出できることが望ましいです。