161,162,10161,10162/udp - Pentesting SNMP
If you are interested in hacking career and hack the unhackable - we are hiring! (流暢なポーランド語の読み書きが必要).
基本情報
SNMP - シンプルネットワーク管理プロトコルは、ネットワーク内のさまざまなデバイス(ルーター、スイッチ、プリンター、IoTなど)を監視するために使用されるプロトコルです。
SNMPは、162/UDPポートもトラップに使用します。これは、SNMPサーバーからクライアントに明示的に要求されることなく送信されるデータパケットです。
MIB
SNMPアクセスが異なるメーカーやクライアント-サーバーの組み合わせで機能することを保証するために、管理情報ベース(MIB)が作成されました。MIBは、デバイス情報を保存するための独立したフォーマットです。MIBは、デバイスのすべてのクエリ可能なSNMPオブジェクトが標準化されたツリー階層にリストされているテキストファイルです。少なくとも1つのオブジェクト識別子(OID)
が含まれており、必要な一意のアドレスと名前に加えて、タイプ、アクセス権、およびそれぞれのオブジェクトの説明に関する情報も提供します。
MIBファイルは、抽象構文表記法1(ASN.1)
に基づくASCIIテキストフォーマットで記述されています。MIBにはデータは含まれていませんが、どこにどの情報があるか、それがどのように見えるか、特定のOIDに対して返される値、または使用されるデータ型について説明します。
OIDs
**オブジェクト識別子(OIDs)**は重要な役割を果たします。これらの一意の識別子は、**管理情報ベース(MIB)**内のオブジェクトを管理するために設計されています。
MIBオブジェクトID、またはOIDの最上位レベルは、さまざまな標準設定機関に割り当てられています。これらの上位レベル内で、グローバルな管理慣行と標準の枠組みが確立されます。
さらに、ベンダーはプライベートブランチを設立する自由が与えられています。これらのブランチ内では、自社の製品ラインに関連する管理オブジェクトを含める自主性があります。このシステムは、異なるベンダーや標準にわたるさまざまなオブジェクトを識別し管理するための構造化された方法を確保します。
ここからOIDツリーをナビゲートできます: http://www.oid-info.com/cgi-bin/display?tree=#focus またはOIDの意味を確認できます(例えば1.3.6.1.2.1.1
): http://oid-info.com/get/1.3.6.1.2.1.1.
よく知られたOIDには、MIB-2で定義されたシンプルネットワーク管理プロトコル(SNMP)変数を参照する1.3.6.1.2.1内のものがあります。そして、このOIDからの保留中のOIDからは、興味深いホストデータ(システムデータ、ネットワークデータ、プロセスデータなど)を取得できます。
OIDの例
1 . 3 . 6 . 1 . 4 . 1 . 1452 . 1 . 2 . 5 . 1 . 3. 21 . 1 . 4 . 7
このアドレスの内訳は次のとおりです。
1 – これはISOと呼ばれ、これがOIDであることを示します。すべてのOIDが「1」で始まる理由です。
3 – これはORGと呼ばれ、デバイスを製造した組織を指定するために使用されます。
6 – これはdodまたは国防総省で、インターネットを最初に確立した組織です。
1 – これはインターネットの値で、すべての通信がインターネットを通じて行われることを示します。
4 – この値は、このデバイスが政府機関ではなく民間組織によって製造されたことを示します。
1 – この値は、デバイスが企業またはビジネスエンティティによって製造されたことを示します。
これらの最初の6つの値はすべてのデバイスで同じ傾向があり、基本的な情報を提供します。この数字のシーケンスは、デバイスが政府によって製造されていない限り、すべてのOIDで同じになります。
次の数字のセットに進みます。
1452 – このデバイスを製造した組織の名前を示します。
1 – デバイスのタイプを説明します。この場合、アラーム時計です。
2 – このデバイスがリモートターミナルユニットであることを示します。
残りの値はデバイスに関する特定の情報を提供します。
5 – 離散アラームポイントを示します。
1 – デバイス内の特定のポイント
3 – ポート
21 – ポートのアドレス
1 – ポートの表示
4 – ポイント番号
7 – ポイントの状態
SNMPバージョン
SNMPには2つの重要なバージョンがあります。
SNMPv1: 主なもので、最も頻繁に使用されており、認証は文字列(コミュニティ文字列)に基づいており、平文で送信されます(すべての情報が平文で送信されます)。バージョン2および2cも平文でトラフィックを送信し、コミュニティ文字列を認証として使用します。
SNMPv3: より良い認証形式を使用し、情報は暗号化されて送信されます(辞書攻撃は実行可能ですが、SNMPv1およびv2よりも正しいクレデンシャルを見つけるのがはるかに難しくなります)。
コミュニティ文字列
前述のように、MIBに保存された情報にアクセスするには、バージョン1および2/2cではコミュニティ文字列を知っている必要があり、バージョン3では資格情報が必要です。 2種類のコミュニティ文字列があります:
public
主に読み取り専用機能private
読み書き一般
OIDの書き込み可能性は使用されるコミュニティ文字列に依存するため、たとえ「public」が使用されている場合でも、いくつかの値を書き込むことができるかもしれません。また、常に「読み取り専用」のオブジェクトが存在する可能性があります。
オブジェクトに書き込もうとすると、noSuchName
またはreadOnly
エラー**が受信されます**.**
バージョン1および2/2cでは、悪いコミュニティ文字列を使用すると、サーバーは応答しません。したがって、応答がある場合は、有効なコミュニティ文字列が使用されたことになります。
ポート
SNMPエージェントはUDPポート161でリクエストを受信します。
マネージャーはポート162で通知(トラップおよびInformRequests)を受信します。
トランスポート層セキュリティまたはデータグラムトランスポート層セキュリティを使用する場合、リクエストはポート10161で受信され、通知はポート10162に送信されます。
ブルートフォースコミュニティ文字列(v1およびv2c)
コミュニティ文字列を推測するために辞書攻撃を実行することができます。SNMPに対するブルートフォース攻撃を実行するさまざまな方法についてはこちらを確認してください。よく使用されるコミュニティ文字列はpublic
です。
SNMPの列挙
デバイスから収集した各OIDの意味を確認するために、以下をインストールすることをお勧めします:
有効なコミュニティ文字列がわかっていれば、SNMPWalkまたはSNMP-Checkを使用してデータにアクセスできます:
extended queries (download-mibs)のおかげで、次のコマンドを使用してシステムについてさらに多くの情報を列挙することが可能です:
SNMP はホストに関する多くの情報を持っており、興味深いものには次のようなものがあります: ネットワークインターフェース(IPv4およびIPv6アドレス)、ユーザー名、稼働時間、サーバー/OSバージョン、およびプロセス
実行中(パスワードを含む可能性があります)....
危険な設定
ネットワーク管理の領域では、特定の構成とパラメータが包括的な監視と制御を確保するための鍵となります。
アクセス設定
フルOIDツリーへのアクセスを可能にする2つの主要な設定があります。これはネットワーク管理において重要な要素です:
rwuser noauth
は、認証なしでOIDツリーへのフルアクセスを許可するように設定されています。この設定は簡単で、制限のないアクセスを可能にします。より具体的な制御のために、次のようにアクセスを付与できます:
rwcommunity
はIPv4アドレス用、そしてrwcommunity6
はIPv6アドレス用です。
両方のコマンドはコミュニティストリングと関連するIPアドレスを必要とし、リクエストの起源に関係なくフルアクセスを提供します。
Microsoft WindowsのSNMPパラメータ
一連の管理情報ベース(MIB)値が、SNMPを通じてWindowsシステムのさまざまな側面を監視するために利用されます:
システムプロセス:
1.3.6.1.2.1.25.1.6.0
を介してアクセスされ、このパラメータはシステム内のアクティブなプロセスの監視を可能にします。実行中のプログラム:
1.3.6.1.2.1.25.4.2.1.2
の値は、現在実行中のプログラムを追跡するために指定されています。プロセスパス: プロセスがどこから実行されているかを特定するために、
1.3.6.1.2.1.25.4.2.1.4
のMIB値が使用されます。ストレージユニット: ストレージユニットの監視は
1.3.6.1.2.1.25.2.3.1.4
によって促進されます。ソフトウェア名: システムにインストールされているソフトウェアを特定するために、
1.3.6.1.2.1.25.6.3.1.2
が使用されます。ユーザーアカウント:
1.3.6.1.4.1.77.1.2.25
の値は、ユーザーアカウントの追跡を可能にします。TCPローカルポート: 最後に、
1.3.6.1.2.1.6.13.1.3
はTCPローカルポートの監視に指定されており、アクティブなネットワーク接続に関する洞察を提供します。
Cisco
Cisco機器を使用している場合は、このページを参照してください:
Cisco SNMPSNMPからRCEへ
SNMPサービス内で値を書き込むことを許可するストリングを持っている場合、それを悪用してコマンドを実行できるかもしれません:
SNMP RCEマッシブSNMP
Braaは、大規模なSNMPスキャナーです。このようなツールの意図された使用法はもちろん、SNMPクエリを行うことですが、net-snmpのsnmpwalkとは異なり、数十または数百のホストに同時に、かつ単一のプロセスでクエリを行うことができます。したがって、非常に少ないシステムリソースを消費し、非常に速くスキャンを行います。
Braaは独自のSNMPスタックを実装しているため、net-snmpのようなSNMPライブラリは必要ありません。
構文: braa [コミュニティストリング]@[[SNMPサーバーのIP]:[iso id]
これは手動で処理できない多くのMBの情報を抽出できます。
では、最も興味深い情報を見てみましょう(https://blog.rapid7.com/2016/05/05/snmp-data-harvesting-during-penetration-testing/から):
デバイス
プロセスは、各ファイルからデバイスを特定するためにsysDesc MIBデータ(1.3.6.1.2.1.1.1.0)を抽出することから始まります。これはgrepコマンドを使用して実現されます:
プライベート文字列の特定
重要なステップは、特にCisco IOSルーターで使用されるプライベートコミュニティ文字列を特定することです。この文字列は、ルーターから実行中の設定を抽出することを可能にします。特定は、grepコマンドを使用して「trap」という単語を含むSNMPトラップデータを分析することに依存することが多いです。
ユーザー名/パスワード
MIBテーブルに保存されたログは、ログオン試行の失敗を調査するために検査され、これにはユーザー名として入力されたパスワードが偶然含まれる可能性があります。fail、failed、または login などのキーワードが、貴重なデータを見つけるために検索されます:
Emails
最後に、データからメールアドレスを抽出するために、grepコマンドを使用し、メール形式に一致するパターンに焦点を当てた正規表現を使用します:
SNMP値の変更
NetScanTools を使用して 値を変更 できます。そのためには プライベート文字列 を知っている必要があります。
スプーフィング
ACLが特定のIPのみがSNMPサービスをクエリできるように制限している場合、UDPパケット内でこれらのアドレスの1つをスプーフィングし、トラフィックをスニッフィングできます。
SNMP設定ファイルの確認
snmp.conf
snmpd.conf
snmp-config.xml
ハッキングキャリアに興味があり、ハッキング不可能なものをハックしたい方 - 私たちは採用しています! (流暢なポーランド語の読み書きが必要です)。
HackTricks自動コマンド
Last updated