SIMTestTool: Difference between revisions

From
Jump to navigation Jump to search
 
(6 intermediate revisions by the same user not shown)
Line 24: Line 24:
= Tools =
= Tools =


Mit dem Skript kann man an SIM Kard APDU senden.
* pcsc_scan


#!/usr/bin/perl -w
= Sonstiges =

http://cgit.osmocom.org/cyberflex-shell/
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/
* http://cgit.osmocom.org/cyberflex-shell/

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.

Img1.jpg

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.

Img2.jpg

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.


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

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();

Quellen