3

セキュリティ指向のソース コード レビューの目的で、Linux カーネルに登録されているすべての ioctl コマンドを (包括的に) 見つけることに興味があります。また、それらを管理者 (root など) がアクセスできるものと、非特権ユーザーがアクセスできるものに分類したいと思います。

カーネルのソース コードを読みやすくするかどうか、またはユーザー空間でリストをクエリする方法があるかどうかはわかりません。カーネルを調べる必要がある場合、ioctl の登録のためにどの関数を探す必要がありますか?

4

3 に答える 3

5

ioctlは実際にはカーネルに登録されません。ファイルのようなオブジェクトのタイプごとに、使用可能なioctlのセットが異なります。

ほとんどの場合、これらはswitchステートメントを使用して実装されます。

したがって、実際に行う必要があるのは次のとおりです。

  • どのデバイス/ファイルタイプのセットがセキュリティに関連しているかを把握します-ルートによってのみ開くことができるデバイスは、おそらくルートエクスプロイトをチェックする必要はありません。
  • 使用可能なioctlを調べます。

実際には、使用可能なioctlを見つけることは簡単ではありません。多くのデバイスには、それらをリストするマニュアルページがありますが、そうでないものもあり、リストは不完全である可能性があります。

通常、大きなswitchステートメントを持つ関数がどこかにあります。ただし、ある種の「継承」があり、多くのデバイスには、さまざまなレベルで実装されたいくつかの異なる種類のioctlがあります。

同じ「種類」のドライバーは通常、いくつかの異なるタイプのハードウェアに実装されており、多くの場合、かなり多くのコードを共有しています。

たとえば、シリアルポートには、http://lxr.linux.no/#linux+v2.6.35/drivers/serial/serial_core.c#L1107で定義されている独自のioctlがあります

ただし、シリアルポートにはドライバーごとに定義されたioctlも含まれる可能性がありますが、それらはttyであるため、ttyioctlにも応答します。

サブシステムごとに動作が異なるため、サブシステムごとに構造が異なります。

于 2010-09-15T05:14:25.510 に答える
2

man ioctl_list は、std ioctl コマンドのリストと、小さなメモおよび関連するヘッダー ファイルも提供します。

于 2010-09-14T04:53:07.180 に答える
1

キャラクター デバイスの場合は、そのfile_operations 構造体を確認する必要があります。そのデバイスで ioctl を呼び出すと呼び出される ioctl と呼ばれるその構造体に関数ポインタがあります。

各デバイスには独自の ioctl コマンドがあるため、必要なことを行うのは困難です。

于 2010-09-13T19:51:13.833 に答える