Ariel データベースからのデータの削除

ACP (Ariel Copy) ツールは、Ariel データベースを読み取り、基準を適用してから、フィルターに掛けられたデータを別の場所に再書き込みします。 このツールは、GDPR (汎用データ保護規則) 準拠に役立ちます。 例えば、指定されたユーザー名または送信元 IP アドレスでフラグが立てられたすべてのデータを削除したいとします。

注: このテクニカル・ブログ記事は 現状のまま であり、追加の審査を行ったことはありません。

使用法

データベース (イベント | フロー)、フィルタリングする必要のある開始時刻と終了時刻、適用するAQL 照会 (-q) またはキー作成者/値 (-k/-p) の組み合わせ、実行する必要のあるユーザー (-u)、および宛先ディレクトリー (-d) をツールに提供します。

ACP ツールは、指定された時刻に Ariel データベースを読み取り、フィルターを適用し、指定された宛先ディレクトリー内のフィルターに一致するすべてのレコードを配置します。

[root@m5arch06 templates]# /opt/qradar/bin/runjava.sh com.q1labs.ariel.io.ACP
data base name is required
Configured data bases:
		flows
		hc
		simarc
		events
		simevent
usage: ACP -n events -d /store/new_ariel -b "2013/11/21 1:00:00" -e
           "2013/11/21 4:00:00"
           ACP -n events -d /store/new_ariel -b "2013/11/21 1:00:00" -e "2013/11/21
           4:00:00" -q "username is not null and sourceip = '127.0.0.1'" -u admin
           Options:
 -n,--name           data base name, for example -n events
 -b,--begintime      begin time, for example -t "2018/08/28 09:04",
                     optional, by default current system time
 -e,--endtime        end time, for example -t "2018/08/28 10:04",
                     optional, by default current system time
 -d,--destination    Destination directory i.e. /store/filtered_ariel/
 -h,--help           print this message
 -k,--keycreator     class for IKeyCreator
 -p,--param          optional parameter for IKeyCreator
 -q,--query          AQL 'where clause' to copy records
 -u,--user           username (default=admin)
 -v,--testedvalue    value to compare createKey with
[root@m5arch06 templates]#

Ariel ファイル構造体についてのプライマー

これ以上先に進む前に、Ariel データがディスク上のレイアウトのことを確認してください。 Ariel は、時系列ベースのデータベースです。 Ariel は、データが検索されるまでディスク上にあるデータを認識しません。 Ariel データは、何の影響も与えずにシステム間でコピーすることも、Ariel データベースに関する情報を知らなくてもコピーすることもできます。 Ariel データは、以下の例のような形式で、分単位のレコードとして格納されます。

/store/ariel/[events | flows ]/[records | payloads | md]/YYYY/MM/dd/hh/
各項目の意味は次のとおりです。
  • イベントまたはフローは、Ariel データベースの名前です。

  • レコードは正規化されたイベント・レコードです。
  • ペイロードは、レコードに関連付けられた生ペイロードです。
  • md は、Ariel データのハッシュ・シグニチャーまたはメッセージ・ダイジェスト (オプションで HMAC で暗号化されています) です。

一般的に、Ariel データ・ファイルの構造は以下のとおりです。

identifier~Minute#_File#~UUID~UUID~RetentionBucketNumber

recordsディレクトリーには、以下のファイルのようなファイルが表示されます。
  • events~5_0~35c5c6bddcb24578~ad5711e8c1337858~0

    このレコードは、5th 分および 0th の保存バケット (デフォルト・バケット) の正規化されたイベント・レコードを表します。

  • SourceIP~5_0~35c5c6bddcb24578~ad5711e8c1337858~0

    5th 分および 0th の保存バケット (デフォルト・バケット) の sourceIP 索引。

payloadsディレクトリーには、以下のファイルのようなファイルが表示されます。

payload_events~5_0~35c5c6bddcb24578~ad5711e8c1337858~0

5th 分および 0th の保存バケットの生ペイロード (デフォルト・バケット)。

mdディレクトリーには、以下のファイルのようなファイルが表示されます。

  • events~5_0~35c5c6bddcb24578~ad5711e8c1337858~0.HMACSHA512

    5th 分および 0th の保存バケット用の正規化イベント・レコードの HMAC-SHA512 シグニチャー。

  • payload_events~5_0~35c5c6bddcb24578~ad5711e8c1337858~0.HMACSHA512

    5th 分および 0th の保存バケットの生ペイロードの HMAC-SHA512 シグニチャー。

    注: ACP ツールは、 mdの代わりに hashes というディレクトリーを作成します。 ファイル・ハッシュまたは整合性ハッシュが使用可能になっている場合は、この問題に注意してください。

例 - ユーザー名としてルートがあるイベントの削除

