ネットワーク監視の定番プロトコル「SNMP」。多くの企業で日常的に使われていますが、「気づいたらSNMP v1のまま何年も放置していた」というケースは珍しくありません。実は、古いSNMPは設定一つで企業ネットワーク全体の情報が丸見えになる危険があります。
この記事では、SNMPのセキュリティリスクを攻撃者の視点から解説し、SNMP v3への移行手順と、中小企業の情シスが今日から実践できる安全設定をまとめます。
SNMPとは?ネットワーク監視の「縁の下の力持ち」
SNMP(Simple Network Management Protocol)は、ネットワーク機器やサーバーの状態を監視・管理するためのプロトコルです。ルーター、スイッチ、サーバー、プリンターなど、ほぼすべてのネットワーク機器に搭載されており、CPUの負荷・帯域使用量・エラー数・ポート状態といった情報を収集できます。
ZabbixやNagios、Cactiといった監視ツールの多くがSNMPを使っています。一般的な通信の流れはこうです。
・マネージャー(管理サーバー): SNMP Getリクエストを送信して機器の情報を取得
・エージェント(監視対象機器): リクエストに応じてMIB(管理情報ベース)のデータを返す
・トラップ: 機器側から障害発生時に能動的に通知
問題は、このSNMPのバージョンによってセキュリティ強度が大きく異なることです。
SNMPバージョン別のセキュリティリスク
| バージョン | 認証方式 | 暗号化 | リスク評価 |
|---|---|---|---|
| SNMP v1 | コミュニティストリング(平文) | なし | 非常に高い(論外レベル) |
| SNMP v2c | コミュニティストリング(平文) | なし | 高い(v1と本質的に同じ) |
| SNMP v3 | ユーザー名+パスワード(ハッシュ) | AES/DES対応 | 適切に設定すれば低い |
最も普及しているSNMP v2cは、「コミュニティストリング」と呼ばれる文字列が認証代わりに使われます。しかしこれは平文のままネットワーク上を流れます。つまり、ネットワークをパケットキャプチャできるポジションにいる攻撃者には、コミュニティストリングが丸見えです。
さらに深刻な問題があります。多くの機器でデフォルトのコミュニティストリングが「public」(読み取り用)や「private」(書き込み用)のままになっています。攻撃者はこのデフォルト値を最初に試します。
攻撃者はSNMPをどう悪用するか
1. コミュニティストリングの盗聴・推測
UDPポート161で飛び交うSNMPトラフィックをキャプチャすることで、コミュニティストリングを入手できます。Wiresharkでフィルタリングするだけで即座に見えてしまいます。コミュニティストリングさえ手に入れば、攻撃者はネットワーク機器のほぼすべての設定情報を読み出せます。
インターフェース構成、ルーティングテーブル、ARP表、接続端末の一覧——これらは攻撃者にとって「内部ネットワーク地図」そのものです。
2. SNMPリフレクション・増幅攻撃(DDoS)
SNMPはUDP通信のため、送信元IPを偽造(スプーフィング)できます。攻撃者は標的のIPを偽ってSNMPリクエストを大量のSNMPエージェントに送りつけます。各エージェントは本物の要求だと思って大きなMIBデータを「標的に向かって」返します。
この仕組みで、攻撃者は少ないトラフィックで大量の通信を標的に集中させるDDoS攻撃が可能になります。SNMPを踏み台にした増幅率(BAF: Bandwidth Amplification Factor)は条件によって数十倍に達することがあります。実際、2013年頃からSNMPを悪用したリフレクション攻撃が観測されており、現在も踏み台として悪用され続けています。
3. 書き込み権限による設定改ざん
SNMP v2cの書き込みコミュニティストリング(デフォルト「private」)を入手した攻撃者は、機器の設定を書き換えられます。ルーターのルーティングテーブルを変更してトラフィックを横流しにしたり、設定情報をまるごとバックアップとして外部に持ち出したりといった攻撃が現実に起きています。
SNMP v3の設定手順(Linux / Net-SNMP)
1. Net-SNMPのインストール
# RHEL系(AlmaLinux / Rocky Linux) sudo dnf install net-snmp net-snmp-utils -y # Debian/Ubuntu系 sudo apt install snmpd snmp -y
2. SNMPv3ユーザーの作成
snmpdを停止した状態でユーザーを作成します。起動中に設定ファイルを書き換えると反映されないことがあります。
# snmpdを停止(ユーザー作成はサービス停止状態で行う) sudo systemctl stop snmpd # SNMPv3ユーザー作成(認証: SHA, 暗号化: AES) sudo net-snmp-create-v3-user -ro -A "YourAuthPassword123!" -a SHA -X "YourPrivPassword456!" -x AES monitoruser # snmpdを起動 sudo systemctl start snmpd sudo systemctl enable snmpd
パラメータの意味:
・-ro: 読み取り専用ユーザー(監視用途に書き込み権限は不要)
・-A: 認証パスワード(8文字以上必須)
・-a SHA: 認証アルゴリズム(MD5は脆弱なので使用しない)
・-X: 暗号化パスワード(8文字以上必須)
・-x AES: 暗号化アルゴリズム(DESは脆弱なので使用しない)
3. snmpd.confの安全設定
# /etc/snmp/snmpd.conf の設定例(変更点のみ抜粋) # デフォルトコミュニティ(v1/v2c)を完全無効化 # com2sec notConfigUser default public ← コメントアウト # リッスンするインターフェースを指定(全公開しない) agentaddress udp:161 # 接続元IPを監視サーバーに限定(192.168.10.20 が監視サーバーの例) com2sec monitorSec 192.168.10.20 "" # v2cを使う場合の例(非推奨) # システム情報の不要な公開を制限(情報漏洩防止) sysLocation "" sysContact "" # 監視対象のMIBを最小限に絞る(任意) view systemview included .1.3.6.1.2.1.1 view systemview included .1.3.6.1.2.1.25.1.1
4. 動作確認
# v3でのSNMPウォーク確認(監視サーバー側から実行) snmpwalk -v3 -l authPriv -u monitoruser -a SHA -A "YourAuthPassword123!" -x AES -X "YourPrivPassword456!" 192.168.1.100 sysDescr # 応答例 SNMPv2-MIB::sysDescr.0 = STRING: Linux server01 5.14.0-... # v1/v2cが無効になっていることの確認(応答なしが正常) snmpget -v2c -c public 192.168.1.100 sysDescr # Timeout: No Response から SNMP agent
ネットワーク機器(ルーター・スイッチ)のSNMP設定ポイント
サーバー側の設定だけでなく、ルーターやスイッチ側でも同様の対策が必要です。
・デフォルトコミュニティストリング(public/private)を必ず変更する: 機器を購入したらまず変更します。書き込みコミュニティは原則として無効化してください
・アクセス許可IPを監視サーバーに限定する: 機器のACL機能を使い、SNMPリクエストを受け付けるIPを明示的に指定します
・v3対応機器はv3専用に切り替える: v3が使えない古い機器については、そもそもSNMPを無効にして別の監視手段(syslogのみなど)を検討します
・管理用VLANでSNMPトラフィックを分離する: 業務トラフィックと監視トラフィックを別VLANで分けると盗聴リスクが大幅に下がります
・SNMPトラップの送信先を固定する: トラップ送信先が不特定多数に広報されていると、攻撃者に悪用されるリスクがあります
中小企業でも今日からできること
大がかりな構成変更が難しい環境でも、以下の3点から着手できます。
・ステップ1: SNMPが動いている機器を棚卸しする
ネットワーク内でUDPポート161が開いているホストをスキャンして一覧化します。許可された環境内で nmap -sU -p 161 192.168.1.0/24 を実行するだけで把握できます。「SNMPが何台で動いているか知らない」状態が最大のリスクです。
・ステップ2: ファイアウォールでUDP 161を外部に遮断する
インターネット側からUDP 161に到達できないよう、境界ファイアウォールで即座に遮断します。これだけでDDoSの踏み台になるリスクを大幅に減らせます。費用ゼロで実施できます。
・ステップ3: v3への移行を段階的に進める
すべてを一度に変えると現行監視が壊れます。まず新しいv3設定を追加して並行動作させ、動作確認後にv1/v2cを無効化するという段階的アプローチが現実的です。Zabbixなどの監視ツール側でもv3への切り替えは設定変更だけで対応できます。
よくある誤解と注意点
「社内ネットワークだから大丈夫」は通用しない
内部ネットワークに侵入した攻撃者(または内部不正を起こした従業員)がSNMPで情報を収集するケースは少なくありません。「外部から見えない」と「安全」は別の話です。
「v2cでも複雑なコミュニティストリングなら安全」は誤り
v1/v2cは平文通信のため、どれほど複雑な文字列を設定しても、パケットをキャプチャされた瞬間に漏洩します。複雑にしても「キャプチャに耐えられる」わけではありません。v3への移行が根本解決です。
「SNMPの書き込み権限は監視に必要」は思い込み
通常の監視用途(死活監視・性能データ収集)に書き込み権限は不要です。読み取り専用(RO)のv3ユーザーだけで完結します。書き込みが必要な自動設定変更などは別の管理チャネルを使うべきです。
「SNMPトラップは信頼できる情報源」は過信
SNMPトラップはUDPで送信元IPを偽装できるため、トラップだけを信頼した監視には限界があります。定期的なポーリングと組み合わせた二重確認が望ましいです。
本記事のまとめ
| 対策項目 | 優先度 | 難易度 |
|---|---|---|
| デフォルトコミュニティストリング変更 | 最高 | 低(すぐできる) |
| ファイアウォールでUDP 161を外部遮断 | 最高 | 低(すぐできる) |
| アクセス許可IPを監視サーバーに限定 | 高 | 低 |
| 書き込みコミュニティの無効化 | 高 | 低 |
| SNMP v3への移行(認証+暗号化) | 高 | 中 |
| 管理VLANでSNMPトラフィックを分離 | 中 | 中 |
SNMPはネットワーク運用に欠かせないプロトコルですが、古いバージョンを無防備に使い続けることは大きなリスクです。まずは「外部からの遮断」と「デフォルト値の変更」という2点から着手し、段階的にv3へ移行することを強く推奨します。
Linuxサーバー上でのネットワーク設定全般については、姉妹サイトLinuxMaster.JPでも実践的な手順を詳しく解説しています。
「ネットワークセキュリティ」の記事を読む
このテーマに関連する解説記事を一覧でまとめています。あわせてご覧ください。
