SDDLを見て、セミコロンに目をつぶらない方法





情報セキュリティへの道は、「安全に≠暗号化」という驚くべき発見から始まりました。 この陳述は今や単純明快に見え、最初の年にこの事実を認識することで精神的な原子爆弾に匹敵する効果が生まれました。 情報セキュリティは、対象領域の境界を拡大することによって攻撃されました。暗号化は防御の1つのラインにすぎず、最終的には法的、組織的、そして単に物理的でもあることが判明しました。 理論的な側面の1つは、「すべての情報セキュリティの問題は、オブジェクトへのサブジェクトのアクセスによって説明されます」でした。 彼は記憶し、資格情報と裁量のアクセスモデルを描き、伝え、合格し、忘れました。



私は、Windowsアプリケーションのセキュリティ分析を専門としています。 多くの場合、まったく異なるアクセス権の調査が調査の重要な部分を占めています。 奇妙なアクセス権や誤ったアクセス権を検索するプロセスを自動化するには、SDDL(セキュリティ記述子定義言語)を理解する必要がありました。 SDDLの形式で権利を読むことを学ぶことに興味がある人(たとえば、 O:SYG:SYD:(A ;; CCLCSWLOCRRC ;;; IU)(A ;; CCLCSWLOCRRC ;;; SU)(A ;; CCLCSWRPWPDTLOCRRC ;;; SY) (A ;; CCDCLCSWRPWPDTLOCRSDRCWDWO ;;; BA) )そして、このフォーマットの記述子を操作するためのユーティリティに精通してください。catへようこそ。



SDDL形式



SDDLは、テキスト形式のアクセス権の説明を含む文字列です。 ほとんどの場合、所有者、グループ、およびDACLアクセス許可の3つの部分で構成されます。 SACLパーツ(監査パーツ)が追加される場合があります(オブジェクトのアクションがSACLルールに適合する場合、さまざまなシステムで追跡しやすいシステムイベントが作成されます)。 記述子は次のようになります。



O:<所有者> G:<グループ> D:<DACLアクセスルール> S:<SACL監査ルール>







したがって、上記の例は次のように分解できます。



所有者とグループは、ユーザーまたはOSグループのSIDとして、または特別な略語として示されます。 たとえば、この場合、所有者とグループSYはローカルシステムアカウント(NT AUTHORITY \ SYSTEM)です。 略語のリスト(残念ながら、網羅的ではありません)はここにあります



アクセスルールは、DACLフラグとACE(アクセス制御エントリ)文字列の列挙で構成されます。 ACEの詳細な分析をここに示しますが、最も重要なものを検討します。 各ACE行はカッコで囲まれ、その中のデータはセミコロンで区切られます。

最も興味深いのは、最初、3番目、最後のグループです。 これは、アクセスのタイプ(「A」は許可、「D」は禁止)、アクションのリスト、およびアクセスサブジェクトの名前です。 上記の例の最初のDACLルール:(A ;; CCLCSWLOCRRC ;;; IU)、詳細に検討します。









何が許可されているのかを正確に理解する必要があります。 これらの不可解な「CC」、「LC」、「SW」、「LO」、「CR」、「RC」はどういう意味ですか?



ここで私たちは別の落とし穴を待っています-縮小によってアクションを正確に示すことが常に可能であるとは限りません。 それらは、いわば、コンテキスト固有です。 たとえば、サービスを操作する権利について話している場合、WPは「サービスを停止する」、ファイルについては「実行」、フォルダについては「トラバース」(フォルダ内のファイルへのアクセス、不可能な場合)を意味しますリストの内容)。 いくつかの説明はここにあり 、いくつかはここにあり、スレッド上の世界についてです。



ねえ、あなたはDACLフラグ、ACEフラグ、継承についてそんなに見逃した
はい、確かに、これはすべて非常に重要で興味深いことですが、それほど一般的ではありません。 私は質量に焦点を当てています。 異常なフラグが1つだけ現れる場合、手動モードで理解しやすくなります。



自動化



Sysinternalsユーティリティ、つまり、 Process MonitorAccess Check (procmonとaccesschkとも呼ばれます)が本当に役立ちます。 1つ目は、ファイルおよびレジストリへのアクセスをリアルタイムで確認することを可能にし、2つ目は、セキュリティ記述子に関するOSから情報を収集することを可能にします。



ところで、OS自体では、誰かがそれを見なかった場合、権限を持つウィンドウは次のようになります。







残念ながら、特定のアクションに対する権利のリクエストを絞り込むことで、accesschkの出力を除外することはできません。 プロセスモニターは特定の瞬間の実際の呼び出しのみを表示し、直接影響を受けない正確な要求を取得します。 さらに、どの種類のユーザーグループがNOまたはNSであり、どのアクションがCCおよびRCの背後に隠されているかについてのメモを持ちたいと思います。



そのため、SDDLレコードを表示およびフィルタリングするためのシンプルなユーティリティが生まれました。



使い方



ユーティリティの操作は簡単で、3つの手順のみです。



  1. SDDLレコードを取得します。
  2. ルールフィルターを定義します。
  3. レポートを表示します。






各ステップの詳細をご覧ください。



SDDLを取得します。 SDDLレコードを取得するには、ユーティリティに組み込まれている機能(ボタン1、2、3、または4)を使用するか、以前に受け取ったリストをダウンロードします(ボタン5)。 アクセス権の要求はSDDL Viewerを起動したユーザーに代わって行われるため、状況によっては、一般ユーザーとしてだけでなく管理者としてプログラムを実行する価値があることに注意してください。 まあ、一般的に、SDDL行を持つフィールド自体は編集可能です-少なくとも手動で書き換えることができます。



フィルタリングは、ユーザーグループとアクセス権の2つのパラメーターに従って行われます。 グループとユーザーのリストは、SDDLで言及されているすべてのユーザーに基づいています。 [SIDの翻訳(6)]チェックボックスに注意してください-インストールされている場合、ユーザーおよびグループのSIDは、可能であれば、現在のコンピューターに関連する名前に変換されます。 権利のリストはもう少し巧妙に配置されています-権利のカテゴリを選択する必要があります(SDDLがユーティリティ自体で満たされている場合、必要なカテゴリが自動的に選択されます)さらに、SDDLに存在する権利は権利のリストでより明確に強調表示されます。



レポートは、単にSDDLを解読し、フィルターを適用した結果です。 リストで各行を選択すると、各行の詳細情報を確認できます(はい、この機能を使用してギャグを取得しました。



まとめ



ソースコードはgithubで入手できます。 バイナリファイルもリリースセクションにあります。



私のユーティリティプラン:



  1. SDDLの入力フィールドに検索を追加します-それでもフィルタリングだけでは十分ではありません。
  2. 視覚的な部分なしでレポートを作成できる起動パラメーターを追加します。
  3. おそらく、プロセス、共有フォルダー、およびプリンターからSDDLパディングを追加する必要がありますか?


コメントで提案を聞いてうれしいです。



All Articles