web-dev-qa-db-ja.com

udevで不明または未承認のデバイスを検出するにはどうすればよいですか?

私はクライアントのためにセキュリティに敏感なセットアップを設計しています。状況は次のとおりです。

機密情報は、権限のない人がアクセスする可能性のあるサーバーに保存する必要があります。 100%安全な方法でハードウェアを保護する方法はありません。

ここで私のアプローチ:

ルートマシンをcryptsetup/luksで暗号化してから、イメージをcryptsetup/luksで暗号化し、仮想マシンのハードドライブとしてマウントします。仮想マシンには再び暗号化されたルートFSがあります。

次に、実行中のマシンのハードウェアに誰もアクセスできないようにします。 USBサムドライブやFirewireデバイスなど、接続されている未知のデバイスを検出したい.

devで不明なデバイスをエレガントに検出する方法はありますか?これまでのところ、私が知っているデバイスのアクションを定義する方法しか見つかりませんでした。しかし、不明なデバイスが接続された場合のアクションを定義したいと思います。

ご意見ありがとうございます。

2
flowolf

このようなものが必要な場合は、すべてのデバイスを疑わしいものとして扱い、デバイスが挿入されるたびに、そのデバイスの所有者のみが知ることができるものを要求する必要があります。以前に承認されたと思われるデバイスでは、挿入したユーザーが同じ人物である必要はないため、これをスキップすることはできません。

未知のデバイスをudevでエレガントに検出する方法はありますか?

udevは「不明なデバイス」を理解しません。/dev/にエントリがあるため、USB/firewireデバイスをすべてまたはまったく理解しません。 udevが不明な場合、デバイスがそのシステムで動作しないことを意味します。また、ID_VENDOR_IDとID_MODEL_IDでは、同じメーカーとモデルの2つのデバイスの違いを確認できません。

可能な方法:

デバイスの挿入時に実行される基本的なスクリプトについては、 https://wiki.archlinux.org/index.php/Execute_on_USB_insert を参照してください。これにより、ユーザーがデバイスにアクセスできることを確認する必要があるメニューが表示されます。

リンクのルール...

ACTION=="add", RUN+="/usr/bin/exdongle run /media/%k-%E{dir_name}"

/media/にマウントしようとするデバイスで動作し、スクリプト「exdongle」を開始します(免責事項があるため、スクリプトには調整が必要な場合があります)。


「不明」とみなすのは、LinuxでUSBとして知られている特定のデバイスです。したがって、USBサポートが存在する場合、すべてのUSBデバイスは同等に扱われます。デバイスにはベンダーと製品IDがありますが、USBデバイスごとではなくメーカー/モデルごとに一意です。


一意のIDを持つ唯一のUSBデバイスはドングル( http://en.wikipedia.org/wiki/Software_protection_dongle )です。検証用のソフトウェアが付属する傾向があります(ヘッドレスシステム用ではありません)が、IDをファイルに保存し、上記のようなスクリプトを作成して、既知のIDのセットに対してテストすることができます。

1
Rinzwind