Telefoon Spoofing
Happy New Year!! In deze post gaan we kijken naar “Telefoon Spoofing”, ofwel… het uitbellen met een vervalst nummer. Om eerlijk te zijn is dit een hele nieuwe tak van sport voor me. Ik heb niks met telefoons. Leuk om te WhatsAppen en bellen maar ik ben absoluut geen telefoon expert. Deze post is dus een compleet nieuwe ervaring voor me. In deze post ga ik proberen om zo goedkoop mogelijk mijn eigen VoIP centrale te bouwen en te gebruiken om uit te bellen met een vervalst nummer. Ik zal proberen om alle misstappen en ellende zoveel mogelijk te filteren zodat er een redelijke hand-on approach beschreven wordt die je zelf kunt gebruiken. Maar… let even op de disclaimer:
Dit project is uitgevoerd in mijn eigen testlab en op eigen devices. De aanleiding voor het uitvoeren is puur interesse. Spoofing is over het algemeen vrij simpel maar telefoon spoofing lijkt me een compleet ander verhaal.
Laten we beginnen met het opzetten van een telefooncentrale. Ik wil deze telefooncentrale laten draaien op een Raspberry Pi. Ik kies hiervoor “Fusion PBX”. PBX staat voor “Private Branch Exchange” ofwel een “privé telefoonnetwerk”. De PBX telefooncentrale verbind telefoons op het interne netwerk met het externe netwerk. Traditioneel is dit het PSTN netwerk maar wij gaan gebruik maken van een VoIP PBX welke gebruik maakt van het IP protocol. Nadat we de PBX geconfiogureerd hebben gaan we kijken hoe we deze kunnen verbinden met een VoIP provider en uit kunnen bellen onder een “gespoofed” nummer. Maar first-things-first… eerst maar eens het juiste OS installeren.
Volgens de Fusion PBX documentatie kan Fusion PBX draaien op een Raspberry Pi met het Raspbian Buster OS. Ik kies de installatie met alle tools want de 64 GB kaart is groot genoeg.
En ff flashen…. “Like we did a thousand times before”:
En klaar is kees.Raspbian Buster draait op de Raspberry Pi!
Alvorens ik verder ga met de installatie zijn er een aantal basiszaken die we eerst moeten regelen:
- Update het Raspbian OS (sudo apt update && sudo apt upgrade).
- Configureer alle basis OS instellingen zoals land / taal e.d.
- Configureer het netwerk (WiFi en/of bedraad). Ik gebruik beide.
- Configureer een vast IP op mijn Ethernet verbinding (en reserveer deze op de DHCP server). Dit doe ik door het aanpassen van het “/etc/network/interfaces” bestand.
- Installeer “Gnome-Screenshot” tool voor het maken van screenshots.
- Configureer VNC en SSH toegang (voor het gemak).
Voor de installatie van Fusion PBX voeren we het volgende commando uit:
sudo wget -O - https://raw.githubusercontent.com/fusionpbx/fusionpbx-install.sh/master/debian/pre-install.sh | sudo sh; |
De files worden nu op de default locatie geplaatst, namelijk in “/usr/src”.
Laten we naar de juiste locatie gaan en de installatie starten:
cd /usr/src/fusionpbx-install.sh/debian sudo ./install.sh |
De installatie duurt ongeveer 40 minuutjes. De installatie installeert diverse andere software packages zoals b.v. FreeSwitch. FreeSwitch is een gratis, open-source applicatieserver voor realtime communicatie, WebRTC, telecommunicatie, video en Voice over Internet Protocol (VoIP). FreeSwitch wordt gebruikt om PBX-systemen, IVR-diensten, videoconferenties met chat- en schermdeling, SBC (Session Border Controller) en ingebedde communicatieapparatuur te bouwen en werkt daarom ook perfect met een Raspberry Pi. FreeSwitch ondersteunt vele encryptiestandaarden zoals, ZRTP, DTLS en SIPS en kan fungeren als een gateway tussen PSTN, SIP, WebRTC en vele andere communicatieprotocollen. Daarnaast wordt de volledige PBX (telefooncentrale) geinstalleerd en onderdelen gedownload. Zorg dus dat je verbonden blijft met het internet. Daarnaast zal het installatiescript de firewall e.d. aanpassen zodat de basissettings al helemaal gereed zijn.
Fusion PBX wordt geïnstalleerd met de NGINX webserver en kan draaien op diverse databaseservers zoals SQLite (ideaal voor embedded systems) en PostgreSQL welke ideaal is voor multi-tenant systems.
Als de installatie gereed is wordt je verwelkomd met onderstaande scherm waarop je management URL en inloggegevens te vinden zijn:
Om Fusion PBX te beheren ga je naar de genoemde URL en log je in:
En daar ben je dan. In je eigen telefooncentrale. En dan?
Je kunt natuurlijk beginnen om eens te kijken welke opties er onder de menu’s te vinden zijn.
Onder “Home” – “Account Settings” stellen we een aantal waardes in van ons eigen account. Genereer eventueel al API / Message keys als je deze denkt nodig te hebben:
Onder “Accounts” – “Users” is het mogelijk om additionele gebruikers aan te maken en misschien wil je wat E-mail Templates aanpassen onder “Advanced”. Maar eigenlijk is er verder, zonder verdere koppelingen niet zo heel veel te doen.
Op dit moment vond ik het belangrijk om wat VoIP basics te begrijpen. Hieronder een kleine opsomming van wat wetenswaardigheden waarna ik ook veel settings wat beter ging begrijpen.
VoIP Basics
VoIP zegt het eigenlijk al. VoIP is Voice-over-IP en dus een protocol welke telefoonverkeer draagt over het IP protocol ofwel over het internet. Dit is een andere techniek dan gebruikt wordt bij traditionele telefoons (POTS / ISDN). Tegenwoordig zien we dat VoIP sterk in opkomst is, zowel particulier als zakelijk. Bedrijven huren vaak VoIP centrales (software) in de cloud terwijl het MKB vaak een VoIP centrale als dedicated device afneemt. Omdat VoIP over het internet gaat en “spraak” erg tijdsgevoelig is zijn er allerhande zaken om ervoor te zorgen dat VoIP verkeer voorrang krijgt op “gewoon” internetverkeer. Een techniek die hier o.a. voor gebruikt wordt is QoS (Quality-of-Service). Verschillende technieken zorgen ervoor dat de verzonden bitjes (in-the-end zijn het gewoon bitjes) niet verloren raken (en dus opnieuw verzonden moeten worden) waardoor spraak weg zou vallen of misvormt zou worden. Uiteraard gebeurt dit nog weleens maar tegenwoordig is de VoIP techniek zo volwassen dat dit steeds beter gaat en VoIP een echte vervanger is geworden voor traditioneel bellen. Binnen VoIP kennen we een aantal VoIP-specifieke zaken en afkortingen die we hier gaan benoemen:
PBX / PABX / Private Automatic Branch eXchange
Een PBX (Private Automatic Branch eXchange) is een telefooncentrale welke door het bedrijf gebruikt wordt. Vroeger waren PBX systemen eigendom van telefoonmaatschappijen (zoals PTT Telecom) en was het voor bedrijven en particulieren verboden om zelf PBX systemen aan te sluiten op het publieke telefoonnetwerk. Tegenwoordig is dit wel toegestaan en zijn PBX systemen vrijwel altijd eigendom van het bedrijf. Een PBX systeem kan geprogrammeerd worden met diverse call-flows en is daarom effectiever omdat b.v. inbound calls niet eerst naar buiten gerouteerd hoeven te worden voordat ze weer naar binnen komen. PBX systemen regelen niet alleen call-flows maar ook voicemails, wachtrijen en groepsconfiguraties. ISDN PBX systemen zijn vrijwel allemaal vervangen voor VoIP PBX systemen.
SIP / Session Initiation Protocol
SIP (RFC 3261) is het protocol dat door VoIP devices en andere multimedia apparaten wordt gebruikt om de “multimedia data” over te brengen. SIP is een real-time protocol welke werkt over TCP, UDP en SCTP. Voor een veilige verbinding kan SIP versleuteld worden met TLS. SIP werkt op laag 7 (application layer) van het OSI model en functioneert standaard op de poorten 5060 (onversleuteld) en 5061 (versleuteld). VoIP toestellen noemen we dan ook wel SIP toestellen. SIP verstuurd data met zo min mogelijk packet loss en is daarom ideaal voor spraak, multimedia en games.
SIP Trunk
Een SIP Trunk is je “Digitale IP Telefoonlijn”. Een zogenaamde SIP trunk zorgt voor de afhandeling van de telefoon gesprekken (opzetten, behouden, verbreken en ontvangen). Het is de brug tussen VoIP telefonie en het traditionele telefonie. Een SIP provider levert een SIP trunk en wordt hiermee de koppeling tussen jou VoIP/ISDN/Hybride centrale en het wereldwijde telefoonnetwerk. Dit is vergelijkbaar met een internetprovider bij een internetverbinding. Vroeger konden we over een analoge lijn 1 gesprek tegelijkertijd voeren. Met ISDN waren dit 2 gelijktijdige gesprekken en met ISDN30 waren dit 30 gelijktijdige gesprekken (gestapeld ISDN). Omdat het SIP protocol over de internetlijn verzonden wordt is de internetlijn eigenlijk de enige beperking voor het aantal maximaal gelijktijdige gesprekken. Een kwalitatief VoIP kanaal vraagt +/- 70 tot 100 Kb bandbreedte. Een SIP trunk is in theorie niet gebonden aan het aantal kanalen maar in de praktijk zien we dat dit wel zo is. Het aantal maximale calls op een SIP trunk wordt softwarematig meestal ingesteld met de zogenaamde “Outbound Concurrency Limit” waarde.
CHAN_SIP
CHAN_SIP is een zogenaamde “channel driver” voor SIP. Deze driver zorgt ervoor dat het apparaat of de software kan communiceren over het SIP protocol (en andere zoals IAX en Skinny). CHAN_SIP is een wat ouder protocol welke breed gebruikt werd voor 2014. CHAN_SIP wordt nog steeds veel gebruikt omdat het goed doorgetest en stabiel is. CHAN_SIP is een wat lastiger protocol om nieuwe functies aan toe te voegen en zal op termijn vervangen worden door CHAN_PJSIP.
CHAN_PJSIP
CHAN_PJSIP is de opvolger van CHAN_SIP en dus ook nieuwer. CHAN_PJSIP is eveneens een channel driver welke gebruikt maakt van de PJSIP library en modulair is opgebouwd. Ontwikkelaars kunnen dus makkelijker functies en eigenschappen modificeren van CHAN_PJSIP. Voor gewone VoIP telefoonfuncties is CHAN_SIP net zo goed en veilig als CHAN_PJSIP. Wil je echter meer opties en mogelijkheden dan is CHAN_PJSIP de juiste keuze.
SIP Gateway
Een SIP gateway (of VoIP gateway) is een apparaat welke tussen je netwerk en het internetmodem staat om telefoonverkeer om te zetten naar IP zodat het over het datanetwerk verzonden kan worden.
VoIP Adapter / ATA
Een VoIP adapter is een hardware device welke analoge signalen omzet in digitale pakketjes om over een IP netwerk te transporteren. Ook maakt een ATA het mogelijk om digitale data weer terug te zetten naar analoge pakketjes. Een ATA wordt meestal gebruikt om een analoog toestel te koppelen aan een VoIP netwerk.
DISA (Direct Inward System Access)
Een DISA ofwel “Direct Trough” system is een service welke sommige SIP providers aanbieden. Een DISA maakt het mogelijk om in te bellen bij de provider (meestal met een unieke pincode) en om vervolgens weer via de provider, onder de voorwaarden van je abonnement naar buiten te bellen. Ook kun je via een DISA weer je interne nummers bellen. Zie een DISA als een “weg/VPN” naar binnen om vervolgens te bellen alsof je intern zit.
CID / Caller ID
Je Caller ID is het nummer hoe je naar buiten belt en dus ook wat de “nummerweergave” weergeeft op de telefoon van de persoon die je belt. Je Caller ID kan ingesteld worden op trunk niveau en op extensie niveau.
DID / Direct Inward Dailing
Direct Inward Dailing (DID) wordt ook wel “Direct Dail-In” (DDI) genoemd en is een dienst die door een provider wordt aangeboden. De DID dienst bestaat uit een aantal telefoonnummers welke als extensie aanwezig zijn in de PBX van de ontvanger. Deze specifieke extensies zorgen ervoor dat het nummer meteen gerouteerd wordt naar het juiste toestel zonder tussenkomst van een receptionist(e). Zie een DID als een telefoonnummer welke aan je SIP wordt toegekend door je provider.
Softphone
Je kunt natuurlijk gebruik maken van een SIP telefoon om te bellen over het VoIP netwerk. Je kunt ook gebruik maken van een analoog toestel met een ATA ertussen. Een andere mogelijkheid is door gebruik te maken van een zogenaamde “Softphone”. Dit is geen “zachte telefoon”. Eigenlijk is het helemaal geen telefoon. Een softphone is niet meer en niet minder dan software. Dit kan een applicatie zijn op je mobiele telefoon of op je computer. De softphone applicatie maakt het mogelijk om via de software te bellen over het VoIP netwerk. Uiteraard is een internetverbinding hierbij essentieel.
PBX verbinden met SIP Trunk
Nu wordt het tijd om de vervolgstappen te bedenken. Als ik er zo tegenaan kijk denk ik dat we het volgende gaan doen:
- Verbinden van mijn PBX met een provider en koppelen aan een SIP trunk
- Verbinden van een softphone met mijn PBX zodat ik via mijn PBX kan bellen
- Aanpassen van mijn CID en deze spoofen om uit te bellen met een ander ID
Na wat research kom ik uit op de “Voip.ms” provider. Voip.ms ondersteund DISA, DID en vele andere functies en is helemaal niet zo duur. Voip.ms werkt internationaal en ondersteund SIP URI calling. Daarnaast werkt het op creditbasis en ben je niet gebonden aan een abonnement.
Ready to sign up!
En binnen een minuutje was de registratie voltooid en geactiveerd:
Door mezelf in te schrijven met een leuke promo code “MjUzNDYx” krijg ik 10 USD cadeau na inschrijving. Laat ik hier zelf nog eens 25 USD aan toevoegen:
Dat geeft me in totaal een balans van 35 USD. Dat moet even genoeg zijn:
Verder zijn er best wel wat settings te optimaliseren. Maar dit is voor later. De meeste settings worden overigens door de PBX meegegeven en zijn dus niet nodig om te veranderen. Er is echter wel 1 ding nodig om te activeren en dat is de mogelijkheid om naar het buitenland te bellen. Voip.ms ziet calls buiten Canada en buiten de “Continental United States” als buitenlandse calls en dus moeten we de setting activeren om “naar Nederland” te kunnen bellen.
Ik activeer de restrictie om alleen naar EU landen te kunnen bellen:
Voip.ms gebruikt de volgende poorten:
SIP: 5060 TCP/UDP – 5061 UDP – RTP Range: 10001-20000 UDP – IAX2: 4569 UDP
Alternative Ports: 5080 UDP and 42872 UDP
Ik heb de poorten 5060, 5061 en 5080 geforeward naar mijn PBX (maar dit zou alleen nodig moeten zijn voor inkomende verbindingen en niet voor alleen uitgaande verbindingen).
Op het tabblad “Inbound Settings” heb ik geconfigureerd dat we voor het hoofdaccount primair een IP PBX gebruiken i.p.v. een IP device.
Nu gaan we FusionPBX koppelen aan het de SIP trunk (je hebt hier een speciale code voor gekregen die je nodig hebt om een apparaat te koppelen).
We gaan de trunk koppelen middels de gateway die we instellen met de volgende settings:
Gateway: voip.ms
Username: Je speciale username welke je verkregen hebt om devices te koppelen (een 6-tal cijfers)
Password: Je wachtwoord (het wachtwoord van je hoofd voip.ms account)
Proxy: amsterdam.voip.ms
Realm: voip.ms
Espire Seconds: 800
Register: True
Retry Seconds: 30
Context: public
Profile: external
Enabled: True
Nadat deze settings zijn opgeslagen registreert de PBX zichzelf. Dit is zichtbaar op de gateway pagina en op je Voip.ms accountpagina:
Bingo… mijn PBX is connected.
Nu moeten we een dailplan maken waarin we vertellen welke calls naar Voip.ms gestuurd moeten worden. Hiervoor gaan we naar “Dailplan” – “Outbound Rules” en maken we een nieuwe rule aan:
Belangrijk is dat we de juiste gateway selecteren om het verkeer naar buiten (Voip.ms) te routeren en dat we een regex aanmaken waar het nummer aan moet voldoen. Dus als het nummer voldoet aan de regex dan wordt de outbound rule geactiveerd.
Nu is het zaak dat we een extensie aanmaken. Een extensie is vergelijkbaar met een intern toestel. Een toestel of softfone koppelen we met een extensie zodat we later ook intern op basis van extensie kunnen doorverbinden. Om dit te doen gaan we naar “Accounts” – “Extensions”. Hier maken we een nieuwe extensie aan. Let op dat het extensienummer altijd numeriek is. Nadat de extensie is opgeslagen open je deze weer om het wachtwoord te bekijken (of te veranderen):
Om te kijken of alles werkt installeer ik nu een softphone op mijn computer. In theorie moet het mogelijk zijn om nu een softphone te koppelen aan de PBX en om naar buiten te bellen. Als softphone heb ik gekozen voor X-Lite. Nadat X-Lite is geïnstalleerd ga ik deze koppelen met mijn extensie (je hebt dus je extensie en extensie wachtwoord nodig):
En yes… dat werkt. X-Lite is gekoppeld aan mijn PBX:
Nu naar buiten bellen:
Bummer… dat werkt nog niet. Had ik maar goed moeten lezen. Om internationaal te bellen vanuit Voip.ms is de opbouw:
011 – landcode – area code – nummer
Dus om 076-51-34980 te bellen gebruik ik:
01131765134980
En om een 06 nummer te bellen gebruik ik:
01131600000000
Dat werkt een stuk beter. Alleen jammer dat het inkomende nummer nog een “vaag: nummer is:
Om dit ter veranderen moeten we ervoor zorgen dat een aantal settings juist staan. We willen namelijk zelf een callerID meegeven aan het nummer dat we uitsturen. Zorg er dus voor dat deze niet meegegeven wordt in de Voip.ms configuratie want als deze wel meegegeven wordt dan overschrijft Voip.ms de header met het hier opgegeven nummer:
Binnen de FusionPBX moet je ervoor zorgen dat je outbound route ingesteld staat met de volgende variabele:
effective_caller_id_number=${outbound_caller_id_number} |
Dit zorgt ervoor dat alle calls die via deze route naar buiten gaan het nummer meekrijgen van de extensie.
Tenslotte geef je bij de extensie het CID nummer welke naar buiten moet bellen:
Mocht dit niet werken controleer dan of de “Caller ID In From” instelling (onder “Advanced Settings”) op je gateway juist is ingesteld. Deze moet op “True” staan!
En dan…. Bingo!
Mission accomplished!
Het zou nu wel erg fijn zij als we geen 01131 meer voor het nummer moeten draaien om naar buiten te bellen.
Om dit voor elkaar te krijgen moeten we goed kijken naar de outside rule. Hier maken we 2 aanpassingen. Omdat het nummer dat we gaan bellen korter wordt moeten we de lengte van het destination nummer aanpassen zodat deze outside rule ook gebruikt wordt als er een korter nummer gebeld wordt. Daarom veranderen we “destination_number” van 12 (^(\d{12,20})$) naar 8 (^(\d{8,20})$) karakters.
Vervolgens maken we een nieuwe rule aan het einde van de ruleset welke “01131” plakt voor de variabele $1 (het gedraaide nummer). Dit zorgt ervoor dat alsnog het hele nummer door de gateway verzonden wordt:
Het wordt dan:
sofia/gateway/voip.ms/01131$1 |
i.p.v.:
sofia/gateway/voip.ms/$1 |
Let op dat we deze regel boven de default regel plaatsen (waarde 125 i.p.v. waarde 130):
Mooi, nu kunnen we een 06 nummer bellen als: 600000000 i.p.v. 01131600000000.
Conclusie
Er zijn echt nog een paar extra features die ontzettend gaaf zijn om te configureren, denk aan:
- SMSen over een spoofed nummer
- Vanuit extern bereikbaar zijn
- Inbellen op de centrale en dynamisch het outside caller ID instellen (via een menu)
Voor SMS is een FusionPBX module beschikbaar maar ook je VoIP provider moet het ondersteunen. Voip.ms ondersteund dit momenteel alleen nog in beta voor de USA en Canada. Om via een menu vanuit buiten nummers te spoofen zouden we de volgende werkwijze moeten hanteren:
- Aanvragen van een DID nummer om extern bereikbaar te zijn.
- Routeren van het DID nummer naar de SIP Trunk (provider instelling).
- Setup DISA op FusionPBX + pincode om te authenticeren.
- Maak een inbound rule en stel als source je DID nummer in met als destination de DISA. Op die manier komt een extern nummer binnen op de DISA met een eventueel menu.
- Maak een custom configuratie welke de DISA antwoord, 10 (of meer) cijfers ontvangt en deze als CID instelt voor de outgoing call. Een voorbeeld hiervan is de Asterisk configuratie van Jonathan Stines (https://blog.rapid7.com/2018/07/12/how-to-build-your-own-caller-id-spoofer-part-2/)
Bovenstaande aanpassingen maken het spoofen nog universeler en dynamischer.
LET OP: Het bellen met een nummer welke niet van jou is, is niet strafbaar maar uiteraard wel als dit gebruikt wordt voor malafide praktijken!! Gebruik deze technieken nooit mits in een legale (penetratie) test. Zelfs wanneer je deze techniek gebruikt in een legale test is het slim om dit vooraf kenbaar te maken aan de opdrachtgever zodat hier later geen discussie over kan ontstaan.
Ik ben er een tijdje mee bezig geweest maar het is gaaf als het uiteindelijk werkt. Nu beschik ik over mijn eigen VoIP centrale op een Raspberry Pi en kan ik indien gewenst een telefoontje naar buiten doen onder een alternatief nummer. Daarnaast heb ik erg veel geleerd over VoIP en hoe een centrale in elkaar zit.
Vond jij dit ook een leuke post en kun je de informatie gebruiken voor je eigen project give me some love 🙂 Abonneer je op de nieuwsbrief, doe me een leuk berichtje en like of deel mijn post(s)!
Thanks fellow-hackers!