SCheck 시작 가이드¶
- 버전: 1.0.7-7-g251eead
- 출시일: 2023-04-06 11:17:57
- 지원 운영체제: windows/amd64, windows/386, linux/arm, linux/arm64, linux/386, linux/amd64
이 문서는 SCheck 설치 완료 후 SCheck의 기본 기능을 사용하는 방법을 소개합니다. 다음 내용을 포함합니다:
SCheck 디렉토리 소개¶
SCheck는 현재 Linux/Windows 두 가지 주요 플랫폼을 지원합니다:
| 운영체제 | 아키텍처 | 설치 경로 |
|---|---|---|
| Linux 커널 2.6.23 이상 | amd64/386/arm/arm64 | /usr/local/scheck |
| Windows 7, Server 2008R2 이상 | amd64/386 | 64비트: C:\Program Files\scheck32비트: C:\Program Files(32)\scheck |
팁: 커널 버전 확인
- Linux:
uname -r - Windows:
cmd명령 실행 (Win 키 +r을 누른 후cmd입력 후 Enter),winver입력하여 시스템 버전 정보 확인
설치가 완료되면 SCheck 디렉토리 목록은 다음과 같습니다:
├── [ 6] custom.rules.d
├── [ 12K] rules.d
├── [ 17M] scheck
├── [ 664] scheck.conf
└── [ 222] version
여기서:
- scheck: SCheck 메인 프로그램, Windows에서는 scheck.exe
- custom.rules.d: 사용자 정의 디렉토리
- rules.d: SCheck 시스템 디렉토리
- scheck.conf: SCheck 메인 설정 파일
- version: SCheck 버전 정보
참고: Linux 플랫폼에서 SCheck 실행 로그는 /var/log/scheck 디렉토리에 있습니다.
관련 명령어¶
도움말 보기:
$ scheck -h
Usage of scheck:
-check-md5
md5 checksum
-config string
configuration file to load
-config-sample
show config sample
-funcs
show all supported lua-extend functions
-test string
the name of a rule, without file extension
-testc int
test rule count
-version
show version
-doc
Generate doc document from manifest file
-tpl
Generate doc document from template file
-dir
`-doc` `-tpl`과 함께 사용, 파일을 지정된 디렉토리에 출력
-luastatus
모든 lua 실행 상태를 표시하고 현재 디렉토리에 출력, 파일 형식은 Markdown
-sort
`-luastatus`와 함께 사용, 정렬 매개변수: name:이름, time:실행 시간, count:실행 횟수, 기본값은 count
./scheck -luastatus -sort=time
-check
사용자 디렉토리의 모든 lua 파일을 사전 컴파일하여 코드 구문 오류 확인
-box
바이너리에 로드된 모든 파일 목록 표시
탐지 규칙¶
탐지 규칙은 규칙 디렉토리에 위치합니다: 설정 파일의 rule_dir 또는 사용자 정의 디렉토리 custom_dir로 지정됩니다. 각 규칙은 두 개의 파일로 구성됩니다:
스크립트 파일과 매니페스트 파일의 이름은 동일해야 합니다.
SChecker는 정기적으로(매니페스트 파일의 cron으로 지정) 탐지 스크립트를 실행합니다. Lua 스크립트 코드는 실행될 때마다 관련 보안 이벤트(예: 파일 변경, 새 사용자 로그인 등)가 발생했는지 확인하고, 발생한 경우 trigger() 함수를 사용하여 이벤트를 (라인 프로토콜 형식으로) 설정 파일의 output 필드에 지정된 주소로 전송합니다.
SChecker는 여러 Lua 확장 함수를 정의하며, 보안을 위해 일부 Lua 패키지 또는 함수를 비활성화했습니다. 다음 Lua 내장 패키지/함수만 지원합니다:
-
다음 내장 기본 패키지는 모두 지원
tablemathstringdebug
-
os패키지에서 다음 함수를 제외한 모든 함수 사용 가능:execute()remove()rename()setenv()setlocale()
규칙 매니페스트 파일 및 Lua 코드를 추가/수정할 때 서비스를 재시작할 필요가 없습니다. SChecker는 10초마다 규칙 디렉토리를 스캔합니다.
매니페스트 파일¶
매니페스트 파일은 현재 규칙이 탐지하는 내용(예: 파일 변경, 포트 시작/중지 등)을 설명합니다. 최종 라인 프로토콜 데이터에는 매니페스트 파일의 필드만 포함됩니다. 자세한 내용은 다음과 같습니다:
# ---------------- 필수 필드 ---------------
# 이벤트 규칙 ID(예: k8s-pod-001), 라인 프로토콜의 메트릭 이름으로 사용
id = ''
# 이벤트 분류, 비즈니스에 따라 사용자 정의
category = ''
# 현재 이벤트의 위험 수준, 비즈니스에 따라 사용자 정의(예: warn, error)
level = ''
# 현재 이벤트 제목, 탐지 내용 설명(예: "민감 파일 변경")
title = ''
# 현재 이벤트 내용(템플릿 지원, 자세한 내용은 아래 참조)
desc = ''
# 이벤트 실행 주기 구성(Linux crontab 구문 규칙 사용)
cron = ''
# 지원 플랫폼
os_arch = ["Linux", "Windows"]
# ---------------- 선택적 필드 ---------------
# 현재 규칙 비활성화
#disabled = false
# 기본적으로 태그에 hostname 추가
#omit_hostname = false
# hostname 명시적 설정
#hostname = ''
# ---------------- 사용자 정의 필드 ---------------
# 사용자 정의 key-value 추가 지원, value는 반드시 문자열이어야 함
#instanceID=''
Cron 규칙¶
현재는 간격 실행만 지원합니다
# ┌───────────── 초
# │ ┌───────────── 분
# │ │ ┌───────────── 시
# │ │ │ ┌───────────── 일
# │ │ │ │ ┌───────────── 월
# │ │ │ │ │
# │ │ │ │ │
# │ │ │ │ │
# * * * * *
예시:
*/10 * * * *: 10초마다 실행
* */5 * * *: 5분마다 실행
disable: disable 또는 빈 문자로 설정하면 해당 lua는 상시 실행됩니다(예: 파일 변경 감시). 이 유형의 lua는 한 번 실행되면 중지되지 않습니다
템플릿 지원¶
매니페스트 파일의 desc 문자열에는 템플릿 변수 설정을 지원하며, 구문은 {{.<Variable>}}입니다. 예:
FileName과 Diff는 템플릿 변수이며, (점 .을 포함하여) 대체됩니다. trigger() 함수를 호출하면 변수가 대체됩니다. 이 함수는 템플릿 변수의 대체 값을 포함하는 Lua table 변수를 전달할 수 있습니다. 다음 매개변수를 전달한다고 가정합니다:
최종 desc 값은 다음과 같습니다:
규칙 테스트¶
규칙 코드를 작성할 때 scheck --test를 사용하여 코드가 올바른지 테스트할 수 있습니다. rules.d 디렉토리에 demo 규칙이 있다고 가정합니다:
--test는 여러 개를 동시에 테스트할 수도 있습니다. 해당 스크립트가 다른 스크립트 실행 후에 실행된다고 가정합니다:
Lua 함수¶
함수 참조
공통 라이브러리 생성¶
SChecker는 탐지 스크립트에서 require 함수를 사용하여 Lua 모듈을 가져올 수 있습니다. 모듈 파일은 rules.d/lib 디렉토리에만 저장할 수 있습니다. 자주 사용하는 함수를 모듈화하여 이 lib 하위 디렉토리에 저장하여 탐지 스크립트에서 사용할 수 있습니다.
Lua 모듈 common.lua를 생성한다고 가정합니다:
common.lua를 /usr/local/scheck/rules.d/lib 디렉토리에 저장합니다.
규칙 스크립트 demo.lua에서 이 공통 모듈을 사용한다고 가정합니다:
라인 프로토콜¶
SCheck의 출력은 라인 프로토콜 형식입니다. 규칙 ID를 메트릭 이름으로 사용합니다.
태그 목록¶
| 이름 | 유형 | 설명 | 필수 |
|---|---|---|---|
title |
string | 보안 이벤트 제목 | true |
category |
string | 이벤트 분류 | true |
level |
string | 보안 이벤트 수준, 지원: info, warn, critical |
true |
host |
string | 이벤트 발생 호스트 이름(기본 포함) | |
os_arch |
string | 호스트 플랫폼 | true |
| 사용자 정의 tags | string | 매니페스트 파일에서 정의한 사용자 정의 태그 | false |
현재 category 분류:
network: 네트워크 관련, 주로 연결, 포트, 방화벽 등storage: 스토리지 관련, 디스크, HDFS 등db: 데이터베이스 관련(MySQL/Redis/...)system: 주로 운영체제 관련container: Docker 및 Kubernetes 포함
메트릭 목록(fields)¶
| 메트릭 이름 | 유형 | 설명 |
|---|---|---|
message |
string | 이벤트 상세 |
SCheck 실행 리소스 제한¶
cgroup을 통해 SCheck 실행 리소스(예: CPU 사용률 등)를 제한할 수 있습니다. Linux 운영체제만 지원합니다. SCheck 설치 디렉토리로 이동하여 scheck.conf 설정 파일을 수정하고 enable을 true로 설정합니다. 예시: