攻撃者がmkdirを使用してシステムを侵害する方法はありますか?


22

ricardo私のシステムで厄介なユーザーuserの制限付きユーザーアカウントを設定しています。を使用してディレクトリを作成する権利を彼に付与したいと思いsudoます。私は私の/etc/sudoersファイルでこのルールを検討しています:

ricardo   ALL=(root) NOPASSWD: /bin/mkdir

このルールのみを使用して、ricardoがシステムを意図的または偶然に侵害する可能性のある方法はありますか?


2
静的iノード数のファイルシステムがある場合、彼はすべてのiノードを使い果たす可能性があります。
ヨルダン

2
@schaiba彼はシステムをいじくり回して、システムを悪用できるかどうかを確認するのが好きです。
リカルドアルタミラーノ

8
適切なユーザー教育と、現時点ではsudoを組み合わせないことを組み合わせることをお勧めします。
シャイバ

2
@schaibaが言うように、あなたはそれらのユーザーを教え、彼らに責任を与えることにより、そのようなユーザーを使うことができます(厳密な監督の下で)。シスダミンとユーザーの間で戦争を目にしました。最初のものはシステムをロックダウンしすぎたためです。ユーザーはシステム管理者の数を10対1で上回り、それでも(今日のインターネットアクセスなしで!)システム管理者の敗北は屈辱的でした。そのような位置に決して入らないでください
フォンブランド

2
1つのリカードが多すぎる場合です。あるいは少なくとも、これBOFH ...語ら
ディア・ハンター

回答:


21

このような攻撃はうまくいくと思います。«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
  • Python、Rubyなどにも同様のディレクトリがあると思います。システムユーティリティもPythonで記述されています。
  • 誰かがのサブディレクトリでコンパイルする多くのものを破壊し/usr/local/includeます。

ああ、でも<evil user>がカーネルがモジュールをロードする場所にモジュールをコピーできる場合、ゲームは開始前に終了します。
フォンブランド

1
@vonbrand <evil user>は通常はできませんが、彼sudo mkdirを使用して新しいディレクトリを作成できます。
デロバート

20

mkdirrootとして実行することにより、ユーザーは以前に同じ名前(および/または間違った権限)でディレクトリを作成することにより、他のプロセス/ユーザーが新しいファイルやディレクトリを作成するのをブロックできます。

これは、特にログおよびロックファイルに関連するセキュリティです。

jordanmは注目の最大数iノードはまた、システム全体を遮断することができるまで使用することができます。

ユーザーを特定のグループに追加する(またはACLを使用する)ことにより、を介して権限を付与することなく問題を解決できるはずsudoです。


素晴らしい点。おそらくmkdir、ricardoが使用を許可されているコマンドのリストは省略します。
リカルドアルタミラーノ

iノードを使い果たすためのものである場合、単純なものでfor((i = 0;; i++)); do touch $i; done十分です(bashism、申し訳ありませんが、アイデアは得られます)。
フォンブランド

@vonbrandそれがルートとしてではないことを除いて、クォータによって停止されます。もちろん、sudoOPが検討している他のコマンドもiノードを使い果たす可能性があります。OPはそのDoSベクトルを認識する必要があります。
デロバート

11

彼をchroot刑務所にリダイレクトする必要があります。さらに良いことに、小さなVMに対しては、1時間に1回クラッシュする可能性があります。必要なのは、新しいコピーを提供することだけです。


これを強くお勧めします。彼自身のVMでrootアクセスを許可します。
エモリー

chroot ^ H ^ H ^ H ^ H ^ Hounty刑務所へ…
ディアハンター

6

書き込みアクセス権を持つディレクトリを作成できるため、可能性があります。では、ユーザは、新しいディレクトリに好きな書き込みをすることができます。構成、スクリプト、またはモジュールをロードするためにディレクトリツリーを再帰的にたどる別のユーザーとして既に実行されているシステム上のプロセスが必要になります。その後、ユーザーは、ロードまたは実行する独自のものを追加することができます。私が最初に考えることができるのは、phpまたはcgiを実行できるWebサーバーを実行している場合です。その後、そのユーザーとしてスクリプトを実行できます。私は、より現実的な例、特に例を見つけるのに苦労していますが、それは間違いないでしょう。 mkdir -m 777 blahricardoroot

sshは、この種のシナリオをトラップするデーモンの例です。.sshディレクトリを持たないユーザー用のディレクトリを作成し、独自のauthorized_hostsファイルを配置した場合。sshdディレクトリのアクセス許可が開きすぎていることに気付き、公開キーを無視します。

多くのプログラムがうまく処理できないファイル(一時的なtmpファイルやスワップファイルなど)が見つかると予想されるディレクトリを作成するのは、間違いなく面倒です。

たくさんのcgroupを作成できますが、それらで何もしているようには見えません。少なくともシステムをひざまずかせることができるかもしれません。OOMキラーがsshd を削除するには、256Mのボックスで約10000個のcgroup が必要でした。

環境の-mオプションmkdirとUMASK を制御する場合sudo、単に迷惑な状態に戻ったと思います。

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