「USBデバイスの識別IDとは?」

今回はデバイスを制御にどのように識別しているのかお話します。

RunDXの基本的なデバイス制御手法に、

「まずすべてのストレージの使用を禁止しておいて、使わせたいUSBデバイスだけを後からホワイトリストに登録して、個別に使用を許可する」

というのがあります。

「登録」って簡単に言いますが、いったいUSBデバイスの何を登録するのか見ていきたいと思います。
ご案内はいつものランDXコラムを担当する株式会社ラネクシー 鍵八がお届けします。

1. USBデバイスのIDとは

皆さんご存知のように、USBで接続するデバイスには、たくさんの種類がありますね。
おなじみのUSBメモリー、外付けハードディスク、光学ドライブ、キーボード、マウス、外付けSDカードリーダー、プリンター、スピーカー、スキャナー、モデムなどなど。

デバイスにもよりますが、多くの場合これらのデバイスをパソコンに接続すると何もしなくてもすぐに使えるようになっています。
これは、それぞれのUSBデバイスが自分がどんなカテゴリー(USBの仕様では「デバイスクラス」と言うようです)に属するデバイスなのか、という情報を持っていて、OS(WindowsやMacOSなど)がそのカテゴリーに対応していればあらかじめ持っている標準のドライバー(プログラム)でそのデバイスを使用できるからです。

さて、RunDXがUSBデバイスをホワイトリストに登録する際には、どんな情報を登録しているのでしょうか。
「特別にこれだけは使用を許可する」のですから、意図しない他のデバイスが使えてしまっては意味がありません。
ですから、この場合、上に書いたようなカテゴリー(デバイスクラス)を登録したのでは、そのカテゴリーに属する全てのデバイスが使えてしまうため、都合が悪いことになります。
ところで、ホワイトリストに登録する情報についてお話しする前に・・、少し脱線しますが、他と重複しない個体識別情報として、皆さんご存知の身近な例があります。

マイナンバー

日本に住民票がある人なら全員、「マイナンバー」と呼ばれる個人番号を一人に一つずつ持っています。
この番号は重複しないように決められていますので、マイナンバーで個人識別ができるようになっています。
マイナンバーは12桁の数字で構成されているのですが、まず住民票コードから非公開の計算式で生成される左11桁の数字があって、次にこの11桁を使ってムズカシイ計算をすることで1桁の検査用数字(※)というものを導き出し、これを合わせた12桁をマイナンバーとしています。

  • 検査用数字は左11桁の数字の妥当性を判定するもので、コンピューターにマイナンバーを入力する際のタイプミスの防止などに役立ちます。

このような個体識別情報を、USBデバイスが持っていれば都合がいいですね。

(脱線ついでに調べてみると、マイナンバーのPRキャラクター、シロウサギの妖精マイナちゃんの露出は相変わらずですが、知らない間にマイナンバーカードのICチップ内を守る忠犬「マイキーくん」なるものも出ていたのですね・・。敢えて感想は述べませんが・・。)

実は、ほとんどのUSBデバイスは、マイナンバーのような、デバイスを個体識別できる固定情報をデバイス内部にあらかじめ持っています。それが「ベンダーID」「プロダクトID」「シリアル番号」です。

ベンダーID (VID) デバイスのメーカーに対して割り振られたID
プロダクトID (PID) メーカーにより製品に対して割り当てられたID
シリアル番号 (Serial Number) メーカーにより製品に対して割り当てられた通し番号

ではこれから、この3つの識別情報を使って、あるUSBデバイスを識別することを考えてみます。

2. デバイスモデルとユニークデバイス

ここに、2本のUSBメモリーがあります。同じメーカーの同じ型番の品です。

 USBメモリー1
 USBメモリー2

区別をつけるために番号を振りましたが、それ以外の見た目は全く同じですね。

このUSBメモリー、番号を振ったことで、人間の目には個体識別できるのですが、コンピューターではどのように個体識別するのでしょうか。

DeviceLockは、ホワイトリストによる個体識別を実現するために、コンピューターに接続されたUSBデバイスの実機から、3つの情報「ベンダーID」「プロダクトID」「シリアル番号」を調べます。

なお、この情報はWindowsのツールを使って調べることもできます。

  1. まずUSBデバイス情報を調べたいデバイスをコンピューターに接続して、「コントロールパネル」から「デバイス マネージャー」を起動、表示されるデバイスリストから「ユニバーサル シリアル バス コントローラー」を展開します。
  2. この中から、USBデバイス情報を調べたいデバイスを探します。リストに機種名が出ているわけではないので、コンピューターにたくさんのUSBデバイスが接続されている場合、目的のデバイスを探すのは難しいかもしれません。
    USBメモリーだと、「USB 大容量記憶装置」などと表記されていることが多いかと思います。
  3. 目的のデバイスの行をマウスで右クリックして、デバイスのプロパティを表示します。
  4. プロパティ画面で「詳細」タブを選んで「デバイス インスタンス パス」を表示します。
    ここで「値」欄に出ている文字列がデバイスのUSBデバイス情報です。
    この例では「USB\VID_0951&PID_1666\4CEDFB72A4481681B904078C」となっています。

    RunDXは、このUSBデバイス情報を「デバイス選択」 機能で取得します(下の画面)。
    デバイスマネージャーと同様の値「095116664CEDFB72A4481681B904078C」が表示されているのがわかります。

