SELinux Type Enforcement Lookupの紹介
株式会社 日立製作所 能登上総
本日はSELinuxの調査を簡単にするツールをご紹介したいと思います。
ツールの名前はSELinux Type Enforcement Lookup。
GitHub上で公開されています。
ツールの使いどころ
例えばhttpdプロセスが乗っ取られた場合などに備えて、
httpdプロセスがreadパーミッションを持つファイルを調査したいといったケースです。
手作業でやると大変です。
どう大変かは、ここでは説明を省きますので気になる人はThink ITをチェックしてください。
ツールを使ってみよう
では実際にhttpdプロセスがreadパーミッションを持つファイルを、
ツールを使って調査してみましょう。
今回は/etcディレクトリについて調査します。
実行するコマンドは以下です。(インストールなどは省きますのでGitHubのReadMEを見てください)
#python selinux-te-lookup.py httpd_t --root /etc --stdout --perm read --class file
では引数を見ていきましょう。
- httpd_t
- 調査するプロセスのドメインです。今回はhttpdプロセスを調査するので、そのドメインhttpd_tを指定します。
- -root /etc
- 調査するディレクトリを指定します。今回は/etcディレクトリを指定します。
- --stdout
- 標準出力に結果を出力するオプションです。デフォルトではファイルに出力されます。
- --perm
- 調査するパーミッションを指定します。今回はreadパーミッションを指定します。
- --class file
- 調査対象のファイルの種類を指定します。今回は通常ファイルなのでfileを指定します。
これを実行するとCSV形式の出力が得られます。まずは1行目のヘッダーを見てみましょう。
File-Context-Pattern,File-Context-Target-Type,File-Context-Label,Matched-File-Path,File-Type,File-Label,SAME-SELinux-Type
それぞれのカラムは以下を示します。
- File-Context-Pattern
- ファイルコンテキストのファイルパスに対するマッチングパターンです。
- File-Context-Target-Type
- パターンがマッチするファイル種別(ファイル、ディレクトリなど)です。
- File-Context-Label
- パターンがマッチした際に設定されるラベルです。
- Matched-File-Path
- 実際にパターンにマッチしたファイルパスです。
- File-Type
- マッチしたファイルのファイル種別です。
- File-Label
- マッチしたファイルの実際のSELinuxラベルです。
- SAME-SELinux-Type
- ファイルコンテキストと実際のSELinuxラベルが一致するか示します。
- この情報はファイルコンテキストと実際の値に不整合がないかをチェックする際に用います。
- この値がNGだとファイルコンテキストと異なるタイプが割り当てられているため、実際にはパーミッションがない状態になっています。
では2行目以降の出力結果を見ていきましょう。
/etc/.*,all files,system_u:object_r:etc_t:s0,/etc/fstab,f,system_u:object_r:etc_t:s0,OK
/etc/.*,all files,system_u:object_r:etc_t:s0,/etc/crypttab,f,system_u:object_r:etc_t:s0,OK
/etc/resolv\.conf.*,all files,system_u:object_r:net_conf_t:s0,/etc/resolv.conf,f,system_u:object_r:net_conf_t:s0,OK
(以下省略)
- /etc/.*
- ファイルコンテキストのマッチングパターンが/etc以下の全ファイルであることを示します。
- all files
- ファイル種別関係なく全てのファイルにマッチすることを示します。
- system_u:object_r:etc_t:s0
- 設定されるSELinuxラベルです。
- /etc/fstab
- 検出されたhttpdプロセスがreadパーミッションをもつファイルになります。
- f
- 検出されたファイルのファイル種別がファイルであることを示します。
- system_u:object_r:etc_t:s0
- 検出されたファイルに設定されているSELinuxラベルです。
- OK
- ファイルコンテキストと実際のSELinuxラベルが一致したことを示します。
調査目的のhttpdプロセスがreadパーミッションを持つ/etc以下のファイルに戻ると、
/etc/fstab、/etc/crypttab、/etc/resolv.confなどに対して、httpdプロセスはreadパーミッションを
もつことがわかりました。
このように特定のプロセスが乗っ取られた場合の影響範囲を簡単に調査することができます。ぜひ使ってみてください。
以上でツールの紹介を終わりにします。