第26章 セキュリティ運用タスクと侵入検知

LPIC-2 212.4 相当

ファイアウォールのようなその場限りの設定だけでなく、継続的なセキュリティ運用の考え方と、改ざん検知・監査ログ・不正アクセスの自動遮断の基礎を扱います。VPN(OpenVPN)による拠点間・リモートアクセスの構築は次章で扱います。

日常的なセキュリティ運用タスク

タスク目的
パッケージの定期更新既知の脆弱性を修正する(apt upgrade / dnf update など)
不要なサービスの無効化攻撃対象となりうる面(アタックサーフェス)を減らす
ログの定期的な確認不審なログイン試行やアクセスを早期発見する
パスワードポリシー・鍵管理の見直し認証情報の漏えいリスクを下げる
監査ログの有効化「誰が・いつ・何をしたか」を後から追跡できるようにする(auditd等)
最小権限の原則の徹底サービスを不要にrootで動かさない、sudoの権限を必要最小限に絞る
ファイル整合性の監視重要な設定ファイルやバイナリが改ざんされていないかを検知する(AIDE、Tripwireなど)

これらのタスクの多くは、単発で終わらせず「定期的に繰り返す」ことが本質です。パッケージ更新はunattended-upgradesのような自動化の仕組みを使うこともできますが、自動再起動が業務時間中に発生しないよう適用タイミングを制御するなど、運用ルールとセットで設計する必要があります。

ファイル整合性の監視(AIDE)

AIDE(Advanced Intrusion Detection Environment)は、あらかじめ重要なファイルのハッシュ値などを含むデータベースを作成しておき、その後の状態と比較することで、改ざんの有無を検出するツールです。

$ sudo aideinit                    # 初期データベースを作成
Start timestamp: 2026-08-21 09:02:14 +0900 (AIDE 0.18.6)
AIDE initialized database at /var/lib/aide/aide.db.new

Number of entries:     48213

---------------------------------------------------
The attributes of the (uncompressed) database(s):
---------------------------------------------------
/var/lib/aide/aide.db.new
 MD5      : Zt0m9QeXk1234567890ABCDEFghijk==
 SHA256   : c2b1a9...(省略)

End timestamp: 2026-08-21 09:03:47 +0900 (run time: 1m 33s)
$ sudo aide --check                # 現在の状態と比較してレポートを表示
AIDE 0.18.6

Summary:
  Total number of entries:     48215
  Added entries:                2
  Removed entries:               0
  Changed entries:               1

---------------------------------------------------
Changed entries:
---------------------------------------------------
f  /etc/passwd
---------------------------------------------------
Detailed information about changes:
---------------------------------------------------
File: /etc/passwd
 SHA256   : X0K3nq...          | Y8mPqz...
 Mtime    : 2026-08-18 14:02:11 | 2026-08-21 08:55:03

この行のこの値に注目: Changed entriesに表示されたファイル(この例では/etc/passwd)が、初期化後に変更されたことを意味します。Mtime行のように変更前後のハッシュ値・更新日時が並記され、心当たりのない変更であれば侵入や改ざんを疑う手がかりになります。ユーザー追加など正当な変更であれば、確認後にsudo aideinitを再実行してデータベースを更新します。

侵入者がバックドアを仕込んだり、ログを改ざんしたりしても、ハッシュ値の不一致からその痕跡を検知できる可能性が高まります。ただしデータベース自体が改ざんされては意味がないため、データベースは書き込み不可のメディアや別サーバーに保管するのが望ましいとされています。

auditd — システムコール監査

auditd(Linux Audit Framework)は、特定のファイルへのアクセスやシステムコールの発行をカーネルレベルで記録する仕組みです。「誰かが/etc/shadowを読み取ろうとした」「特定のバイナリが実行された」といった痕跡を、通常のsyslogより詳細な形で残せます。

