SIMTestTool: Difference between revisions
mNo edit summary |
|||
(12 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
[[Category:ITS-Workshop]] [[Category:ITS-Workshop2013]] |
[[Category:ITS-Workshop]] [[Category:ITS-Workshop2013]] |
||
= BlackHat US 2013 = |
|||
= Reader = |
|||
Debian sid 64bit |
|||
An BlackHat US 2013 hatte Karsten Nohl demonstriert, wie man über die SIM-Karte Handy-Malware installiert. Die Methode basiert auf der Sicherheitsanfälligkeit der SIM-Karte. Experten sagen das sei eine Bedrohung für Millionen Besitzer von mobilen Geräten. |
|||
apt-get install pcsc-tools pcscd |
|||
[[File:Img1.jpg]] |
|||
Omnikey 6321 wird erkannt |
|||
Das Hacking erfolgt durch Over-the-Air (OTA). Die Software wird so auf dem Handy 'on air', also über das Mobilfunknetz, installiert. Diese Technologie ermöglicht es Java-Applets auf der SIM-Karte zu installieren. OTA-Befehle sind verschlüsselte SMS-Nachrichten. Meistens wird für die Verschlüsselung DES benutzt, welches das Hacking ermöglicht. |
|||
[[File:Img2.jpg]] |
|||
Reinersct cyberjack ecom plus wird nicht erkannt |
|||
Der erste Schritt um die SIM-Karte zu knacken ist das Herausfinden des DES-Schlüssels. Dies geschieht wie folgt: Der Angreifer sendet via OTA auf einem Handy eine SMS-Nachricht mit einem beliebigen binären Code. Das Telefon empfängt einen „falschen Befehl“. Als Reaktion auf den „falschen Befehl“ sendet es eine Fehlermeldung, die den Verschlüsselungsschlüssel enthält. Anschließend wird der 56-Bit-Schlüssel mit den Rainbow-Tabellen entschlüsselt. Auf einem PC dauert das ca. 2 Minuten. |
|||
apt-get install libifd-cyberjack6 fxcyberjack |
|||
http://www.reiner-sct.com/support/download/treiber-und-software/cyberjack/chip-linux.html?grp=kontaktbehaftet |
|||
[[File:Img3.jpg]] |
|||
Als zweiten Schritt sendet der Angreifer wieder eine SMS-Nachricht mit einem binären Code auf das Telefon, diesmal mit dem richtigen Schlüssel verschlüsselt. Diese Nachricht enthält ein Java-Applet, das erfolgreich auf der SIM-Karte installiert wird. Dieses Applet kann ohne Zustimmung oder Wissen des Benutzers SMS-Nachrichten senden, Sprachmailboxen ändern, Informationen zum Bestimmen des Standortes des Telefon übermitteln usw. |
|||
Es gibt mehrere Verfahren zum Schutz vor oben beschriebenen Angriffen. Zum Beispiel können erweiterte Verschlüsselungsstandards wie AES verwendet werden. |
|||
Als Ergänzung kann man sagen, dass es nicht das erste mal ist, dass Probleme in den Stützpunkttechnologien gezeigt werden. In 2010 hat der Spezialist für die informative Sicherheit Chris Paget demonstriert, wie man Anrufe aufzeichnen kann. Mit Hilfe eines Gerätes, dass nicht mehr als 1500 $ kostet. Damit man kann die Anrufe auch an andere Telefonnummern umleiten. |
|||
= Tools = |
= Tools = |
||
Mit dem Skript kann man an SIM Kard APDU senden. |
|||
* pcsc_scan |
|||
#!/usr/bin/perl -w |
|||
use Chipcard::PCSC; |
|||
# create a new object |
|||
$hContext = new Chipcard::PCSC(); |
|||
die ("Can't create the PCSC object: $Chipcard::PCSC::errno\n") |
|||
unless defined $hContext; |
|||
# get the reader list |
|||
@ReadersList = $hContext->ListReaders(); |
|||
die ("Can't get readers' list: $Chipcard::PCSC::errno\n") |
|||
unless defined $ReadersList[0]; |
|||
# connect to the first reader |
|||
$hCard = new Chipcard::PCSC::Card($hContext, $ReadersList[0]); |
|||
die ("Can't connect: $Chipcard::PCSC::errno\n") |
|||
unless defined $hCard; |
|||
# send the Select Applet APDU |
|||
$mg = "A0 A4 00 00 02 7F 20"; |
|||
print "Gesendet ".$mg."\n"; |
|||
$cmd = Chipcard::PCSC::ascii_to_array($mg); |
|||
$RecvData = $hCard->Transmit($cmd); |
|||
die ("Can't transmit data: $Chipcard::PCSC::errno") unless defined $RecvData; |
|||
print "Antwort ".Chipcard::PCSC::array_to_ascii($RecvData)."\n"; |
|||
$mg = "A0 88 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00"; |
|||
print "Gesendet ".$mg."\n"; |
|||
$cmd = Chipcard::PCSC::ascii_to_array($mg); |
|||
$RecvData = $hCard->Transmit($cmd); |
|||
die ("Can't transmit data: $Chipcard::PCSC::errno") unless defined $RecvData; |
|||
print "Antwort ".Chipcard::PCSC::array_to_ascii($RecvData)."\n"; |
|||
$mg = "A0 C0 00 00 0C"; |
|||
print "Gesendet ".$mg."\n"; |
|||
$cmd = Chipcard::PCSC::ascii_to_array($mg); |
|||
$RecvData = $hCard->Transmit($cmd); |
|||
die ("Can't transmit data: $Chipcard::PCSC::errno") unless defined $RecvData; |
|||
print "Antwort ".Chipcard::PCSC::array_to_ascii($RecvData)."\n"; |
|||
$hCard->Disconnect(); |
|||
= |
= Quellen = |
||
* https://srlabs.de/blog/wp-content/uploads/2013/08/130803.SRLabs-SIM_card_exploitation-OHM.pdf |
|||
⚫ | |||
* https://srlabs.de/rooting-sim-cards/ |
|||
⚫ |
Latest revision as of 21:28, 11 August 2014
BlackHat US 2013
An BlackHat US 2013 hatte Karsten Nohl demonstriert, wie man über die SIM-Karte Handy-Malware installiert. Die Methode basiert auf der Sicherheitsanfälligkeit der SIM-Karte. Experten sagen das sei eine Bedrohung für Millionen Besitzer von mobilen Geräten.
Das Hacking erfolgt durch Over-the-Air (OTA). Die Software wird so auf dem Handy 'on air', also über das Mobilfunknetz, installiert. Diese Technologie ermöglicht es Java-Applets auf der SIM-Karte zu installieren. OTA-Befehle sind verschlüsselte SMS-Nachrichten. Meistens wird für die Verschlüsselung DES benutzt, welches das Hacking ermöglicht.
Der erste Schritt um die SIM-Karte zu knacken ist das Herausfinden des DES-Schlüssels. Dies geschieht wie folgt: Der Angreifer sendet via OTA auf einem Handy eine SMS-Nachricht mit einem beliebigen binären Code. Das Telefon empfängt einen „falschen Befehl“. Als Reaktion auf den „falschen Befehl“ sendet es eine Fehlermeldung, die den Verschlüsselungsschlüssel enthält. Anschließend wird der 56-Bit-Schlüssel mit den Rainbow-Tabellen entschlüsselt. Auf einem PC dauert das ca. 2 Minuten.
Als zweiten Schritt sendet der Angreifer wieder eine SMS-Nachricht mit einem binären Code auf das Telefon, diesmal mit dem richtigen Schlüssel verschlüsselt. Diese Nachricht enthält ein Java-Applet, das erfolgreich auf der SIM-Karte installiert wird. Dieses Applet kann ohne Zustimmung oder Wissen des Benutzers SMS-Nachrichten senden, Sprachmailboxen ändern, Informationen zum Bestimmen des Standortes des Telefon übermitteln usw.
Es gibt mehrere Verfahren zum Schutz vor oben beschriebenen Angriffen. Zum Beispiel können erweiterte Verschlüsselungsstandards wie AES verwendet werden.
Als Ergänzung kann man sagen, dass es nicht das erste mal ist, dass Probleme in den Stützpunkttechnologien gezeigt werden. In 2010 hat der Spezialist für die informative Sicherheit Chris Paget demonstriert, wie man Anrufe aufzeichnen kann. Mit Hilfe eines Gerätes, dass nicht mehr als 1500 $ kostet. Damit man kann die Anrufe auch an andere Telefonnummern umleiten.
Tools
Mit dem Skript kann man an SIM Kard APDU senden.
#!/usr/bin/perl -w
use Chipcard::PCSC;
# create a new object $hContext = new Chipcard::PCSC(); die ("Can't create the PCSC object: $Chipcard::PCSC::errno\n") unless defined $hContext;
# get the reader list @ReadersList = $hContext->ListReaders(); die ("Can't get readers' list: $Chipcard::PCSC::errno\n") unless defined $ReadersList[0];
# connect to the first reader $hCard = new Chipcard::PCSC::Card($hContext, $ReadersList[0]); die ("Can't connect: $Chipcard::PCSC::errno\n") unless defined $hCard;
# send the Select Applet APDU $mg = "A0 A4 00 00 02 7F 20"; print "Gesendet ".$mg."\n"; $cmd = Chipcard::PCSC::ascii_to_array($mg); $RecvData = $hCard->Transmit($cmd); die ("Can't transmit data: $Chipcard::PCSC::errno") unless defined $RecvData; print "Antwort ".Chipcard::PCSC::array_to_ascii($RecvData)."\n";
$mg = "A0 88 00 00 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00"; print "Gesendet ".$mg."\n"; $cmd = Chipcard::PCSC::ascii_to_array($mg); $RecvData = $hCard->Transmit($cmd); die ("Can't transmit data: $Chipcard::PCSC::errno") unless defined $RecvData; print "Antwort ".Chipcard::PCSC::array_to_ascii($RecvData)."\n";
$mg = "A0 C0 00 00 0C"; print "Gesendet ".$mg."\n"; $cmd = Chipcard::PCSC::ascii_to_array($mg); $RecvData = $hCard->Transmit($cmd); die ("Can't transmit data: $Chipcard::PCSC::errno") unless defined $RecvData; print "Antwort ".Chipcard::PCSC::array_to_ascii($RecvData)."\n";
$hCard->Disconnect();