kapezip

KAPE(Kroll Artifact Parser and Extractor)モジュールが生成したCSV成果物のZIPパッケージを展開せずにそのまま読み込みます。KAPEはKroll社が配布するWindowsフォレンジックのトリアージツールで、収集・解析したアーティファクトをモジュール別のCSVとしてZIPにまとめて出力します。kapezipコマンドはこのZIPを入力として受け取り、モジュール成果物をそのままクエリで分析する用途で使用します。

コマンドプロパティ

項目説明
コマンドタイプドライバークエリ
必要な権限クラスタ管理者
ライセンス使用量カウントあり
並列実行非対応
分散実行データノードで実行(mapper)

構文

kapezip [entrycs=STR] [cs=STR] [rest=BOOL] FILE_PATH [ENTRY_PATH]

オプション

entrycs=STR
ZIPファイルのエントリ名の文字エンコーディング(デフォルト: utf-8)。ZIP内部のエントリ名がcp949など非標準エンコーディングで保存されている場合に指定します。
cs=STR
CSVファイルの文字エンコーディング(デフォルト: utf-8)。CSV本文が非標準エンコーディングで保存されている場合に指定します。
rest=BOOL
tを指定すると、CSVパーサーが許容する最大カラム数を超えるカラムを_restフィールドにまとめて返します。省略するかfを指定すると、超過カラムは無視されます(デフォルト: f)。

対象

FILE_PATH
取得するZIPファイルのパス。ファイル名部分に*ワイルドカードを使用すると、同じディレクトリ内の複数のZIPファイルを一度に指定できます。
ENTRY_PATH
取得するZIP内部のCSVエントリのパス。*ワイルドカードを使用できます。省略すると、ZIP内部のすべての.csvエントリを取得します。

出力フィールド

フィールドタイプ説明
_filestringレコードの取得元ZIPエントリのパス
(ヘッダカラム)stringCSVの1行目のヘッダで定義されたフィールド名と、対応する値
column<N>stringデータ行のカラム数がヘッダのカラム数を超えた場合に、超過カラムに割り当てられるフィールド(Nはヘッダカラム数から始まる0始まりのインデックス)
_reststringCSVパーサーの最大カラム数を超えるヘッダカラム(rest=t指定時のみ出力)

エラーコード

解析エラー

N/A

ランタイムエラー
エラーコードメッセージ説明後処理動作
-csvfile load failureZIP内部のCSVエントリの読み取りまたは解析中にエラーが発生した場合クエリを停止します
--ZIPファイルを開けない、または破損している場合(RuntimeExceptionとして伝播)クエリを停止します

説明

kapezipコマンドは、指定したZIPファイルを開き、内部の.csv拡張子を持つエントリのみを順番に読み込みます。各CSVエントリの1行目をヘッダとして認識し、フィールド名を自動的に割り当てます。1つのZIPファイルに複数のCSVエントリが含まれている場合、すべてのエントリのレコードを順番に返します。

ENTRY_PATHを指定すると、そのパターンに一致するエントリのみを取得します。ワイルドカード(*)が含まれる場合はパターンマッチングで、含まれない場合はエントリ名全体との完全一致で比較します。いずれの場合も、.csv拡張子ではないエントリは自動的にスキップされます。

CSVファイルがUTF-8 BOM(Byte Order Mark、0xEF 0xBB 0xBF)で始まる場合、自動的に認識してスキップします。ただし、csオプションでutf-8以外のエンコーディングを指定した場合は、BOMを検査しません。

CSVパーサーが許容する最大カラム数をヘッダが超過する場合、デフォルトの動作では超過したヘッダを無視します。rest=tを指定すると、超過位置のヘッダを_restフィールドに置き換えます。データ行のカラム数がヘッダのカラム数を超える場合、超過カラムはcolumn<N>形式のフィールド(Nはヘッダカラム数から始まる0始まりのインデックス)として返されます。

FILE_PATHにワイルドカードを使用すると、一致するすべてのZIPファイルを順番に処理します。ワイルドカードはファイル名部分でのみ動作し、ディレクトリ部分には使用できません。

このコマンドはクラスタ管理者権限が必要であり、アクセス可能なファイルパスはALLOWED_FILE_SCAN_PATHS設定で制限されます。詳細ははじめる前にを参照してください。

使用例

各使用例のファイルパスはALLOWED_FILE_SCAN_PATHS設定に含まれていることを前提としています。

  1. ZIP内部のすべてのCSVエントリを取得する

    kapezip /opt/logpresso/evidence/kape-output.zip
    

    kape-output.zipに含まれるすべての.csvエントリからレコードを順番に返します。各レコードの_fileフィールドには取得元エントリのパスが記録されます。

  2. 特定のCSVエントリのみを取得する

    kapezip /opt/logpresso/evidence/kape-output.zip Modules/FileSystem/MFTECmd.csv
    

    ZIP内部で正確にModules/FileSystem/MFTECmd.csvのパスを持つエントリのみを読み取ってレコードを返します。

  3. ワイルドカードで複数のエントリを取得する

    kapezip /opt/logpresso/evidence/kape-output.zip Modules/Registry/*.csv
    

    Modules/Registry/ディレクトリ配下のすべてのCSVエントリを取得します。

  4. 韓国語エンコーディングのZIPパッケージを取得する

    kapezip entrycs=cp949 cs=cp949 /opt/logpresso/evidence/kape-kr.zip
    

    エントリ名とCSV本文の両方がCP949でエンコードされたZIPパッケージを正常に読み込みます。

  5. ワイルドカードで複数のZIPファイルを一括処理する

    kapezip /opt/logpresso/evidence/host-*.zip
    

    同じディレクトリ内のhost-で始まるすべてのZIPファイルからCSVエントリを取得します。

  6. 超過カラムを保持したうえで特定の取得元をフィルタリングする

    kapezip rest=t /opt/logpresso/evidence/kape-output.zip
    | search _file == "Modules/FileSystem/MFTECmd.csv"
    

    最大カラム数を超えるヘッダを_restフィールドに保持しながらZIP全体を取得した後、_fileフィールドを基準に特定のエントリで発生したレコードのみをフィルタリングします。

互換性

kapezipコマンドはSonar 4.0以前のバージョンから提供されています。4.0.2511.0バージョンからクラスタ管理者権限が必要となり、アクセス可能なファイルパスが制限されます。