Czym jest toll fraud i jak Bird go ogranicza?

Toll fraud polega na tym, że atakujący wybiera numery przynoszące dochód ich właścicielowi, korzystając z cudzego systemu telefonicznego: Bird odrzuca te typy numerów wprost, a lista dozwolonych krajów ogranicza to, co skradziony poświadczenie wciąż może osiągnąć.

Oszustwa telekomunikacyjne zazwyczaj przynoszą atakującemu bezpośredni zysk, bez pośrednika ani okupu. Nic nie jest kradzione ani szyfrowane, więc typowe oznaki włamania nie występują. Strata objawia się jako koszt połączeń.

To kształtuje obronę. Nie wykryjesz oszustwa, szukając czegoś nietypowego w treści połączenia. Wszystkie mechanizmy kontrolne dotyczą tego, dokąd połączenia mogą trafiać, ile ich może być i ile mogą kosztować.

Dlaczego warto się przed tym bronić, skoro mój system jest zabezpieczony?

Bo wartość kompromitacji jest natychmiastowa, a okno czasowe krótkie.

Skradzione poświadczenie SIP lub otwarty port na centrali PBX, systemie telefonicznym firmy kierującym jej połączenia, przynosi zysk natychmiast po użyciu. Motywacją atakującego jest wykonanie jak największej liczby połączeń, zanim ktokolwiek zauważy. Najlepiej płacą te kierunki, do których normalna firma nigdy nie dzwoni.

Właśnie ten ostatni punkt sprawia, że lista dozwolonych kierunków jest skuteczna, a nie tylko porządna. Większość firm dzwoni do małego i stabilnego zestawu krajów. Atakujący potrzebuje konkretnego i zupełnie innego zestawu. Cokolwiek, co zmusza te dwa zbiory do pokrywania się, niszczy cały model biznesowy atakującego.

Jak działają kontrole kierunków docelowych?

Każdy kraj jest albo włączony dla Twojego obszaru roboczego, albo nie, a połączenia trafiają tylko do tych, które włączyłeś.

Dwie odrębne rzeczy decydują o tym, co możesz zrobić z danym krajem, a ich mylenie to najczęstsze źródło nieporozumień:

  • Dostępność mówi, czy możesz w ogóle włączyć dany kraj. Available oznacza, że Bird może wykonywać tam połączenia z Twojego konta. Not supported oznacza, że nie może, a przywrócenie wymaga kontaktu ze wsparciem.
  • Twój przełącznik mówi, czy dostępny kraj jest włączony. Zmiana obowiązuje od momentu jej wprowadzenia.

Samo to, że kraj jest dostępny, nie mówi nic o tym, czy połączenia aktualnie do niego trafiają. O tym decyduje przełącznik i to jest mechanizm kontrolny, którym operujesz.

Niektóre kraje mają oznaczenie high risk, odzwierciedlające zarówno ich stawki, jak i narażenie na oszustwa. To kierunki, do których atakujący próbuje się dodzwonić. Zostaw je wyłączone, chyba że firma faktycznie tam dzwoni, i sprawdź koszt połączenia przed włączeniem. Strona voice destinations zawiera listę wszystkich krajów z ich dostępnością i stanem włączenia, a voice pricing podaje stawki.

Połączenie odrzucone z tego powodu zwraca destination_not_enabled. Rozwiązaniem jest włączenie danego kraju, a nie ponowna próba.

Dostępność dotyczy kraju jako całości. Konkretny numer w obrębie włączonego kraju wciąż może być nieosiągalny. Taki przypadek jest odrzucany jako no_route_found.

no_route_found obejmuje więcej niż jedną przyczynę. Bird klasyfikuje wybrany numer, zanim sprawdzi Twoje ustawienia kierunków docelowych. Odrzuca typ, którego nie routuje. Tu najważniejszy jest numer premium: numer, którego terminacja przynosi dochód właścicielowi, czyli to, co atakujący wybiera. Zakresy shared-cost i personal-number dzielą opłatę za połączenie lub przekierowują je na inną linię. Numery niegeograficzne nie należą do żadnego kierunkowego danego kraju. Wszystkie trzy są odrzucane w ten sam sposób. Te odrzucenia są celowe. Trafiają w numery, których atakujący szuka, bo numer premium wewnątrz włączonego kraju nigdy nie przechodzi klasyfikacji. Numer faktycznie nieosiągalny zwraca ten sam kod, więc przed zgłoszeniem sprawdź typ wybranego numeru.

Co ogranicza atak w obrębie kraju, który włączyłem?

Trzy limity, z których każdy samodzielnie odrzuca połączenie.

Powód odrzuceniaPrzekroczony limit
daily_spend_exceededDzienny limit wydatków na połączenia głosowe Twojej organizacji
concurrent_calls_exceededMaksymalna liczba jednoczesnych połączeń dozwolona dla konta
calls_per_second_exceededNowe połączenia nawiązywane szybciej, niż konto pozwala
insufficient_balancePortfel nie pokrywał kosztu połączenia, więc zostało ono odrzucone z góry

Limit wydatków zachowuje się najbardziej jak mechanizm przeciwdziałania oszustwom, bo jest wyrażony w tym, co atakujący faktycznie zabiera. Jest też egzekwowany na innej ścieżce niż pozostałe dwa. Resetuje się na początku następnego dnia UTC, więc seria, która go osiągnie, jest zamknięta do tego czasu, a nie tylko spowolniona. Jest to również jedyny limit, który nie istnieje, dopóki go nie ustawisz: organizacja bez skonfigurowanego dziennego limitu głosowego nie ma żadnego limitu wydatków.

