メニューボタン
IBMi海外記事2010.05.10

RPGによる監査ジャーナルの分析

Carsten Flensburg 著

システム監査ジャーナル QAUDJRN の構成方法によっては、このジャーナルには、出力システム活動を公開するだけでなく、システム・セキュリティーとアクセス制御について考えられる妥協点を文書化する豊富な情報が含まれています。監査およびセキュリティーに関する包括的な情報源と大量のデータがしばしば入手できると想定した場合、一般的なシステム・セキュリティーを担当するセキュリティー担当者、また当然ながら、特に社内外のシステム監査員に固有のイベントおよびアクションをフィルタリングする作業が即課題になります。この記事では、優先 Analyze Audit Journal (ANZAUDJRN) コマンドを使用して、これらのイベントやアクションをフィルタリングする方法について説明します。

オンボード監査ツール

IBM i では、Display Journal (DSPJRN) コマンドや Display Audit Journal Entry (DSPAUDJRNE) コマンドなど CL コマンド形式で多数のネイティブ監査ツールが利用できます。これらのコマンドは、コレクションに最近追加された Copy Audit Journal Entry (CPYAUDJRNE) コマンド同様、しばらく稼動しています。特に後者のコマンドは調査を行う場合に便利です。ジャーナル項目の項目固有データ・セクションのすべての情報を個々のデータ・フィールドにマップするためです。今度は、これによって、項目イベントのタイプ、名前、ライブラリー、ジャーナル項目に関連付けられたオブジェクト・タイプ、その他項目固有の重要な情報を問い合わせします。

しかし CPYAUDJRNE はその名前が示すように、取得した情報を Query/400 や類似のツールで処理する必要がある出力ファイルにコピーします。調査は 2 段階で行います。同様に、CPYAUDJRNE コマンドには DSPJRN コマンドで使用可能なパラメーターがいくつか欠けており、例えばジョブ名およびプログラム名に基づいてジャーナル項目を直接除外する選択肢がなくなっています。こうした状況に遭遇した場合に魅力的なのは、IBM i で使用できる包括的なツールセットにより、たとえ予算が厳しくても私の特定のニーズを満たすユーティリティーを簡単に考案し、構築できる点です。必要なのは ILE RPG コンパイラーと API マニュアルだけです。

しかし、ジャーナル項目の処理については、API 以外の選択肢が存在します。ジャーナル項目をリアルタイムに処理するため、Receive Journal Entry (RCVJRNE) コマンドを頻繁に使用しています。これでジャーナル・レシーバーに到着したジャーナル項目を取得し、処理できます。また、ジャーナル項目を CL プログラムに抽出するための Retrieve Journal Entry (RTVJRNE) コマンドがあります。しかし、ジャーナル項目の任意のサブセットを指定する場合は、幅広いパラメーター・セットが提供されている点、また選択されたジャーナル項目を早く処理し、戻すという両方の点で Retrieve Journal Entries (QjoRetrieveJournalEntries) API に優るものはないでしょう。

API 文書 ― 一見した場合ともう一度見た場合

一見すると QjoRetrieveJournalEntries API パラメーター (図 1) は、かなり障害を克服できるように見えます。もう一度見て、そのオプションのサブストラクチャーを備えた項目選択可変長パラメーターを取得するジャーナル項目を理解しようとすると、多少威圧的な印象がします。しかし、このパラメーターを使用して DSPJRN コマンドおよび RCVJRNE コマンドで提供される同じ選択基準のセットを指定できます。IBM i 5.4 では、この数は 22 個になり、6.1 では 23 個のオプション項目選択基準があります。

資料を読み解けばわかるように、可変長パラメーター構造に一貫性があるため、API プロトタイプおよび項目選択パラメーター・データ構造両方をコーディングするのは極めて簡単です。図 2 は QjoRetrieveJournalEntries API プロトタイプ、図 3 は、項目選択パラメーター・セットを定義するデータ構造を示しています。このように項目選択データ構造をコーディングすると、個別の項目選択基準をそれぞれ簡単にはめ込んだり、そこから抜け出すことができます。図 4 は API 呼び出しがどのように実行され、(できれば) 前述のステートメントをデモンストレーションする方法を示しています。

5 番目と 6 番目の API パラメーターに関して、API 資料で omissible (省略可能) という用語を使用している点にも注意してください。API に従ってプロトタイプを動作させるには、一般的に採用されている規約である Options(*NoPass) で定義されたオプション・パラメーター・グループとは違い、これらのパラメーターについて特殊値 *Omit を指定した Options キーワードを使用する必要があります。後者では、単に API 呼び出しのパラメーターを除外できることを意味していますが、除外すると、同じまたは続くオプション・パラメーター・グループに属するその他のパラメーターが指定できなくなります。省略可能なパラメーターについては、パラメーターの代わりに特殊値 *Omit を指定する必要があるため、パラメーターを省略しても以降のパラメーターが指定できます。

ANZAUDJRN コマンド ―断片的な情報を 1 つに