$ sudo auditctl -w /etc/shadow -p wa -k shadow_watch   # 正常時は無出力
# /etc/shadowへの書き込み(w)・属性変更(a)を監視し、shadow_watchというキーでタグ付け
$ sudo ausearch -k shadow_watch     # タグを指定してログを検索
----
type=PATH msg=audit(1755741600.123:456): item=0 name="/etc/shadow" inode=131094 dev=fd:01 mode=0100640 ouid=0 ogid=42 rdev=00:00
type=SYSCALL msg=audit(1755741600.123:456): arch=c000003e syscall=2 success=yes exit=3 a0=... comm="vipw" exe="/usr/sbin/vipw" key="shadow_watch"
$ sudo aureport --summary          # 監査ログのサマリレポートを表示
Summary Report
======================
Range of time in logs: 08/21/2026 00:00:07.123 - 08/21/2026 09:10:22.456
Selected time for report: 08/21/2026 00:00:07 - 08/21/2026 09:10:22
Number of changes in configuration: 3
Number of changes to accounts, groups, or roles: 0
Number of logins: 12
Number of failed logins: 2
Number of authentications: 15
Number of files: 8
Number of AVC's: 0

この行のこの値に注目: ausearchの結果にあるcomm="vipw"・exe="/usr/sbin/vipw"から、どのコマンドが/etc/shadowにアクセスしたかが分かります。aureport --summaryのNumber of failed loginsのような集計値は、監査ログ全体の傾向を素早く把握するのに便利で、ここで異常な件数が出ていれば、ausearchで個別のイベントを深掘りする流れになります。

ルールを永続化するには /etc/audit/rules.d/audit.rules に追記します。監査ログはコンプライアンス対応(PCI DSSなど)や、侵入事後の調査(フォレンジック)でも重要な情報源になります。

実行されたコマンドを監査する例
$ sudo auditctl -a always,exit -F arch=b64 -S execve -k command_exec   # 正常時は無出力
# 64ビット環境でのプログラム実行(execveシステムコール)をすべて記録
syslogとauditdの違い: 一般的なsyslog(journaldなど)は、アプリケーションが自発的に出力したメッセージを収集する仕組みです。一方auditdは、カーネルレベルでシステムコールそのものを捕捉するため、アプリケーションがログを出さない操作(特定ファイルへの読み取りアクセスなど)も検知できるのが大きな違いです。その分、監視対象を広げすぎるとログ量が膨大になり、ディスクを圧迫する点には注意が必要です。

fail2ban — 不正アクセスの自動遮断

fail2ban は、ログを監視して、短時間に何度もログイン失敗を繰り返すIPアドレスを自動的にファイアウォールでブロックするツールです。SSHへの総当たり攻撃(ブルートフォース攻撃)対策として広く使われています。

$ sudo systemctl status fail2ban
● fail2ban.service - Fail2Ban Service
     Loaded: loaded (/usr/lib/systemd/system/fail2ban.service; enabled; preset: enabled)
     Active: active (running) since Thu 2026-08-21 06:00:12 JST; 3h 12min ago
       Docs: man:fail2ban(1)
   Main PID: 812 (fail2ban-server)
      Tasks: 5 (limit: 4649)
     Memory: 14.2M
        CPU: 890ms
     CGroup: /system.slice/fail2ban.service
             └─812 /usr/bin/python3 /usr/bin/fail2ban-server -xf start
