Adversaries may gain persistence and elevate privileges in certain situations by abusing PowerShell profiles. A PowerShell profile (profile.ps1) is a script that runs when PowerShell starts and can be used as a logon script to customize user environments. PowerShell supports several profiles depending on the user or host program. For example, there can be different profiles for PowerShell host programs such as the PowerShell console, PowerShell ISE or Visual Studio Code. An administrator can also configure a profile that applies to all users and host programs on the local computer. (Citation: Microsoft About Profiles)
Adversaries may modify these profiles to include arbitrary commands, functions, modules, and/or PowerShell drives to gain persistence. Every time a user opens a PowerShell session the modified script will be executed unless the -NoProfile flag is used when it is launched. (Citation: ESET Turla PowerShell May 2019)
An adversary may also be able to escalate privileges if a script in a PowerShell profile is loaded and executed by an account with higher privileges, such as a domain administrator. (Citation: Wits End and Shady PowerShell Profiles)
T1504は「PowerShell Profile(PowerShellプロファイルの悪用)」として定義されている、Windows環境における非常に強力かつ stealth(隠蔽性)の高い自動実行・永続化手法です。
PowerShellが起動する際に自動読み込みされる設定スクリプト(プロファイル)を改ざんし、「ユーザーや管理者がPowerShellを開くたびに、裏でマルウェア(悪意あるコード)を自動実行させる」手法です。
この手法で攻撃者は、「通常のスタートアップ設定を一切汚すことなく、管理者が自らトラブルシューティングなどのためにPowerShellを開いた瞬間を狙って、最高権限を伴ったバックドアを再発動させること」を実現します。
強固な永続化(自動復活):
マルウェアの本体プロセスがセキュリティソフトによって一度駆除されても、システム管理者や正規の運用スクリプトがPowerShellを起動した瞬間に、プロファイルに仕込まれたコードが走り、マルウェアが自動的に再生成・実行されます。
防御回避(ステルス性):
攻撃者は新しい実行ファイル(.exe)を常駐させる必要がありません。PowerShellという「OS標準の完全に信頼された信頼できるプロセス(powershell.exe)」の内部で悪意あるコマンドを動かすため、プロセスの監視網をすり抜けやすくなります。
特権昇格(便乗型):
もし一般ユーザー権限で侵入した攻撃者が、システム全体の共通プロファイル(All Users)を書き換えることに成功した場合、後にシステム管理者(Administrator)が管理者としてPowerShellを開いた瞬間に、マルウェアも管理者の高い権限で実行されるため、棚ぼた式に特権を奪取できます。
PowerShellプロファイルは、ログインユーザー専用のものからシステム全体(全ユーザー)に影響するものまで、主に4つの種類(スクリプトファイル)が存在します。攻撃者は自身の権限に応じてターゲットを選びます。
初期侵入:
フィッシングメールなどを経由してWindows端末に侵入します。一般ユーザー権限の段階であれば「現在のユーザー用プロファイル」、管理者権限(Administrator)を確保していれば「全ユーザー用プロファイル」を狙います。
プロファイルファイルの特定・改ざん:
PowerShell上で $PROFILE 変数を叩くと、その環境のプロファイルパスが確認できます。攻撃者は、以下のいずれかのパスに存在する .ps1 ファイルを直接編集するか、ファイル自体がなければ新しく作成します。
C:\Windows\System32\WindowsPowerShell\v1.0\profile.ps1C:\Users\[ユーザー名]\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1悪意あるコードの埋め込み:
プロファイルファイルの末尾に、難読化されたPowerShellコマンド(例: C2サーバーからビーコン用のペイロードをメモリ上に直接読み込んで実行するコード)を追記します。
自動実行の発動(トリガー):
仕込み完了後、攻撃者はその場を去ります。その後、ユーザーが業務のためにPowerShellを開く、あるいはシステムが定期タスクでPowerShellスクリプトを実行した瞬間に、画面には何も表示されない裏側で、プロファイルに書かれた悪意あるコードが自動的に読み込まれて実行されます。
プロファイルスクリプトの整合性と、PowerShellの実行ポリシーの厳格化が有効です。
PowerShellプロファイルファイルの整合性監視(FIM / 最重要):
EDRやファイル整合性監視(FIM)ツールを用いて、先述した WindowsPowerShell\v1.0\profile.ps1 などのプロファイル用フォルダ・ファイルに対する予期せぬ新規作成や変更を厳重に監視します。一般的な業務環境において、一般ユーザーの Documents 配下にこのプロファイルが急に作成されるケースは極めて稀です。
スクリプトブロックロギング(Script Block Logging)の有効化:
Windowsのグループポリシー(GPO)で「PowerShellスクリプトブロックのロギング(イベントID 4104)」を有効にします。これにより、プロファイル経由で実行されたコマンドが難読化されていても、実際にメモリ上で展開されて実行された生文のコマンドがイベントログに記録されるため、事後の検知や解析が可能になります。
実行ポリシー(Execution Policy)の設定:
デフォルトの実行ポリシーを AllSigned に設定し、デジタル署名のない野良スクリプト(攻撃者が勝手に書き換えたプロファイルを含む)の自動読み込みをブロックします(※ただし、攻撃者は -ExecutionPolicy Bypass オプション等でこれを迂回することがあるため、ログ監視との併用が必須です)。
「管理者の行動」がトリガーになる恐怖:
この手法の最も嫌らしい点は、セキュリティ担当者やインシデントレスポンダー(調査員)が「端末が汚染されていないか調査するためにPowerShellを開く」という防御のための行動そのものが、マルウェアを再起動させるスイッチになってしまう点です。
ファイルレス(Fileless)攻撃との親和性:
プロファイル内に、ファイルとしてディスクに書き込まない「メモリ内展開型(In-Memory)」のコード(Invoke-Expression / IEX など)を1行書いておくことで、ディスク上に痕跡を残さない非常に高度なファイルレス永続化が完成します。
CWE-15: External Control of System or Configuration Setting(システムまたは構成設定の外部制御)
PowerShellという強力なシェルの初期化設定(プロファイル)が外部(マルウェア)から自由に変更可能になっており、実行フローの制御を奪われてしまう設計上の問題。
CWE-732: Incorrect Permission Assignment for Critical Resource(重要なリソースに対する不適切なアクセス権限の割り当て)
ユーザーのドキュメントフォルダや、システム全体のPowerShell構成フォルダに対するアクセス制限の管理不備により、不正な書き込み(改ざん)を許してしまう問題。
T1504(PowerShell Profile)は、WindowsのPowerShellが仕様として提供している「正規のスタートアップスクリプト機能」をそのまま悪用する攻撃であるため、特定のバグ(CVE番号を持つ脆弱性)を突くものではありません。
しかし、ハッカーがシステム全体(All Users)のプロファイルを書き換えて「一般権限からSYSTEM権限への便乗型特権昇格」を狙う際や、最初の侵入経路として、以下のような脆弱性が一連の攻撃キャンペーンで組み合わされます。
Windows端末のインシデント調査を行う際は、不用意に powershell.exe をダブルクリックして起動してはいけません(マルウェアが再発動するリスクがあるため)。
まずは管理用端末などからリモートで対象端末の C:\Users\...\Documents\WindowsPowerShell\ フォルダを覗くか、テキストエディタで直接プロファイルの中身(.ps1)を静的に開き、身に覚えのない長い文字列(特に Base64 でエンコードされた怪しいコマンドなど)が埋め込まれていないかを確認するのがフォレンジックの鉄則です。