Pentesting VoIP
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
あなたのウェブアプリ、ネットワーク、クラウドに対するハッカーの視点を得る
実際のビジネスに影響を与える重大で悪用可能な脆弱性を見つけて報告します。 20以上のカスタムツールを使用して攻撃面をマッピングし、特権を昇格させるセキュリティ問題を見つけ、自動化されたエクスプロイトを使用して重要な証拠を収集し、あなたの努力を説得力のある報告書に変えます。
VoIPの仕組みについて学び始めるには、次を確認してください:
1xx—暫定レスポンス
2xx—成功したレスポンス
3xx—リダイレクションレスポンス
4xx—クライアントエラー応答
5xx—サーバー障害応答
6xx—グローバル失敗応答
Red Teamが最初に行うべきステップの一つは、OSINTツール、Google検索、またはウェブページのスクレイピングを使用して、会社に連絡するための利用可能な電話番号を検索することです。
電話番号を取得したら、オンラインサービスを使用してオペレーターを特定できます:
オペレーターがVoIPサービスを提供しているかどうかを知ることで、会社がVoIPを使用しているかどうかを特定できます... さらに、会社がVoIPサービスを契約していないが、PSTNカードを使用して独自のVoIP PBXを従来の電話ネットワークに接続している可能性もあります。
音楽の自動応答などは、通常VoIPが使用されていることを示しています。
VoIPソフトウェアを特定するのに役立つ他のOSINT列挙は、Red Teamにとって有益です。
nmap
はUDPサービスのスキャンが可能ですが、スキャンされるUDPサービスの数が多いため、非常に遅く、この種のサービスに対してあまり正確ではない可能性があります。
svmap
from SIPVicious (sudo apt install sipvicious
): 指定されたネットワーク内のSIPサービスを特定します。
svmap
は簡単にブロックできます。なぜなら、User-Agent friendly-scanner
を使用するからですが、/usr/share/sipvicious/sipvicious
のコードを変更して変更することができます。
SIPPTSスキャン
from sippts: SIPPTSスキャンは、UDP、TCP、またはTLS上のSIPサービス用の非常に高速なスキャナーです。マルチスレッドを使用し、大規模なネットワーク範囲をスキャンできます。ポート範囲を簡単に指定し、TCPとUDPの両方をスキャンし、別のメソッドを使用し(デフォルトではOPTIONSを使用)、異なるUser-Agentを指定することができます(その他も含む)。
metasploit:
PBXは、他のネットワークサービスも公開している可能性があります:
69/UDP (TFTP): ファームウェアの更新
80 (HTTP) / 443 (HTTPS): ウェブからデバイスを管理するため
389 (LDAP): ユーザー情報を保存するための代替手段
3306 (MySQL): MySQLデータベース
5038 (Manager): 他のプラットフォームからAsteriskを使用することを許可
5222 (XMPP): Jabberを使用したメッセージ
5432 (PostgreSQL): PostgreSQLデータベース
その他...
PBXで使用可能なメソッドを見つけることができます SIPPTS enumerate
を使用して、sipptsから
送信するメッセージの種類やヘッダーに応じて、サーバーが返すヘッダーを分析することは非常に重要です。 sippts の SIPPTS send
を使用すると、すべてのヘッダーを操作してパーソナライズされたメッセージを送信し、応答を分析できます。
サーバーがウェブソケットを使用している場合、データを取得することも可能です。sipptsのSIPPTS wssend
を使用すると、パーソナライズされたWSメッセージを送信できます。
PBX(プライベートブランチ交換)システムにおける拡張は、組織やビジネス内の個々の電話回線、デバイス、またはユーザーに割り当てられたユニークな内部識別子を指します。拡張は、各ユーザーやデバイスのために個別の外部電話番号を必要とせずに、組織内で効率的に通話をルーティングすることを可能にします。
svwar
from SIPVicious (sudo apt install sipvicious
): svwar
は無料のSIP PBX拡張ラインスキャナーです。概念的には、拡張の範囲や指定された拡張のリストを推測することによって、従来のウォーダイラーと同様に機能します。
SIPPTS exten
from sippts: SIPPTS extenはSIPサーバー上の拡張子を特定します。Sipextenは大規模なネットワークとポート範囲をチェックできます。
metasploit: metasploitを使用して拡張機能/ユーザー名を列挙することもできます:
enumiax
(apt install enumiax
): enumIAX はインターアスタリスク交換プロトコルの ユーザー名ブルートフォース列挙ツール です。enumIAXは、2つの異なるモードで動作することができます。シーケンシャルユーザー名推測または辞書攻撃。
PBXといくつかの拡張子/ユーザー名を発見した場合、Red Teamは一般的なパスワードの辞書を使用して、拡張子への**REGISTER
メソッドを介して認証を試みる**ことができます。
ユーザー名は拡張子と同じである可能性がありますが、この慣行はPBXシステム、その設定、および組織の好みによって異なる場合があります...
ユーザー名が拡張子と異なる場合は、ブルートフォースするためのユーザー名を特定する必要があります。
svcrack
from SIPVicious (sudo apt install sipvicious
): SVCrackは、PBX上の特定のユーザー名/拡張子のパスワードをクラッキングすることを可能にします。
SIPPTS rcrack
from sippts: SIPPTS rcrackは、SIPサービス用のリモートパスワードクラッカーです。Rcrackは、異なるIPおよびポート範囲で複数のユーザーのパスワードをテストできます。
Metasploit:
オープンWifiネットワーク内にVoIP機器を見つけた場合、すべての情報をスニッフィングすることができます。さらに、より閉じたネットワーク(Ethernet経由または保護されたWifiに接続)内にいる場合、PBXとゲートウェイの間でMitM攻撃(例えば、ARPspoofing)を実行して情報をスニッフィングすることができます。
ネットワーク情報の中には、機器を管理するためのウェブ認証情報、ユーザーの内線番号、ユーザー名、IPアドレス、さらにはハッシュ化されたパスワードやRTPパケットが含まれており、これを再生して会話を聞くことができます。
この情報を取得するために、Wiresharkやtcpdumpなどのツールを使用できますが、VoIP会話をスニッフィングするために特別に作成されたツールはucsniffです。
TLSがSIP通信に使用されている場合、SIP通信をクリアで見ることはできません。 SRTPおよびZRTPが使用されている場合も同様で、RTPパケットはクリアテキストではありません。
この例を確認して、SIP REGISTER通信をよりよく理解し、認証情報がどのように送信されるかを学んでください。
sipdump
& sipcrack
, sipcrackの一部(apt-get install sipcrack
):これらのツールは、SIPプロトコル内のダイジェスト認証を抽出し、ブルートフォースすることができます。
SIPPTS dump
from sippts: SIPPTSダンプは、pcapファイルからダイジェスト認証を抽出できます。
SIPPTS dcrack
from sippts: SIPPTS dcrackは、SIPPTSダンプで取得したダイジェスト認証をクラッキングするためのツールです。
SIPPTS tshark
from sippts: SIPPTS tsharkはPCAPファイルからSIPプロトコルのデータを抽出します。
SIP 認証情報だけでなく、ボイスメールにアクセスするために使用される DTMF コードもネットワークトラフィック内で見つけることができます。 これらのコードは INFO SIP メッセージ、音声、または RTP パケット内で送信することが可能です。コードが RTP パケット内にある場合、その会話の部分を切り取り、ツール multimo を使用して抽出することができます:
Asteriskでは、特定のIPアドレスからの接続を許可することも、任意のIPアドレスからの接続を許可することも可能です:
指定された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システムのコアコンポーネントであり、着信および発信通話がどのように処理され、ルーティングされるかを定義します。コンテキストはダイヤルプランを整理し、アクセス制御を管理し、システムの異なる部分間の分離を提供するために使用されます。
各コンテキストは設定ファイル、通常は**extensions.conf
**ファイルで定義されます。コンテキストは角括弧で示され、コンテキスト名がその中に囲まれています。例えば:
内部のコンテキストでは、拡張子(ダイヤルされた番号のパターン)を定義し、それを一連のアクションまたはアプリケーションに関連付けます。これらのアクションは、通話がどのように処理されるかを決定します。例えば:
この例は、「my_context」というシンプルなコンテキストと「100」という拡張を示しています。誰かが100をダイヤルすると、通話が応答され、ウェルカムメッセージが再生され、その後通話が終了します。
これは、他の任意の番号に呼び出すことを許可する 別のコンテキストです:
もし管理者がデフォルトコンテキストを次のように定義した場合:
誰でもサーバーを使って他の番号に電話をかけることができる(サーバーの管理者が通話料金を支払うことになります)。
さらに、デフォルトで**sip.conf
ファイルにはallowguest=true
が含まれているため、認証なしの任意の**攻撃者が他の番号に電話をかけることができます。
SIPPTS invite
from sippts: SIPPTS inviteは、PBXサーバーが認証なしで通話を許可しているかどうかを確認します。SIPサーバーに不正な設定がある場合、外部番号への通話を許可します。また、通話を第二の外部番号に転送することも可能です。
例えば、Asteriskサーバーに不適切なコンテキスト設定がある場合、認証なしでINVITEリクエストを受け入れることができます。この場合、攻撃者はユーザー名やパスワードを知らなくても通話をかけることができます。
IVRSはインタラクティブ音声応答システムを指し、ユーザーが音声またはトーン入力を通じてコンピュータ化されたシステムと対話することを可能にする電話技術です。IVRSは、情報提供、通話のルーティング、ユーザー入力の取得など、さまざまな機能を提供する自動通話処理システムを構築するために使用されます。
VoIPシステムにおけるIVRSは通常、以下で構成されています:
音声プロンプト:ユーザーをIVRメニューオプションや指示に導く事前録音された音声メッセージ。
DTMF(デュアルトーン多周波数)信号:電話のキーを押すことで生成されるトーン入力で、IVRメニューをナビゲートし、入力を提供するために使用されます。
通話ルーティング:ユーザー入力に基づいて、特定の部門、エージェント、または内線など、適切な宛先に通話を誘導します。
ユーザー入力の取得:呼び出し者からの情報を収集します。例えば、アカウント番号、ケースID、またはその他の関連データなどです。
外部システムとの統合:IVRシステムをデータベースや他のソフトウェアシステムに接続し、情報にアクセスまたは更新し、アクションを実行したり、イベントをトリガーしたりします。
Asterisk VoIPシステムでは、ダイヤルプラン(**extensions.conf
**ファイル)とBackground()
、Playback()
、Read()
などのさまざまなアプリケーションを使用してIVRを作成できます。これらのアプリケーションは、音声プロンプトを再生し、ユーザー入力を取得し、通話の流れを制御するのに役立ちます。
前の例では、ユーザーに1を押して部門に電話するように、2を押して別の部門に電話するように、または知っている場合は完全な内線番号を入力するように求められます。 脆弱性は、指定された内線番号の長さがチェックされないため、ユーザーが5秒のタイムアウトを持つ完全な番号を入力すると、それが呼び出される可能性があることです。
次のような内線番号を使用します:
Where ${EXTEN}
は 呼び出される内線番号 であり、ext 101 が導入されると これが起こります:
しかし、もし ${EXTEN}
が 数字以外のもの(古いAsteriskバージョンのように)を受け入れる場合、攻撃者は 101&SIP123123123
を入力して電話番号123123123に電話をかけることができます。そして、これが結果になります:
したがって、101
および123123123
への呼び出しが送信され、最初のものだけが接続されます... しかし、攻撃者がマッチをバイパスする拡張子を使用し、存在しない場合、彼は望ましい番号にのみ呼び出しを注入することができる。
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ツールを使用してブルートフォース攻撃を行うことができます。
Click2Callは、ウェブユーザー(例えば、製品に興味があるかもしれない)に電話番号を提供させて、電話を受けることができます。次に、商業用の電話がかかり、彼が電話に出ると、ユーザーはエージェントと接続されます。
これに一般的なAsteriskプロファイルは次のとおりです:
前のプロファイルは 任意のIPアドレスが接続することを許可しています(パスワードが知られている場合)。
前述のように 通話を組織するためには、読み取り権限は必要なく、書き込みの 発信のみが必要です。
これらの権限があれば、パスワードを知っている任意のIPが接続し、過剰な情報を抽出することができます。
さらなる情報やアクションが要求される場合があります。
Asteriskでは、ChanSpy
コマンドを使用して、監視する内線(またはすべての内線)を指定することで、行われている会話を聞くことができます。このコマンドは内線に割り当てる必要があります。
例えば、exten => 333,1,ChanSpy('all',qb)
は、内線 333 に電話をかけると、すべての内線を監視し、新しい会話が始まると聞き始め(b
)、静かなモード(q
)で行います。これは、私たちがその会話に干渉したくないためです。*
を押すか、内線番号を入力することで、行われている会話から別の会話に移動することができます。
特定の内線のみを監視するために、ExtenSpy
を使用することも可能です。
会話を聞く代わりに、次のように内線を使用してファイルに録音することもできます:
通話は /tmp
に保存されます。
Asterisk に 通話を漏洩させるスクリプトを実行させる こともできます。
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 は、RTP トラフィックが認証をバイパスできる NAT=yes
設定 を伝統的に使用しており、これにより通話で音声がないか、一方向の音声になる可能性があります。
詳細については https://www.rtpbleed.com/ を確認してください。
SIPPTS rtpbleed
from sippts: SIPPTS rtpbleed は、RTP ストリームを送信することによって RTP Bleed 脆弱性を検出します。
SIPPTS rtcpbleed
from sippts: SIPPTS rtcpbleedは、RTCPストリームを送信することでRTP Bleed脆弱性を検出します。
SIPPTS rtpbleedflood
from sippts: SIPPTS rtpbleedfloodは、RTPストリームを送信することでRTP Bleed脆弱性を悪用します。
SIPPTS rtpbleedinject
from sippts: SIPPTS rtpbleedinjectは、音声ファイル(WAV形式)を注入してRTP Bleed脆弱性を悪用します。
Asteriskでは、拡張ルールを追加して再読み込みすることができる方法があり(例えば、脆弱なウェブマネージャーサーバーを侵害することによって)、**System
**コマンドを使用してRCEを取得することが可能です。
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が実行時に他のバックドアバイナリを読み込むようにすることができます。
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
**)ことができます。
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。
Asteriskのようなソフトウェアをインストールする最も簡単な方法は、すでにインストールされているOSディストリビューションをダウンロードすることです。例:FreePBX、Elastix、Trixbox... これらの問題は、一度動作し始めると、システム管理者が再度更新しない可能性があり、脆弱性が時間とともに発見されることです。
あなたのウェブアプリ、ネットワーク、クラウドに対するハッカーの視点を得る
実際のビジネスに影響を与える重大で悪用可能な脆弱性を見つけて報告します。 攻撃面をマッピングし、特権を昇格させるセキュリティ問題を見つけるために、20以上のカスタムツールを使用し、自動化されたエクスプロイトを使用して重要な証拠を収集し、あなたの努力を説得力のある報告に変えます。
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE) GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)