SELinux SYSCALLメッセージを解析するには?

SELinux SYSCALLメッセージを解析するには?

したがって、次の3つの監査ログエントリがあります。

type=AVC msg=audit(1488396169.095:2624951): avc:  denied  { setrlimit } for  pid=16804 comm="bash" scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:system_r:httpd_t:s0 tclass=process
type=SYSCALL msg=audit(1488396169.095:2624951): arch=c000003e syscall=160 success=no exit=-13 a0=1 a1=7ffe06c17350 a2=2 a3=7fea949f3eb0 items=0 ppid=15216 pid=16804 auid=4294967295 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=4294967295 comm="bash" exe="/usr/bin/bash" subj=system_u:system_r:httpd_t:s0 key=(null)
type=EOE msg=audit(1488396169.095:2624951):

bashAVCラインでは、コンテキストを持つプロセスがリソース制限のsystem_u:system_r:httpd_t:s0設定権限が拒否されたことをすぐに確認できます。

SYSCALL行でsyscall = 160をGoogleですばやく検索すると、これが呼び出しであることsetrlimit()がわかります。これは非常に興味深いものです。どのリソースを変更するように要求したのかわかりません。どのリソースを変更しようとしていますか?

答え1

したがって、この場合、問題のシステムコールがであることはすでにわかっていますsetrlimit。検索すると、setrlimitそのシステムコールをラップする同じ名前のCライブラリ関数があることがわかります。

これ機能文書化最初のパラメータ(監査ログのSYSCALL行にある「a0」)は問題のリソースを表すようにマークされていますが、マニュアルでは数値ではなくシンボル名のみを示します。ただし、これらのシンボルがsys/resource.hヘッダーファイルに定義されていることを知らせます。ただし、ファイルには実際の値は含まれていません。

数値を取得するには、以下を見てください。sysdeps/unix/sysv/linux/bits/resource.h。そこで定義されているさまざまなRLIMIT_マクロを見つけることができます。

これを見ると、変更したいリソースが見つかります。このときa0 = 1で、1に対応するマクロはRLIMIT_FSIZEです。

答え2

これは少し異なるアプローチです。 AVCはbashプロセスを実行しており、それ自体または子プロセスの一部を設定しようとしていると言いますrlimit。これはシェルで非常に一般的な状況です。

エラーは、サービスが許可されていないbashSELinuxサービスのコンテキストで実行されていることです。これはネットワークに向かうデーモンであり、バグがある場合は攻撃者がそれを使用したくないのでhttpd許可されません。httpd

これは通常特定の方法でbash始まったためですhttpd(確かに良い考えではありません)。

これらのメッセージでは、どのリソースが変更されているかはわかりません。 SELinuxには、setrlimit制限の修正を許可または拒否する機能があります。パラメータを取得するには、次のツールがいくつか必要です。

  • SystemTapはシステムコールとそのパラメータを調査します。
  • 最後まで読んでくださいソースコード
  • 実行中のプロセスでスクリプトを実行またはgdb接続します。gdb

関連情報