Pozostałe dwa zachowują się w sposób, który zmienia to, jak możesz na nich polegać.

Są sprawdzane po kolei, nie razem. Limit jednoczesnych połączeń jest sprawdzany jako pierwszy i odpowiada natychmiast, więc połączenie przekraczające oba limity zwraca concurrent_calls_exceeded i nigdy nie wspomina o częstotliwości wybierania. Ma to znaczenie dla diagnostyki, nie dla obrony. Dialer kampanijny może osiągnąć calls_per_second_exceeded, nie zbliżając się do limitu jednoczesnych połączeń. Sprawdź, który limit faktycznie został osiągnięty, zanim zmienisz ustawienie, bo mają różne rozwiązania, a podniesienie niewłaściwego nic nie da.

Limit, którego sprawdzenie nie może się zakończyć, przepuszcza połączenie. Jeśli licznik jednoczesnych połączeń lub ogranicznik częstotliwości nie może być sprawdzony, połączenie przechodzi zamiast zostać odrzucone. Te limity więc niezawodnie ograniczają normalną pracę, ale nie są gwarancją w każdych warunkach. To kolejny powód, dla którego lista kierunków docelowych jest ważna: to warstwa, która nie zależy od sprawdzenia w czasie rzeczywistym.

insufficient_balance działa jak mechanizm kontrolny, choć nie został jako taki zaprojektowany. Portfel ogranicza, ile strat może wygenerować kompromitacja. Duże automatyczne doładowanie usuwa ten limit, co sprawia, że kwota doładowania jest decyzją dotyczącą bezpieczeństwa, a nie tylko wygody.

Kto w ogóle może wysyłać połączenia do mojego trunka?

Tylko adresy z listy dozwolonych IP trunka, dopuszczone klucze API i poświadczenia sesji, które trunk wystawił, mogą wysyłać mu połączenia.

Trunk SIP decyduje, kto może wysyłać mu połączenia, a połączenie z dowolnego innego źródła jest odrzucane z kodem source_not_allowed, zanim jakakolwiek logika kierunków docelowych się uruchomi. Połączenia wychodzące są również sprawdzane względem Twoich zweryfikowanych identyfikatorów dzwoniącego, więc połączenie prezentujące numer niezweryfikowany dla obszaru roboczego jest odrzucane z kodem caller_id_not_verified zamiast zostać zestawione.

Te dwa mechanizmy warto audytować w tym samym cyklu co listę kierunków docelowych, bo zbyt permisywna lista dozwolonych niweczy całą resztę. Trunki SIP opisuje listę dozwolonych IP, uwierzytelnianie kluczem API i poświadczenia sesji, a identyfikatory dzwoniącego opisuje weryfikację.

Co powinienem właściwie zrobić?

  1. Włącz kraje, do których dzwonisz, i żadne inne, a listę traktuj jako coś do regularnego przeglądu, nie jako jednorazowe ustawienie. Kraj włączony na potrzeby jednej kampanii dwa lata temu to stałe zagrożenie.
  2. Ustaw dzienny limit wydatków obszaru roboczego i dobierz go tak, żebyś zauważył jego osiągnięcie, a nie tak, żeby nigdy się nie uruchamiał. Każdy obszar roboczy zaczyna z domyślnym limitem; zmień go w Voice → Spend limit, do maksimum organizacji. Limit, który nigdy nie zadziała, nie jest żadną kontrolą.
  3. Zawęź listę dozwolonych adresów trunka, bo wszystko powyżej ma znaczenie tylko dla połączeń, które dotarły tak daleko.
  4. Obserwuj same powody odrzuceń. Nagła seria destination_not_enabled lub calls_per_second_exceeded to obraz ataku, gdy mechanizmy kontrolne działają. To nie szum do odfiltrowania z logów, to alert.

Voice destinations opisuje włączanie i wyłączanie krajów, a dziennik połączeń zawiera listę wszystkich powodów odrzucenia wraz z rozwiązaniami.

W skrócie

  1. Atakujący zarabia na numerze docelowym, nie na Tobie.

    Przejmuje system telefoniczny i wybiera numery, z których czerpie przychód, więc koszt trafia na Twoje konto, a zysk na jego.

  2. Kraje są wyłączone, dopóki ich nie włączysz.

    Kraj docelowy musi być włączony, zanim połączenia do niego dotrą, więc zasięg kompromitacji to lista włączonych krajów, a nie cały świat.

  3. Dostępność i Twój przełącznik to dwie różne rzeczy.

    Dostępność mówi, czy możesz w ogóle włączyć dany kraj. Twój przełącznik mówi, czy jest włączony. Kraj może być dostępny i wyłączony.

  4. Każdy limit odrzuca połączenie samodzielnie.

    Dzienny wydatek, liczba jednoczesnych połączeń i liczba połączeń na sekundę odrzucają połączenie niezależnie od siebie. Każdy obszar roboczy ma dzienny limit wydatków, który możesz zmienić w Voice → Spend limit. Resetuje się on na początku następnego dnia UTC.

Zastosuj w praktyce.

Przejdź do dokumentacji, przewodników i przykładów dotyczących tego tematu.

Uzyskaj brief wdrożeniowy

Buduj na tej samej sieci.

Testowy klucz API otrzymasz od razu. Dostęp produkcyjny odblokujesz po dodaniu metody płatności i zweryfikowaniu nadawcy.

Twój kolejny pomysł. Gotowy do połączenia.