この例では、09:00 から 10:00 までの期間について、ユーザー名が root であるすべてのイベントを Ariel イベント・データベースから削除します。

  1. まず、削除したいものを検索して表示します。
    以下の画面キャプチャーは、すべてのイベントを示します。
    図 1. すべてのイベント
    特定の時間フレームにキャプチャーされたすべてのイベントを示すイメージ。
  2. 次に、ACP ツールを実行します。
    [root@m5arch06 ~]# /opt/qradar/bin/runjava.sh com.q1labs.ariel.io.ACP -n events -b "2018/08/28 09:00:00" -e "2018/08/28 10:00:00" -q "username not like 'root'" -u admin -d /store/new_ariel
    AQL criteria: [username not like 'root'] User: admin
    Copying: [events] to /store/new_ariel Timeline from Tue Aug 28 09:00:00 NDT 2018 to Tue Aug 28 09:59:00 NDT 2018
    Trying to copy dir: /store/ariel/events/records/2018/8/28/9[18-08-28,09:00:00]
    Reader started ...
    Processing interval /store/ariel/events/records/2018/8/28/9/events~59_0~13e6848042143d0~92f58da705b4b452~0[18-08-28,09:59:00]
    Processing interval /store/ariel/events/records/2018/8/28/9/events~58_0~23b0a632f1df4d10~bbe50149b34453d8~0[18-08-28,09:58:00]
    Processing interval /store/ariel/events/records/2018/8/28/9/events~57_0~745684fd0cca424c~a9857807a2952671~0[18-08-28,09:57:00]
    Processing interval /store/ariel/events/records/2018/8/28/9/events~56_0~89c02507d81940c3~a54edd654c2ce796~0[18-08-28,09:56:00]
    …. … ...
    Processing interval /store/ariel/events/records/2018/8/28/9/events~4_0~2c48501471734615~b8ca3cb590a16e05~0[18-08-28,09:04:00]
    Processing interval /store/ariel/events/records/2018/8/28/9/events~3_0~3e369b679aa64306~a97b95e8528a1a9b~0[18-08-28,09:03:00]
    Processing interval /store/ariel/events/records/2018/8/28/9/events~2_0~4e370db759d44bd2~81f695b0164b5a66~0[18-08-28,09:02:00]
    Processing interval /store/ariel/events/records/2018/8/28/9/events~1_0~cdbe9e25b9ee4dbd~982ef0da1ab7e85d~0[18-08-28,09:01:00]
    Processing interval /store/ariel/events/records/2018/8/28/9/events~0_0~ecd2e4bf6bbb425a~b2acfe04fda202a6~0[18-08-28,09:00:00]
    Reader stopped. Written 9507759 records, Skipped 2654 records
    
    Completed copying dir: /store/ariel/events/records/2018/8/28/9[18-08-28,09:00:00]
    
    [root@m5arch06 ~]#
    
    以下の画面キャプチャーは、ルート ユーザー名のないすべてのイベントを表示します。
    図 2. ルート・ユーザー名を持つすべてのイベント
    特定の時間フレーム内に root ユーザー名でキャプチャーされたすべてのイベントを示すイメージ。
    以下の画面キャプチャーは、ルート ユーザー名のないすべてのイベントを表示します。
    図3: ルート・ユーザー名のないすべてのイベント
    特定の時間フレーム内に root ユーザー名なしでキャプチャーされたすべてのイベントを示すイメージ。

    前述のように、ルートの username と一致する 09:00 から 10:00 までのすべてのイベントを削除しました。 そのため、ACP ツールを使用して、 username がルートではないことを基準に指定しました。

    また、フィルタリングされたレコードを/store/new_Ariel ディレクトリーに配置しました。

  3. 古い Ariel データを新しい Ariel データで置き換えます。

    /store/new_arielディレクトリー (この例で選択した宛先) を見ると、1 時間分のデータを処理したことが分かります。

    [root@m5arch06 new_ariel]# find /store/new_ariel -maxdepth 6
    /store/new_ariel
    /store/new_ariel/events
    /store/new_ariel/events/hashes
    /store/new_ariel/events/hashes/2018
    /store/new_ariel/events/hashes/2018/8
    /store/new_ariel/events/hashes/2018/8/28
    /store/new_ariel/events/hashes/2018/8/28/9
    /store/new_ariel/events/records
    /store/new_ariel/events/records/2018
    /store/new_ariel/events/records/2018/8
    /store/new_ariel/events/records/2018/8/28
    /store/new_ariel/events/records/2018/8/28/9
    /store/new_ariel/events/payloads
    /store/new_ariel/events/payloads/2018
    /store/new_ariel/events/payloads/2018/8
    /store/new_ariel/events/payloads/2018/8/28
    /store/new_ariel/events/payloads/2018/8/28/9
    [root@m5arch06 new_ariel]#
    

    この例では、アーカイブとコピーを容易にするために、データが時間境界に並べるように選択されています (mv コマンドを使用できます)。 データが時間境界に合わない場合は、ファイル単位で移行する必要があります。

  4. 以下のコマンドを入力して、古いデータをarielディレクトリーからariel_archiveディレクトリーにアーカイブします。
    [root@m5arch06 store]# mv /store/ariel/events/records/2018/8/28/9 /store/ariel_archive/events/records/2018/8/28/
    [root@m5arch06 store]# mv /store/ariel/events/payloads/2018/8/28/9 /store/ariel_archive/events/payloads/2018/8/28/
    [root@m5arch06 store]# mv /store/ariel/events/md/2018/8/28/9 /store/ariel_archive/events/hashes/2018/8/28/
    [root@m5arch06 store]#
    

    この時点では、その時間のデータは検索できません。 Ariel データベースは、ファイルが Ariel データベース内に存在しなくなったため、このデータベースを検出できません。

  5. 以下のコマンドを入力して、新規データをnew_arielディレクトリーからarielディレクトリーにコピー (または移動) します。
    [root@m5arch06 store]# cp -a /store/new_ariel/events/records/2018/8/28/9 /store/ariel/events/records/2018/8/28
    [root@m5arch06 store]# cp -a /store/new_ariel/events/payloads/2018/8/28/9 /store/ariel/events/payloads/2018/8/28
    [root@m5arch06 store]# cp -a /store/new_ariel/events/hashes/2018/8/28/9 /store/ariel/events/md/2018/8/28
    [root@m5arch06 store]#
    
    注: hashes から mdに変更しました。 Ariel ファイル構造入門セクションの を参照してください。

    開始する前にこのデータに対する検索を実行したため、これらの検索を削除して、同一の検索を実行したときにカーソル・キャッシュを取得しないようにします。 「ログ・アクティビティー」タブでの「検索結果の管理」から検索を削除します。

  6. 09:00 から 10:00 までのすべてのデータの検索を実行します。
    図 4. 新規検索 (new search)
    特定の時間フレームで実行される検索を示す画像。
    注: 結果の合計は、ACP ツールを実行する前の「not」root ユーザー名の結果と同じです。
  7. ルート・ユーザー名を検索します。
    図 5. ルート・ユーザー名の新規検索
    特定の時間フレーム内に実行されるルート・ユーザー名の検索を示すイメージ。
    注: 一部の索引が再生成されませんでした。 通常の分単位のプロパティー・ベースの索引が作成されますが、スーパー索引は生成されず、フリー・テキスト検索 /Lucene も生成されません。 (既知の問題)。 幸いにも、 /opt/qradar/bin/ariel_offline_indexer.sh ツールが用意されています。

