AS/400展望台

IFSのウィルス対策



メル・ベックマン著

Microsoft Windowsシステムを悩ませているウィルス、トロイの木馬、ワームなどを寄せ付けないためのi5/OSの機能をiSeriesのユーザーは長きに渡って信頼してきました。これは主にi5/OSの機能に基づいた認証アーキテクチャによるものです。このアーキテクチャは大変「成熟した」(1970年代のS/38に基づく)アーキテクチャで、時に弱点をさらけ出しますが(IBMはそれに対してすばやく対処します)、iSeriesのネイティブ・プログラムやネイティブ・オブジェクトがウィルスに感染したことはありません。

i5/OSでは、ファイル・オブジェクトは実行可能プログラムのふりをすることはできませんし、1つのプログラムが他のプログラムのバイナリ・コードを変更することもできません。プログラムは一旦生成されると不変です。さらに、プログラムはメモリーやディスクのアドレスを使ってオブジェクトに直接アクセスするのではなく、きちんと定義されたセキュアなインタフェースを介してのみオブジェクトにアクセスすることができます。ネイティブのオブジェクトに関して言えば、i5/OSではウィルス作成者の常用技術を無能にします。

ここでのキーワードは「ネイティブ」です。iSeriesの堅牢なオブジェクト・セキュリティは統合ファイル・システム(IFS:Integrated File System)部分までは及びません。特に、ウィルスだらけのWindowsデスクトップ機やWindowsサーバーからのルート・ディレクトリへのリモート・アクセス部分には及ばないことに注意が必要です。リモート・システムがIFSにアクセスする際、そのシステムがウィルスを含んだコードでIFSを感染させる可能性があります。感染していないシステムがあとでその感染されたファイルを読み込むと、読み込んだシステム自身が感染してしまう可能性があります。ウィルスはこのようにしてあっという間に企業ネットワーク全体に広がり、計り知れない損害を及ぼすこともあります。

V5R3まではIFSで利用できる唯一のウィルス対策機能はPCベースのウィルス対策ソフトウェア・パッケージでした。これはIFSのルートをリモートからスキャンするもので、ウィルス対策ソフトからみればもう一台のPCのディスク・ドライブとしてしか認識されていません。悲しいかな、これを可能にするにはスキャンするPCがIFSに対して全オブジェクトへのアクセス権を所有していなければならず、深刻なセキュリティ・リスクに晒すことになります。スキャン・プロセス自体は初回にIFSの全コンテンツを読み込まなければならず、ネットワーク・トラフィックが大量に発生することになります。しかも、2回目以降のスキャンは前回のスキャン以降に修正のあったファイルだけを対象とすることになりますが、次のスキャンまでの間に感染の発生と拡大が起こらないことを保証するものではありません。

V5R3では、IBMはネイティブのウィルス・スキャン対策機能をi5/OSに導入しました。新しいファイル属性およびディレクトリ属性、システム値、出口プログラムなどを利用することにより、iSeriesはサード・パーティ製のウィルス対策プログラムをフックしてIFSに対するリアルタイムの保護機能を提供することができるようになり、次のスキャンまでの間の感染発生の可能性を排除しました。このウィルス保護機能はネイティブで動作するため、余計なネットワーク・トラフィックは発生しません。最も重要な点は、商用目的のウィルス対策ソフトウェアの開発であるか否かに関係なく、i5/OSのウィルス対策拡張機能を誰もが利用できることです。これによりオープン・ソースのウィルス対策スキャン機能をiSeriesに移植できる可能性が高まりました。

