目次
1. ユーザー・ログイン
今ログインしている人、過去にログインした人を確認します。身に覚えのないユーザーやIPアドレスがないかがポイントです。
who 現在ログイン中のユーザー一覧。
last -20 直近のログイン成功履歴。
lastb -20 直近のログイン失敗履歴。大量にあればブルートフォース攻撃の可能性。
cat /etc/passwd | awk -F: '$3 >= 1000 {print $1}' 作成された覚えのない一般ユーザーが増えていないか確認。
getent group sudo 管理者権限(sudo)を持つユーザーの一覧。
2. プロセス・リソース
見慣れないプロセスや、常時CPUを使い切っているプロセス(不正マイニング等)がないかを確認します。
ps auxf 親子関係付きの全プロセス一覧。
ps aux --sort=-%cpu | head -15 CPU使用率順。
uptime システム全体の平均負荷(load average)。普段の水準から大きく外れていないか。
3. ネットワーク・ポート
外部からアクセス可能な状態になっているポートを確認します。使っていないサービスの公開は攻撃対象を広げます。
sudo ss -tulnp LISTEN状態のポートと、それを開いているプロセス。
sudo ufw status verbose ファイアウォールが有効になっているか、想定通りのルールか(Ubuntu/Debian)。
who -a | grep -i pts 現在の外部接続セッション。
4. ファイル・権限
権限昇格に悪用されやすいSUID付きファイルや、直近で変更されたファイルを確認します。
find / -perm -4000 -type f 2>/dev/null SUIDが設定されたファイル一覧。見慣れない実行ファイルがあれば要注意。
find /etc /usr/bin /usr/sbin -mtime -3 -type f 2>/dev/null 直近3日以内に変更されたシステムファイル。心当たりのない変更がないか確認。
5. ログ
認証ログには不正アクセスの試行がすべて記録されています。
grep "Failed password" /var/log/auth.log | tail -50 SSHログイン失敗の履歴(Debian/Ubuntu)。CentOS/RHEL系は/var/log/secureを参照します。
grep "Failed password" /var/log/auth.log | awk '{print $(NF-3)}' | sort | uniq -c | sort -rn | head -10 攻撃元IPアドレスごとの試行回数の集計。
6. 自動実行タスク
侵入されたサーバーでは、攻撃者が裏口を維持するために自動実行タスクを仕込むことがあります。
crontab -l 現在のユーザーのcrontab。
sudo ls -la /etc/cron.d/ /etc/cron.daily/ システム全体のcron設定。
systemctl list-timers --all systemdのタイマー(cronの代替として使われる自動実行の仕組み)。
7. パッケージ・アップデート
既知の脆弱性が放置されていないかを確認します。
apt list --upgradable 2>/dev/null | grep -i security 未適用のセキュリティアップデート一覧(Ubuntu/Debian)。
sudo yum check-update --security 同上(CentOS/RHEL系)。
8. カーネル・OS情報
古いカーネルには既知の権限昇格の脆弱性が残っていることがあります。
uname -r 現在のカーネルバージョン。
cat /etc/os-release OSの種類とバージョン。サポート期限が切れていないか確認。
9. まとめて実行するスクリプト化
毎回コマンドを一つずつ打つのは非効率です。上記をまとめた簡単なシェルスクリプトを1本作り、週1回cronで実行してログをファイルに残すだけでも、簡易的な監視の仕組みになります。
出力結果の量が多くなりがちなので、ChatGPTやClaudeに「先週との差分だけ教えて」「不審な点だけ指摘して」と読み解かせると、確認の負担を大きく減らせます。詳しい進め方は各カテゴリの個別記事もあわせて参照してください。
まとめ
- ユーザー・プロセス・ポート・ファイル・ログ・cron・アップデート・カーネル、8カテゴリで定期的にチェックする
- コマンド一つで確認できるものがほとんどなので、まずはブックマークして週1回実行する習慣から始める
- 出力の解釈に迷ったらAIに読み解かせると効率的