本文中で述べた脅威は,そもそもInternet Explorer(IE)がローカルのActiveXコンポーネントを呼び出し,その機能を利用できることが原因となっている。

 ActiveXはインターネットに関連する技術の総称だったが,現在ではCOM(Common Object Model)を使って構築された技術をActiveXと呼び,ほぼCOMと同義のように使われている。ActiveXコンポーネントとは機能単位にまとまったプログラムの部品である。プログラマはこれらコンポーネントを呼び出すことで,OSの機能を簡単に利用できる。レジストリを書き換える場合を例にすると,「レジストリのこの部分のこのキーの値を『A』という値にする」ということをActiveXコンポーネントに依頼するだけである。

 WindowsはActiveXコンポーネントの塊である。例えば,本文中で述べたスクリプト実行環境WSH(Windows Scripting Host)やファイル操作用のFile System Object(FSO)以外に,データベース・アクセス用のADO(ActiveX Data Objects),ディレクトリ・アクセス用のADSI(Active Directory Service Interfaces)などのActiveXコンポーネントも標準で備えている。また,Officeや一太郎などのアプリケーションもActiveXコンポーネントを備える(図B-1[拡大表示] )。

 これらのActiveXコンポーネントは,IEからスクリプト言語で記述された内容に沿って呼び出される。IEは標準でVBScript,JScript(JavaScriptのMicrosoft版)の二つのスクリプト・インタプリタを持っている。どちらの言語で解釈するかはタグの中にある「<SCRIPT LANGUAGE="○○">」の○○部分で決まる。スクリプト内でActiveXコンポーネントを使うように宣言した場合には,IEがそのコンポーネントを呼び出して処理を依頼する。

 また,IEはダウンロードしてきたActiveXコンポーネントを呼び出して処理を依頼することもできる。具体的には「C:\Windows\Downloaded Program Files」(Windows 95/98/Meの場合)または「C:\Winnt\Downloaded Program Files」(Windows NT/2000/XPの場合)フォルダにダウンロードしたコンポーネントを呼び出せる(図B-2[拡大表示])。

図B-1●Internet Explorer(IE)とActiveXコンポーネントの関係。
IEからローカルに備えるActiveXコンポーネントとインターネット上からダウンロードしたActiveXコンポーネントの両方を利用できる
 
図B-2●ダウンロードされたActiveXコンポーネントの例。
「C:\Windows\Downloaded Program Files」(Windows 95/98/Meの場合)または「C:\Winnt\Downloaded Program Files」(Windows NT/2000/XPの場合)フォルダにダウンロードされる

 ActiveXコンポーネントはEXEファイルなどと同様にマシン上で直接実行されるバイナリである。EXEファイルと同様の操作がOSに対して可能である。つまり,ダウンロードしてきたActiveXが悪意あるプログラムだった場合,バックドアを開けることも,OSの各種設定を変更することも簡単に行える。これが不用意にダウンロードしたActiveXコンポーネントが危ないと言われる理由である。

認証はローカルとダウンロードで異なる

 ActiveXコンポーネントは使われ方次第で危険なものだ。ただ,IEは無条件にActiveXを呼び出し,その機能を利用しているわけではない。適切なセキュリティ設定がされていれば,不正なActiveXを呼び出さないような仕組みを用意している。この仕組みはローカルにインストールされているActiveXコンポーネントとダウンロードしてきたActiveXコンポーネントで異なる(図B-3[拡大表示])。

 ローカルにインストールされている場合は,ActiveXコンポーネントを起動する前にレジストリ値を参照して,ActiveXコンポーネントを起動してよいかを決定する。IEでは,このレジストリ値のことを「安全マーク」と呼んでいる。

 図B-4[拡大表示]がその具体例だ。この画面はレジストリ・エディタで「Tabular Data Control」と呼ばれるデータ整形用のActiveXコンポーネントのパラメータが書かれた部分を表示させたものである。「HKEY_CLASSES_ROOT\CLSID」に並んだActiveXコンポーネントごとのレジストリの中にある「Implemented Categories」に「7DD95801-9882-11CF-9FA9-00AA006C42C4」(Safe For Scripting)と「7DD95802-9882-11CF-9FA9-00AA006C42C4」(Safe For Initializing)というキーがあれば,IEは「安全マーク付き」と判断する。もし,このキーがなければ,安全ではないと判断する。

図B-3●ローカルにあるActiveXコンポーネントとインターネットからダウンロードしたActiveXコンポーネントの認証方式の違い
 
図B-4●「安全マーク」の付いたActiveXコンポーネントのレジストリ設定例

 ただし,本特集の後半で説明するIEのセキュリティ設定で「スクリプトを実行しても安全だとマークされていないActiveXコントロールの初期化とスクリプトの実行」が許可されている場合はこの認証機構はスキップしてしまう。

 一方,ダウンロードしたActiveXコンポーネントの場合は,ActiveXコンポーネントがディジタル証明書を持っているかどうかで認証する。ディジタル証明書を持っている場合は,ActiveXコンポーネントが改ざんされていないかを検証し,問題がなければ実行する。

 証明書の発行は,米Verisign社などの証明書発行機関に依頼する。この際,会社の登記情報など身元を提出/証明する必要がある。犯罪者は一般に自分の身元を知られたくない。このため,悪意ある証明書付きのActiveXコンポーネントは作りにくい。ただし,認証機関はプログラムの善悪は判断しないため,危険なプログラムでないという保証はない。

 IEのセキュリティ設定で「未署名のActiveXのダウンロード」を許可していると,証明書なしのActiveXコンポーネントをチェックせずに実行してしまう。

(中道 理,藤田 憲冶)