Ariel 데이터베이스에서 데이터 제거하기

ACP (Ariel Copy) 도구는 Ariel database를 통해 읽고, 기준을 적용한 다음, 필터링된 데이터를 다른 위치에 다시 기록한다. 이 도구는 GDPR (General Data Protection Regulation) 준수에 유용하다. 예를 들어, 지정된 사용자 이름 또는 소스 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은 디스크를 검색할 때까지 디스크에 어떤 데이터가 있는지 알지 못한다. 아무런 영향을 주지 않고 시스템 간에 아리엘 데이터를 복사할 수 있습니다. 아리엘 데이터는 분 단위 레코드로 다음 예제와 유사한 형식으로 저장됩니다.

/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사이의 기간 동안 Ariel 이벤트 데이터베이스에서 root 사용자 이름이 있는 모든 이벤트를 제거하려고 합니다.

  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. 루트 사용자 이름을 가진 모든 이벤트
    특정 시간 프레임에서 루트 사용자 이름으로 캡처되는 모든 이벤트를 표시하는 이미지입니다.
    다음 화면 캡처는 루트 사용자 이름이 없는 모든 이벤트를 표시합니다.
    그림 3. 루트 사용자 이름이 없는 모든 이벤트
    특정 시간 프레임에서 루트 사용자 이름 없이 캡처되는 모든 이벤트를 표시하는 이미지입니다.

    이전에 설명한 대로, 루트의 username 와 일치하는 모든 이벤트를 09:00에서 10:00로 제거했습니다. 따라서, ACP 도구를 사용하여 username 이 루트가 아닌 기준으로 지정했습니다.

    또한 필터링된 레코드를 /store/new_Ariel 디렉토리에 배치했습니다.

  3. 이전의 Ariel 데이터를 새 Ariel 데이터로 대체한다.

    /store/new_ariel 디렉토리 (이 예제에서 선택한 대상) 를 살펴보면 한 시간 가치의 데이터를 처리했음을 확인할 수 있습니다.

    [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 database는 그것을 찾을 수 없을 것이다.

  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 파일 구조 프라 이머 섹션에서 를 참조하십시오.

    시작하기 전에 이 데이터에 대한 검색을 실행했기 때문에 이러한 검색을 제거하여 동일한 검색을 실행할 때 커서 캐시를 가져오지 않도록 하자. Remove the searches from the 검색 결과 관리 from the 로그 활동 tab.

  6. 09:00에서 10시까지의 모든 데이터에 대한 검색을 실행하십시오.
    그림 4. 새 검색
    특정 시간 프레임에서 실행되는 검색을 표시하는 이미지입니다.
    참고: 총 결과는 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]#

이제 자유 텍스트 인덱스와 수퍼 인덱스가 채워진다.