Crypto Phone selbstgebaut

Submitted by admin on Sa., 17.03.2018 - 11:38

Lock-icon.svg

Mit Android verschlüsselt telefonieren

In dem Artikel "VPN Server einrichten" wird beschrieben, wie man Android mit einem VPN Server verbindet. Dabei wird Strongswan benutzt. In diesem Beitrag wird gezeigt, wie man nun diese VPN Verbindung für sicheres telefonieren benutzen kann.

Firewall

Die Firewall sollte aus dem Internet alles blocken, was nicht 500/udp, 4500/udp oder esp ist. ICMP - zumindest "Destination Unreachable/need fragmentation" - sollte ebenfalls nicht geblockt werden. Für das VPN sollten 5060/tcp und udp sowie die konfigurierten RTP Ports akzeptiert werden.

Asterisk

Als SIP Server wird Asterisk verwendet, diese Software ist weit verbreitet und läuft sehr stabil. Der Asterisk Server wird nun an ein internes Interface gebunden, das nur über das VPN erreichbar ist. So wird verhindert, dass im Falle einer Fehlkonfiguration der Firewall der Server gleich im Internet sichtbar ist.

pjsip.conf

In der pjsip.conf werden alle wichtigen SIP Parameter festgelegt. Die RFC1918 Adressen sind aus dem Internet üblicherweise nicht erreichbar, sondern können nur von autorisierten VPN Endgeräten erreicht werden.

;--
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Non mapped elements start
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

[general]
port = 5060
bind = 10.1.1.1

[upstream]
qualify = yes

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Non mapped elements end
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
--;


[transport-udp]
type = transport
protocol = udp
bind = 10.1.1.1

[transport-tcp]
type = transport
protocol = tcp
bind = 10.1.1.1

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; gs5
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

[upstream]
type = aor
max_contacts = 2
qualify_frequency = 15
contact=sip:192.168.6.1:5060

[upstream]
type = auth
username = upstream
password = V*e*r*y*b*a*d*p*a*s*s*w*o*r*d

[upstream]
type = endpoint
context = gs-internal
disallow = all
allow = g722
allow = g729
auth = upstream
outbound_auth = upstream
aors = upstream
direct_media=no

[upstream]
type=identify
endpoint=upstream
match=192.168.6.1

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


[7000]
type=endpoint
context=gs-internal
disallow=all
allow=ulaw
transport=transport-udp
direct_media=no
rtp_symmetric=yes
;force_rport=yes
auth=7000
aors=7000

[7000]
type=auth
auth_type=userpass
password=7000
username=V*e*r*y*b*a*d*p*a*s*s*w*o*r*d

[7000]
type=aor
max_contacts=4
qualify_frequency = 15

 

extensions.conf

In der externesions.conf werden die Endgeräte und die Gateways festgelegt. In dem folgenden Beispiel gibt es nur ein Endgerät, dass über die Upstream TK-Lösung auch nach außen telefonieren kann.

[gs-internal]

exten => _2X.,1,NoOp()
exten => _2X.,n,NoOp(Try to dial gs5 extension ${EXTEN})
exten => _2X.,n,Dial(PJSIP/gs5vpn/sip:${EXTEN}@192.168.6.1)
exten => _2X.,n,Hangup

exten => 600,1,NoOp(Test Echo)
exten => 600,n,Ringing()
exten => 600,n,Answer(3)
exten => 600,n,Playback(demo-echotest)
exten => 600,n,Echo()
exten => 600,n,Playback(demo-echodone)
exten => 600,n,Hangup

exten => _0X.,1,NoOp()
exten => _0X.,n,NoOp(Try to dial sipgate extension via gs5 ${EXTEN})
exten => _0X.,n,Dial(PJSIP/gs5vpn/sip:${EXTEN}@192.168.6.1)
exten => _0X.,n,Hangup

exten => _X.,1,NoOp()
exten => _X.,n,NoOp(Try to dial asterisk extension ${EXTEN})
exten => _X.,n,Dial(PJSIP/${EXTEN})
exten => _X.,n,Hangup

Die restlichen Asterisk Config Dateien spielen für diese Anwendung keine Rolle, sind jedoch auf unerwünschte Funktionen hin zu prüfen. Was nicht da ist, stellt auch kein Sicherheitsrisiko dar sollte hier als Grundlage dienen.

Android

Die F-Droid App Linphone ist für unser Crypto Telefonnetz eine sehr gute Wahl. Einmal ist der Source-Code offen gelegt und zum Anderen ist es für zahlreiche Plattformen verfügbar. Als Parameter für SIP müssen die private IP-Adresse des Asterisk Servers im VPN sowie die Zugangsdaten angegeben werden.

Der Mobilfunkprovider sollte nach der Qualität seiner Datenverbindung ausgewählt werden, es reicht eine SIM Karte für reine Datenverbindungen.

Telefonieren

Die Telefonnummer des Upstream Servers erscheint bei dem Angerufenen und im gesamten öffentlichen Netz. Telefonfunktionen des Mobilfunkproviders werden nicht gebraucht. Der Mobilfunkproviders hat auch keine Möglichkeit festzustellen, mit wem man telefoniert hat. Der sieht in seinem Netz lediglich ESP Datenpakete, die zwischen dem Telefon und dem VPN Server ausgetauscht werden. Der Inhalt der Pakete ist natürlich verschlüsselt, selbst das benutzte Protokoll ist nicht mehr erkennbar.

Sicherheit

Die Sicherheit dieser Lösung hängt von folgenden Faktoren ab:

  • Mobiltelefon
  • VPN Gateway
  • Asterisk Server

Ist eine dieser Komponenten kompromittiert, dann können die Telefonate dieses Netzes abgehört werden. Während sich VPN Gateway und Asterisk Server mit einfachen Mitteln schon sehr wirksam schützen lassen, ist das bei Smartphones schon schwieriger. Die original Software des Herstellers sollte keinesfalls verwendet werden, besser ist da schon LineageOS. Zumindest kann man die offengelegten Teile selber compilieren und prüfen, ob da irgendwo im Code herumgepfuscht wurde. mit TWRP kann man auch sehr gut Backups machen.

Wurde das Smartphone aus welchen Gründen auch immer aus der Hand gegeben, dann ist es als kompromittiert anzusehen. In diesem Fall ist das betreffende X.509 VPN sofort zu widerrufen, das VPN Gateway wird dann über eine OCSP Abfrage jeden weiteren Verbindungsaufbau mit dem betreffenden Zertifikat verweigern. Die Smartphone Hardware sollte entsorgt werden.