콘텐츠로 이동

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\scheck
32비트: 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로 지정됩니다. 각 규칙은 두 개의 파일로 구성됩니다:

  1. 스크립트 파일: Lua 언어로 작성, 확장자는 .lua여야 합니다.
  2. 매니페스트 파일: TOML 형식, 확장자는 .manifest여야 합니다. 매니페스트 파일 참조.

스크립트 파일과 매니페스트 파일의 이름은 동일해야 합니다.

SChecker는 정기적으로(매니페스트 파일의 cron으로 지정) 탐지 스크립트를 실행합니다. Lua 스크립트 코드는 실행될 때마다 관련 보안 이벤트(예: 파일 변경, 새 사용자 로그인 등)가 발생했는지 확인하고, 발생한 경우 trigger() 함수를 사용하여 이벤트를 (라인 프로토콜 형식으로) 설정 파일의 output 필드에 지정된 주소로 전송합니다.

SChecker는 여러 Lua 확장 함수를 정의하며, 보안을 위해 일부 Lua 패키지 또는 함수를 비활성화했습니다. 다음 Lua 내장 패키지/함수만 지원합니다:

  • 다음 내장 기본 패키지는 모두 지원

    • table
    • math
    • string
    • debug
  • 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}}이(가) 수정되었습니다. 변경된 내용: {{.Content}}

FileNameDiff는 템플릿 변수이며, (점 .을 포함하여) 대체됩니다. trigger() 함수를 호출하면 변수가 대체됩니다. 이 함수는 템플릿 변수의 대체 값을 포함하는 Lua table 변수를 전달할 수 있습니다. 다음 매개변수를 전달한다고 가정합니다:

tmpl_vals={
    FileName = "/etc/passwd",
    Content = "delete user demo"
}
trigger(tmpl_vals)

최종 desc 값은 다음과 같습니다:

파일/etc/passwd이(가) 수정되었습니다. 변경 내용: `delete user demo`

규칙 테스트

규칙 코드를 작성할 때 scheck --test를 사용하여 코드가 올바른지 테스트할 수 있습니다. rules.d 디렉토리에 demo 규칙이 있다고 가정합니다:

$ scheck --test  ./rules.d/demo

--test는 여러 개를 동시에 테스트할 수도 있습니다. 해당 스크립트가 다른 스크립트 실행 후에 실행된다고 가정합니다:

$ scheck --test  rules.d/0000-global-cache,rules.d/0400-k8s-node-conf-priv

Lua 함수

함수 참조

공통 라이브러리 생성

SChecker는 탐지 스크립트에서 require 함수를 사용하여 Lua 모듈을 가져올 수 있습니다. 모듈 파일은 rules.d/lib 디렉토리에만 저장할 수 있습니다. 자주 사용하는 함수를 모듈화하여 이 lib 하위 디렉토리에 저장하여 탐지 스크립트에서 사용할 수 있습니다.

Lua 모듈 common.lua를 생성한다고 가정합니다:

module={}

function modules.Foo()
    -- 함수 본문...
end

return module

common.lua/usr/local/scheck/rules.d/lib 디렉토리에 저장합니다.

규칙 스크립트 demo.lua에서 이 공통 모듈을 사용한다고 가정합니다:

common=require("common") -- 확장자 불필요
common.Foo()

라인 프로토콜

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로 설정합니다. 예시:

[cgroup]
# 선택 사항, 기본적으로 비활성화, cpu 및 mem 제어 가능
enable = false
cpu_max = 30.0
cpu_min = 5.0
mem = 0

문서 평가

이 페이지가 도움이 되었나요?