PR

分析すべき内容

 セキュリティポリシーを分析する際には、alllow文にて、プロセスのドメインに対し、攻撃者に使われやすいパーミッションが与えられているのかを見ていくのが効率的です。重点的に見た方がよいパーミッションを図1に示しました。図1は、攻撃者がデーモンプロセスの脆弱性を突き、被害を及ぼすまでの手順の図です。(A)(B)(C)に、各手順の中で攻撃者が使う権限を示します。

図1●攻撃者の攻撃手順と必要な権限
図1●攻撃者の攻撃手順と必要な権限
[画像のクリックで拡大表示]

 (A)に示した表は、攻撃のためのツールのダウンロードと実行に使われるパーミッションです。1行目は、攻撃者のWebサイトに接続する権限です。http_port_tはHTTP関連のポート番号に付与されているタイプです。具体的にどのポートに付与されているかの確認はsemanageコマンドを使います。

# semanage port --list
<略>
http_port_t tcp 80, 81, 443, 488, 8008, 8009, 8443, 9000

 TCP80~9000番ポートに付与されていることが分かりました。tcp_socket name_connectはこれらのポート番号を指定してTCP接続開始するために必要なパーミッションです。なお、tcp_socket name_connectは、種別を表すオブジェクトクラス「tcp_socket」に用意されているパーミッション「name_connect」を指します。(A)の2行目は、任意のディレクトリーに攻撃者のサイトから取ってきたツールをダウンロード(file write)して、実行する(file execute_no_trans,execute)権限です。実行に関係する二つのパーミッションの違いについては別掲記事「2種類の実行パーミッション」を参照ください。これらのパーミッションが許可されていなければ、デーモンが乗っ取られてしまったとしても、(2)の段階で攻撃を阻止できます。

 (B)は、ファイルの読み込みや書き込みに必要な権限です。例えば、あるドメインが乗っ取られると、file writeパーミッションが許可されているタイプが付与されているファイルに対しては、最悪破壊されるリスクがあることを意味します。逆にそれ以外のファイルは破壊できません。

 (C)は、ほかのサイトに被害を広げるために必要な権限です。ここでは最も悪用される権限を示しています。Web関連のポート(TCP 80、443など)にTCPセッションを開始し、ほかのサイトに被害を及ぼすために悪用できる権限です。

2種類の実行パーミッション
 SELinuxでは実行関連にはexecuteとexecute_no_transの2通りのパーミッションが用意されています。executeパーミッションでは、共有ライブラリのロードの許可や、前回紹介したドメイン遷移する形の実行が許可されます。例えば、前回紹介した「type_transition init_t httpd_exec_t : process httpd_t;」というドメイン遷移(init_tドメインのプロセスが、httpd_exec_tタイプのファイルを実行するとhttpd_tドメインで起動する)では、ドメイン遷移設定に加えて、「allow init_t httpd_exec_t:file execute;」のように、init_tに対し、実行ファイルへの「execute」パーミッションを許可する必要があります。一方で、ドメイン遷移無しで実行するためには、executeパーミッションに加えてexecute_no_transパーミッションも許可する必要があります。