さて、USBメモリー①のUSBデバイス情報は「USB\VID_0A6B&PID_000A\07950102C78B0007」、USBメモリー ②のUSBデバイス情報は「USB\VID_0A6B&PID_000A\079501027B990001」となっていました。

 USB\VID_0A6B&PID_000A\07950102C78B0007
 USB\VID_0A6B&PID_000A\079501027B990001

これを見るとわかるかと思いますが、「VID_0A6B」と「PID_000A」の部分は値が同じです。
「VID」はベンダーID、「PID」はプロダクトIDです。①と②は同じメーカーの同じ型番の品ですから、「VID」と「PID」が同じなのは理解できますね。
右側16桁はシリアル番号になります。同じメーカーの同じ型番でも、違う個体ですから、異なるシリアル番号が割り当てられているということになります。(製品によって桁数が異なる場合があります。また、シリアル番号を持たない製品もあります。)
RunDXのホワイトリストで見た時のイメージ図はこのようになります。

RunDXの制御単位では、

「ベンダーID」と「プロダクトID」の組み合わせをプロダクト
「ベンダーID」と「プロダクトID」と「シリアルナンバー」の組み合わせをシリアル

と呼んでいます。
プロダクトとシリアルの違いは何でしょう。

プロダクト は、「VID」と「PID」の組み合わせになりますので「このメーカーのこの型番」までの識別です。
つまり、「同一メーカー・同一型番の製品であれば何でもよい」という、製品(機種)識別になります。
(シリアル番号を持たない製品の場合、必然的にデバイスモデルの扱いになります。)

一方 シリアル は、「VID」と「PID」と「シリアル番号」の組み合わせになりますので「このメーカーのこの型番で、シリアル番号がこれ」という識別ですから、
「このメーカー・この型番でこのシリアル番号でなければならない」という、個体識別ができるのです。

RunDXのストレージホワイトリストは、プロダクトとシリアルの両方に対応しています。

3. SDカードの制御は可能か

最後に、USBメモリーと同じような用途で利用されることもある「SDカード」についてお話ししておきます。
SDカード、ますます大容量で低価格になっていますね。切手みたいな小さくて薄いものに、何GBものデータが記録できるようです。
デジタルカメラに装着して、撮影した写真画像の保存先として使用、さらにカメラから取り出して今度はパソコンに装着、写真データをパソコンに取り込んだりできますよね。

また、ドライブレコーダーの保存先や、スマートフォンの外部ストレージなど、私も常日頃、お世話になっております。
かさばらず持ち運びに便利ですし、最近のノートパソコンにはSDカードリーダーが標準でついているものも多いですから、USBメモリーよりもSDカードを使いたい気持ちもわかりますね。
そのためか、お客様から「RunDXでSDカードの個体識別制御はできますか」といったお問い合わせをいただくことも多くなっています。

私も詳しいことはわかりませんが、SDカードはカードごとに個体識別番号(上で説明したUSBデバイスの識別番号とは異なります)を持つことができる仕様のようで、SDカードの出荷時には既に個体識別番号を持っているものと思われます。
これが利用できればよいのですが、そう簡単にはいかない事情があります。
SDカードを利用するには、「カードリーダー」と呼ばれる読み書き装置が必要です。

カードリーダーには大きく分けて2つのタイプがあるようです。
コンピューター内蔵の、PCI接続SDカードリーダーなどにはSDカードから個体識別番号を取得できるものがあり、この番号をソフトウェアから利用することができれば、個体識別制御ができることになります。
ところが、このところ普及しているUSB接続のSDカードリーダーでは、SDカードとカードリーダーを合わせて「リムーバブルデバイス」と認識し、SDカードが持っている個体識別番号を認識できないものが多いため、個体識別制御をしたくてもできないことになります。
つまり、世の中にSDカードの個体識別番号を認識する機器と、認識しない機器があり、認識しない機器がある以上、SDカードの個体識別番号を利用した個体識別制御はソフトウェア上できないのです。(ソフトウェア的な工夫によりSDカードの個体識別制御を実現する可能性を否定するものではありません。)

RunDXは現状、SDカードの個体識別制御には対応していません。

なお、通常、USB接続のカードリーダーはUSBデバイスとして「ベンダーID」「プロダクトID」「シリアル番号」を持っているので、これをストレージホワイトリスト に登録し、「このカードリーダーだけは使用できる」といった利用法は可能です。
この場合、使用を許可されたカードリーダーにどのSDカードを装着しても、読み書きができることになります。

資料請求はこちらから

ではまた。

RunDX について詳しくはこちら
RunDX 無料トライアルはこちら
お問い合わせはこちら

この記事を書いた人

株式会社ラネクシー RunDX担当プリセールス 鍵八

RunDXリリース時期にRunDX担当となったことで情報セキュリティ対策について勉強中。
バージョンアップするRunDXと共にバージョンアップを目指してます。

投稿日:2024年05月07日

ランDXコラム 記事一覧

今すぐトライアルを試す

RunDXのトライアル版(無料)はインストール後、全ての機能を全ての機能を30日間利用することが可能です。また、製品版を購入後、プロダクトキーを製品版に差し替えるだけで、トライアル版から製品版として継続利用が可能です。

file_download 無料トライアルはこちら