Heute morgen wurden wir aus Indien mit Fakenews zu unserem Air-Gapped Windows-PC angerufen. 4 mal, beim 5ten mal passierte das hier đ
„Hello, you reached Interpol, how can we…“*click*
Irgendwie hat das Wort Interpol bei den Indern eine Allergische Reaktion hervorgerufen, ich konnte nicht mal meinen Fiktiven Namen nennen đ
Na gut, da bleibt wohl nur die Forensische Untersuchung. Dazu brauchen wir:
– eine Fritzbox
Denn, eine Fritzbox hat ein Funktion zum Herunterladen von Erweiterten Supportdaten fĂŒr AVM, das machen wir uns zu nutze đ Und Ihr mĂŒĂt schnell sein, schon der nĂ€chste Anruf kann die Daten die wir brauchen, aus der Liste werfen.
Wie kommt man an die Daten ran?
Dazu loggt Ihr Euch in die Fritz!box ein, notfalls die erweitere Ansicht starten.
1) auf Inhalt klicken
2) auf „Fritz!Box Support“ klicken
3) und Daten speichern
Da sind jetzt jede Menge Daten drin, aber findet man da die richtigen. U.a. ist in den Daten die Anruferliste drin, da taucht die fiktive Nummer auf, die der Anrufer sich gegeben hat. AuĂerdem stehen die SIP Header der letzten Anrufe zur VerfĂŒgung, aber eben nur 3 oder 4, deswegen gleich machen đ
Wenn Ihr weiter nach der Rufnummer sucht, dann stoĂt Ihr zwangslĂ€ufig auf das hier:
Die IP Adresse im Contact:-Header ist die des Anrufer, oder zumindest die, die er nach auĂen in dem Netz hatte. Er könnte ja auch per VPN drin sei, oder einen gehackten PC kontrollieren. Diese IP ist das einzige wahre an dem ganzen Anruf, denn um die Verbindung zu halten, mĂŒssen die SIP Pakete routebar sein, also kann man keine gefĂ€lschten IPs wie bei einem DDOS benutzen.
Mit den Daten oben könnt Ihr dann tatsĂ€chlich zur Polizei gehen und Anzeige erstatten, weil es hier tatsĂ€chlich einen Ermittlungsansatz gibt. NatĂŒrlich sind die Inder nicht wirklich in Deutschland, aber beim Provider der das SIP GesprĂ€ch an Euch durchgereicht habt, muĂ es auch Log zur echten IP geben, weil, wie gesagt, mit gefĂ€lschten Ips gehts nicht. Also ist da entweder ein gehackter PC / Telefonanlage im Spiel, oder ein VPN. Auf beides muĂ man mit IPs zugreifen. So oder so, tut ihr was Gutes đ
Um die Anrufer aus dem obigen Beispiel kĂŒmmert sich die Kripo Wuppertal đ
„Boar, wie geil..“ war das Echo, als meine neueste Erweiterung fĂŒr Carola im Familienkreis vorgestellt habe, also sollt auch Ihr daran teilhaben đ
Twinkle, Twinkle little PVA …
Bislang kam bei Carola, unserem Lieblings-Personal-Voice-Assistant, Jitsi beim Telefonieren zum Einsatz, weil es das brauchbarste SIP Programm war. Das hat sich radikal geÀndert, als Twinkle auf der BildflÀche erschien.
Die OberflĂ€che von Twinkle, daĂ mit zwei Leitungen auch mal eine Dreierkonferenz makeln kann, ist eher ernĂŒchtern:
Main-UI von Twinkle.
Da Twinkle im Livebetrieb diese UI nicht offen haben muĂ, kann man das verschmerzen. Die UI von Jitsi ist klein, schön und kompakt, so wie man das von klassischen InstantMessangern erwartet. Bei Twinkle geht es aber hauptsĂ€chlich um SIP, ĂŒber das man auch Nachrichten schicken kann, und cooles Aussehen nicht so wichtig đ
Der schwierigste Teil von Twinkle ist seine Konfiguration, aber nur, wenn man den SIP-Providernamen falsch angibt. Merkt Euch mal: IMMER den Domainnamen angeben, also sipgate.de, fritz.box usw. NIE die IP!
Ok, jetzt haben wir ein funktionierendes SIP-Programm, was das mit Carola zu tun hat, dĂŒrfte Euch natĂŒrlich klar sein, man kann damit jemanden Anrufen. Das war natĂŒrlich der erste Test, also sagen wir Carola, wir wollen mit X sprechen, Carola sucht die Nummer raus, teilt das Twinkle mit und das ruft dann die Nummer an. Soweit hatten wir das schon mit Jitsi, wenn Ihr Euch erinnern mögt, steht auch so in der Default Config vom PVA drin.
Eigentlich nicht weiter spannend, dann können wir jetzt aufhören… Sekunde mal, das Telefon klingelt.
„Carola am Apparat“ „Wie war Ihr Name?“ „MĂŒĂten Sie das nicht wissen, Sie haben doch mich angerufen“ „ich will mit meiner Tochter sprechen“ „geht nicht, ist nicht da.“ „können sie ihr sagen, das ich angerufen habe“ „nein, kann ich sonstwie helfen?“
WÀre die Google Stimme noch etwas besser, wÀre das GesprÀch oben geeignet gewesen, einen Menschen zu tÀuschen. So aber ist es nur unsere neueste Errungenschaft: Carola nimmt aktiv das Telefonat an und spricht mit den Anrufenden \o/
Die fĂŒr das GesprĂ€ch nötige Config sieht so aus:
reaction:“wie war ihr name“,““,“Mein Name ist %KEYWORD“ reaction:“wer ist da“,““,“Hier ist %KEYWORD. Was möchten Sie von mir?“ reaction:“wer ist da“,““,“Sollten Sie das nicht wissen, sie haben mich angerufen!“ reaction:“ich will mit [Haushaltsmitglied1] sprechen“,““,“der ist unterwegs mit seiner Tabletschlampe Anja“ reaction:“ich will mit [Haushaltsmitglied2] sprechen“,““,“tut mir leid, die ist nicht zu sprechen.“ reaction:“ich will mit|sprechen“,““,“Ist nicht da“ reaction:“ich will mit|sprechen“,““,“Die Person ist mir unbekannt“ reaction:“ich will mit|sprechen“,““,“Pech gehabt, nicht da“ reaction:“ich will mit|reden“,““,“kenn ich nicht“ reaction:“ich will mit|reden“,““,“Pech gehabt, nicht da“ reaction:“können sie eine nachricht“,““,“nein, die Funktion ist noch nicht eingebaut“ reaction:“können sie eine nachricht“,““,“das tonband ist defekt“ reaction:“können sie eine nachricht“,““,“rufen Sie einfach spĂ€ter nochmal an.“ reaction:“können|sie|sagen|das“,““,“rufen Sie einfach spĂ€ter nochmal an.“ reaction:“können|sie|sagen|das“,““,“nein, kann ich sonstwie helfen?“ reaction:“können|sie|sagen|das“,““,“nein, der mp3-rekorder ist defekt“
Das ist natĂŒrlich nur ein Teil. Vorher mĂŒssen wir noch ein paar coole Techniken benutzen, damit sich Carola und wer auch immer da anruft, unterhalten können.
Der Pulseaudio Part
War klar, oder? Ohne Pulseaudio geht so etwas nicht, weil man PA erzÀhlen extern kann, wo welches Programm seinen Sound ausgeben soll. Jetzt muà ich etwas ausholen, denn ich habe zwei AudiogerÀte im PC:
Die Mainboard Lautsprecher
Einen HDMI Monitor mit Köpfhörerausgang
Wie Ihr vielleicht wisst, gibt es zu jedem AusgabegerÀt unter Pulseaudio auch die Möglichkeit einen Monitor davon als EingabegerÀt zu verwenden. Ihr ahnt vermutlich jetzt, wo die Reise hingeht. Wir verdrahten die Ausgabe von Twinkle zur Aufnahme von Carola und umgekehrt.
Da Carola ĂŒber gsay/say Ihre SĂ€tze an den Lautsprecher schickt, ist es tatsĂ€chlich so, daĂ Twinkles Aufnahme auf den Monitor vom Mainboard geht und Carola kurzfristig das HDMI GerĂ€t belauscht, auf dem Twinkle die Sachen ausgeben wird.
Der Scriptteil
Damit das klappt, braucht es zwei Bashscripte: pulse.out + pulse.in
pulse.out stellt die Ausgaben um, pulse.in die Aufnahmen. Die Scripte könnt Ihr hier finden:
Geht den Befehl wenn Musik lÀuft ein, da kommt das raus:
Sink Input #543 node.name = „qmmp“
LANG=C ist nötig, damit es eine definierte Sprache gibt, die parsebare Ergebnisse liefert. Sonst mĂŒĂte man das Script auf alle Sprachen erweitern. Jetzt haben wir die SinkID von QMMP und mĂŒssen wir noch wissen wohin die Reise gehen soll: pactl list sinks | grep „Name:“
kommt u.a. so ein Treffer: „alsa_output.pci-0000_0a_00.4.analog-stereo“ Das ist in meinem Fall, die normale Lautsprecherausgabe vom Mainboard. Jetzt noch in einer Anweisung zusammen bringen:
Damit ist QMMP auf die Lautsprecher gelegt. Jetzt als Befehl fĂŒrs Script: pulse.out qmmp default
Wenn Ihr die Scripte zu hause benutzen wollt, dann mĂŒĂt Ihr die Aus/Eingabe-GerĂ€tenamen anpassen.
Damit kann man jetzt schon neue Funktionen fĂŒr Carola bauen:
command:“schalte auf kopfhörer“,“EXEC:pulse.outx:x{config:audioplayer:pname}x:xhdmi“ command:“schalte auf lautsprecher“,“EXEC:pulse.outx:x{config:audioplayer:pname}x:xdefault“ command:“schalte um auf kopfhörer“,“EXEC:pulse.outx:x{config:audioplayer:pname}x:xhdmi“ command:“schalte um auf lautsprecher“,“EXEC:pulse.outx:x{config:audioplayer:pname}x:xdefault“
replacements:“h d m i“,“hdmi“ replacements:“u s b“,“usb“
command:“schalte .* um auf kopfhörer“,“EXEC:pulse.outx:x%0x:xhdmi“ command:“schalte .* um auf lautsprecher“,“EXEC:pulse.outx:x%0x:xdefault“ command:“schalte .* auf .* um“,“EXEC:pulse.outx:x%0x:x%1″
Die ersten vier Zeilen schalten den Default-Audioplayer um. Das ist eine nette kurzversion des Befehls. Mit {config:audioplayer:pname} bekommen wir den konfigurierten Prozessnamen von, in dem Fall, qmmp. Damit ist klar, wen das Script umschalten soll.
Die letzten drei Befehle wiederum nehmen einen beliebigen Prozessnamen an und schalten diesen Prozess auf wiederum beliebige GerĂ€te um. (Spart es Euch, das ist doppelt exploitsicher, egal wie oft Ihr da ein ; einfĂŒgen wollt, es wĂ€re nur ein Argument, keine Bashanweisung UND versucht mal Semikolon ĂŒber eine Spracheingabe als ; einbauen zu lassen đ ) Da kann man also auch firefox oder twinkle angeben.
Das alleine reicht aber noch nicht fĂŒr den Trick, ist aber eine sehr wichtige Grundlage!
Die Twinkleanbindung
Jetzt stellt Euch mal die Frage: „Woher weiĂ der PVA, daĂ jemand anruft?“ Antwort: „WeiĂ er nicht.“
Folgerichtig muĂ Twinkle die Arbeit leisten und Carola andocken đ Dazu brauchen wir das hier:
und dazu brauchen wir die zwei Script ( auch auf Github ) :
Die beiden ersten Anweisungen sind an Twinkle selbst, sofort abzuheben und nicht mehr auf das Script zu warten. An der Stelle kann man auch noch eine spezielle Behandlung fĂŒr bestimmte Anrufer einbauen, in dem man auf die CallerID checkt, aber das brauchen wir nicht.
Wir warten jetzt 2 Sekunden, damit alle Sinks aktiv sind und unsere Pulse.in und Pulse.out Scripte Ihre Magie ausfĂŒhren können.
Wenn das gesprÀch beendet wird, was Carola nicht beeinflussen kann, kommt das Gegenscript zum Einsatz:
#!/bin/bash
pulse.in „PipeWire ALSA [python3.10]“ usb pulse.in „PipeWire ALSA [twinkle]“ usb pulse.out „PipeWire ALSA [twinkle]“ default
echo „action=end“
Alles wird wieder auf normal umgestellt. Wenn wir da sind, können wir , in meinem Fall, ĂŒber die Kopfhörer den Anrufer hören und ĂŒber den Lautsprecher was Carola sagt. Das hat den Vorteil, daĂ wenn der Anrufer z.b. ein Programm mit Tonausgabe startet, er das auch hören kann, weil fĂŒr alle anderen Programme auĂer Twinkle, hat sich nichts an der eingestellten Konfig geĂ€ndert.
Jetzt seid Ihr dran
Ok, Freunde, an der Stelle ĂŒberlasse ich Euch jetzt das Feld. Ich will ausgeklĂŒgelte Telefonreaktionsketten sehen, in denen ein Anrufer solange wie möglich am Telefon gehalten wird đ Die besten kommen ins Github!
Von AVM gibt es da leider keine Hilfe, also mĂŒssen wir selbst ran. Da ich das ganze Wochenende ĂŒber mit dem Support gemailt habe, bestĂ€tigt sich mal wieder: Am besten man macht es komplett selbst đ
Kennt zufĂ€llig jemand einen Jail-Break fĂŒr die Fritz!Box? Nein, dann bauen wir uns jetzt mal ein neues Zert:
Wie vom AVM Support zu hören war, gibt es neuerdings noch andere Domainnamen, daher wÀre folgendes ratsam:
Ihr könnt entweder im Browser nachsehen, welche zusĂ€tzlichen Domainnamen das Zert enthĂ€lt, oder Ihr ladet es aus der Box auf Euren PC -> „Zertifikat herunterladen“. Man erhĂ€lt eine Datei namens „boxcert.cer“. Diese kann man nun mit OpenSSL aufschlĂŒsseln lassen:
Issuer: CN = fritz.box, O = PRIVAT, C = DE, ST = unkown, L = unkown Subject: CN = fritz.box, O = PRIVAT, C = DE, ST = unkown, L = unkown DNS:www.fritz.box, DNS:fritz.box, DNS:www.myfritz.box, DNS:myfritz.box, DNS:www.fritz.nas, DNS:fritz.nas
DISCLAIMER:
Das ist fĂŒr RED HAT basierte Distributionen, bei Debian & Co sieht der Pfad zur openssl.cnf anders aus, falls Eure Distri ĂŒberhaupt OpenSSL einsetzt. Ferner kann eure Box eine andere IP im LAN haben, als hier angegeben. Bitte erst herausfinden oder einfach weglassen: (Achtung: Einzeiler!)
openssl req -x509 -nodes -sha256 -newkey rsa:4096 -keyout fritz.box.key -out fritz.box.crt -days 3650 -subj „/CN=fritz.box/O=PRIVAT/C=DE/ST=unkown/L=unkown/“ -reqexts SAN -extensions SAN -reqexts SAN -extensions SAN -config <(cat /etc/pki/tls/openssl.cnf <(printf „\n[SAN]\nsubjectAltName=DNS:www.fritz.box,DNS:fritz.box,DNS:www.myfritz.box,DNS:myfritz.box,DNS:www.fritz.nas,DNS:fritz.nas,IP:192.178.1.1„))
Hinweis: WordPress ist der Meinung doppelte AnfĂŒhrungszeichen in Zitatzeichen umzuwandeln, also nicht 1:1 in die Shell kopieren, das klappt nicht.
Nun haben wir ein Zwischenergebnis mit Key und Cert, brauchen aber noch die PEM fĂŒr die Box, denn nur das Cert hochladen reicht natĂŒrlich nicht đ
Jetzt kann man die „box.pem“ Datei ĂŒber die oben sichtbare Uploadfunktion in die Box laden, diese verarbeitet es kurz und dann hat man schon sein Problem mit dem doppelten SchlĂŒssel behoben.
Da es keine „Regenerieren“ Funktion gibt, bleibt einem da leider nicht viel anderes ĂŒbrig. Featurerequest wurde ĂŒbermittelt đ