オフライン・インデクサー・スクリプトの使用法

/opt/qradar/bin/ariel_offline_indexer.shを使用して、スーパー索引を生成します。

Usage is:
[root@m5arch06 store]# /opt/qradar/bin/ariel_offline_indexer.sh --help
usage: options
 -R,--repair         re-build corrupted super indices
 -d,--duration       time duration to look files for in minutes, for
                     example -d 5
 -n,--name           ariel data base name, for example -n events
 -t,--endtime        end time, for example -t "2018/08/28 11:00",
                     optional, by default current system time
 -F,--renamefrom     rename from (internal use)
 -L,--light          load minimal QRadar frameworks
 -T,--renameto       rename to (internal use)
 -V,--validate       validate super indices
 -a,--auto           backfill all active indexes
 -b,--batchmode      run in batch mode with options in a file
 -f,--fts            create free text search indices
 -h,--help           print this message
 -k,--key            property java class name
 -l,--list           list all enabled indices from the configuration
 -p,--param          optional paramiter for property (key creator
                     construction)
 -r,--remove         remove indices for a property
 -s,--superindices   create super indices from the minute indices
 -v,--verbose        verbose (optional, default = false)
 -w,--threads        maximum number of threads to produce minute indices
                     if requested, default is 48
[root@m5arch06 store]#
以下のコマンドを入力して、フリー・テキスト索引とスーパー索引を再生成します。
[root@m5arch06 store]# /opt/qradar/bin/ariel_offline_indexer.sh -n events -t "2018/08/28 10:00" -d 60 -f -s

2018/08/28 11:04	Running command [-n, events, -t, 2018/08/28 10:00, -d, 60, -f, -s] ...
Trying to index dir: /store/ariel/events/records/2018/8/28/9/lucene[18-08-28,09:00:00]
Completed indexing dir: /store/ariel/events/records/2018/8/28/9/lucene[18-08-28,09:00:00]

All done in 0:02:39.840
[root@m5arch06 store]#

これで、フリー・テキスト索引とスーパー索引が取り込まれます。