工事中のユーティリティーの核を整え、API プロトタイプおよび関連するパラメーター構造を定義したので、コマンド・インターフェースに焦点を移します。まず初めに DSPJRN コマンド・パラメーターを使用して、IFS パス名だけでなく、項目イベント・タイプ、オブジェクトの名前、タイプ、およびライブラリーの選択基準を追加します。これで当初計画された要件のほとんどが網羅され、監査ジャーナル項目フィルター・オプションのセットを組み合わせることで、ある状況で特定のジャーナル項目をかなり簡単に目標にすることができます。

また特定のレベルの総称検索をするため、監査ジャーナル項目の Entry Specific Data (ESD) 部分に一致する検索を実行する可変長文字ストリングを指定できる最終パラメーターを備えたコマンド・インターフェースを設計しました。オフセット値の形式で ESD 内の特定の位置を指定するか、ある検索引数について ESD 全体をコマンドに走査させることができます。図 5 にその結果生じる Analyze Audit Journal (ANZAUDJRN) コマンド・インターフェースを示します。

ほとんどの ANZAUDJRN コマンドのパラメーターは QjoRetrieveJournalEntries API で提供される項目選択基準と 1 対 1 の関係であるため、ほとんど考える必要はありませんが、パラメーター入力値に使用できる有効な範囲など、その他の懸念事項があります。このコマンドの核となる Entry type パラメーターは、項目タイプ・コードのリストと現在リリースされているオペレーティング・システムの説明を記載したソースを呼び出します。そうしたリストは、項目タイプ・パラメーター入力を検査するだけでなく、パラメーターの選択項目および F4 リスト関数をコマンド・プトンプトについて動的に作成できるようにする基盤を提供します。これにより、コマンドを使用するユーザーは、どのようなオプションがあるか、また入力する場合の正しい値を多少簡単に判断できるようになります。

オブジェクトおよびパスに関連したパラメーターなど、その他のコマンド・パラメーターは、コマンド・プロンプトに組み込む必要があるかどうか判断する場合に、入力した実 Entry type によってジャーナル項目 ESD に存在するかどうか確認する必要があります。ここまで記載した要件をまとめるには、以下の点を決める必要があります。

  • 現在のリリースでどの監査ジャーナル項目タイプがサポートされているか
  • 各監査ジャーナル項目タイプの説明
  • オブジェクトのタイプ、名前、ライブラリーの ESD での有無と場所
  • IFS オブジェクト・パス名の ESD での有無と場所

課題の克服

最初の課題については、「System i Security Reference」マニュアルの付録 F に記載されており、各監査ジャーナル項目タイプについて、フォーマットが *TYPE5 の出力ファイルの命名規則 QASYxxJ5 に従った、対応するシステム・モデル・ファイルがあります。xx は項目タイプに置き換えます。この情報に基づき、Open List of Objects (QGYOLOBJ) API を使用してすべての QASYxxJ5 ファイルをリストし、サポートされている各項目タイプを取得できます。

項目タイプの説明でも、「文書化されていないフィーチャー」的なアプローチが必要です。偶然にもしばらく前に、ジャーナル・コードおよびジャーナル項目タイプ両方とそれぞれの説明を保存するのに使用されたシステム QCPFMSG メッセージ・ファイルにあるさまざまなメッセージ説明に出くわしました。この知識を活用し、Retrieve Message Description (QMHRTVM) API を使用して、項目タイプの説明を取得できます。

以前の観察に基づき、ジャーナル項目 ESD のオブジェクト情報を見つける最後の問題を解決することもできます。すべての監査ジャーナル項目タイプのフォーマットは、システム・モデル・ファイルにレイアウトされており、IBM の取り計らいでレコード・フォーマットに定義されたフィールドの命名規則を施行しました。オブジェクトの名前、ライブラリー、タイプだけでなく、IFS オブジェクト・パス名、パス名 CCSID、パス名長を含むフィールドの名前は同じパターンで付けられています。オブジェクトの名前、ライブラリー、およびタイプはそれぞれ xxONAM、xxOLIB、および xxOTYP に解決します。xx は (繰り返しますが) 対象のファイル・フォーマットでサポートされたジャーナル項目タイプと置き換えられます。ファイルのレコード・フォーマットのフィールドだけでなく、それらのフィールドのレコード・フォーマット内の場所をリストするのは、Retrieve database file description (QDBRTVFD) API で可能です。

帳尻を合わせる

