Cos'è la toll fraud e come la limita Bird?

La toll fraud è un attaccante che chiama, attraverso il sistema telefonico di qualcun altro, numeri che pagano il proprio titolare: Bird rifiuta quei tipi di numero in partenza, e la lista di paesi consentiti delimita ciò che una credenziale rubata può ancora raggiungere.

La frode telefonica di solito paga l'attaccante direttamente, senza un acquirente o un riscatto di mezzo. Nulla viene rubato o cifrato, quindi i segnali tipici di una violazione sono assenti. La perdita si manifesta come spesa per le chiamate.

Questo condiziona la difesa. Non puoi rilevarla cercando qualcosa di insolito nel contenuto di una chiamata. I controlli riguardano esclusivamente dove possono andare le chiamate, quante possono essercene e quanto possono costare.

Perché vale la pena difendersi se il mio sistema è blindato?

Perché il valore di una compromissione è immediato e la finestra è breve.

Una credenziale SIP rubata, o una porta aperta su un PBX, il centralino aziendale che instrada le chiamate di un'azienda, rende dal momento in cui viene usata. L'incentivo dell'attaccante è chiamare il più possibile prima che qualcuno se ne accorga. Le destinazioni più redditizie sono quelle che un'azienda normale non chiama mai.

Quest'ultimo punto è ciò che rende una lista di destinazioni consentite efficace e non solo ordinata. La maggior parte delle aziende chiama un insieme piccolo e stabile di paesi. Un attaccante ha bisogno di un insieme specifico e diverso. Qualunque cosa costringa i due a sovrapporsi elimina l'intero modello di business dell'attaccante.

Come funzionano i controlli sulle destinazioni?

Ogni paese è abilitato per il tuo spazio di lavoro oppure no, e le chiamate raggiungono solo quelli che hai attivato.

Due cose distinte decidono cosa puoi fare con un paese, e confonderle è l'errore più comune:

  • Disponibilità indica se il paese è abilitabile. Available significa che Bird può effettuare chiamate verso quel paese dal tuo account. Not supported significa che non può, e ripristinarlo richiede una conversazione con il supporto.
  • Il tuo stato di attivazione indica se un paese disponibile è acceso. La modifica si applica dal momento in cui la effettui.

Quindi il fatto che un paese sia disponibile non dice nulla su se le chiamate lo stanno effettivamente raggiungendo. Quello è lo stato di attivazione, ed è il controllo che gestisci tu.

Alcuni paesi hanno un marcatore high risk, che riflette sia le tariffe sia l'esposizione alla frode. Sono le destinazioni che un attaccante cerca di raggiungere. Tienili disattivati a meno che l'azienda non li chiami davvero, e verifica il costo di una chiamata prima di abilitarne uno. La pagina voice destinations elenca ogni paese con la sua disponibilità e il suo stato di attivazione, e voice pricing riporta le tariffe.

Una chiamata rifiutata per questo motivo viene respinta con destination_not_enabled. La soluzione è attivare quel paese, non riprovare.

La disponibilità si applica al paese nel suo insieme. Un numero specifico all'interno di un paese abilitato può comunque essere irraggiungibile. In quel caso viene respinto come no_route_found.

no_route_found copre più di una causa. Bird classifica il numero che hai chiamato prima di guardare le impostazioni di destinazione. Rifiuta un tipo che non instrada. La tariffa premium è quella rilevante qui: numeri la cui terminazione paga il titolare, ovvero ciò che un attaccante chiama. Le fasce a costo condiviso e i numeri personali dividono il costo della chiamata o la inoltrano a un'altra linea. I numeri non geografici non appartengono a nessun prefisso di area. Tutti e tre vengono rifiutati allo stesso modo. Quei rifiuti sono intenzionali. Raggiungono i numeri che un attaccante vuole, perché una fascia premium all'interno di un paese abilitato non supera mai la classificazione. Un numero genuinamente irraggiungibile riporta lo stesso codice, quindi verifica il tipo del numero che hai chiamato prima di aprire un ticket.

Cosa limita un attacco all'interno di un paese che consento?

Tre tetti, ciascuno dei quali rifiuta una chiamata da solo.

Motivo del rifiutoIl tetto raggiunto
daily_spend_exceededTetto di spesa vocale giornaliera della tua organizzazione
concurrent_calls_exceededNumero massimo di chiamate contemporanee consentite dall'account
calls_per_second_exceededNuove chiamate effettuate più velocemente di quanto l'account consenta
insufficient_balanceIl wallet non copriva la chiamata, quindi è stata rifiutata in anticipo

Il tetto di spesa è quello che più somiglia a un controllo antifrode, perché è denominato nella stessa cosa che l'attaccante sta effettivamente sottraendo. Inoltre è applicato su un percorso diverso rispetto agli altri due. Si azzera all'inizio del giorno UTC successivo, quindi un picco che lo raggiunge è contenuto fino ad allora anziché semplicemente rallentato. È anche l'unico che non esiste finché non lo imposti: un'organizzazione senza tetto vocale giornaliero configurato non ha alcun tetto di spesa applicato.