$ sudo fail2ban-client status sshd     # sshd向けの現在のブロック状況を確認
Status for the jail: sshd
|- Filter
|  |- Currently failed: 3
|  |- Total failed:     47
|  `- Journal matches:  _SYSTEMD_UNIT=sshd.service + _COMM=sshd
`- Actions
   |- Currently banned: 2
   |- Total banned:     9
   `- Banned IP list:   198.51.100.23 203.0.113.77

この行のこの値に注目: Currently bannedとBanned IP listで、いま実際にブロックされている送信元IPアドレスが分かります。Total bannedとCurrently bannedの差は、bantime経過によってすでに解除されたIPの数を表します。誤って正規の利用者のIPをブロックしてしまった場合は、この一覧から該当IPを確認し、次に説明するunbanipで解除します。

設定は「jail(監獄)」という単位で、監視対象のログファイル、検知条件、ブロック方法をサービスごとに定義します。既定の設定を直接編集せず、/etc/fail2ban/jail.localを作成して上書きするのが推奨される運用方法です(アップデートで設定が上書きされるのを防ぐため)。

/etc/fail2ban/jail.local の例
[sshd]
enabled = true
maxretry = 5
findtime = 600
bantime = 3600
# 600秒以内に5回失敗したIPアドレスを3600秒間ブロックする
$ sudo fail2ban-client set sshd unbanip 192.0.2.99   # 誤ってブロックされたIPアドレスを手動で解除
1

この行のこの値に注目: fail2ban-clientのset系サブコマンドは、成功すると処理結果を表す数値(この例では、解除できたIPの件数1)だけを1行返します。0が返る場合は、指定したIPがそもそもブロックリストに存在しなかったことを意味します。

日常的なセキュリティ運用タスクのチェックリスト

ここまでの各章で個別に扱ってきた要素を、日常運用の観点で整理すると次のような定期タスクにまとめられます。

頻度の目安タスク
毎日〜毎週認証ログ(第14・15章)やfail2banの検知状況を確認し、不審なアクセスの兆候がないか目を通す
毎週〜毎月セキュリティアップデート(第9章のパッケージ管理応用)の適用状況を確認する
四半期〜半年SUID/SGIDファイルや所有者不明ファイルの棚卸し(中級第11章)、不要なユーザーアカウントの整理
年次SSL/TLS証明書・DNSSECの鍵・VPNの鍵の更新計画の見直し、ファイアウォールルールの棚卸し

個々の作業自体は本章までで扱ってきた内容の延長線上にありますが、重要なのは「思いついたときにだけやる」のではなく、こうした定期タスクとして仕組み化しておくことです。cronやsystemdタイマー(中級第13章・本章第3章)でチェックスクリプトを自動化し、結果を通知する仕組みを整えておくと、属人的な運用に頼らずセキュリティレベルを維持しやすくなります。

脆弱性情報のキャッチアップ体制

セキュリティ運用は、自サーバーの内部だけを見ていても不十分です。利用しているディストリビューションやミドルウェア(OpenSSH、OpenSSL、Webサーバー、DBサーバーなど)に関する脆弱性情報を、日頃から追いかける体制も欠かせません。多くのディストリビューションはセキュリティアドバイザリのメーリングリストやRSSフィードを公開しており、CVE(Common Vulnerabilities and Exposures)番号で個々の脆弱性が識別されます。かつてはBUGTRAQのようなメーリングリストが脆弱性情報の主要な共有経路として使われており、現在もCERT(Computer Emergency Response Team、各国・組織ごとに設置されたセキュリティ対応チーム)が発行するアドバイザリは重要な一次情報源です。

情報源位置づけ
CVE(Common Vulnerabilities and Exposures)個々の脆弱性に世界共通の番号(CVE-年-連番の形式)を割り当てる識別体系そのもの
NVD(National Vulnerability Database)米国NISTが運営する、CVE番号ごとにCVSSスコアなどの詳細情報を付加したデータベース
JVN(Japan Vulnerability Notes)JPCERT/CCとIPAが共同運営する、日本国内向けの脆弱性対策情報ポータル
JPCERT/CC日本国内のインシデント対応・調整を行う組織。注意喚起や情報提供を行う
CERT/CC米カーネギーメロン大学発の、世界初のCERT(Computer Emergency Response Team)。各国・組織のCERT/CSIRTのモデルとなった
各ディストリビューションのセキュリティアドバイザリDebian DSA、Ubuntu USN、Red Hat RHSAなど、ディストリごとに提供される修正パッケージの告知
Bugtraq(歴史的)1990年代から2010年代にかけて広く使われた脆弱性情報共有メーリングリスト。現在は主要な情報源としての役割を終えている

深刻度の指標としてはCVSS(Common Vulnerability Scoring System)スコアがよく参照され、これをもとに「緊急パッチが必要か」「定例のメンテナンスウィンドウまで待てるか」を判断します。重大な脆弱性が公表された際に自社のシステムが影響を受けるかどうかを即座に判断できるよう、稼働中のソフトウェアとバージョンの一覧を日頃から整備しておくことも、実務上のセキュリティ運用の一部です。

CVSS(現行のバージョン3系)のスコアは、単一の数値ではなく複数の観点を組み合わせて算出されます。

指標グループ内容
Base(基本評価基準)脆弱性そのものの技術的な深刻度(攻撃の複雑さ、必要な権限、影響範囲など)。時間や環境によらず一定
Temporal(現状評価基準)攻撃コードの出回り具合や対策状況など、時間の経過とともに変化する要素
Environmental(環境評価基準)その脆弱性が自組織のシステムにとってどれだけ重要かという、利用環境固有の要素

Baseスコア(0.0〜10.0)は、深刻度に応じて次のように区分されます。

スコア範囲深刻度
0.0None
0.1〜3.9Low
4.0〜6.9Medium
7.0〜8.9High
9.0〜10.0Critical

実務では、Criticalに区分される脆弱性が自組織の稼働ソフトウェアに該当する場合、定例のメンテナンスウィンドウを待たずに緊急パッチ適用を検討するといった判断基準として、このスコアが活用されます。

nmapによるポートスキャンの基礎

nmapは、対象ホストがどのポートを開放しているかを外部から調査するツールです。自分が管理するサーバーに対して定期的に実行することで、「意図せず外部に公開されてしまっているサービスがないか」を確認する、いわば外側からの棚卸し作業に使えます。

オプションスキャン種別
-sSSYNスキャン(TCPの3ウェイハンドシェイクを完了させない、ステルス性の高い手法。要root権限)
-sTTCP connectスキャン(OSの通常の接続機能を使う、root権限不要な手法)
-sUUDPスキャン
-snpingスキャン(ポートスキャンを行わず、ホストの生死のみを確認)
-sVバージョン検出(開いているポートで稼働しているソフトウェアとバージョンを推定)
-OOS検出(TCP/IPスタックの挙動の特徴からOSの種類を推定)
-A総合スキャン(OS検出・バージョン検出・スクリプトスキャン・tracerouteをまとめて実行)
オプション用途
-p 1-1000指定した範囲のポートのみをスキャン
-p-全65535ポートをスキャン
--top-ports Nよく使われる上位N個のポートのみをスキャン
-T0〜-T5スキャン速度のテンプレート(0が最も遅く慎重、5が最も速いが検知されやすい)
-oN ファイル人間が読みやすい標準形式でファイルに出力
-oX ファイルXML形式で出力(他ツールとの連携に向く)
-oG ファイルgrepしやすい1行形式で出力
$ nmap -sS -sV -O -T4 -p- -oN scan-result.txt 192.168.1.10
# SYNスキャン+バージョン検出+OS検出を、比較的速いタイミングで全ポートに対して実行し、結果をファイルに保存
PORT     STATE    SERVICE
22/tcp   open     ssh
80/tcp   open     http
111/tcp  filtered rpcbind
135/tcp  closed   msrpc

この行のこの値に注目: STATE列に表示される3つの状態には明確な違いがあります。openはそのポートで実際にサービスが応答している状態、closedはポートへの到達性はあるがそのポートでは何も待ち受けていない(RSTが返る)状態、filteredはファイアウォールなどにパケットが遮断され、応答が得られず開いているか閉じているか判断できない状態を示します。filteredが多いホストは、何らかのフィルタリング機構の背後にあることが読み取れます。

$ nmap -sS 192.168.1.10               # SYNスキャン(要root権限)
Starting Nmap 7.94 ( https://nmap.org ) at 2026-08-21 09:20 JST
Nmap scan report for 192.168.1.10
Host is up (0.00042s latency).
Not shown: 997 closed tcp ports (reset)
PORT    STATE SERVICE
22/tcp  open  ssh
80/tcp  open  http
443/tcp open  https

Nmap done: 1 IP address (1 host up) scanned in 1.84 seconds
$ nmap -sV 192.168.1.10               # 開いているポートのサービス・バージョンを推定
PORT    STATE SERVICE VERSION
22/tcp  open  ssh     OpenSSH 9.6p1 Ubuntu 3ubuntu13.5 (Ubuntu Linux; protocol 2.0)
80/tcp  open  http    nginx 1.24.0
443/tcp open  ssl/http nginx 1.24.0
$ nmap -p 1-65535 192.168.1.10        # 全ポートを対象にスキャン
Not shown: 65530 closed tcp ports (reset)
PORT     STATE SERVICE
22/tcp   open  ssh
80/tcp   open  http
443/tcp  open  https
3306/tcp open  mysql

Nmap done: 1 IP address (1 host up) scanned in 4.62 seconds

この行のこの値に注目: -sVを付けるとSERVICE列の右にさらにVERSION列が加わり、稼働中のソフトウェア名とバージョンが推定表示されます。全ポートスキャン(-p 1-65535)で3306/tcp(MySQL)のように、意図せず外部からアクセスできる状態のサービスが見つかった場合は、ファイアウォールで塞ぐか、そのサービス自体をローカルホスト限定にバインドし直す対応を検討します。

許可のないスキャンは行わない: 自分が管理者権限を持たないホストやネットワークに対してポートスキャンを行うことは、多くの環境で不正アクセス禁止法などの法令や利用規約に抵触する可能性があります。必ず自分が管理する、あるいは明示的に許可を得たホストに対してのみ実行してください。

nc(netcat)による疎通確認とバナー取得

nc(netcat)は、TCP/UDPの生の接続を手軽に扱える汎用ツールで、「ネットワークのスイスアーミーナイフ」とも呼ばれます。ポートスキャンほど本格的でなくても、単純な疎通確認や簡易的な通信テストに重宝します。

用途コマンド例
ポートの疎通確認nc -zv host port
簡易サーバーの起動nc -l -p 1234
ファイル転送送信側と受信側でncを組み合わせて使う
バナー取得nc host 25
$ nc -zv 192.168.1.10 22
Connection to 192.168.1.10 22 port [tcp/ssh] succeeded!
# -z: 実際にデータを送らず接続確認のみ, -v: 詳細表示
受信側(ファイルを受け取る、正常時は無出力のまま待機し続ける)
$ nc -l -p 1234 > received_file.txt
送信側(ファイルを送る、正常時は無出力)
$ nc 192.168.1.10 1234 < send_file.txt

この行のこの値に注目: どちらのncも成功時は画面に何も表示されません。転送が完了したかどうかは、受信側をCtrl+Cで終了させた後にls -l received_file.txtでファイルサイズを比較するか、送信側のシェルにプロンプトが戻ってきたことで判断します。

ncを使って手動でサービスに接続し、応答(バナー)を確認することもできます。多くのサービスは接続直後にソフトウェア名やバージョンを名乗るため、意図せず古いバージョンの情報が外部に漏れていないかを確認する簡易チェックとしても使えます。

$ nc mail.example.com 25
220 mail.example.com ESMTP Postfix
豆知識: nc -l -p 1234のような簡易サーバーは、あくまで動作確認やデバッグ用の一時的な用途を想定したものです。認証やアクセス制御の機能を持たないため、そのまま本番のサービスとして公開したり、長時間起動したままにしたりすることは避けるべきです。

telnet・openssl s_clientによるサービスの生確認

telnetは、任意のTCPポートに対して手動でテキストベースのコマンドを送受信できる古典的なツールです。SMTPの手動セッション実演はすでに「メール配送」の章で扱いましたが、HTTPサーバーに対しても同様の手法で、レスポンスヘッダーを直接確認できます。

$ telnet example.com 80
Trying 203.0.113.10...
Connected to example.com.
> HEAD / HTTP/1.1
> Host: example.com
>
HTTP/1.1 200 OK
Server: nginx/1.24.0
Date: Thu, 20 Aug 2026 10:00:00 GMT
Content-Type: text/html

この行のこの値に注目: Server:ヘッダーにWebサーバーソフトウェアの名前とバージョン(この例ではnginx/1.24.0)がそのまま表示されています。バージョン情報が外部から丸見えになっていると、そのバージョンに存在する既知の脆弱性を狙われる手がかりを与えてしまうため、公開サーバーではserver_tokens off;(Nginx)やServerTokens Prod(Apache)のような設定で、詳細なバージョン情報を隠すことが推奨されます。

HTTPS(TLS)で保護されたサービスに対しては、telnetでは途中までしか確認できません。証明書の内容やTLSのプロトコルバージョンまで踏み込んで確認したい場合は、openssl s_clientを使います(「HTTPS化とSSL/TLS証明書管理」の章で扱った内容と同じ手法です)。

$ openssl s_client -connect example.com:443 -servername example.com
CONNECTED(00000003)
Certificate chain
 0 s:CN = example.com
   i:CN = Let's Encrypt Authority X3
...
SSL-Session:
    Protocol  : TLSv1.3
    Cipher    : TLS_AES_256_GCM_SHA384

証明書の発行者・有効期限や、実際に使われているTLSのバージョン・暗号スイートをその場で確認でき、証明書の更新漏れや、意図せず古いプロトコル(TLS1.0/1.1など)が有効なままになっていないかの点検に使えます。

脆弱性スキャナとディストリ付属のセキュリティチェックツール

OpenVAS/Greenboneのような本格的な脆弱性スキャナ以外にも、各ディストリビューションには、インストール済みパッケージのうちセキュリティ修正が必要なものを手軽に確認できるツールが用意されています。

ツール対象・特徴
OpenVAS(Greenboneコミュニティエディション)既知の脆弱性データベースに基づき対象ホストを能動的にスキャンする、本格的な脆弱性スキャナ
debsecanDebian系で、インストール済みパッケージのうちセキュリティ勧告(DSA)の対象になっているものを一覧表示する
yum-plugin-security古いRHEL/CentOS系(yum時代)で、セキュリティ関連のアップデートのみを抽出・適用するプラグイン
dnf updateinfo list security新しいRHEL系(dnf)で、セキュリティ関連のアップデート一覧を表示するサブコマンド
$ debsecan                                  # インストール済みパッケージの既知の脆弱性を一覧表示
CVE-2025-31234 openssl (unfixed)
CVE-2025-33456 libxml2 (fixed 2:2.9.14+dfsg-1.3ubuntu1)
CVE-2025-30112 curl (unfixed)
$ sudo dnf updateinfo list security          # セキュリティ関連のアップデートのみを一覧表示
FEDORA-EPEL-2026-abcd123 Important/Sec. openssl-3.2.2-2.el9.x86_64
FEDORA-EPEL-2026-efgh456 Moderate/Sec.  curl-8.5.0-3.el9.x86_64
$ sudo dnf update --security                 # セキュリティ関連のアップデートのみを適用
Dependencies resolved.
================================================================
 Package        Arch    Version           Repository       Size
================================================================
Upgrading:
 openssl        x86_64  3.2.2-2.el9       baseos-security  1.2 M
 curl           x86_64  8.5.0-3.el9       baseos-security  312 k

Transaction Summary
================================================================
Upgrade  2 Packages

Complete!

この行のこの値に注目: debsecanの(unfixed)は、そのディストリのバージョンではまだ修正パッケージが提供されていない脆弱性であることを示し、(fixed バージョン)は、表示されたバージョン以降に上げれば修正済みであることを示します。dnf updateinfo list securityのImportant/Sec.・Moderate/Sec.は深刻度を表し、Important以上のものを優先的に適用するのが実務上の判断基準になります。

これらのディストリ付属ツールは、OpenVASのようなネットワーク経由の能動的スキャンとは異なり、ローカルにインストールされているパッケージのバージョン情報とディストリ側の脆弱性データベースを突き合わせるだけの軽量な仕組みです。日常的なパッチ管理の一環として、まずこれらの軽量ツールで定期的にチェックし、より網羅的な診断が必要な場合にOpenVASのような本格的なスキャナを併用する、という使い分けが実務的です。

IDS/IPSの概要(Snort・Suricata・OpenVAS)

fail2banやauditdが「自ホスト内で起きたこと」を対象にするのに対し、ネットワークの通信そのものを監視し、既知の攻撃パターンと照合する仕組みがIDS(Intrusion Detection System、侵入検知システム)です。Snortは代表的なオープンソースIDS/IPSで、シグネチャ(攻撃パターンのルール)に基づいてパケットを検査し、疑わしい通信を検知(IDSモード)またはブロック(IPS=Intrusion Prevention Systemモード)します。

一方OpenVAS(Open Vulnerability Assessment Scanner)は、既知の脆弱性データベースをもとに対象ホストを能動的にスキャンし、「パッチが未適用の脆弱性がないか」を網羅的に洗い出す脆弱性スキャナです。nmapがポートの開放状況を調べるのに対し、OpenVASはより踏み込んで、各サービスの具体的な脆弱性の有無まで診断します。両者は「攻撃を検知・防御する(Snort)」と「弱点を事前に発見する(OpenVAS)」という異なる役割分担で、セキュリティ運用を補完し合います。

Snortと並んでよく使われるオープンソースIDS/IPSにSuricataがあります。Snortとルール形式に高い互換性を持ちながら、マルチスレッド処理に対応し、高トラフィック環境でもSnort単体より高いスループットを発揮しやすい設計になっている点が特徴です。

IDSは監視対象の範囲によって、さらに2種類に分類されます。

分類監視対象代表例
NIDS(Network IDS)ネットワーク上を流れるパケットそのものを監視するSnort、Suricata
HIDS(Host IDS)個々のホスト内部の状態(ファイルの改ざん、ログ、プロセスなど)を監視するAIDE、Tripwire、OSSEC

この章の前半で扱ったAIDEやTripwireはHIDSに分類されるツールです。ネットワークの通信内容そのものは見ていませんが、「ホストの中で何が変わったか」を検知するという意味で、広い意味でのIDS(侵入検知システム)の一種として位置づけられます。NIDSとHIDSは監視する層が異なるため、両方を組み合わせることで、ネットワーク経由の攻撃の検知と、万が一侵入を許してしまった後の痕跡検知の両方をカバーできます。

確認クイズ

Q1. ログを監視し、短時間に何度もログイン失敗を繰り返すIPアドレスを自動的にブロックするツールはどれですか?

解説: fail2banはログを監視し、ブルートフォース攻撃などの兆候があるIPアドレスを自動的にファイアウォールでブロックするツールです。

Q2. 日常的なセキュリティ運用タスクとして、アタックサーフェス(攻撃対象面)を減らすために行うべきことはどれですか?

解説: 不要なサービスを無効化することで、攻撃者が悪用できる可能性のある面(アタックサーフェス)を減らせます。

Q3. AIDEがファイルの改ざんを検知するために利用する仕組みはどれですか?

解説: AIDEは重要なファイルのハッシュ値などを含むデータベースをあらかじめ作成しておき、その後の状態と比較することで改ざんを検知します。

Q4. auditdがsyslog(journaldなど)と比べて検知できる範囲が広い理由として適切なものはどれですか?

解説: auditdはカーネルレベルでシステムコールを捕捉するため、アプリケーションが自発的にログを出さない操作も検知できます。

Q5. 既知の脆弱性データベースをもとに対象ホストを能動的にスキャンし、パッチ未適用の脆弱性を洗い出すツールはどれですか?

解説: OpenVASは既知の脆弱性データベースに基づいて対象ホストをスキャンし、パッチ未適用の脆弱性を網羅的に診断する脆弱性スキャナです。

Q6. nmapの-sSオプションが行うスキャンの説明として正しいものはどれですか?

解説: -sSはSYNスキャンで、TCPの3ウェイハンドシェイクを完了させないステルス性の高い手法であり、root権限を必要とします。

Q7. nmapで全65535ポートをスキャン対象にするオプションはどれですか?

解説: -p-は全65535ポートをスキャン対象にするオプションです。--top-portsはよく使われる上位N個のポートのみに絞り込みます。

Q8. nmapのスキャン結果でSTATEが「filtered」と表示された場合の意味として正しいものはどれですか?

解説: filteredは、ファイアウォールなどにパケットが遮断されて応答が得られず、開閉の判断ができない状態を示します。

Q9. ncコマンドで、実際にデータを送らずポートへの接続可否だけを確認したい場合に使うオプションはどれですか?

解説: -zは実際にデータを送らず接続確認のみを行うオプションで、-vと組み合わせて詳細を表示します。

Q10. nc -l -p 1234のような簡易サーバーについて、運用上注意すべき点はどれですか?

解説: nc -l -pの簡易サーバーは動作確認・デバッグ用途を想定したもので、認証機能がないため本番用途での長時間公開は避けるべきです。

Q11. telnetでWebサーバーに接続してHEADリクエストを送った際、応答のServerヘッダーにバージョン情報がそのまま表示されている場合の問題点はどれですか?

解説: Serverヘッダーにバージョン情報が露出していると、そのバージョン固有の既知の脆弱性を狙う攻撃の手がかりを与えてしまいます。

Q12. openssl s_clientコマンドで確認できる情報として適切なものはどれですか?

解説: openssl s_clientは証明書チェーンの内容や、ネゴシエーションされたTLSプロトコルバージョン・暗号スイートをその場で確認できます。

Q13. CVE(Common Vulnerabilities and Exposures)の役割として正しいものはどれですか?

解説: CVEは個々の脆弱性にCVE-年-連番の形式で世界共通の番号を割り当てる識別体系です。深刻度スコアはCVSS、日本国内向けポータルはJVNが該当します。

Q14. JVN(Japan Vulnerability Notes)を共同運営している組織の組み合わせはどれですか?

解説: JVNはJPCERT/CCとIPA(情報処理推進機構)が共同運営する、日本国内向けの脆弱性対策情報ポータルです。

Q15. Debian DSA、Ubuntu USN、Red Hat RHSAに共通する位置づけはどれですか?

解説: DSA/USN/RHSAはいずれも、各ディストリビューションが自身のパッケージに対する修正内容を告知するセキュリティアドバイザリです。

Q16. CVSSのBase(基本評価基準)指標の特徴として正しいものはどれですか?

解説: Baseは脆弱性そのものの技術的な深刻度を表す指標で、時間や利用環境によらず一定です。時間経過で変化するのはTemporal、環境固有の要素はEnvironmentalです。

Q17. CVSSのBaseスコアが9.0〜10.0の範囲にある場合の深刻度区分はどれですか?

解説: CVSS Baseスコアが9.0〜10.0の範囲はCriticalに区分され、緊急のパッチ適用が検討される深刻度です。

Q18. debsecanコマンドの用途として正しいものはどれですか?

解説: debsecanはDebian系で、インストール済みパッケージのうちセキュリティ勧告(DSA)の対象になっているものを一覧表示するツールです。

Q19. RHEL系でセキュリティ関連のアップデートのみを一覧表示するdnfのサブコマンドはどれですか?

解説: dnf updateinfo list securityは、セキュリティ関連のアップデートのみを抽出して一覧表示するサブコマンドです。

Q20. SnortとSuricataの違いとして適切なものはどれですか?

解説: SuricataはSnortとルール形式に高い互換性を持ちながらマルチスレッド処理に対応し、高トラフィック環境でも高いスループットを発揮しやすい設計です。

Q21. NIDS(Network IDS)とHIDS(Host IDS)の違いとして正しいものはどれですか?

解説: NIDSはネットワークを流れるパケットそのものを監視し、HIDSはファイルの改ざんやログなど個々のホスト内部の状態を監視します。

Q22. AIDEやTripwireがHIDS(Host IDS)に分類される理由として適切なものはどれですか?

解説: AIDEやTripwireはネットワーク通信を監視するのではなく、ホスト内部のファイルの改ざんなどの変化を検知するため、HIDSに分類されます。