hacktricks/windows-hardening/windows-local-privilege-escalation/integrity-levels.md

8.4 KiB
Raw Blame History

htARTEHackTricks AWS Red Team Expert htARTEHackTricks AWS Red Team ExpertでAWSハッキングをゼロからヒーローまで学ぶ

HackTricksをサポートする他の方法

インテグリティレベル

Windows Vista以降では、すべての保護されたアイテムにはインテグリティレベルタグが付いています。このセットアップでは、ほとんどのファイルとレジストリキーには「中」のインテグリティレベルが割り当てられますが、Internet Explorer 7が低いインテグリティレベルで書き込むことができる特定のフォルダやファイルもあります。標準ユーザーによって開始されたプロセスは通常、中間のインテグリティレベルを持ち、サービスは通常、システムのインテグリティレベルで動作します。高いインテグリティラベルはルートディレクトリを保護します。

重要なルールの1つは、オブジェクトはオブジェクトのレベルよりも低いインテグリティレベルを持つプロセスによって変更されないということです。インテグリティレベルは次のとおりです

  • 信頼されていない: このレベルは匿名ログインを持つプロセス向けです。 %%%例: Chrome%%%
  • : 主にインターネットのやり取りに使用され、特にInternet Explorerの保護モードで影響を受ける関連ファイルやプロセス、および一時インターネットフォルダのような特定のフォルダに影響します。低いインテグリティプロセスは、レジストリの書き込みアクセスがないことや、ユーザープロファイルの書き込みアクセスが制限されていることなど、重要な制限に直面します。
  • : ほとんどのアクティビティのデフォルトレベルであり、標準ユーザーや特定のインテグリティレベルを持たないオブジェクトに割り当てられます。管理者グループのメンバーでさえ、デフォルトでこのレベルで動作します。
  • : 管理者向けに予約されており、高いインテグリティレベル自体を含む低いインテグリティレベルのオブジェクトを変更できるようにします。
  • システム: Windowsカーネルとコアサービスのための最高の操作レベルであり、管理者でさえアクセスできないようになっており、重要なシステム機能を保護します。
  • インストーラー: 他のすべてのレベルを上回るユニークなレベルであり、このレベルのオブジェクトは他のすべてのオブジェクトをアンインストールできるようにします。

プロセスのインテグリティレベルは、SysinternalsProcess Explorerを使用してプロセスのプロパティにアクセスし、「セキュリティ」タブを表示することで取得できます:

また、whoami /groupsを使用して現在のインテグリティレベルを取得できます。

ファイルシステムのインテグリティレベル

ファイルシステム内のオブジェクトは、最小のインテグリティレベル要件を必要とする場合があり、プロセスがこのインテグリティプロセスを持っていない場合はそれとやり取りできません。
たとえば、通常のユーザーコンソールから通常のファイルを作成し、アクセス許可を確認してみましょう:

echo asd >asd.txt
icacls asd.txt
asd.txt BUILTIN\Administrators:(I)(F)
DESKTOP-IDJHTKP\user:(I)(F)
NT AUTHORITY\SYSTEM:(I)(F)
NT AUTHORITY\INTERACTIVE:(I)(M,DC)
NT AUTHORITY\SERVICE:(I)(M,DC)
NT AUTHORITY\BATCH:(I)(M,DC)

今、ファイルに最小整合性レベルをHighに割り当てましょう。これは管理者として実行されているコンソールから行う必要があります。通常のコンソールは中間整合性レベルで実行されており、オブジェクトにHigh整合性レベルを割り当てることが許可されていません

icacls asd.txt /setintegritylevel(oi)(ci) High
processed file: asd.txt
Successfully processed 1 files; Failed processing 0 files

C:\Users\Public>icacls asd.txt
asd.txt BUILTIN\Administrators:(I)(F)
DESKTOP-IDJHTKP\user:(I)(F)
NT AUTHORITY\SYSTEM:(I)(F)
NT AUTHORITY\INTERACTIVE:(I)(M,DC)
NT AUTHORITY\SERVICE:(I)(M,DC)
NT AUTHORITY\BATCH:(I)(M,DC)
Mandatory Label\High Mandatory Level:(NW)

これが興味深い部分です。ユーザーDESKTOP-IDJHTKP\userがファイルに完全な権限を持っていることがわかります(実際、このユーザーがファイルを作成したユーザーです)、しかし、実装された最小整合性レベルのため、彼はファイルを変更できなくなります(ただし、読むことはできます)。

echo 1234 > asd.txt
Access is denied.

del asd.txt
C:\Users\Public\asd.txt
Access is denied.

{% hint style="info" %} したがって、ファイルが最小整合性レベルを持っている場合、そのファイルを変更するには、少なくともその整合性レベルで実行する必要があります。 {% endhint %}

バイナリの整合性レベル

cmd.exeのコピーをC:\Windows\System32\cmd-low.exeに作成し、管理者コンソールからその整合性レベルを低に設定しました:

icacls C:\Windows\System32\cmd-low.exe
C:\Windows\System32\cmd-low.exe NT AUTHORITY\SYSTEM:(I)(F)
BUILTIN\Administrators:(I)(F)
BUILTIN\Users:(I)(RX)
APPLICATION PACKAGE AUTHORITY\ALL APPLICATION PACKAGES:(I)(RX)
APPLICATION PACKAGE AUTHORITY\ALL RESTRICTED APP PACKAGES:(I)(RX)
Mandatory Label\Low Mandatory Level:(NW)

今、cmd-low.exeを実行すると、低完全性レベルで実行されます。中完全性レベルではありません:

興味のある人のために、バイナリに高完全性レベルを割り当てると(icacls C:\Windows\System32\cmd-high.exe /setintegritylevel high)、自動的に高完全性レベルで実行されません(デフォルトでは中完全性レベルから呼び出された場合、中完全性レベルで実行されます)。

プロセスの完全性レベル

すべてのファイルとフォルダには最小完全性レベルがありませんが、すべてのプロセスは完全性レベルで実行されます。ファイルシステムで起こったことと同様に、プロセスが別のプロセス内に書き込みたい場合、少なくとも同じ完全性レベルを持っていなければなりません。つまり、低完全性レベルのプロセスは、中完全性レベルのプロセスに対して完全アクセス権を持つハンドルを開けません。

このセクションと前のセクションでコメントされた制限により、セキュリティの観点からは、常に可能な限り低い完全性レベルでプロセスを実行することが推奨されます。