シンプルネットワーク管理プロトコル(SNMP)は、IPネットワーク上の管理対象デバイスに関する情報を収集および整理し、その情報を変更してデバイスの動作を変更するためのインターネット標準プロトコルです。SNMPをサポートするデバイスには、ケーブルモデム、ルーター、ネットワークスイッチ、サーバー、ワークステーション、プリンターなどがあります。[ 1 ]
SNMPは、ネットワーク監視のためのネットワーク管理において広く利用されています。SNMPは、管理対象システム上の変数という形で管理データを公開します。この変数は、管理情報ベース(MIB)に整理されており、システムの状態や構成を記述します。これらの変数は、ネットワーク管理アプリケーションによってリモートから照会(場合によっては操作)することができます。
SNMPには、これまでに3つの重要なバージョンが開発され、展開されてきました。SNMPv1はプロトコルの初期バージョンです。より新しいバージョンであるSNMPv2cとSNMPv3は、パフォーマンス、柔軟性、セキュリティの面で改良されています。
SNMPは、インターネット技術タスクフォース(IETF)によって定義されたインターネットプロトコルスイートの構成要素です。アプリケーション層プロトコル、データベーススキーマ、データオブジェクトのセットなど、ネットワーク管理のための標準規格のセットで構成されています。[ 2 ]
SNMPの一般的な使用例では、マネージャと呼ばれる1台以上の管理用コンピュータが、コンピュータネットワーク上のホストまたはデバイスのグループを監視または管理する役割を担います。各管理対象システムは、エージェントと呼ばれるソフトウェアコンポーネントを実行し、SNMPを介してマネージャに情報を報告します。
SNMPで管理されるネットワークは、主に3つの構成要素から成り立っています。
管理対象デバイスとは、SNMPインターフェイスを実装し、ノード固有の情報への一方向(読み取り専用)または双方向(読み書き)アクセスを可能にするネットワークノードです。管理対象デバイスは、NMSとノード固有の情報を交換します。ネットワーク要素とも呼ばれる管理対象デバイスは、ルーター、アクセスサーバー、スイッチ、ケーブルモデム、ブリッジ、ハブ、IP電話、IPビデオカメラ、コンピューターホスト、プリンターなど、あらゆる種類のデバイスが含まれます。
エージェントとは、管理対象デバイス上に存在するネットワーク管理ソフトウェアモジュールです。エージェントは管理情報をローカルに把握しており、その情報をSNMP固有の形式に変換したり、SNMP固有の形式から変換したりします。
ネットワーク管理ステーション( NMS)は、管理対象デバイスの監視と制御を行うアプリケーションを実行します。NMSは、ネットワーク管理に必要な処理能力とメモリの大部分を提供します。管理対象ネットワークには、1つまたは複数のNMSが存在する可能性があります。
SNMPエージェントは、管理対象システムの管理データを変数として公開します。このプロトコルは、これらの変数をリモートで変更することにより、構成変更などのアクティブな管理タスクも許可します。SNMP経由でアクセス可能な変数は階層構造になっています。SNMP自体は、管理対象システムが提供すべき変数を定義していません。むしろ、SNMPはアプリケーションが独自の階層を定義できる拡張可能な設計を採用しています。これらの階層は、管理情報ベース(MIB)として記述されます。MIBは、デバイスサブシステムの管理データの構造を記述します。MIBは、オブジェクト識別子(OID)を含む階層的な名前空間を使用します。各OIDは、SNMP経由で読み取りまたは設定できる変数を識別します。MIBは、 ASN.1のサブセットである管理情報構造バージョン2.0(SMIv2、RFC 2578 )で定義された表記法を使用します。
SNMP はインターネット プロトコル スイートのアプリケーション層で動作します。すべての SNMP メッセージはユーザー データグラム プロトコル(UDP) を介して転送されます。SNMP エージェントはUDP ポート161 でリクエストを受信します。マネージャは、使用可能な任意の送信元ポートからエージェントのポート 161 にリクエストを送信できます。エージェントの応答はマネージャの送信元ポートに返送されます。マネージャはポート 162 で通知 (トラップとInformRequest ) を受信します。エージェントは、使用可能な任意のポートから通知を生成できます。トランスポート層セキュリティまたはデータグラム トランスポート層セキュリティと併用する場合、リクエストはポート 10161 で受信され、通知はポート 10162 に送信されます。[ 3 ]
SNMPv1では、5つのコアプロトコルデータユニット(PDU)が規定されています。SNMPv2ではGetBulkRequestとInformRequestという2つのPDUが追加され、 SNMPv3ではReport PDUが追加されました。すべてのSNMP PDUは、以下のように構成されています。
PDUタイプフィールドで識別される7種類のSNMP PDUタイプは以下のとおりです。
RFC 1157では、SNMP実装は少なくとも484バイトの長さのメッセージを受け入れる必要があると規定されています。実際には、SNMP実装はより長いメッセージを受け入れます。[ 10 ] : 1870正しく実装されていれば、SNMPメッセージのデコードが失敗した場合、SNMPメッセージは破棄され、不正なSNMP要求は無視されます。正常にデコードされたSNMP要求は、コミュニティ文字列を使用して認証されます。認証が失敗した場合、認証失敗を示すトラップが生成され、メッセージは破棄されます。[ 10 ] : 1871
SNMPv1 と SNMPv2c は、マネージャとエージェント間の信頼関係を確立するためにコミュニティを使用します。ほとんどのエージェントは、読み取り専用、読み書き、トラップの 3 つのコミュニティ名をサポートしています。これらの 3 つのコミュニティ文字列は、異なる種類のアクティビティを制御します。読み取り専用コミュニティは、取得要求に適用されます。読み書きコミュニティ文字列は、設定要求に適用されます。トラップコミュニティ文字列は、トラップの受信に適用されます。SNMPv3 もコミュニティ文字列を使用しますが、SNMPマネージャとエージェント間の安全な認証と通信を可能にします。[ 11 ]
実際には、SNMPの実装では、通常SNMPv1、SNMPv2c、SNMPv3など、複数のバージョンがサポートされることが多い。[ 12 ] [ 13 ]
SNMPバージョン1(SNMPv1)は、SNMPプロトコルの最初の実装です。SNMPv1の設計は1980年代に、OSI/IETF/NSF(米国国立科学財団)が公式に支援していた取り組み(HEMS/CMIS/CMIP)を当時のコンピューティングプラットフォームでは実装不可能であり、また実用的ではない可能性があると考えた研究者グループによって行われました。SNMPは、インターネットの大規模展開と商用化に向けたステップを踏むために必要な暫定的なプロトコルであるという考えに基づいて承認されました。
SNMP(現在ではSNMPv1として知られている)に関する最初のRequest for Comments (RFC)は1988年に登場した。
1990年、これらの文書は以下によって置き換えられました。
1991年、RFC 1156(MIB-1)は、より頻繁に使用される以下の規格に置き換えられました。
SNMPv1は広く使用されており、インターネットコミュニティにおける事実上のネットワーク管理プロトコルである。 [ 14 ]
SNMPv1は、ユーザーデータグラムプロトコル(UDP)、OSIコネクションレスモードネットワークサービス(CLNS)、AppleTalkデータグラム配信プロトコル(DDP)、Novellインターネットワークパケット交換(IPX)などのトランスポート層プロトコルによって伝送される場合があります。
バージョン 1 はセキュリティが不十分であると批判されてきました。[ 15 ]仕様ではカスタム認証を使用する余地が実際にありますが、広く使用されている実装では「すべての SNMP メッセージを正規の SNMP メッセージとして識別する単純な認証サービスのみをサポート」しています。[ 16 ]そのため、メッセージのセキュリティは、メッセージが送信されるチャネルのセキュリティに依存することになります。たとえば、組織は内部ネットワークが十分に安全であると判断し、SNMP メッセージの暗号化は不要と考える場合があります。このような場合、平文で送信されるコミュニティ名は、元の仕様に反して、事実上のパスワードとみなされる傾向があります。
SNMPv2はRFC 1441およびRFC 1452で定義されており、バージョン1を改訂し、パフォーマンス、セキュリティ、マネージャ間通信の分野で改善が加えられています。大量の管理データを単一のリクエストで取得するための反復的なGetNextRequestの代替としてGetBulkRequestが導入されました。SNMPv2で導入された新しいパーティベースのセキュリティシステムは、多くの人から過度に複雑であると見なされ、広く採用されませんでした。[ 15 ] このバージョンのSNMPは提案標準レベルの成熟度に達しましたが、後のバージョンでは廃止されたとみなされました。[ 17 ]
コミュニティベースのシンプルなネットワーク管理プロトコル バージョン 2、またはSNMPv2cは、 RFC 1901~RFC 1908で定義されています。SNMPv2c は、議論の的となっている新しい SNMP v2 セキュリティ モデルを除いたSNMPv2 で構成され、代わりに SNMPv1 のシンプルなコミュニティベースのセキュリティ スキームを使用しています。このバージョンは、IETF のドラフト標準成熟度レベルを満たした比較的少数の標準の 1 つです。これは、事実上のSNMPv2 標準として広く認識されていました。[ 17 ] 後に SNMPv3 の一部として再定義されました。[ 18 ]
ユーザーベースのシンプルネットワーク管理プロトコルバージョン2、またはSNMPv2uは、 RFC 1909~RFC 1910で定義されています。これは、SNMPv1よりも高いセキュリティを提供しつつ、SNMPv2のような高い複雑さを招かないようにするための妥協案です。このバリアントはSNMP v2*として商用化され、そのメカニズムは最終的にSNMP v3の2つのセキュリティフレームワークの1つとして採用されました。[ 19 ]
SNMP バージョン 2 では、64 ビット データ カウンターのオプションが導入されました。バージョン 1 は 32 ビット カウンターのみで設計されており、0 から 42億 9000 万 (正確には 100 万) までの整数値を格納できます。4 294 967 295 )。32 ビット バージョン 1 カウンタでは、10 ギガビット以上のインターフェースの最大速度 (ビット/秒) を保存できません。同様に、10 ギガビット以上のインターフェースの統計を追跡する 32 ビット カウンタは、1 分以内に再びゼロに戻る可能性があります。これは、カウンタが現在の状態を読み取るためにポーリングされる時間間隔よりも短い場合があります。これにより、値のロールオーバーが検出されずにトレンド追跡データが破損し、データが失われたり無効になったりする可能性があります。
64ビット版バージョン2カウンタは、0から18.4京(正確には18,446,744,073,709,551,615)までの値を格納できるため、ポーリングイベント間でカウンタがオーバーフローする可能性は今のところ低い。例えば、1.6テラビットイーサネットは2025年までに実用化されると予測されている。1秒あたり1.6兆ビットの速度で増加する64ビットカウンタであれば、このようなインターフェースの情報をオーバーフローすることなく133日間保持できる。
SNMPv2cは、メッセージ形式とプロトコル操作という2つの主要な点でSNMPv1と互換性がありません。SNMPv2cメッセージは、SNMPv1メッセージとは異なるヘッダーとプロトコルデータユニット(PDU)形式を使用します。また、SNMPv2cはSNMPv1で規定されていない2つのプロトコル操作を使用します。この非互換性を克服するために、RFC 3584では、プロキシエージェントとバイリンガルネットワーク管理システムという2つのSNMPv1/v2c共存戦略が定義されています。
SNMPv2エージェントは、SNMPv1で管理されるデバイスに代わってプロキシエージェントとして機能します。SNMPv2 NMSがSNMPv1エージェント宛てのコマンドを発行すると、代わりにSNMPv2プロキシエージェントに送信されます。プロキシエージェントはGet、、、GetNextおよびSetメッセージをSNMPv1エージェントにそのまま転送します。GetBulkメッセージはプロキシエージェントによってGetNextメッセージに変換され、SNMPv1エージェントに転送されます。さらに、プロキシエージェントはSNMPv1トラップメッセージを受信し、SNMPv2トラップメッセージにマッピングしてからNMSに転送します。
バイリンガルSNMPv2ネットワーク管理システムは、SNMPv1とSNMPv2の両方をサポートします。このデュアル管理環境をサポートするために、管理アプリケーションはローカルデータベースに保存されている情報を調べて、エージェントがSNMPv1をサポートしているかSNMPv2をサポートしているかを判断します。データベースの情報に基づいて、NMSは適切なバージョンのSNMPを使用してエージェントと通信します。
SNMPv3は暗号化セキュリティの追加以外にプロトコルに変更を加えていませんが、新しいテキスト規則、概念、用語により見た目が大きく異なります。[ 1 ]最も目立つ変更は、SNMPにセキュリティとリモート構成の拡張機能を追加することで、SNMPのセキュアバージョンを定義したことです。[ 20 ]セキュリティ面では、強力な認証とプライバシーのためのデータ暗号化の両方を提供することで対応しています。管理面では、SNMPv3は通知発信元とプロキシ転送先の2つの部分に焦点を当てています。これらの変更により、SNMPエンティティのリモート構成と管理が容易になり、大規模な展開、アカウンティング、障害管理に関連する問題にも対応できます。
含まれる機能と強化点:
SNMP v3が登場するまで、セキュリティはSNMPの最大の弱点の1つでした。SNMPバージョン1と2の認証は、マネージャーとエージェント間で平文で送信されるパスワード(コミュニティ文字列)に過ぎません。[ 1 ]各SNMPv3メッセージには、オクテット文字列としてエンコードされたセキュリティパラメータが含まれています。これらのセキュリティパラメータの意味は、使用されているセキュリティモデルによって異なります。[ 22 ] v3のセキュリティアプローチは、次のことを対象としています。 [ 23 ]
v3ではUSMとVACMも定義されており、その後、SSH経由のSNMPv3、TLSおよびDTLS経由のSNMPv3をサポートするトランスポートセキュリティモデル(TSM)が登場しました。
2004年現在IETFは、 RFC 3411 – RFC 3418 [ 24 ] (STD0062 としても知られる)で定義されているSimple Network Management Protocol バージョン 3 を、SNMP の現在の標準バージョンとして認識しています。IETFはSNMPv3 を完全なインターネット標準[ 25 ]として指定しており、これは RFC の成熟度レベルとしては最高です。IETF は以前のバージョンを廃止済みとみなしており ( HistoricまたはObsoleteと指定されています) [ 17 ] 。
ネットワーク機器の設定を可能にするSNMPの強力な書き込み機能は、多くのベンダーによって十分に活用されていません。その理由の一つは、SNMPv3以前のSNMPバージョンにセキュリティ上の欠陥があったこと、もう一つは、多くの機器が個々のMIBオブジェクトの変更によって設定できないことにあります。
SNMP 値の一部 (特に表形式値) は、テーブルインデックス方式に関する特定の知識を必要とし、これらのインデックス値はプラットフォーム間で必ずしも一貫しているとは限りません。そのため、同じテーブルインデックス方式を使用していない複数のデバイスから情報を取得する場合 (たとえば、ディスク使用率メトリックを取得する場合、特定のディスク識別子がプラットフォーム間で異なる) に相関の問題が発生する可能性があります。[ 26 ]
主要な機器ベンダーの中には、独自のコマンドラインインターフェース(CLI)中心の構成および制御システムを過度に拡張する傾向がある。 [ 27 ]
2002年2月、カーネギーメロン大学ソフトウェアエンジニアリング研究所(CM-SEI)のコンピュータ緊急対応チーム調整センター(CERT-CC)は、オウル大学セキュアプログラミンググループがSNMPメッセージ処理の徹底的な分析を行った後、SNMPv1に関する勧告を発行しました[ 28 ]。ほとんどのSNMP実装は、サポートするプロトコルのバージョンに関係なく、プロトコルデータユニット(PDU)のデコードに同じプログラムコードを使用しており、このコードに問題が見つかりました。SNMP管理ステーションが受信したSNMPトラップメッセージや、ネットワークデバイス上のSNMPエージェントが受信した要求のデコードにも問題が見つかりました。多くのベンダーがSNMP実装のパッチを発行する必要がありました[ 10 ]: 1875
SNMPは管理者がネットワーク機器をリモートで監視および設定できるように設計されているため、ネットワークへの侵入にも利用される可能性があります。多くのソフトウェアツールがSNMPを使用してネットワーク全体をスキャンできるため、読み書きモードの設定ミスはネットワークを攻撃に対して脆弱にする可能性があります。[ 29 ] : 52
2001年、シスコは、読み取り専用モードであっても、Cisco IOSのSNMP実装が特定のサービス拒否攻撃に対して脆弱であることを示す情報を公開しました。これらのセキュリティ上の問題は、IOSのアップグレードによって修正できます。[ 30 ]
ネットワークでSNMPを使用しない場合は、ネットワーク機器でSNMPを無効にする必要があります。SNMP読み取り専用モードを設定する際には、アクセス制御の設定と、SNMPメッセージを受け入れるIPアドレスに細心の注意を払う必要があります。SNMPサーバーがIPアドレスで識別されている場合、SNMPはこれらのIPアドレスにのみ応答することが許可され、他のIPアドレスからのSNMPメッセージは拒否されます。ただし、IPアドレスのなりすましは依然としてセキュリティ上の懸念事項です。[ 29 ]: 54
SNMPにはさまざまなバージョンがあり、各バージョンにはそれぞれセキュリティ上の問題があります。SNMP v1はパスワードを平文でネットワーク経由で送信します。そのため、パケットスニッフィングでパスワードを読み取ることができます。SNMP v2はMD5によるパスワードハッシュ化を可能にしますが、これは設定が必要です。ほぼすべてのネットワーク管理ソフトウェアはSNMP v1をサポートしていますが、必ずしもSNMP v2またはv3をサポートしているわけではありません。SNMP v2は、認証、プライバシー、認可といったデータセキュリティを提供するために特別に開発されましたが、SNMPバージョン2cのみがインターネット技術タスクフォース(IETF)の承認を得ており、バージョン2uと2*はセキュリティ上の問題によりIETFの承認を得られませんでした。SNMP v3は、MD5、セキュアハッシュアルゴリズム(SHA)、および鍵付きアルゴリズムを使用して、不正なデータ変更やなりすまし攻撃から保護します。より高いレベルのセキュリティが必要な場合は、オプションで暗号ブロック連鎖モードでデータ暗号化標準(DES)を使用できます。SNMP v3は、リリース12.0(3)T以降、Cisco IOSに実装されています。[ 29 ] : 52
SNMPv3 は、認証キーや暗号化キーが短い (弱い) パスワードや辞書で見つけられるパスワードから生成される場合、ブルートフォース攻撃や辞書攻撃によってこれらのキーを推測される可能性があります。 SNMPv3 では、ランダムに一様分布した暗号キーの提供と、ユーザーが提供したパスワードからの暗号キーの生成の両方が可能です。 ネットワーク経由で送信されるハッシュ値から認証文字列を推測するリスクは、使用される暗号ハッシュ関数とハッシュ値の長さに依存します。 SNMPv3 は、ユーザーベースセキュリティモデル (USM) にHMAC - SHA-2認証プロトコルを使用します。 [ 31 ] SNMP は、より安全なチャレンジハンドシェイク認証プロトコルを使用しません。 SNMPv3 (他の SNMP プロトコルバージョンと同様) はステートレスプロトコルであり、エージェントとマネージャ間の相互作用を最小限に抑えるように設計されています。 したがって、コマンドごとにチャレンジレスポンスハンドシェイクを導入すると、プロトコル設計者が過剰で受け入れられないと判断した負荷がエージェント (およびネットワーク自体) にかかります。
すべての SNMP バージョンのセキュリティ上の欠陥は、 IPsec認証および機密性メカニズムによって軽減できます。SNMPは、データグラムトランスポート層セキュリティ(DTLS)を介して安全に伝送することもできます。[ 12 ]
多くの SNMP 実装には、スイッチやルーターなどの新しいネットワーク コンポーネントを自動的に検出してポーリングするタイプの自動検出が含まれています。 SNMPv1 および SNMPv2c では、これは他のデバイスに平文で送信されるコミュニティ ストリングによって行われます。 [ 12 ]平文のパスワードは重大なセキュリティ リスクです。コミュニティ ストリングが組織外に知られると、攻撃の標的になる可能性があります。コミュニティ ストリングを収集しようとする他の試みを管理者に警告するために、SNMP はコミュニティ名認証失敗トラップを渡すように構成できます。[ 29 ] : 54 SNMPv2 を使用する場合は、ネットワーク デバイスの SNMP エージェントでパスワード暗号化を有効にすることで、この問題を回避できます。
コミュニティ文字列の一般的なデフォルト設定は、読み取り専用アクセスの場合は「public」、読み書き可能な場合は「private」です。[ 10 ] : 1874よく知られたデフォルト設定のため、SNMPはSANS Instituteの「一般的なデフォルト設定の問題」リストでトップとなり、2000年のSANS「インターネットセキュリティの最も深刻な脅威トップ10」で10位にランクインしました。[ 32 ]システム管理者やネットワーク管理者は、これらの設定を変更しないことがよくあります。[ 10 ] : 1874
TCPまたはUDPのいずれで動作する場合でも、SNMPv1およびv2はIPスプーフィング攻撃に対して脆弱です。スプーフィングにより、攻撃者はSNMPアクセスを制限するために実装されたエージェントのデバイスアクセスリストを回避する可能性があります。USMやTSMなどのSNMPv3セキュリティメカニズムは、スプーフィング攻撃を防ぐことができます。
-PDU で指定された各変数割り当ては、同じメッセージで指定された他のすべての割り当てに対して同時に設定されたかのように実行される必要があります。
マネージャ ロールで動作する SNMPv2 エンティティ内のアプリケーションが、送信アプリケーションと同じローカルなパーティの MIB ビューの情報を別のアプリケーション (同じくマネージャ ロールで動作する SNMPv2 エンティティ内) に通知したい場合、InformRequest-PDU が生成されて送信されます。