現在のモデル・ファイルのいくつかは IBM の設計レビュー委員会を免れたようですが、見つかったいくつかの例外に対処しました。ジャーナル項目データの収集が完了すると、ANZAUDJRN コマンド・プロンプト、パラメーター検証、項目選択の制御に必要な情報が入手できます。

  • 有効なジャーナル項目タイプは、ジャーナル項目タイプ・パラメーター選択テキストおよび F4 プロンプト・リストとして表示されます。後者には、項目タイプ記述テキストが含まれており、すべて選択プログラム CBX607C で実行されます。図 6 は、F4 プロンプト・リストの IBM i 5.4 システムでの様子を示しています。
  • ジャーナル項目タイプ・リストは妥当性チェック・プログラム CBX607V で採用されており、指定した項目タイプを検証します。
  • プロンプト制御プログラム CBX607P により、オブジェクトの名前、ライブラリー、タイプのパラメーターは、選択した項目タイプにオブジェクト情報が含まれている場合、コマンド・プロンプトにのみ表示されます。
  • IFS パス名パラメーターは、選択した項目タイプに IFS オブジェクト・パス名が入っている場合に、コマンド・プロンプトに表示されます。繰り返しますが、プロンプト制御プログラム CBX607P により管理されます。
  • IFS オブジェクト・パス名だけでなく、オブジェクトの名前、ライブラリー、およびタイプは、レコード・フォーマット・フィールド・オフセット値を使用して場所が特定され、対応するジャーナル項目値が、コマンド処理プログラム CBX6071 により項目選択プロセスで使用されます。

また、上記の情報の取得しているときにパフォーマンスへの影響を最小限に抑えるために、すべてのデータをユーザー索引オブジェクトに読み込んで保存し、いつでもどこでも必要なときに適切に取得できる関数を指定している点も付け加えておきます。ANZAUDJRN コマンドが実行されるたびに、ユーザー索引とそのコンテンツに関連付けられたリリース・レベルの有無が確認されます。ユーザー索引とジャーナル項目情報は、それ以降必要に応じて再構築されますが、そのときになってようやくです。

上記のアプローチを採用することで、IBM が必要なリソースの実装を変更するリスクにさらされる一方で、そうした環境にあれば、迅速かつ正確な成果が上がります。実現可能な道として他に、情報を手動で取得しユーザー索引に読み込んで、それぞれリリースがアップグレードされるたびに変更された可能性を検証する方法があります。後者の選択肢の方が魅力的に見えて、それを行うのにお手伝いが必要なら、いつでもご連絡ください。

うまくいった―次はどうする?

ANZAUDJRN コマンドの主コマンド処理プログラム (CPP) は極めてシンプルです。QjoRetrieveJournalEntries API 呼び出しのパラメーターを設定したら、感動的な早さで (ジャーナル項目の数を考慮して) 大変な作業のほとんどを行います。取得された各ジャーナル項目について、API により直接サポートされていない選択基準は CPP により評価され、承認されたすべての項目は User Interface Manager (UIM) リスト・パネルに追加されて、表示または印刷されます。UIM についてはこの記事の範囲外ですが、過去の記事で UIM の構造についてお話しましたし、これらと、その他の該当する記事のリンクを以下に記載しておきます。

ANZAUDJRN コマンドを作成して実行するには、以下の「Command ANZAUDJRN Source Specification」に記載の手順に従います。作業が終わったら、試乗会を行います。ジャーナル・レシーバー・チェーンで扱う期間にだれが何回コマンド CHGUSRPRF を実行したか判断するため、以下のコマンドを実行しました。

ANZAUDJRN ENTTYP(CD) RCVRNG(*CURCHAIN) OBJ(CHGUSRPRF) OBJLIB(QSYS) OBJTYPE(*CMD)

次に ANZAUDJRN コマンドを実行して、変更されたパスワードがパスワード構成 (QPWD*) システム値に何度失敗したか判断しました。

ANZAUDJRN ENTTYP(CP) EVTTYP(A) RCVRNG(*CURCHAIN) SEARCH(*SYSVAL 358)

図 7 は結果のリスト・パネルの様子を示しています。リスト・パネルにより Display Journal (DSPJRN) コマンドを実行でき、オプション 5 が指定されたジャーナル項目で作成された項目リストを配置します。同様に、選択したジャーナル項目を正確に置くジョブに Work with Job (WRKJOB) コマンドを、最後にジャーナル項目に関連付けられたユーザー・プロファイルに Work with User Profile (WRKUSRPRF) コマンドを実行できます。

コマンド行ウィンドウだけでなく、システム監査ジャーナル (QAUDJRN) の属性を表示する Display Security Auditing (DSPSECAUD) コマンド、Work with Journal Attributes (WRKJRNA) コマンドなど、該当するコマンドおよびリストのアクションへのショートカットを提供する多数のファンクション・キーも使用できます。ファンクション・キー F11 は、組み込まれている 3 つのリスト・ビューを切り替えます。上記のものだけでなく、プログラム名、プログラム・ライブラリー、リモート・ポート、リモート IP アドレス、さらにオブジェクト・タイプとオブジェクト名またはオブジェクト・パスを表示できます。

終わりに

ANZAUDJRN コマンドは、システムにおける特定のタイプのユーザーまたはプログラムのアクティビティーを追跡したり、重要なセキュリティー・イベントを調査する場合に便利なツールです。以下の「もっと詳しく」に、システム監査ジャーナルを設定してそうした状況に対応する方法を説明した記事へのリンクを記載しています。ボーイスカウトのモットーは「備えよ、常に」です。監査についてはその半分を扱います。できれば、ANZAUDJRN コマンドが残り半分を担当してくれることを祈ります。

あわせて読みたい記事

PAGE TOP