cron 이 새벽 세 시에 curl 을 했다 · 규칙은 문장이 아니라 자료 구조다 · 퀴즈
퀴즈: Sigma 규칙 읽기
문항 6개. 정답과 해설은 풀어 본 뒤에 보여 드립니다.
Sigma 규칙에서 반드시 있어야 하는 항목 셋은?
- `title`·`id`·`level` 이며 나머지는 백엔드가 채워 준다
- `logsource`·`detection`·`falsepositives` 세 가지다
- `title`·`logsource`·`detection` 이고 나머지는 선택이다
- `title`·`description`·`condition` 세 가지가 최소 단위다
한 selection 안에 필드 두 개를 적고 그중 한 필드에 값 세 개를 리스트로 주면?
- 필드끼리도 OR, 값끼리도 OR 라서 여섯 가지 중 하나만 맞으면 된다
- 필드끼리도 AND, 값끼리도 AND 라서 모든 조건이 동시에 맞아야 한다
- 리스트가 있는 쪽이 우선해 그 필드만 평가되고 나머지는 무시된다
- 필드끼리는 AND 이고 한 필드 안의 값끼리는 OR 로 묶인다
`condition: selection and not filter_internal` 이 하는 일은?
- selection 에 맞은 것 중 filter_internal 에도 맞는 것을 빼고 남긴다
- selection 과 filter_internal 을 순서대로 평가해 뒤엣것만 남긴다
- 두 선택 중 하나라도 맞으면 알림을 내되 심각도를 한 단계 낮춘다
- filter_internal 을 먼저 평가해 맞으면 selection 을 건너뛰고 끝낸다
`1 of selection_*` 와 `all of selection_*` 의 차이는?
- 앞엣것은 첫 번째 선택만 보고 뒤엣것은 마지막 선택까지 본다
- 앞엣것은 이름이 selection_ 로 시작하는 것 중 하나라도 맞으면 참이다
- 앞엣것은 규칙 하나만 만들고 뒤엣것은 선택마다 규칙을 하나씩 만든다
- 앞엣것은 필드를 OR 로 묶고 뒤엣것은 값을 AND 로 묶는 수식어다
`CommandLine|contains: 'nc'` 라고 쓴 규칙이 `rsync -a /var/backups/` 를 잡았다. 이유는?
- rsync 가 내부적으로 nc 를 불러 실행하기 때문에 같이 걸린 것이다
- contains 수식어가 대소문자를 구분하지 않아 다른 낱말까지 맞은 것이다
- contains 는 부분 문자열을 보므로 rsync 안의 n 과 c 가 이어져 맞았다
- 리스트가 아닌 단일 값에는 자동으로 정규식이 적용되기 때문이다
이번 사건의 목적지 도메인을 규칙에 그대로 적어 두면 생기는 문제는?
- 규칙 파일이 길어져 백엔드가 질의문으로 번역하지 못하게 된다
- 도메인 문자열은 로그에 남지 않아 애초에 맞출 수가 없다
- 같은 도메인을 쓰는 정상 트래픽까지 전부 오탐으로 잡힌다
- 주소가 바뀌는 순간 규칙이 아무것도 못 잡는데 아무도 모른다