Linuxサーバーの運用において、セキュリティインシデントの兆候を早期に察知し、侵害の有無を判断することは極めて重要です。ここでは、一般的な侵害の兆候と、それを特定するための調査手法について、CentOS 6.9環境を例に解説します。
1. ログファイルの整合性確認
攻撃者は痕跡を消すためにログファイルを削除または改変することがあります。/var/log ディレクトリ内のログファイルが存在するか、またはサイズが異常に小さくなっていないかを確認します。
# ディレクトリ内のファイル一覧とサイズ確認
ls -lh /var/log/*
# 各ログファイルのディスク使用量確認
du -sh /var/log/*
2. ユーザーアカウント情報の検証
攻撃者が不正なユーザーアカウントを作成したり、既存のアカウント情報を改変したりする可能性があります。/etc/passwd および /etc/shadow ファイルのパーミッションや最終更新日時、内容を確認します。
# /etc/passwd および /etc/passwd- の詳細表示
ls -l /etc/pass*
# /etc/shadow および /etc/shadow- の詳細表示
ls -l /etc/sha*
さらに、これらのファイルの実際の内容を確認し、不審なエントリがないか精査します。
# /etc/passwd の内容表示
more /etc/passwd
# /etc/shadow の内容表示
more /etc/shadow
3. ログイン履歴の確認
/var/log/lastlog ファイルは、各ユーザーの最終ログイン情報を記録しています。不審なログイン履歴がないか、または普段ログインしないはずのユーザーにログイン記録がないかを確認します。
# 最終ログイン情報表示
lastlog
4. 現在および過去のログインセッション調査
/var/run/utmp ファイルには現在ログイン中のユーザー情報が、/var/log/wtmp ファイルにはシステム起動以降の全ログイン・ログアウト履歴が記録されています。
# 現在ログイン中のユーザー表示
who
# システム起動以降のログイン履歴表示
last
5. ユーザー接続時間の分析
ac コマンドを使用すると、ユーザーごとの接続時間を日別に集計できます。異常に長時間接続しているユーザーや、予期しない時間にログインしているユーザーがいないか確認します。
# ユーザー別接続時間(日次)表示
ac -dp
6. ネットワークトラフィックの監視
異常なネットワークトラフィックは、侵害の兆候である可能性があります。tcpdump を使用してパケットキャプチャを行ったり、iperf などのツールで帯域幅の使用状況を監視したりして、不正な通信がないか調査します。
7. 認証ログの精査
/var/log/secure ファイルには、SSHなどの認証に関するログが記録されます。特に、パスワード認証の成功・失敗記録などをフィルタリングして、ブルートフォース攻撃や不正なログイン試行の痕跡を探します。
# /var/log/secure からパスワード認証成功ログを抽出
cat /var/log/secure | grep -i "accepted password"
8. 不審なプロセスの特定と調査
top コマンドなどでCPUやメモリを異常に消費しているプロセスを特定し、そのプロセスID(PID)を把握します。
# top コマンド実行例 (PID: 1850)
top
次に、/proc ファイルシステムを通じて、そのプロセスの実行ファイルパスを特定します。
# プロセスID 1850 の実行ファイルパス確認
ls -l /proc/1850/exe
# 実行ファイルのパーミッション確認
ls -l /usr/bin/python
9. 削除されたファイルの復旧 (フォレンジック調査)
侵害されたサーバーでは、重要なファイルが削除されている可能性があります。しかし、プロセスがファイルを開いたまま削除された場合、ディスク上にはデータが残存しています。これは、プロセスがファイルディスクリプタを通じてファイルにアクセスできるためです。
/proc ディレクトリは、実行中のプロセスに関する情報を提供する仮想ファイルシステムです。各プロセスのディレクトリ (例: /proc/) には、そのプロセスが管理するファイルディスクリプタへのシンボリックリンク (例: /proc/) が含まれています。
例えば、/var/log/secure ファイルが削除されたと仮定します。まず、lsof コマンドで、削除されたファイルを開いているプロセスがないか確認します。
# /var/log/secure が削除されたか確認
ls -l /var/log/secure
# -> ls: cannot access /var/log/secure: No such file or directory
# lsof で削除された /var/log/secure を開いているプロセスを検索
lsof | grep /var/log/secure
# -> rsyslogd 1264 root 4w REG 8,1 3173904 263917 /var/log/secure (deleted)
この出力から、PID 1264 の rsyslogd プロセスがファイルディスクリプタ 4 で /var/log/secure を開いており、ファイルが "(deleted)" 状態であることがわかります。このファイルディスクリプタを通じて、メモリ上に残存するファイルの内容にアクセスできます。
# ファイルディスクリプタ 4 の内容を表示
tail /proc/1264/fd/4
# ファイル内容を復旧する場合
cat /proc/1264/fd/4 > /var/log/secure
これにより、削除された /var/log/secure ファイルを復旧できます。この手法は、ログファイルやデータベースファイルなど、継続的に書き込みが行われるファイルが削除された場合に特に有効です。
# 復旧後のファイルサイズ確認
ls -l /var/log/secure
# 復旧後のファイル内容確認 (先頭部分)
head /var/log/secure
この方法で、侵害活動の痕跡や失われたデータを復旧できる可能性があります。