V5R3のウィルス・スキャン対策機能には、実際のウィルスのスキャンとソフトウェアの修復機能自体は含まれてないことに注意が必要です。これらの機能はサード・パーティのベンダーから入手するか自分で作成する必要があります。現在発売されている製品が1つありますが、これは実際V5R3の一部として出荷されているもので、ネイティブのウィルス対策保護機能をすぐに利用することができます。Bytware社のStandGuard AV for V5R3(http://www.bytware.com/)がその製品です。また、今後、他のウィルス対策製品が他社から発売されるのはほぼ確実でしょう。こうしたウィルス対策製品を適正に評価したり、自分でウィルス対策機能を作成したりするには、V5R3のウィルス・スキャン機構を理解しておく必要があります。

うれしいことに、この機能拡張部分は素直な作りになっているので、その中身を理解するのには時間はかかりません。新しいファイル/ディレクトリ属性、新しいシステム値、新しいプログラム出口がそれぞれ2つずつできました。この機能拡張部分がそれぞれどのように動作し、どのように連携するのかを理解すれば、i5/OSネイティブのウィルス対策製品がどのようにしてIFSへの強固な保護機能を提供しているかがお分かりただけるでしょう。また、新しい優れたiSeries用のウィルス対策製品を購入したり、自分で開発したりする際にも、準備万端であると言えます。

i5/OSの疫学

i5/OSのウィルス対策機能のコンポーネントについてお話しする前に、IFSのうち感染に脆弱な部分について説明します。IFSのTYPE2ファイル・システムであるルート(/)ディレクトリ、QOpenSys、ユーザー定義ファイル・システム(UDFS)がこれに該当します。これらのファイル・システム内ではストリーム・ファイル(*STMF)だけがウィルスに対して脆弱です。というのも、外部システムが直接読み書きできるファイルがストリーム・ファイルだけだからです。

V5R2では、IBMはIFSに対するパフォーマンス強化と信頼性向上機能としてTYPE2ディレクトリを導入しました。IFSの全ディレクトリをTYPE1フォーマットからTYPE2フォーマットへまだ変換していないのであれば、CVTDIR (Convert Directory)コマンドを実行する必要があります。OPTION(*CHECK)パラメータは、変換する必要のあるディレクトリが残っていた場合に、それを識別します。*TYPE2ディレクトリやディレクトリ変換の詳細については、V5R3 iSeries Information Centerをご覧ください。(publib.boulder.ibm.com/html/as400/infocenter.htmlの左側のナビゲーション・バーで、[ファイルとファイル・システム(Files and file systems)]―[統合ファイル・システム(Integrated file system)]―[ディレクトリを*TYPE1から*TYPE2へ変換(Convert directories from *TYPE1 to *TYPE2)]をクリックしてください。)

IFSディレクトリをすべてTYPE2に変換したら、V5R3のウィルス・スキャン有効化機能を利用することができます。スキャン・プロセスは2つのフェーズからなります。まず、既存のすべてのファイルがウィルスに感染していないことを確認するために、IFS全体をスキャンする必要があります。ウィルス・スキャン機能はインストール時にこのタスクを実行し、感染したファイルを見つけた場合は修復または隔離して、感染していないファイルについてはクリーンなファイルであるというマークをつけます。スキャン機能はウィルス定義のための独自のデータベースを使用しており、ウィルス定義を常に最新の状態に保ちます。初回の検査が完了したあとは、変更のあったファイルやバックアップから回復されたファイルだけがスキャン対象となります。ウィルス定義が更新された場合は全ファイルがスキャン対象となります。

さてここからが2つのウィルス・スキャン用出口プログラムの出番です。ウィルス・スキャン機能は、これらの出口プログラムがIFSファイルのライフ・サイクル中の重要な時点で起動されるようにi5/OSに登録します。最も頻繁に実行される出口ポイントはファイルがクローズされる時です。ファイルを書き込むときは、そのファイルを最終的にクローズすることで、ファイルに対して行った更新が永続的になるようにしなければなりません。IBMはファイル・クローズ時の出口ポイントを提供していますが、これはユーザーがIFSファイルに書き込んでクローズする際に必ず出口プログラムを実行するための出口ポイントになります。こうすることで、ウィルス対策機能がファイル全体をスキャンして感染がないかどうかを検査し、感染していなければクリーンであるとマークします。

IBMは安全のため、まだ一度もスキャンされていないIFSファイル、最新ではないウィルス定義ファイルでスキャンされたファイル、最後にスキャンされてから修正されたファイルをオープンする際に起動される出口プログラムのための第2の出口ポイントも提供しています。つまり、初回のスキャン完了後に(リモート・ユーザーではなく) i5/OSがファイルをシステム中に回復させたために初回にスキャンされなかったファイルや、あるいは最新ではないウィルス定義ファイルでスキャンされたファイルを、ウィルス対策機能が検知することができます。

いずれの出口ポイントにおいても、出口プログラムには、感染したファイルを書き直したりファイルのクローズ操作やオープン操作を失敗させたりすることでそのファイルを修復し、感染したファイルがIFS中に置かれたままにするのを防ぐオプションがあります。プロセス中の両出口ポイントにおいて、ウィルス・スキャン機能はファイルの属性やウィルス対策機能用のシステム値など、他のシステム情報を考慮して動作をガイドします。この意思決定の詳細はスキャン機能の開発者次第です。i5/OSはウィルス・スキャン機能を動作させるために必要なIFSのフックを提供しているに過ぎません。

2つずつ

ウィルス対策を有効にするためのコンポーネントが2つずつペアになっています。まずは新しいファイル属性とディレクトリ属性について見てみましょう。無駄なスキャンをなくすために、新しいファイル属性*SCANはファイルをスキャンすべきか否か、いつスキャンすべきかを指示します。*SCAN属性に付随しているのはスキャン状態情報です。この属性はファイルのiSeries Navigatorプロパティにあります。optという名前のディレクトリ下にあるoperという名前のファイルのスキャン属性と状態情報を図1に示します。*SCAN属性は*NO、*YES、または*CHANGEONLYという3つの値を取ることができます。*NOはファイルが一度もスキャンされていないことを示し、*YESはファイルがオープンおよびクローズされるたびにスキャンされることを示し、*CHANGEONLYはファイルが最後にスキャンされてからファイルに更新があったときだけスキャンされることを示します。

またすべてのファイルは、前回スキャンされたときにどのウィルス定義を使用したか、スキャンがバイナリのみかテキストのみか、スキャンの際にどのコード文字セット識別子(CCSID:Coded Character Set Identifier)が使用されたかを示す状態情報を備えています。ウィルス・スキャン機能はスキャン署名コードを使用して、各ウィルス定義をi5/OSに登録します。図1に示すファイルは一度もスキャンされていませんので、スキャン状態情報がはっきりと表示されていません(利用できません)。

新しいディレクトリ属性*CRTOBJSCANは、ファイルの生成時にストリーム・ファイルの*SCAN属性の初期値を指定します。optディレクトリを例とした場合のこの属性を図2に示します。スキャンする必要のないファイルを含んだディレクトリに対しては、*CRTOBJSCANを*NOに設定します。それ以外の場合は、ファイルの安定度に応じた値を選択します。通常は*CHANGEONLYを選択しておくのがよいでしょう。ただし、バックアップから頻繁に回復されるようなファイルがあるディレクトリに対しては、*YESを指定して、回復時にそのファイルがスキャンされるようにしておく必要があります。

次に、ウィルス・スキャン機能をサポートする2つの新しいシステム値、QSCANFSおよびQSCANFSCTLについて説明します。QSCANFSは単にウィルス・スキャン機能をオン/オフするだけです。*OFFを指定するとすべてのウィルス・スキャン機能が完全に無効になり、*ROOTOPNUDを指定するとルート・ディレクトリ、QOpenSysディレクトリ、UDFSディレクトリのスキャンが有効になります。IBMは将来的には、単純に*ONを指定するのではなく*ROOTOPNUDを指定するよう要求する計画のようです。i5/OSの今後のリリースに、新しいファイル・システムのタイプが加わるのではないかと推測しています。

スキャン機能を有効にしていると、2番目のシステム値*QSCANFSCTLが意味を持ちます(図3)。取り得るシステム値は*NONE、*FSVRONLY、*ERRFAIL、*NOWRTUPG、*USEOCOATR、*NOFAILCLO、*NOPOSTRSTで、1つ以上の値を取ることができます(CLでは余白をデリミタとして使用し、iSeries Navigatorでは複数選択可能なチェックボックスから選択します)。この値の設定により、i5/OSにおけるスキャン機能の実行時オプションの組み合わせを制御することができ、それによりスキャン機能がどのように実行されるかが決まります。この設定について説明する前に、どのような制御が可能であるのか、そのオプションについて説明しましょう。

最初のオプションは書き込みアクセスのアップグレードと呼ばれています。ユーザー・プログラムがファイルを読み込みのみの権限でオープンしたときに、ウィルス・スキャン機能が起動してファイルが感染していることを検知した場合、そのファイルを修復するには書き込みアクセス権限が必要になります。このオプションが有効になっていると、読み込みのみの権限が与えられているファイルに対する一時的な書き込み権限を、ウィルス・スキャン機能に自動的に付与します。

2番目のオプションは、外部ネットワーク要求のみか、外部要求とネイティブ・アプリケーション要求の両方なのかという、どのアクセスがスキャンを必要としているかを示したものです。ウィルス攻撃は主としてWindowsマシンからネットワークを経由して来るものなので、iSeriesのネイティブ・プログラムは味方でありIFSを感染させないと仮定することで、スキャン機能の効率を高めることができます。しかし、被害妄想に陥っているのであれば、リモート・アクセスもネイティブ・アクセスもスキャンする必要があるでしょう。

3番目のオプションは出口プログラムが失敗したときの動作の指定です。このオプションは、出口プログラム側における実際の異常動作のためだけのもので、出口プログラムが感染を発見したときのためのものではありません。より上位の操作を失敗させるか、そもそも出口プログラムが呼ばれなかったように装うかのいずれかを選択することができます。当然のことながら、安全な選択は、出口プログラムを起動させた要求または操作を失敗させることです。

最後のオプションである4つ目のオプションは、回復されたオブジェクトをいつスキャンするのかを指定するオプションです。ファイルのスキャン属性に応じて、回復時に即座にスキャンするのか、あとでユーザーがファイルをオープンしたときにスキャンするのかを指定できます。安全な方法は、回復されたファイルすべてを常にスキャンするという方法ですが、バックアップからの回復時間を大幅に増大させる可能性があり、回復されたファイルをオープンする際に必ずスキャンするように設定している場合はやり過ぎになります。

オプションに関する以上の知識を頭に入れて、*QSCANFSCTLの各値の意味について学びましょう。

*NONE:この値はデフォルト値であり、出口プログラムが起動されたときに以下のスキャン条件が選択されることを示しています。(1)書き込みアクセス・アップグレードを採用する。(2)スキャンが失敗したときは上位のレベルの要求を失敗させる。(3)回復されたオブジェクトは自動的にはスキャンしない。

*FSVRONLY:リモート・ファイル・システムからのアクセスだけがスキャンされます。ネイティブのi5/OSプログラムのアクセスは、ファイル・スキャン属性の設定にかかわらず、スキャンの対象にはなりません。

*ERRFAIL:出口プログラムが失敗した場合は上位レベルの要求を失敗させます。これは出口プログラムが存在しない場合、インタフェース・エラーが発生した場合、コーディング・エラーやその他の障害により出口プログラムがファイルをスキャンできない場合に発生します。上位レベルの呼び出し側プログラムは、ウィルス・スキャンが完全に終了しなかったことを示すメッセージを受け取り、呼び出し側プログラムによる該当するファイルへのその他のアクセスが禁止されます。*ERRFAILが指定されていない場合、上位レベルの要求は、まるでウィルス・スキャンが要求されなかったかのように正常に完了します。

*NOWRTUPG:書き込みアクセス・アップグレードを禁止し、ウィルス・スキャン機能が読み込みのみ許可されているファイルを修復しようとするのを禁止します。この値が設定されている場合、ウィルス・スキャナは上位レベルのアプリケーションに対して、該当するファイルへのアクセスを禁止します。

*USEOCOATR:この発音しづらいオプション名は「use the only-when-objects-have-changed attribute to control the scan (オブジェクトに変更があったときのみ属性を使用してスキャンを制御する)の略です。このオプションを指定しない場合、ファイルの*SCAN 値である*CHANGEONLYは無視されます。

*NOFAILCLO:出口プログラムが失敗したときにクローズ・リクエストが失敗するのを防ぎます。上位レベルのプログラムは、出口プログラムが失敗したことを知らされずに、制御を取り戻します。ただしファイルはクローズされず、ファイルに対して行われた変更は破棄されます。さらに、ファイルのスキャン状態はスキャンが失敗に終わったことを示します。 *NOPOSTRST:ファイルの回復時にすぐにはスキャンしません。通常は、ファイルが回復されるとすぐに自動的にスキャンされ、オープンされるとまた重複してスキャンされます。この値を有効にしておくことで無駄なスキャンをなくすことができますが、感染しているファイルが回復された場合、あとで必要に応じてスキャンが実行されて修復されるまで、ファイル・システム中に感染された状態のまま放置されることになります。バックアップする際にすべてのオブジェクトを確実にスキャンしておくことで、この値を設定しておいても安全となります。

ウィルス対策コンポーネントの3番目のペアはQIBM_QP0L_SCAN_OPENとQIBM_QP0L_SCAN_CLOSEという出口プログラム自体のペアです。この出口プログラムはスキャン対象のファイルを指し示しているファイル記述子を入力として受け取り、スキャンの結果としてウィルスが発見されたかどうか、ウィルスが発見された場合はそのファイルの修復に成功したかどうかを示す状態コードを出力として返します。出口プログラム自体はファイルの属性やシステム値などから間接的に他の情報を大量に受け取り、これらの情報のすべてを考慮に入れて意思決定を行います。IBMは、この出口プログラム用インタフェースに関する全ドキュメントをpublib.boulder.ibm.com/infocenter/iseries/v5r3/ic2924/index.htm?info/ifs/rzaaxscan.htmで提供しています。

処置

ウィルス対策スキャン機能がどのようにファイルを処理するのかを理解するには、スキャンされたあとのファイルの属性を見てみると良いでしょう。スキャンしたあとのoperファイルのiSeries Navigatorプロパティボックスを図4に示します。まず、ウィルスをスキャンしたときにファイルにアクセスしたプログラムのユーザーIDとグループIDを見ておくと便利です。この情報はトラブルシューティングの際、特に感染したファイルの修復に失敗した場合に重要です。*NOFAILCLO実行時オプションを指定していなければ、呼び出し側プログラムは終了させられます。最後にスキャンすることになったユーザーが誰であるかを知ることで、ウィルス感染によるアプリケーション・エラーの追跡と問題解決に役立ちます。

次に重要な情報はスキャン状態です。「成功(Successful)」となっている場合はファイルがスキャンされ、感染が見つかった場合はその修復に成功したことを示します。ファイル属性はファイルがスキャンされて感染が見つからなかったのがいつであるのかを示すわけではなく、スキャン機能の開発者が各スキャン・イベントをログするように設計してあるという前提で、スキャン機能アプリケーションのログがその情報を提供します。

スキャンが正常に完了したときは、プロパティボックス中のファイルのスキャン署名、バイナリのフラグ、およびCCSID値の欄に値が入ります。スキャン署名の欄に「不一致(Does not match)」とレポートされている場合は、現在のウィルス定義が有効になる前のある時点でそのファイルがスキャンされたことを意味します。そうしたファイルは次回オープンされたときに自動的に再スキャンされます。バイナリのフラグは、そのファイルがバイナリ・ストリームとして扱われた(そしてテキストのみの署名ではなく、オブジェクト・コードのウィルス署名に対してスキャンされた)ことを意味します。CCSID値は、ファイルをスキャンしたときに使用されたコードセットを示します。この例では500(EBCDIC)と1200(UCS-2 ASCII)です。

内部エラーまたはコーディング・エラーが原因でスキャン・プログラムが処理に失敗した場合、スキャン状態は「失敗(Unsuccessful)」になります。この場合、スキャン・プログラムのバグによりスキャンが失敗したことになるため、他のスキャン結果情報はありません。感染しているファイルを修復できなかったためにスキャン・プログラムが処理に失敗した場合もスキャン状態は「失敗(Unsuccessful)」になりますが、スキャン署名や他のスキャン結果情報が提供されます。修復に失敗するのは*NOWRTUPGが指定されているか、もしくはスキャン・プログラムが明示的な失敗結果を返した場合のみです。

スキャン機能の動作の大部分はスキャン機能の開発者に委ねられているという点を忘れないでください。IBMのスキャン有効化フック機能は、ウィルス定義、スキャン方法、修復テクニックなどを選択するという点において、自由度が高くなっています。たとえば、EBCDIC CCSID (500)に対するスキャンは実装しないと開発者が選択することもできますし、修復できない感染ファイルは削除するという選択をすることもできます。開発者はファイルを修復する前にバックアップ・コピーを作成することもできますし、修復はせずに単にその感染ファイルを保持(隔離)領域にコピーすることもできます。これらはいずれもベンダー次第であり、工夫と機能を実装する余地を多く残しています。

対処法

本稿の執筆時点で、V5R3のウィルス対策機能を利用したスキャン機能を提供している商用ベンダーはBytware社だけです。他社もじきに提供してくるでしょうし、GPL(General Public License)のオープン・ソースのウィルス対策スキャン・プログラムであるClamAV (clamav.net)のようなものを移植したオープン・ソース版も登場するでしょう。自分で独自のウィルス対策プログラムを開発してもかまいません。V5R3のウィルス対策ソリューションを購入するにしても、求めるにしても、自分で開発するにしても、i5/OSのウィルス対策機能がどのように動作するのかを理解しておくことが有益でしかも安全な意思決定をする際の一助となるでしょう。

メル・ベックマン氏はベル・データ鰍フ業務提携先、Penton Media, Inc.が発行するiSeries NEWS誌のシニア・テクニカル・エディタです。





↑このページのトップへ
TOPPAGE

BELLDATA, Inc. Copyright reserved.