Sophos Linux Sensor のリソースの使用状況の管理
前提条件
Sophos Linux Sensor (SLS) の導入と設定が誤って構成される可能性を避けるため、テストの最終段階が終了するのを待って、その後、リソースを制限する機能を使用することを推奨します。
概要
このガイドは、ホストプロセスとして実行されている SLS について説明しています。SLS をコンテナイメージとして導入する場合は、コンテナランタイム設定を使用してリソース制限を適用することをお勧めします。
セキュリティデータの収集よりも、運用環境のアプリケーション用のリソースを優先させるために、リソース使用のカスタマイズした制限値に従って SLS を実行できます。
また SLS は、サーキットブレーカーのように動作し、高負荷の場合は、セキュリティデータの収集を停止して、ホストのパフォーマンスを維持します。
注
これらの機能によって、生成される警告の数ではなく、処理されるテレメトリの量が制限されます。
リソースのハードリミット
このセクションでは、SLS のリソースのハードリミット機能のデザイン、実装、および使用について説明します。この機能を使用すると、CPU およびメモリリソースに厳密な制限を設定できます。これは、CPU およびメモリサブシステムの下にある Linux の cgroup を使用して実装されます。SLS は、sophoslinuxsensor
という名前の cgroup を使用します。実装には、実際のセンサーを実行および監視するスーパーバイザプロセスが必要です。これによって、複数の望ましい動作が実現されます。まず、SLS プロセスのすべてのルーチンが、cgroup に強制的に常駐するようになります。スーパーバイザプロセスは root
ユーザーとして実行される必要があるため、子プロセスを別のユーザーとして実行することで、SLS の権限を削除することもできます。また、スーパーバイザプロセスが終了した際に子センサープロセスを再起動し、SLS プロセスのパフォーマンスと違反を監視することもできます。
クイックスタート
SLS のリソースリミッタを有効にし、センサーの CPU とメモリの使用を制限するには、次のブロックを SLS の設定ファイル (デフォルトの場所: /etc/sophos/runtimedetections.yaml
) に追加します。
use_supervisor: true
use_resource_limits: true
これによってリソースリミッタが、デフォルトのしきい値 (CPU の 5% および 1024MB のメモリ) で有効になります。このような変更を適用するには、SLS を再起動します。
使用状況
リソースの設定は、SLS の設定ファイル (デフォルトの場所: /etc/sophos/runtimedetections.yaml
) から読み込まれます。設定ファイルへのパスは、RUNTIMEDETECTIONS_CONFIG
環境変数を指定することで、上書きすることができます。次のセクションでは、リソースのハードリミッタの設定フィールドについて説明します。
設定
次のフィールドは、SLS 設定ファイルで設定できます。また、フィールドは環境変数にもバインドされています。
-
use_supervisor
- スーパーバイザ、つまりリソースのハードリミットを使用するかどうかを決定するブール値。- 環境変数:
RUNTIMEDETECTIONS_USE_SUPERVISOR
- 種類: boolean
- 例:
true
、false
- デフォルト:
false
- 環境変数:
-
use_resource_limits
- スーパーバイザのリソースのハードリミッタ機能を使用するかどうかを決定するブール値。- 環境変数:
RUNTIMEDETECTIONS_USE_RESOURCE_LIMITS
- 種類: boolean
- 例:
true
、false
- デフォルト:
false
- 環境変数:
-
memory_limit
- SLS プロセスが消費できるメモリの最大容量。文字列の末尾は G (ギガバイト) または M (メガバイト) である必要があります。特別な値「0
」は、制限がないことを示します。- 環境変数:
RUNTIMEDETECTIONS_MEMORY_LIMIT
- 種類: 文字列
- 例:
512M
、1G
、0
- デフォルト:
1024M
- 環境変数:
-
cpu_limit
- マルチコアプロセッサ用に調整された、SLS のスケジュール設定が許可される合計 CPU 時間の割合。特別な値「0
」は、制限がないことを示します。- 環境変数:
RUNTIMEDETECTIONS_CPU_LIMIT
- 種類: 整数
- 例:
10.0
、15
、20.5
、0
- デフォルト:
5.0
- 環境変数:
警告
この cpu_limit
オプションは、固定割り当てではなく、使用可能な CPU の合計に対するパーセンテージで表されます。マルチコアプロセッサを処理するときに予期しない動作が発生する可能性があるため、systemd および docker のようなスーパーバイザを介してリソースを管理することは避けてください。
-
sensor_user
- SLS プロセスを実行するユーザー。これはユーザー名の文字列です。- 環境変数:
RUNTIMEDETECTIONS_SENSOR_USER
- 種類: 文字列
- 例:
myuser
、root
、grant
- デフォルト:
sophos-spl-user
- 環境変数:
-
log_cgroup_metrics
- 2分間隔で cgroup メトリックを、stderr にログするかどうかを指定するブール値。- 環境変数:
RUNTIMEDETECTIONS_LOG_CGROUP_METRICS
- 種類: boolean
- 例:
true
、false
- デフォルト:
false
- 環境変数:
検証
top
ユーティリティを使用して、cgroup の設定が正しく動作していることを確認できます。実行時に、SLS プロセスのメモリおよび CPU 使用率を、合計リソースのパーセンテージとして確認できるはずです。CPU については、SLS は、設定された CPU の制限にマシン上のコア数を掛けた値を超えないようにしてください (コア数は、シェルユーティリティ nproc
で出力できます)。メモリについては、デフォルト top
で KiB で表示される、マシンの合計メモリのパーセンテージを計算できます。
警告リミッタ
このセクションでは、SLS のリソースのソフトリミット機能の使用について説明します。警告リミッタを使用すると、警告出力の上限値を設定して、SIEM、ログスタック、または Web フックに SLS が送信する警告ボリュームを制限できます。
使用状況
リソースの設定は、SLS の設定ファイル (デフォルトの場所: /etc/sophos/runtimedetections.yaml
) から読み込まれます。設定ファイルへのパスは、RUNTIMEDETECTIONS_CONFIG
環境変数を指定することで、上書きすることができます。次のセクションでは、警告リミッタの設定フィールドについて説明します。
設定
警告リミットは出力ごとに指定されるので、特定の出力で、他の出力よりも上限値を大きく設定することができます。デフォルトで制限は適用されておらず、 各出力はすべての警告を受信します。警告リミットを設定するには、alert_output
に次の追加キーを指定する必要があります。
-
limit_period
- 警告を制限する期間を示す値。- 例:
60s
、2m
- デフォルト:
none
- 例:
-
limit_per_period
- 各期間あたりの持続イベントの数。limit_period
の値と組み合わせ、この数を超えると、サーキットブレーカーが落ちるように動作して、警告は破棄されます。- 例:
100
- デフォルト:
none
- 例:
次の例では、1分あたり最大 5つの警告を標準出力に書き込むように設定します。
alert_output:
outputs:
- type: stdout
enabled: true
limit_per_period: 5
limit_period: '60s'
違反と監視
メモリおよび CPU の cgroup では、それぞれ異なった方法で違反が処理されます。SLS プロセスがメモリ不足になると、カーネルによって強制終了され、スーパーバイザプロセスによって再起動されます。CPU の cgroup では、期間とクォータという概念が使用されます。期間は設定された時間で、クォータは期間あたりのマイクロ秒を表します。SLS では、1秒の期間が使用され、クォータは設定されたパーセンテージに基づきます。SLS プロセスが CPU 時間のクォータを使い切った場合、そのプロセスは調整されます。つまり、期間が終了するまで CPU でスケジュールされません。これらはいずれも、SLS のテレメトリイベントのカバレッジに影響を与えます。
cgroup は、CPU の調整に関する統計情報を公開します。その後、この統計情報は、スーパーバイザプロセスによってログ経由で stderr に公開されます。これは、log_cgroup_merics
設定オプションを使用してオンにする必要があります。
再起動
SLS の子プロセスが cgroup 違反またはその他の理由で終了すると、スーパーバイザプロセスはそれを再起動します。このイベントは stderr に記録されます。
機能
インストールの一部として、SLS には次の機能が必要となります。
- CAP_CHOWN
- CAP_DAC_OVERRIDE
- CAP_FOWNER
- CAP_KILL
- CAP_SETGID
- CAP_SETUID
- CAP_SETPCAP
- CAP_IPC_LOCK
- CAP_SYS_PTRACE
- CAP_SYS_ADMIN
- CAP_SYSLOG
スーパーバイザプロセスは、SLS を非特権ユーザーとして実行するため、これが必要となります。「アクセス許可が拒否されました」というエラーが表示される場合は、getcap <sensor_binary>
を実行して、このようなケーパビリティが設定されていることを確認できます。これらの機能は、setcap cap_chown,cap_dac_override,cap_fowner,cap_kill,cap_setgid,cap_setuid,cap_setpcap,cap_ipc_lock,cap_sys_ptrace,cap_sys_admin,cap_syslog=+epi <sensor_binary>
で設定できます。