0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[Microsoft] Windows SDDL (Security Descriptor Definition Language) 文字列を解読する

Posted at

この記事はなに?

Windows の SDDL (Security Descriptor Definition Language) を解読します。

Lacさんの記事 の焼き直しです。

SDDL文字列の構造

SDDLは、いくつかの決められたプレフィックスを持つ文字列を、区切りなしに並べたひと続きの文字列です。

SDDL文字列の例
O:BAG:SYD:P(A;OICI;FA;;;SY)(A;OICI;FA;;;BA)(A;OICI;FA;;;LA)

癖強いっすね :sweat_smile:

SDDLのプレフィックス

プレフィックスには、以下の4つがあります。

プレフィックス 意味
O: Owner (所有者)
G: Group (プライマリグループ)
D: Discretionary Access Control List (DACL)
S: System Access Control List

S: は、一般ユーザーには関係ないらしいので、ここでは無視です。

先の例を分解すると、こうなります。

項目
所有者 (O:) BA
プライマリグループ (G:) SY
DACL (D:) P(A;OICI;FA;;;SY)(A;OICI;FA;;;BA)(A;OICI;FA;;;LA)

所有者やプライマリグループを表す文字列

所有者やプライマリグループは、SIDか、BASY のような、あらかじめ決められている文字列だそうです。

先の例は、このような意味です。

文字列 意味
BA Built-in administrators.
SY Local system.

DACLの構造

プレフィックス D: で始まる DACL の構造です。

フラグ(ACE文字列1)(ACE文字列2)...(ACE文字列n)

フラグで始まり、カッコで囲まれたACE文字列が羅列されます。

先の例を分解するとこうなります。

項目
フラグ P
ACE文字列1 A;OICI;FA;;;SY
ACE文字列2 A;OICI;FA;;;BA
ACE文字列3 A;OICI;FA;;;LA

DACLのフラグ

以下の4つのうちのひとつ、あるいは複数を区切りなしに並べた文字列です。

フラグ 意味
P SE_DACL_PROTECTED フラグがセットされている
AR SE_DACL_AUTO_INHERIT_REQ フラグがセットされている
AI SE_DACL_AUTO_INHERITED フラグがセットされている
NO_ACCESS_CONTROL ACLがNull

意味わかりませんが、重要ではないらしいので、スルーします。

ACE文字列の構造

ACE文字列は、以下の項目をセミコロンで区切って並べた文字列です(その意味は後述)。

  1. ACEタイプ
  2. ACEフラグ
  3. 権限
  4. オブジェクトのGUID
  5. 継承オブジェクトのGUID
  6. アカウントのSID

先の例を分解すると、こうなります。

項目
ACEタイプ A
ACEフラグ OI と CI
権限 FA
オブジェクトのGUID (なし)
継承オブジェクトのGUID (なし)
アカウントのSID SY

ACEタイプ

あらかじめ決まっている文字列です。A が許可、D が拒否です。他にもいろいろあります。

先の例ですと、A なので許可を意味します。

ACEフラグ

ひとつまたは複数のフラグを区切りなしに並べた文字列です。そのACEがどのように扱われるのかを決めます。

ファイルシステムでよく使うのはこれくらいでしょうか。

フラグ 意味
CI サブフォルダのみに影響
OI ファイルのみに影響
IO フォルダ自身には影響しない
NP サブフォルダに継承させない

先の例ですと、OICI なので、フォルダ自身、サブフォルダ、ファイルに影響します。

権限

0x で始まる16進数か、あらかじめ決められている文字列の羅列になります。

オブジェクトのGUID

ある特定のACE構造体 (Win32 プログラムで使うやつ)の ObjectType メンバーに格納する値です。

たぶん、どんなACEを記述するかによって、値の意味が変わるのだと思われます。

継承オブジェクトのGUID

ある特定のACE構造体 (Win32 プログラムで使うやつ)の InheritedObjectType メンバーに格納する値です。

たぶん、どんなACEを記述するかによって、値の意味が変わるのだと思われます。

アカウントのSID

このACEが適用されるアカウントのSIDです。

参考リンクまとめ

記事内に書いたリンク先のまとめです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?