SCheck 入門ガイド¶
- バージョン:1.0.7-7-g251eead
- リリース日:2023-04-06 11:17:57
- 対応OS:windows/amd64,windows/386,linux/arm,linux/arm64,linux/386,linux/amd64
このドキュメントでは、SCheck インストール の完了後に、SCheck の基本機能を使用する方法を説明します。以下の内容を含みます。
SCheck ディレクトリ構成¶
SCheck は現在、Linux/Windows の2つの主要プラットフォームをサポートしています。
| OS | アーキテクチャ | インストールパス |
|---|---|---|
| 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 |
Tips:カーネルバージョンの確認
- 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 で指定します。各ルールは2つのファイルで構成されます。
- スクリプトファイル:Lua 言語で記述され、拡張子は
.luaである必要があります。 - マニフェストファイル:TOML 形式で記述され、拡張子は
.manifestである必要があります。マニフェストファイル を参照してください。
スクリプトファイルとマニフェストファイルは同じ名前である必要があります。
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 = ''
# ---------------- カスタムフィールド ---------------
# カスタムキーと値を追加可能。値は文字列である必要があります。
#instanceID=''
Cron ルール¶
現在は間隔実行のみをサポートしています。
# ┌───────────── Second
# │ ┌───────────── Miniute
# │ │ ┌───────────── Hour
# │ │ │ ┌───────────── Day-of-Month
# │ │ │ │ ┌───────────── Month
# │ │ │ │ │
# │ │ │ │ │
# │ │ │ │ │
# * * * * *
例:
*/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 がメトリクス名として使用されます。
タグリスト¶
| Name | Type | 説明 | 必須 |
|---|---|---|---|
title |
string | セキュリティイベントのタイトル | true |
category |
string | イベントカテゴリ | true |
level |
string | セキュリティイベントレベル。info、warn、critical をサポート。 |
true |
host |
string | イベントの発生元ホスト名(デフォルトで含まれる) | |
os_arch |
string | ホストプラットフォーム | true |
| カスタムタグ | 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 に設定します。例: