Pentesting VoIP
VoIP 基本情報
VoIPの仕組みについて学ぶには、以下を確認してください:
Basic VoIP Protocols基本メッセージ
レスポンスコード
1xx—暫定レスポンス
2xx—成功したレスポンス
3xx—リダイレクションレスポンス
4xx—クライアントエラー応答
5xx—サーバー障害応答
6xx—グローバル失敗応答
VoIP Enumeration
Telephone Numbers
Red Teamが最初に行うべきステップの一つは、OSINTツール、Google検索、またはウェブページのスクレイピングを使用して、会社に連絡するための利用可能な電話番号を検索することです。
電話番号がわかったら、オンラインサービスを使用してオペレーターを特定できます:
オペレーターがVoIPサービスを提供しているかどうかを知ることで、会社がVoIPを使用しているかどうかを特定できます... さらに、会社がVoIPサービスを契約していないが、PSTNカードを使用して独自のVoIP PBXを従来の電話ネットワークに接続している可能性もあります。
音楽の自動応答などは、通常VoIPが使用されていることを示しています。
Google Dorks
OSINT情報
VoIPソフトウェアを特定するのに役立つ他のOSINT列挙は、Red Teamにとって有益です。
ネットワーク列挙
nmap
はUDPサービスのスキャンが可能ですが、スキャンされるUDPサービスの数が多いため、非常に遅く、この種のサービスに対してあまり正確ではないかもしれません。
svmap
from SIPVicious (sudo apt install sipvicious
): 指定されたネットワーク内のSIPサービスを特定します。svmap
は簡単にブロックできます。なぜなら、User-Agentfriendly-scanner
を使用しているからですが、/usr/share/sipvicious/sipvicious
のコードを変更して変更することができます。
SIPPTS scan
from sippts: SIPPTSスキャンは、UDP、TCP、またはTLS上のSIPサービス用の非常に高速なスキャナーです。マルチスレッドを使用しており、大規模なネットワーク範囲をスキャンできます。ポート範囲を簡単に指定し、TCPとUDPの両方をスキャンし、別のメソッドを使用し(デフォルトではOPTIONSを使用)、異なるUser-Agentを指定することができます(その他も含む)。
metasploit:
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 の SIPPTS send
を使用すると、すべてのヘッダーを操作してパーソナライズされたメッセージを送信し、応答を分析できます。
サーバーがウェブソケットを使用している場合、データを取得することも可能です。sipptsのSIPPTS wssend
を使用すると、パーソナライズされたWSメッセージを送信できます。
Extension Enumeration
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つの異なるモードで動作することができます。シーケンシャルユーザー名推測または辞書攻撃。
VoIP攻撃
パスワードブルートフォース - オンライン
PBXといくつかの拡張/ユーザー名を発見した場合、Red Teamは一般的なパスワードの辞書を使用して、拡張に対して**REGISTER
メソッドを介して認証を試みる**ことができます。
ユーザー名は拡張と同じである可能性がありますが、この慣行はPBXシステム、その設定、および組織の好みによって異なる場合があります...
ユーザー名が拡張と異なる場合は、ブルートフォースするためのユーザー名を特定する必要があります。
svcrack
from SIPVicious (sudo apt install sipvicious
): SVCrackは、PBX上の特定のユーザー名/拡張のパスワードをクラッキングすることを可能にします。
SIPPTS rcrack
from sippts: SIPPTS rcrackは、SIPサービス用のリモートパスワードクラッカーです。Rcrackは、異なるIPおよびポート範囲で複数のユーザーのパスワードをテストできます。
Metasploit:
VoIPスニッフィング
オープンWifiネットワーク内にVoIP機器を見つけた場合、すべての情報をスニッフィングすることができます。さらに、より閉じたネットワーク(Ethernet経由または保護されたWifiに接続)内にいる場合、PBXとゲートウェイの間でMitM攻撃(例えば、ARPspoofing)を実行して情報をスニッフィングすることができます。
ネットワーク情報の中には、機器を管理するためのウェブ認証情報、ユーザーの内線番号、ユーザー名、IPアドレス、さらにはハッシュ化されたパスワードやRTPパケットが含まれており、これを再生して会話を聞くことができます。
この情報を取得するために、Wiresharkやtcpdumpなどのツールを使用できますが、VoIP会話をスニッフィングするために特別に作成されたツールはucsniffです。
SIP通信にTLSが使用されている場合、SIP通信をクリアで見ることはできません。 SRTPやZRTPが使用されている場合も同様で、RTPパケットはクリアテキストではありません。
SIP認証情報(パスワードブルートフォース - オフライン)
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プロトコルのデータを抽出します。
DTMF コード
SIP 認証情報だけでなく、ボイスメールにアクセスするために使用される DTMF コードもネットワークトラフィック内で見つけることができます。 これらのコードは INFO SIP メッセージ、音声、または RTP パケット内で送信することが可能です。コードが RTP パケット内にある場合、その会話の部分を切り取り、ツール multimo を使用して抽出することができます:
無料通話 / Asterisk接続の誤設定
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において、コンテキストはダイヤルプラン内の関連する拡張機能、アクション、およびルールをグループ化する名前付きコンテナまたはセクションです。ダイヤルプランはAsteriskシステムのコアコンポーネントであり、着信および発信通話がどのように処理され、ルーティングされるかを定義します。コンテキストはダイヤルプランを整理し、アクセス制御を管理し、システムの異なる部分間の分離を提供するために使用されます。
各コンテキストは設定ファイル、通常は**extensions.conf
**ファイルで定義されます。コンテキストは角括弧で示され、コンテキスト名がその中に囲まれています。例えば:
内部のコンテキストでは、拡張子(ダイヤルされた番号のパターン)を定義し、それを一連のアクションやアプリケーションに関連付けます。これらのアクションは、通話がどのように処理されるかを決定します。例えば:
この例は、「my_context」というシンプルなコンテキストと「100」という拡張を示しています。誰かが100をダイヤルすると、通話が応答され、ウェルカムメッセージが再生され、その後通話が終了します。
これは、他の任意の番号に呼び出すことを許可する 別のコンテキストです:
もし管理者がデフォルトコンテキストを次のように定義した場合:
誰でもサーバーを使って他の番号に電話をかけることができる(サーバーの管理者が通話料金を支払うことになります)。
さらに、デフォルトで**sip.conf
ファイルにはallowguest=true
が含まれているため、認証なしの任意の**攻撃者が他の番号に電話をかけることができます。
SIPPTS invite
from sippts: SIPPTS inviteは、PBXサーバーが認証なしで通話を許可しているかどうかを確認します。SIPサーバーに不正な設定がある場合、外部番号への通話を許可します。また、通話を第二の外部番号に転送することも可能です。
例えば、Asteriskサーバーに不適切なコンテキスト設定がある場合、認証なしでINVITEリクエストを受け入れることができます。この場合、攻撃者はユーザー名やパスワードを知らなくても通話を行うことができます。
無料通話 / 誤設定されたIVRS
IVRSはインタラクティブ音声応答システムを指し、ユーザーが音声またはトーン入力を通じてコンピュータ化されたシステムと対話することを可能にする電話技術です。IVRSは、情報提供、通話のルーティング、ユーザー入力の取得など、さまざまな機能を提供する自動通話処理システムを構築するために使用されます。
VoIPシステムにおけるIVRSは通常、以下で構成されています:
音声プロンプト:ユーザーをIVRメニューオプションや指示に導く事前録音された音声メッセージ。
DTMF(デュアルトーン多周波)信号:電話のキーを押すことで生成されるトーン入力で、IVRメニューをナビゲートし、入力を提供するために使用されます。
通話ルーティング:ユーザー入力に基づいて、特定の部門、エージェント、または内線など、適切な宛先に通話を誘導します。
ユーザー入力の取得:呼び出し者からの情報を収集します。例えば、アカウント番号、ケースID、またはその他の関連データなどです。
外部システムとの統合:IVRシステムをデータベースや他のソフトウェアシステムに接続し、情報にアクセスまたは更新し、アクションを実行したり、イベントをトリガーしたりします。
Asterisk VoIPシステムでは、ダイヤルプラン(**extensions.conf
**ファイル)とBackground()
、Playback()
、Read()
などのさまざまなアプリケーションを使用してIVRを作成できます。これらのアプリケーションは、音声プロンプトを再生し、ユーザー入力を取得し、通話の流れを制御するのに役立ちます。
脆弱な設定の例
前述の例では、ユーザーに1を押して部門に電話するように、2を押して別の部門に電話するように、または知っている場合は完全な内線番号を入力するように求められます。 脆弱性は、指定された内線番号の長さがチェックされないため、ユーザーが5秒のタイムアウトを持つ完全な番号を入力すると、それが呼び出される可能性があることです。
Extension Injection
次のような内線を使用して:
Where ${EXTEN}
は 呼び出される内線番号 であり、ext 101 が導入されると これが起こります:
しかし、もし ${EXTEN}
が 数字以外のもの(古いAsteriskバージョンのように)を入力することを許可する場合、攻撃者は 101&SIP123123123
を入力して電話番号123123123に電話をかけることができます。そして、これが結果になります:
したがって、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ツールを使用してブルートフォース攻撃できます。
Click2Call
Click2Callは、ウェブユーザー(例えば、製品に興味があるかもしれない)に電話番号を提供させて、電話を受けることができます。次に、商業用の電話がかかり、彼が電話に出ると、ユーザーはエージェントと接続されます。
これに一般的なAsteriskプロファイルは次のとおりです:
前のプロファイルは 任意のIPアドレスが接続することを許可しています(パスワードが知られている場合)。
前述のように 通話を組織するためには、読み取り権限は必要なく、書き込みの 発信のみが必要です。
これらの権限があれば、パスワードを知っている任意のIPが接続し、過剰な情報を抽出することができます。
さらなる情報やアクションが要求される場合があります。
盗聴
Asteriskでは、ChanSpy
コマンドを使用して、監視する内線(またはすべての内線)を指定することで、行われている会話を聞くことができます。このコマンドは内線に割り当てる必要があります。
例えば、exten => 333,1,ChanSpy('all',qb)
は、内線 333 に電話をかけると、all
の内線を監視し、新しい会話が始まるときに聞き始め(b
)、静かなモード(q
)で行います。私たちはそれに対してインタラクトしたくないからです。*
を押すか、内線番号を入力することで、行われている会話から別の会話に移動することができます。
特定の内線のみを監視するために、ExtenSpy
を使用することも可能です。
会話を聞く代わりに、内線を使用してファイルに録音することも可能です:
通話は /tmp
に保存されます。
Asterisk に 通話を漏洩させるスクリプトを実行させる こともできます。
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 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脆弱性を悪用します。
RCE
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が実行時に他のバックドアバイナリを読み込むようにすることができます。
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... それらの問題は、一度動作し始めると、システム管理者が再度更新しない可能性があり、脆弱性が時間とともに発見されることです。
参考文献
Last updated