ricardo
私のシステムに問題を引き起こしているユーザーであるユーザーに制限されたユーザーアカウントを設定しています。私は彼にsudo
時々必要な本番ディレクトリのアクセス許可を与えたいと思います。私は私のファイル/etc/sudoers
で次の規則を検討しています。
ricardo ALL=(root) NOPASSWD: /bin/mkdir
このルールだけを使用すると、リカルドは意図的にまたは意図せずにシステムを壊すことができますか?
答え1
私はこのような攻撃がうまくいくと思います。ここで「何か」は、rootfsがインストールされた後にロードしようとするカーネルモジュールです。
$ sudo mkdir -m 777 /lib/modules/`uname -r`/a
$ cp evil.ko /lib/modules/`uname -r`/a/«something».ko
また、モジュールで宣言されたエイリアスによって異なる名前を使用できます。私は次のカーネルアップデートで発生するdepmodが実行されるまでロードされないと思います。したがって、mkdir
最近のsudoログには表示されません。
/ etcには、ディレクトリ内のすべてのファイルを読むことがたくさんあり、時には再帰的に実行されます。さらに悪いことに、これらのディレクトリのいくつかは基本的に存在せず、これについて学ぶ唯一の方法は、そのディレクトリを使用するプログラムのマンページ、初期化スクリプトなどを読むことです。さらに悪いことには、以前のバージョンとの互換性が使用されなくなり、文書化されなくなる可能性があります。
編集する:より多くのディレクトリが浮上します。次の場所にあります/usr/local
。
/usr/local/lib/perl/5.14.2
(Perlのバージョンによって異なりますので、perl -V
ご確認ください。)File
そこにサブディレクトリを作成しますFind.pm
。誰かがそれを使用するたびにFile::Find
攻撃者のバージョンを使用するようになります。同様に、同じことを行いますGetopt::Long
。システムユーティリティは通常Perlで書かれているため、root権限を提供できます。 (努力するack-grep --color -a 'use.+::' /usr/sbin | less -R
)- Python、Rubyなどにも同様のディレクトリがあると思います。システムユーティリティもPythonで書かれています。
- 一部の人々は
/usr/local/include
。
答え2
答え3
彼をchroot刑務所にリダイレクトする必要があります。あるいは、小規模な仮想マシンの場合は、1時間に1回の競合が発生する可能性があります。あなたがすべきことは新しいコピーを提供することだけです。
答え4
書き込みアクセス権を持つディレクトリを作成できるため、可能性があります。ユーザーは必要に応じて新しいディレクトリにmkdir -m 777 blah
書き込むことができます。ricardo
構成、スクリプト、またはモジュールをロードするためにディレクトリツリーを繰り返す他のユーザーとしてすでに実行されているシステムプロセスが必要です。その後、ユーザーは自分のアイテムを追加してロードまたは実行できます。私の最初の考えは、PHPまたはCGIを実行できるWebサーバーを実行することです。その後、そのユーザーとしてスクリプトを実行できます。私はより多くの実際のケース、特にroot
それが確実であると確信しているケースを考えようとしています。
ssh は、このような状況を捉えるデーモンの例です。.ssh
ディレクトリがないユーザーのためにディレクトリを作成し、authorized_hosts
適切な場所に自分のファイルを保存する場合。sshd
ディレクトリ権限がオープンすぎて公開鍵を無視します。
多くのプログラムが正しく処理できないファイルが存在すると予想されるディレクトリ(一時的なtmpやスワップファイルなど)を作成すると、問題が発生する可能性があります。
多くのcgroupを作成できますが、cgroupで何もしないようです。少なくともシステムをひざまずくことができます。 256Mボックスには約10,000個のcgroupが必要です。OOMキラーsshdを削除してください。
-m
環境オプションmkdir
とUMASKを調整すればsudo
また面倒になるようです。