hacktricks/network-services-pentesting/5671-5672-pentesting-amqp.md
2023-07-07 23:42:27 +00:00

9.1 KiB
Raw Blame History

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

基本情報

RabbitMQは、_メッセージキューソフトウェア_としても知られる_メッセージブローカー_または_キューマネージャー_です。簡単に言えば、アプリケーションがメッセージを転送するために接続するキューが定義されているソフトウェアです。
メッセージには任意の情報が含まれることができます。たとえば、別のアプリケーション(別のサーバー上にある場合もあります)で開始するプロセスやタスクに関する情報が含まれる場合もありますし、単純なテキストメッセージの場合もあります。キューマネージャーソフトウェアは、メッセージを受信するアプリケーションが接続し、キューからメッセージを取り出すまでメッセージを保存します。受信するアプリケーションは、その後、メッセージを処理します。
ここからの定義。

デフォルトポート: 5672,5671

PORT     STATE SERVICE VERSION
5672/tcp open  amqp    RabbitMQ 3.1.5 (0-9)

列挙

手動

import amqp
#By default it uses default credentials "guest":"guest"
conn = amqp.connection.Connection(host="<IP>", port=5672, virtual_host="/")
conn.connect()
for k, v in conn.server_properties.items():
print(k, v)

自動

AMQP (Advanced Message Queuing Protocol)は、メッセージ指向ミドルウェアのためのオープンなプロトコルです。AMQPは、メッセージの送信、受信、およびキューイングをサポートし、異なるアプリケーション間での効率的な通信を可能にします。

AMQPのポート番号は、5671と5672です。通常、5672番ポートが使用されますが、TLS/SSLで保護された接続が必要な場合は、5671番ポートを使用します。

AMQPのペンテストでは、以下のような攻撃手法が使用されます。

  • ポートスキャンAMQPサーバーのポートをスキャンして、開いているポートを特定します。
  • デフォルトの認証情報デフォルトのユーザー名とパスワードを使用してAMQPサーバーにログインします。
  • ユーザー列挙:有効なユーザー名を特定するために、ユーザー名の列挙を試みます。
  • パスワード攻撃:既知のユーザー名に対してパスワード攻撃を実行し、正しいパスワードを特定します。
  • メッセージの傍受AMQPメッセージを傍受して、機密情報を取得します。
  • メッセージの改ざんAMQPメッセージを改ざんして、攻撃者が意図した操作を実行します。

AMQPのセキュリティを向上させるためには、以下の対策を実施することが重要です。

  • ポートの制限:不要なポートを閉じるか、必要なポートのみを開くようにします。
  • 強力な認証情報:デフォルトのユーザー名とパスワードを変更し、強力なパスワードポリシーを実施します。
  • ユーザー名の列挙の防止:エラーメッセージにユーザー名の情報を含めないようにします。
  • パスワード攻撃の防止アカウントロックアウトやCAPTCHAなどの対策を実施します。
  • 暗号化の使用TLS/SSLを使用して通信を暗号化します。

AMQPのペンテストでは、これらの攻撃手法と対策を理解し、適切なセキュリティ対策を実施することが重要です。

nmap -sV -Pn -n -T4 -p 5672 --script amqp-info <IP>

PORT     STATE SERVICE VERSION
5672/tcp open  amqp    RabbitMQ 3.1.5 (0-9)
| amqp-info:
|   capabilities:
|     publisher_confirms: YES
|     exchange_exchange_bindings: YES
|     basic.nack: YES
|     consumer_cancel_notify: YES
|   copyright: Copyright (C) 2007-2013 GoPivotal, Inc.
|   information: Licensed under the MPL.  See http://www.rabbitmq.com/
|   platform: Erlang/OTP
|   product: RabbitMQ
|   version: 3.1.5
|   mechanisms: PLAIN AMQPLAIN
|_  locales: en_US

その他のRabbitMQポート

https://www.rabbitmq.com/networking.htmlから、RabbitMQはいくつかのポートを使用していることがわかります。

  • 1883、8883: (MQTTクライアントMQTTプラグインが有効な場合はTLSなしとTLSありMQTTのペントestingの詳細はこちらを参照してください。
  • 4369: epmd: RabbitMQードとCLIツールによって使用されるピアディスカバリーサービス。このサービスのペントestingの詳細はこちらを参照してください。
  • 5672、5671: AMQP 0-9-1および1.0クライアントがTLSなしおよびTLSありで使用するポート
  • 15672: HTTP APIクライアント、管理UI、およびrabbitmqadmin管理プラグインが有効な場合のみ)。このサービスのペントestingの詳細はこちらを参照してください。
  • 15674: STOMP-over-WebSocketsクライアントWeb STOMPプラグインが有効な場合のみ)
  • 15675: MQTT-over-WebSocketsクライアントWeb MQTTプラグインが有効な場合のみ)
  • 15692: PrometheusメトリクスPrometheusプラグインが有効な場合のみ)
  • 25672: ード間およびCLIツールの通信に使用されるErlangディストリビューションサーバーポートであり、動的範囲から割り当てられるデフォルトでは単一のポートに制限され、AMQPポート+20000で計算される。これらのポートへの外部接続が本当に必要でない限りクラスタがfederationを使用している場合や、サブネット外のマシンでCLIツールを使用している場合など、これらのポートは公開されるべきではありません。詳細については、ネットワーキングガイドを参照してください。これらのポートのうち、インターネット上で開かれているのは9つだけです
  • 35672-35682: ードとの通信に使用されるCLIツールErlangディストリビューションクライアントポートであり、動的範囲から割り当てられるサーバーディストリビューションポート+10000からサーバーディストリビューションポート+10010まで。詳細については、ネットワーキングガイドを参照してください。
  • 61613、61614: STOMPクライアントSTOMPプラグインが有効な場合のみ、TLSなしとTLSありこのポートが開いているデバイスは10台未満で、ほとんどがDHTード用のUDPです

Shodan

  • AMQP