7.2. ホストの侵入検知
Linuxの脅威検出ツールには以下のようなものがある。
- AIDE … ホストの改ざん・侵入検知ツール
- OpenSCAP … システム監視用のRedHat系向けのツール
- Linux Malware Detect(LMD) … 悪意のあるソフトウェアを検出するためのツール
- Rkhunter … ルートキットを検知/駆除ツール
- Chkrootkit … ルートキットを検知/駆除ツール
7.2.1. ファイル整合性の検証とセキュリティ監査
ファイルとディレクトリの整合性検証
AIDE
AIDEはLinux向けのファイルとディレクトリの整合性をチェックする強力なOSSの侵入検知ツール(ホスト型IDS)。
AIDE はファイルとディレクトリの整合性をチェックするための独自のデータベースを持つ。そのファイル署名のデータベースを維持し、ファイル署名を定期的に検証する。
またAIDEは、最近変更または変更されたファイルの監視に役立つ。誰かがファイルやディレクトリを修正または変更しようとしたときに、それらを追跡できるようになっている。
/etc/aide.conf
AIDEの設定ファイルは/etc/aide.confであり、検査対象と検査内容を設定できる。
# 記述例
CONTENT_EX = sha256+ftype+p+u+g+n+acl+selinux+xattrs| 検査ルール | 意味 | 
|---|---|
| p | パーティション | 
| ftype | ファイル種別 | 
| i | inode番号 | 
| l | リンク名 | 
| n | リンク数 | 
| u | ユーザ | 
| g | グループ | 
| s | ファイルサイズ | 
| b | ブロック数 | 
| m | 最終更新時刻 | 
| a | 最終アクセス時刻 | 
| c | 最終ステータス更新時刻 | 
| S | サイズの増分 | 
| I inode番号の変更は無視 | |
| acl | アクセスコントロールリスト | 
| selinux | SELinuxのコンテキスト | 
| xattrs | 拡張ファイル属性 | 
| md5 | チェックサム(MD5) | 
| sha256 | チェックサム(SHA256) | 
# 設定例
/boot/ CONTENT_EX # ルールの適用
!/etc/.*~ # etc以下の「.」ファイルは無視
=/var/log # /var/log以下のチェック| ディレクトリ/ファイルのルール | 説明 | 
|---|---|
| !<ターゲット> | 指定したファイル/ディレクトリを検査しない | 
| =<ターゲット> | 指定したファイル/ディレクトリを検査する(下層ファイル含まず) | 
| <ターゲット> <ルール> | 指定したファイルやディレクトリは以下ヘルール適用 | 
aideコマンド
# データベースの初期化
aide --init
# データベースのチェック
aide --check
# データベースの更新
aide --update| オプション | 説明 | 
|---|---|
| -C, –check | ファイル改ざんチェック | 
| –compare | データベースを比較 | 
| -D | aide.confの書式チェック | 
| -i | データベースの初期化 | 
| -u | ファイルの改ざんチェックとデータベースの更新 | 
aideの設定
システムに AIDE を実装するには、データベースを初期化する必要がある。
データベースは/var/lib/aideディレクトリに作成される。
セキュリティ設定監査ツール
OpenSCAP
OpenSCAPはSCAPのOSSで拡張構成チェックリスト記述形式(XDDCF)を利用する脆弱性/セキュリティ設定監査ツールのこと。
このツールではシステムのセキュリティ対策の設定や、脆弱性対策をどこまで行っているかなどを診断・HTMLファイルとしてレポートすることができる。
なおOpenSCAPは自動化のための言語OVAL(Open Vulnerability and Assessment Language)とセキュリティ設定のチェックリストのフォーマットであるXCCDF(The Extensible Configuration Checklist Description Format)などに対応している。
7.2.2. ルートキット・マルウェア検出と自動化
ルートキット検出ツール
ルートキット
ルートキットはコンピュータへ侵入した後に、その活動や存在を隠蔽するためにシステムを改変し、侵入の形跡を隠滅してしまうソフトウェアのこと。
ルートキットを検知するためのツールにはchkrootkitやrkhunterがある。
chkrootkit
chkrootkit セキュリティスキャナは、システムが「ルートキット」に感染している兆候を検索できる。なおchkrootkitはrootkitを検出しても自動的に対処してくれるわけではないため、検出後は手動で処理する必要がある。
# ルートキットのチェック
chkrootkit
# ルートキットのチェック(冗長出力OFF)
chkrootkit -q| オプション | 説明 | 
|---|---|
| -d | デバックモードでの実行 | 
| -l | 検査対象のコマンドの一覧を表示 | 
| -n | NFSによりマウントされたディレクトリの検査をスキップ | 
| -p [ディレクトリ] | chkrootkitが使用するコマンドを格納したディレクトリを指定して実行 | 
| -r [ディレクトリ] | 指定したディレクトリをルートディレクトリとして実行 | 
| -x | エクスポートモードでの実行 | 
| -V | chkrootkitのバージョンを表示 | 
rkhunter
rkhunterはルートキット検知ツールで、マルウェア対策ソフトのように、定義データベースをアップデートすることで最新のrootkitに対応することができる。
設定ファイルは/etc/rkhunter.confとなる。
# /var/lib/rkhunter/db データベースの更新
rkhunter --update
# 保持されたデータファイルを現在値で更新
rkhunter --propupd
# ルートキットの検出
rkhunter --check --skip-keypress --report-warning-only| オプション | 説明 | 
|---|---|
| -c | ルートキットの検知を実行 | 
| -C | 設定ファイルをチェック | 
| -V | rkhunterのバージョンを表示 | 
| –list [リスト対象] | rkhunterが提供する機能のリストを表示 | 
| –propupd [アップデート対象] | データベースの作成と反映 | 
| –update | データベースのアップデート | 
| –versioncheck | rkhunterの最新バージョンを確認 | 
Linux Malware Detect (LMD/Maldet) の利用
Maldet
MaldetはLinux Malware Detect(LMD)とも呼ばれる、マルウェア検出ツールのこと。
検出対象とするファイルシステムの情報をあらかじめデータベース化し、チェックした情報を比較することで改ざんを検知する。
以下のような特徴を持つ。
- 脅威を迅速に識別するためのMD5ファイルハッシュ検出
- ClamAV(アンチウイルスソフトウェア)をスキャナエンジンとして統合
- シグネチャ(マルウェア検体が持つバイトデータ)のアップデート機能
- 脅威を安全に隔離・保存、脅威を取り除いた隔離ファイルの復元
- マルウェアが挿入された文字列の削除を試行
- cronによる日次のスキャン
標準ではインストールパッケージにcronスクリプトが含まれており、定期的にスキャンおよびシグネチャのアップデートが動作するよう設定されている。
動作設定は/etc/maldetect/conf.maldetで行う。
maldetコマンド
# スキャン
maldet -a
maldet --scan-all <ディレクトリ>
# レポート
maldet -e| オプション | 説明 | 
|---|---|
| -a, –scan-all | 指定したディレクトリを対象にすべてのファイルのスキャンを実施 | 
| -b | コマンドをバックグラウンドで実行 | 
| -d | maldetctのバージョンアップデートを実施 | 
| -e | 検出されたマルウェアの情報を出力 | 
| -l | ログを表示 | 
| -q [スキャンID] | マルウェアとして検出されたファイルに対して検疫を実施 | 
| -r [ディレクトリ] [日数] | 指定したディレクトリを対象に、指定した日数をさかのぼってスキャン | 
| -s | 検出されたマルウェアをもとに戻す | 
| -u | マルウェアの署名をアップデート | 
7.2.3. Linux Auditシステムによる高度なシステム監査
Auditシステムの概要と設定
ログ監査システムはシステムによって保存場所やソフトウェアが異なる。 以下は通常のOS以上のログファイルを扱うプログラムである。
- syslog … /var/logにログを保存
- systemd-journald
LinuxのOSシステム監査にはAuditシステムが使用される。
auditdというデーモンによって、ファイルアクセスやシステムコールの監視、ユーザの特定の操作、セキュリティイベントの記録、ネットワークアクセスの監視など、様々なイベントを監視することができる。
具体的に監視/記録できる項目は以下の通り。
- ファイルアクセスの監視
- システムコールの監視
- ユーザログインの結果の記録
- コマンド実行の記録
【Auditの主なコマンド】
| コマンド | 説明 | 
|---|---|
| auditctl | Auditの動作に関する設定/Auditルールの定義を行う | 
| ausearch | ログファイルから特定の監査結果を検索する | 
| aureport | Auditログファイルから監査結果のレポートを作成する | 
【Auditの主な設定ファイル】
| 設定ファイル | 説明 | 
|---|---|
| /etc/audit/auditd.conf | Auditデーモンの設定ファイル | 
| /etc/audit/audit.rules | Auditルールの定義ファイル | 
監査の構成と記録
Auditにおいて、監査のログ(Auditログ)や監査のルールを設定するには以下のファイルやauditctlコマンドを用いる。
- /etc/audit/auditd.conf… Auditログ全般の設定(ログファイルやローテーションの頻度など)
- /etc/audit/audit.rules… Auditルールを設定(永続的な設定)
- auditctlコマンド … Auditルールを設定(一時的)
なお、これらルールによる監査の結果は、デフォルトでは/var/log/audit/audit.logへ出力される。
auditctlによる監査ルールの設定と利用
Auditルール
audit.rulesやauditctlコマンドで設定するAuditルールには、以下の3つがある。
- 制御ルール … Auditルールの動作設定
- システムコールルール … システムコールの呼び出し
- ファイルシステムルール … 特定ファイル/ディクトリへのアクセス
auditctlコマンド
auditctlはAuditシステムのカーネルコンポーネントを制御し、Auditシステムの設定やパラメータ設定が行えるコマンド。
制御ルールの定義、ファイルシステムルール、およびシステムコールの定義の追加が追加ができる。なおauditdの再起動を行うとルールは削除されてしまう。
auditctl <オプション>| 制御ルールのオプション | 説明 | 
|---|---|
| -b <値> | Auditバッファの最大値 | 
| -e [0,1,2] | 監査設定(0:無効,1:有効,2:ロック) | 
| -f [0,1,2] | 深刻なエラー時の挙動(0:何もなし,1:printkへ出力,2:カーネルパニック) | 
| -r <メッセージ数> | 1秒あたりのメッセージ上限 | 
| -D | 全ルールの削除 | 
| -l | 現在の設定のリスト表示 | 
| -s | Auditシステムのステータス表示 | 
| ファイルシステムルールに関するオプション | 説明 | 
|---|---|
| -w <パス> | 監査対象のファイル/ディレクトリ | 
| -p <パーミッション> | ログに記録するパーミッション設定(r:読み取り,w:書き込み,x:実行, a:属性変更) | 
| -k <キーワード> | ログエントリ参照時のキーワード | 
| システムコールに関するオプション | 説明 | 
|---|---|
| -a [リスト, アクションリスト] | リストおよびアクションの追加 | 
| -d <リスト,アクション> | リスト/アクションの削除 | 
| -S <システムコール名> | システムコール名または番号(全監視はall) | 
| -F | アーキテクチャ/ユーザIDの条件に基づいてイベント照合する際の追加オプションを指定 | 
| -k <キーワード> | ログエントリ参照時のキーワード | 
| システムコールルールのアクション | 説明 | 
|---|---|
| always | 常に監査ログを記録 | 
| never | 監査ログの作成を行わない | 
| システムコールルールのリスト | 説明 | 
|---|---|
| exclude | 特定イベントの除外 | 
| exit | システムコールの終了時 | 
| task | プロセス生成,プロセスコピー時 | 
| user | アプリケーションイベントの対象にする | 
なお、システムコールの番号はusr/include/asm/unisted_64.hの参照、またはausyscallコマンドにより調べることができる。
# ファイルシステムルールの設定オプション
audtictl -w /etc/passwd -p wa -k identity
# ファイルシステムルールが変更されていることを確認
auditctl -l
# システムコールルールの設定オプション
auditctl -a always,exit -S adjtimax,settimeofday -F arch=b64 -k time-change永続化ルールの設定
/etc/audit/audit.rulesファイルにルールを記載することに、システム再起動後の設定を維持できる。
監査ログの検索とレポート
# Auditログファイル内のイベント検索
ausearch
# Auditログファイルに記録されたイベントについてサマリー/レポートの作成
aureport
# プログラム終了までシステム コールとプロセスを追跡できるコマンド
autraceユーザー操作の監視
各ユーザのTTY入力の監視の有効化はpam_tty_audit.soの設定を行う。
この設定によりユーザがどのコマンドを実行したかAuditログに記録できる。
監査の有効化は/etc/pam.d/password-authと/etc/pam.d/system-auth陛下のように定義する。
# rootのみ、TTY入力の監査を有効にする
session required pam_tty_audit.so diable=* enable=rootなお、結果はaureport --ttyで参照できる。