Gli altri due si comportano in due modi che cambiano il modo in cui puoi fare affidamento su di essi.

Vengono verificati in ordine, non insieme. Il tetto di chiamate concorrenti viene valutato per primo e risponde immediatamente, quindi una chiamata che supera entrambi i tetti riporta concurrent_calls_exceeded e non menziona mai la frequenza di composizione. Questo conta per la diagnosi, non per la difesa. Un dialer per campagne può raggiungere calls_per_second_exceeded senza essere nemmeno vicino al tetto di concorrenza. Verifica quale dei due hai effettivamente ricevuto prima di modificare un'impostazione, perché hanno soluzioni diverse e alzare quello sbagliato non serve a nulla.

Un tetto il cui controllo non riesce a completarsi ammette la chiamata. Se il conteggio delle concorrenti o il limitatore di frequenza non possono essere valutati, la chiamata passa invece di essere rifiutata. Quindi questi tetti delimitano l'operatività normale in modo affidabile, ma non sono una garanzia in ogni condizione. Questo è un altro motivo per cui la lista delle destinazioni è importante: è il livello che non dipende da una verifica in tempo reale.

insufficient_balance agisce come un controllo senza essere progettato come tale. Il wallet limita quanta frode una compromissione può accumulare. Un top-up automatico elevato rimuove quel limite, il che rende l'importo del top-up una decisione antifrode oltre che di comodità.

Chi può inviare chiamate al mio trunk?

Solo gli indirizzi nella lista IP consentiti del trunk, le chiavi API che accetta e le credenziali di sessione che ha emesso possono inviargli chiamate.

Un trunk SIP decide chi può inviargli chiamate, e una chiamata da qualsiasi altra origine viene respinta con source_not_allowed prima che qualsiasi logica di destinazione venga eseguita. Le chiamate in uscita vengono inoltre verificate rispetto ai tuoi caller ID verificati, quindi una chiamata che presenta un numero non verificato per lo spazio di lavoro viene respinta con caller_id_not_verified anziché effettuata.

Vale la pena verificare entrambi con la stessa cadenza della lista delle destinazioni, perché una lista di indirizzi consentiti troppo permissiva vanifica tutto il resto. SIP trunks copre la lista IP consentiti, l'autenticazione con chiave API e le credenziali di sessione, e caller IDs copre la verifica.

Cosa devo fare concretamente?

  1. Abilita i paesi che chiami e nessun altro, e tratta la lista come qualcosa da rivedere periodicamente, non da impostare una volta sola. Un paese abilitato per una campagna di due anni fa è un'esposizione permanente.
  2. Imposta il limite di spesa giornaliero del tuo spazio di lavoro, e dimensionalo in modo da accorgerti quando viene raggiunto, non in modo che non scatti mai. Ogni spazio di lavoro parte con un limite predefinito; modificalo in Voice → Spend limit, fino al massimo della tua organizzazione. Un limite che non scatta mai non è un controllo.
  3. Restringi la lista di indirizzi consentiti del trunk, perché tutto quanto sopra conta solo per le chiamate che sono arrivate fin lì.
  4. Tieni d'occhio i motivi di rifiuto stessi. Un'improvvisa serie di destination_not_enabled o calls_per_second_exceeded è l'aspetto di un attacco quando i controlli funzionano. Non sono rumore da filtrare dai log: sono l'allarme.

Voice destinations copre l'abilitazione e la disabilitazione dei paesi, e the call log elenca ogni motivo di rifiuto con la relativa soluzione.

In breve

  1. L'attaccante è pagato dalla destinazione, non da te.

    Compromette un sistema telefonico e chiama numeri da cui ricava ricavi, così il costo ricade sul tuo account mentre il profitto finisce sul suo.

  2. I paesi sono disattivati finché non li attivi tu.

    Una destinazione deve essere abilitata prima che le chiamate la raggiungano, quindi il raggio d'impatto di una compromissione è la lista che hai abilitato, non il mondo intero.

  3. Disponibilità e stato di attivazione sono cose diverse.

    La disponibilità indica se un paese è abilitabile. Il tuo stato di attivazione indica se è acceso. Un paese può essere disponibile e spento.

  4. Ogni tetto rifiuta una chiamata da solo.

    Spesa giornaliera, chiamate contemporanee e chiamate al secondo bloccano ciascuna una chiamata in modo indipendente. Ogni spazio di lavoro ha un limite di spesa giornaliero, modificabile in Voice → Spend limit. Si azzera all'inizio del giorno UTC successivo.

Costruisci sulla stessa rete.

Una chiave API di test è subito tua. L'accesso alla produzione si sblocca quando aggiungi un metodo di pagamento e verifichi un mittente.

La tua prossima idea. Pronta a partire.