システムで問題のあるユーザーricardo
の制限付きユーザーアカウントを設定しています。私はSudo
を使用してディレクトリを作成する権利を彼に与えたいと思っています。私の/etc/sudoers
ファイルでこのルールを検討しています:
ricardo ALL=(root) NOPASSWD: /bin/mkdir
このルールのみを使用して、リカルドが意図的または誤ってシステムを危険にさらす可能性がある方法はありますか?
このような攻撃はうまくいくと思います。"something"は、rootfsがマウントされた後にロードしようとするカーネルモジュールです。
$ Sudo mkdir -m 777 /lib/modules/`uname -r`/a
$ cp evil.ko /lib/modules/`uname -r`/a/«something».ko
モジュールで宣言されたエイリアスに応じて、他の名前を使用できることにも注意してください。 depmodが実行されるまで読み込まれないと思います。これは、次にカーネルが更新されるときに発生します。そのため、mkdir
はSudoログに最近表示されません。
/ etcには、ディレクトリ内のすべてのファイルを(場合によっては再帰的に)読み取ることがたくさんあります。さらに悪いことに、これらのディレクトリの一部はデフォルトでは存在せず、それらを知る唯一の方法は、それらを使用するプログラムのマンページ、initスクリプトなどを読むことです。さらに悪いことには、後方互換性の目的で廃止されているものもあり、ドキュメント化されていないこともあります。
編集:いくつかのディレクトリについて考えましたが、これらは/usr/local
にあります:
/usr/local/lib/Perl/5.14.2
(Perlのバージョンによって異なります。調べるにはPerl -V
を試してください)。そこにFile
サブディレクトリを作成し、その中にFind.pm
を置きます。これで、誰かがFile::Find
を使用するたびに、攻撃者のバージョンが使用されるようになります。同様に、Getopt::Long
でも同じことを行います。システムユーティリティはしばしばPerlで書かれているので、これはおそらく根を与える。 (ack-grep --color -a 'use.+::' /usr/sbin | less -R
をお試しください)/usr/local/include
のサブディレクトリを使用してコンパイルした多くのことを覆します。彼をchroot刑務所にリダイレクトする必要があります。または、小さなVMにとっては、1時間に1回クラッシュする可能性があります。あなたがする必要があるのは新しいコピーを提供することだけです。
書き込みアクセスでディレクトリを作成できるため、可能性があります。 _mkdir -m 777 blah
_を使用すると、ricardo
ユーザーは新しいディレクトリに好きなように書き込むことができます。別のユーザーとして既に実行されているシステム上で、構成、スクリプト、またはモジュールをロードするためにディレクトリツリーを再帰するプロセスが必要になります。次に、ユーザーは自分でロードまたは実行するものを追加できます。私が最初に考えることができるのは、phpまたはcgiを実行できるWebサーバーを実行している場合です。その後、そのユーザーとしてスクリプトを実行できます。私は、より現実的な例、特にroot
の例を思いつくのに苦労していますが、それは間違いないでしょう。
sshは、この種のシナリオをトラップするデーモンの例です。ディレクトリを持たないユーザー用に_.ssh
_ディレクトリを作成し、独自の_authorized_hosts
_ファイルを配置した場合。 sshd
は、ディレクトリの権限が開きすぎていることを通知し、公開鍵を無視します。
多くのプログラムがうまく処理しないファイル(一時的なtmpやswapファイルなど)が現れることが予想されるディレクトリを作成することに迷惑をかける可能性があります。
たくさんのcgroupを作成することはできますが、それらを使って何もしているようには見えません。あなたは、システムを少なくともひざまずくことができるかもしれません。 OOM killer がsshdを取り出すのに256Mのボックスで約10000のcgroupが必要でした。
mkdir
の_-m
_オプションとSudo
環境のUMASKを制御する場合、私はそれが単に迷惑であることに戻っていると思います。