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
- events~5_0~35c5c6bddcb24578~ad5711e8c1337858~0
이 레코드는 5th 분 및 0th 보유 버킷 (기본 버켓) 에 대한 정규화된 이벤트 레코드를 나타냅니다.
- SourceIP~5_0~35c5c6bddcb24578~ad5711e8c1337858~0
5th 분 및 0th 보유 버킷 (기본 버켓) 의 sourceIP 색인입니다.
payloads 디렉토리에서 다음 파일과 같은 파일을 볼 수 있습니다.
payload_events~5_0~35c5c6bddcb24578~ad5711e8c1337858~05th 분 및 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. 모든 이벤트 
- 다음으로, 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 디렉토리에 배치했습니다.
- 이전의 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 명령을 사용할 수 있음). 데이터가 시간 경계에 정렬되지 않으면 파일별로 마이그레이션해야 합니다.
- 다음 명령을 입력하여 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는 그것을 찾을 수 없을 것이다.
- 다음 명령을 입력하여 새 데이터를 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]#시작하기 전에 이 데이터에 대한 검색을 실행했기 때문에 이러한 검색을 제거하여 동일한 검색을 실행할 때 커서 캐시를 가져오지 않도록 하자. Remove the searches from the 검색 결과 관리 from the 로그 활동 tab.
- 09:00에서 10시까지의 모든 데이터에 대한 검색을 실행하십시오.
그림 4. 새 검색
참고: 총 결과는 ACP 도구를 실행하기 전의 "not" root 사용자 이름 결과와 동일합니다. - 루트 사용자 이름을 검색한다.
그림 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]#
이제 자유 텍스트 인덱스와 수퍼 인덱스가 채워진다.