ラック・セキュリティごった煮ブログ

セキュリティエンジニアがエンジニアの方に向けて、 セキュリティやIT技術に関する情報を発信していくアカウントです。

【お知らせ】2021年5月10日~リニューアルオープン!今後はこちらで新しい記事を公開します。

株式会社ラックのセキュリティエンジニアが、 エンジニアの方向けにセキュリティやIT技術に関する情報を発信するブログです。(編集:株式会社ラック・デジタルペンテスト部)
当ウェブサイトをご利用の際には、こちらの「サイトのご利用条件」をご確認ください。

デジタルペンテスト部提供サービス:ペネトレーションテスト

システム環境変数のPathに設定するフォルダの権限にご注意を。

WHIです。最近しばしば遭遇するローカル管理者権限昇格の事例を紹介したいと思います。

プログラムなどをインストールするとき、インストーラー形式だとほとんど自動で行われますが、特に手動でインストールする場合には、よく「Pathを通す」という行為をするかと思います。そのPathの通し方やPathに設定するフォルダのアクセス権限によっては他の条件が重なることでローカル管理者権限昇格に悪用される恐れがあります。この手法は昔からあるよくあるローカル管理者権限昇格手法でもあります。

そもそもPath環境変数とは?

コマンドプロンプトでのコマンド入力は当たり前のように「ipconfig」などとプログラム名だけを入力してプログラムを実行することができますが、ipconfigというプログラムの実行ファイル自体は、「C:\Windows\System32」フォルダの中にあります。Windowsだけでなくその他多くのOSはこのようにプログラム名だけで実行しようとしている場合、そのプログラムがどこにあるのか探索し実行しますが、その探索するべきフォルダを設定しているのがPathといわれる環境変数です。Windowsではデフォルトで「C:\Windows\System32」というフォルダとその他複数のフォルダが環境変数のPathに設定されているため、ipconfigなど重要なWindowsのコマンドをフルパスで指定することなく実行できます。

したがって、プログラムを追加でインストールする場合、そのプログラムをフルパスを指定せずに実行したい場合は、プログラムの実行ファイルがあるフォルダをPath環境変数に設定することで、フルパスを指定せずに実行することができるようになります。

また、環境変数にはシステム環境変数とユーザ環境変数の2種類あり、システム環境変数はSYSTEMを含む全ユーザに適用される非常に重要な環境変数です。また、Path環境変数には複数のフォルダが設定されているのが通常で、それぞれのフォルダで探索の優先順位があります。

権限昇格に悪用可能な条件

実際に管理者権限昇格するには、以下をすべて満たしていることが条件です。

①:システム環境変数のPathに一般ユーザ権限でファイルの書き込みが可能なフォルダが設定されている
②:①で設定されているフォルダの探索順序が優先されるよう設定されている
③:管理者権限で定期的にフルパスを指定せずにコマンドが実行される
※③はスケジュールタスクにて管理者権限で定期的に実行されるスクリプト内でのコマンドや、管理者でログオンした時に実行するコマンドなどが該当します。

比較的条件が多く、特に③が該当する環境が少ないかと思われがちですが、組織等ではGPOでログオンスクリプトが自動実行される設定になっていたりスケジュールタスクでマシンのログを定期的に転送するなど定期実行が設定されていがちなど、逆に組織の環境では条件が満たされる場合が多くあると考えられます。

権限昇格方法

上記の条件を満たしている環境においては、設定を変更することなく、「①②に該当するフォルダ」に「③で実行されうるコマンドの実行ファイルと同じファイル名に偽装した、管理者権限で実行させたい実行ファイル」を配置するだけで、③の定期実行時に当該実行ファイルが管理者権限で実行されるため、ローカル管理者権限昇格を達成可能です。

具体例としては、システムの環境変数のPathに、「C:\apps」というフォルダが優先度が最上位に設定されており、

C:\appsに一般ユーザ「Authenticated Users」に書き込み権限があり、

スケジュールタスクとしてSYSTEM権限でフルパスで指定せずにコマンド実行されるスクリプトが定期的に実行されている場合、

C:\apps下に、管理者で実行させたい実行ファイルを「cscript.exe」という名前に偽装して配置すると、正規の「C:\Windows\System32\cscript.exe」ではなく、ここで配置した実行ファイルである「C:\apps\cscript.exe」が管理者権限として実行されるため、ローカル管理者権限昇格を達成可能です。

実際のペネトレーションテストでは、C2フレームワークのAgentであったり、簡単なPoCを試したい場合は新規ユーザを作成してそのユーザをローカル管理者グループに追加するようなものを実行させます。

対策・緩和策

この権限昇格手法の問題点は、システム環境変数のPathに設定するフォルダに対する一般ユーザでの書き込み権限です。よって、根本的な対策としては、そのようなフォルダに対して一般ユーザで書き込みできないように制限することが重要です。

その上で、もし権限不備が起こったとしても、悪用されないよう悪用しづらいようにすることがさらに重要です。例えば、そもそもシステム環境変数のPathに設定する必要はありますか?システム全体で使用するなら仕方ありませんが、特定のユーザだけが使用するのであればユーザ環境変数への設定で間に合います。それでも仕方なくシステム環境変数に設定する場合は、探索の優先順位を下げておくことが重要で、よく使われるであろうOSの重要コマンドは特別な理由がない限り最優先で探索されるように設定すべきです。さらに、定期実行するように設定しているスクリプト内のコマンドもフルパスで記載するようにすることで悪用可能な条件を満たさなくすることができます。

参考

この記事の権限昇格手法はMITRE ATT&CKだと以下のテクニックです。
T1574.007 Hijack Execution Flow: Path Interception by PATH Environment Variable
https://attack.mitre.org/techniques/T1574/007/