アプリケーションにSUIDが設定されているときに、コアダンプが作成されないのはなぜですか?


16

クラッシュするすべてのコアダンプを作成するように環境をセットアップしますが、実行ユーザーとは異なるユーザーにSUIDを設定してプログラムを実行すると、コアダンプは作成されません。これがなぜなのか、考えはありますか?私はウェブ上のどこにもそれを見つけることができませんでした、それは何らかのセキュリティ機能だと思いますが、無効にしたいと思います...

問題:

$ cd /tmp
$ cat /etc/security/limits.conf | grep core
*     -     core     unlimited
root  -     core     unlimited

$ ls -l ohai
-rwsr-sr-x 1 root root 578988 2011-06-23 23:29 ohai

$ ./ohai
...
Floating point exception

$ sudo -i
# ./ohai
...
Floating point exception (core dumped)
# chmod -s ohai
# exit
$ ./ohai
...
Floating point exception (core dumped)

編集: できるだけ安全に動作させるために、環境をセットアップするための次のスクリプトを用意しました。

mkdir -p /var/coredumps/
chown root:adm /var/coredumps/
chmod 772 /var/coredumps/

echo "kernel.core_pattern = /var/coredumps/core.%u.%e.%p" >> /etc/sysctrl.conf
echo "fs.suid_dumpable = 2" >> /etc/sysctl.conf

echo -e "*\t-\tcore\tunlimited" >> /etc/security/limits.conf
echo -e "root\t-\tcore\tunlimited" >> /etc/security/limits.conf

これで、あとはACLを/ var / coredumpsに追加するだけで、ユーザーはファイルの追加のみが可能になり、ファイルの変更や読み取りはできなくなります。唯一のダウンサイズは、chrootされたアプリケーションで問題が発生するというbind mountことです。

回答:


21

setuidプログラムのメモリには、機密データが含まれている可能性があります(そうである可能性もあります)。そのため、コアダンプはルートのみが読み取り可能でなければなりません。

コアダンプがルートによって所有されている場合、カーネルは既存のファイルを上書きしないように注意する必要がありますが、明らかなセキュリティホールは表示されません。

Linuxは、setxidプログラムのコアダンプを無効にします。それらを有効にするには、少なくとも以下を行う必要があります(これで十分かどうかは確認していません):

  • fs.suid_dumpablesysctlを2などに設定して、一般的にsetuidコアダンプを有効にしecho 2 >/proc/sys/fs/suid_dumpableます。(注:1ではなく2。1は「システム全体をデバッグしているため、すべてのセキュリティを削除したい」ことを意味します。)
  • prctl(PR_SET_DUMPABLE, 1)プログラムから呼び出します。

あなたは今、私の個人的なヒーローです!
-DipSwitch

@DipSwitch奇妙な、それはドキュメントがfs.suid_dumpable言っていることではありません。プログラムfs.suid_dumpableを呼び出さずに設定を試すことはできますpctrlか?たぶん私はドキュメントを誤解していて、あなたはコアを取得していますが、この場合はルートが所有しています。
ジル 'SO-悪であるのをやめる'

Ah crap my bad ...ファイルはrootが所有していますが、core_patternの%u(uid)が一目ぼれしました。
-DipSwitch

この解決策は、少なくともカーネル2.6.27では、「sudo -s」の下で実行されるプログラムにも適用されるようです。
セスノーブル

7

コアダンプには、障害発生時にメモリにあったすべてのコピーが含まれています。プログラムがsuidを実行している場合、ユーザーとしてはアクセスできないものにアクセスする必要があることを意味します。プログラムがその情報を取得してからコアをダンプすると、その特権情報を読み取ることができます。

上記の例から、rootとして実行するとき、または特権の昇格を削除すると、コアダンプを取得できるように見えます。

setuidプログラムからコアダンプに簡単にアクセスできるのは(開発者にとってのみ)便利ですが、セキュリティホールであり、そのままにしておく必要があります。


1
私はあなたがそのようなことを言うつもりだと恐れていた:(
DipSwitch

0

忘れるまで、ユースケースも共有することにしました。数か月前に同じ問題を解決していて、もう一度調べるのに時間がかかりすぎたので、将来の私にとっても便利かもしれません。OK。実際にはコアダンプではありませんが、スタックトレースも役立ちます。

問題:何が起こっているのかわかりません:

sudo id
Segmentation fault

解決策:suidビットをから正常sudovalgrind動作させる:

chmod +s /usr/bin/valgrind
chmod -s /usr/bin/sudo
valgrind /usr/bin/sudo id

debuginfoがインストールされている場合、素敵なバックトレースが書き出されます。


そしてその間、パーミションをリセットすることを覚えているまで、みんなとティリーおばさんはvalgrind何でもできます。これをしないでください、それは大きなセキュリティリスクです。
フォンブランド

もちろん、テストマシン上で、テスト目的でのみ。
Jakuje

関係なく、私にウィリーを与えます。
フォンブランド
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.