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ファイル種別
iinode番号
lリンク名
nリンク数
uユーザ
gグループ
sファイルサイズ
bブロック数
m最終更新時刻
a最終アクセス時刻
c最終ステータス更新時刻
Sサイズの増分
I inode番号の変更は無視
aclアクセスコントロールリスト
selinuxSELinuxのコンテキスト
xattrs拡張ファイル属性
md5チェックサム(MD5)
sha256チェックサム(SHA256)
# 設定例
/boot/ CONTENT_EX # ルールの適用

!/etc/.*~ # etc以下の「.」ファイルは無視
=/var/log # /var/log以下のチェック
ディレクトリ/ファイルのルール説明
!<ターゲット>指定したファイル/ディレクトリを検査しない
=<ターゲット>指定したファイル/ディレクトリを検査する(下層ファイル含まず)
<ターゲット> <ルール>指定したファイルやディレクトリは以下ヘルール適用

aideコマンド

# データベースの初期化
aide --init

# データベースのチェック
aide --check

# データベースの更新
aide --update
オプション説明
-C, –checkファイル改ざんチェック
–compareデータベースを比較
-Daide.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. ルートキット・マルウェア検出と自動化

ルートキット検出ツール

ルートキット

ルートキットはコンピュータへ侵入した後に、その活動や存在を隠蔽するためにシステムを改変し、侵入の形跡を隠滅してしまうソフトウェアのこと
ルートキットを検知するためのツールにはchkrootkitrkhunterがある。

chkrootkit

chkrootkit セキュリティスキャナは、システムが「ルートキット」に感染している兆候を検索できる。なおchkrootkitはrootkitを検出しても自動的に対処してくれるわけではないため、検出後は手動で処理する必要がある。

# ルートキットのチェック
chkrootkit

# ルートキットのチェック(冗長出力OFF)
chkrootkit -q
オプション説明
-dデバックモードでの実行
-l検査対象のコマンドの一覧を表示
-nNFSによりマウントされたディレクトリの検査をスキップ
-p [ディレクトリ]chkrootkitが使用するコマンドを格納したディレクトリを指定して実行
-r [ディレクトリ]指定したディレクトリをルートディレクトリとして実行
-xエクスポートモードでの実行
-Vchkrootkitのバージョンを表示

rkhunter

rkhunterはルートキット検知ツールで、マルウェア対策ソフトのように、定義データベースをアップデートすることで最新のrootkitに対応することができる。 設定ファイルは/etc/rkhunter.confとなる。

# /var/lib/rkhunter/db データベースの更新
rkhunter --update

# 保持されたデータファイルを現在値で更新
rkhunter --propupd

# ルートキットの検出
rkhunter --check --skip-keypress --report-warning-only
オプション説明
-cルートキットの検知を実行
-C設定ファイルをチェック
-Vrkhunterのバージョンを表示
–list [リスト対象]rkhunterが提供する機能のリストを表示
–propupd [アップデート対象]データベースの作成と反映
–updateデータベースのアップデート
–versioncheckrkhunterの最新バージョンを確認

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コマンドをバックグラウンドで実行
-dmaldetctのバージョンアップデートを実施
-e検出されたマルウェアの情報を出力
-lログを表示
-q [スキャンID]マルウェアとして検出されたファイルに対して検疫を実施
-r [ディレクトリ] [日数]指定したディレクトリを対象に、指定した日数をさかのぼってスキャン
-s検出されたマルウェアをもとに戻す
-uマルウェアの署名をアップデート

7.2.3. Linux Auditシステムによる高度なシステム監査

Auditシステムの概要と設定

ログ監査システムはシステムによって保存場所やソフトウェアが異なる。 以下は通常のOS以上のログファイルを扱うプログラムである。

  • syslog … /var/logにログを保存
  • systemd-journald

LinuxのOSシステム監査にはAuditシステムが使用される。
auditdというデーモンによって、ファイルアクセスやシステムコールの監視、ユーザの特定の操作、セキュリティイベントの記録、ネットワークアクセスの監視など、様々なイベントを監視することができる。

具体的に監視/記録できる項目は以下の通り。

  • ファイルアクセスの監視
  • システムコールの監視
  • ユーザログインの結果の記録
  • コマンド実行の記録

【Auditの主なコマンド】

コマンド説明
auditctlAuditの動作に関する設定/Auditルールの定義を行う
ausearchログファイルから特定の監査結果を検索する
aureportAuditログファイルから監査結果のレポートを作成する

【Auditの主な設定ファイル】

設定ファイル説明
/etc/audit/auditd.confAuditデーモンの設定ファイル
/etc/audit/audit.rulesAuditルールの定義ファイル

監査の構成と記録

Auditにおいて、監査のログ(Auditログ)や監査のルールを設定するには以下のファイルやauditctlコマンドを用いる。

  • /etc/audit/auditd.conf … Auditログ全般の設定(ログファイルやローテーションの頻度など)
  • /etc/audit/audit.rules … Auditルールを設定(永続的な設定)
  • auditctlコマンド … Auditルールを設定(一時的)

なお、これらルールによる監査の結果は、デフォルトでは/var/log/audit/audit.logへ出力される。

auditctlによる監査ルールの設定と利用

Auditルール

audit.rulesauditctlコマンドで設定する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現在の設定のリスト表示
-sAuditシステムのステータス表示
ファイルシステムルールに関するオプション説明
-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で参照できる。