출처: http://baator9.tistory.com/category/Embedded/Network
디지털 도어락 취약점을 분석하는 프로젝트를 진행하면서
NFC 통신에 대해서 공부한 내용을 정리해본다.
꽤 많은 스펙과 정리 문서를 들여다본 끝에 표준에 대한 정리는 거의 끝난 듯 하다.
앞으로는 실제 타겟으로 삼았던 카드와 장비에 대한 분석 진행 상황에 따라 글이 수정될 예정이다.
1. NFC 개념과 표준 및 히스토리
NFC(Near Field Communication) 는 이름 자체로만 본다면 '근접 통신'을 의미한다.
기반이 되는 통신 기술은 RFID (Radio Frequency Identification) 이다.
일반적으로 13.56MHz 를 쓰는 비접촉식 통신 방식이며,
태그(카드)와 리더기의 통신 또는 기기간의 통신을 포함하고 있다.
ISO 에서 지정한 여러 통신 표준 중에서 RFID 를 기반에 둔 여러 표준들이 존재하며,
그 중 ISO 14443 이 일상에서 쉽게 볼 수 있는 NFC 카드에서 사용하는 표준이다.
2004년에는 ISO 14443 타입 A 와 14443 타입 C 에 추가되지 못했던 Felica 라는 기술을 포함해서
ISO 18092 표준을 제정했는데, 이것이 NFC 라는 기술의 공식적인 첫 표준이다. (NFC IP-1 이라 부른다)
(추가로 기존에 ISO 14443 에는 없던 기기간 통신 기술 내용이 추가되었다)
2005년에는 ISO 14443 타입 B 와 ISO 15693 그리고 ISO 18092(NFC IP-1) 를 포괄하는
ISO 21481 표준을 제정했으며, 이는 NFC IP-2 라고 부른다.
이를 통해 13.56MHz 를 쓰는 비접촉식 통신 기술을 모두 NFC 범주에 포함시키게 되었다.
이를 대략적으로 표현하면 아래와 같다.
[출처 : 금융결제연구소 - '비접촉 통신기술 기반의 모바일 근거리 결제서비스 동향 및 시사점']
(ISO 14443 은 근접형(Proximity) 통신으로 10cm 근방의 범위를 갖고,
ISO 15693 은 주변형(Vicinity) 통신으로 1m 범위를 갖는다)
이와는 조금 별개로 NFC 포럼1에서도 별도의 표준을 발표하고 있다.
단, NFC 포럼에서 발표하는 표준은 통신 기술에 대한 것이 아니고
NFC 통신의 적용을 위한 장치간의 역할과 기능, 계층을 정리한 것이다.
때문에 NFC 포럼도 ISO 표준을 따르고 있으며,
실제 산업에 적용하기 위해 좀 더 체계화된 규칙을 제정한 것이다.
(다만 몇몇 명칭에선 ISO 표준과 다른 이름을 쓰고 있다)
그러나 NFC 포럼의 표준은 NFC IP-1 (ISO 18092) 와 ISO 14443 타입 B 에 대해서만 한정하는 것으로 보인다.
2. ISO 표준
NFC 표준의 기초가 된 ISO 14443 에서는
하드웨어 구성부터 실제 통신 단계를 Part 로 나누고 각각의 표준의 세부내역을 명시했다.
Part 1 은 물리적 특성으로, 카드의 크기나 자기장에 대한 내용을 다룬다.
Part 2 는 무선 주파수 와 신호접속으로, 주파수 범위와 변조(modulation), 부호화(bit coding)를 명시했다.
Part 3 는 초기화 및 충돌방지로, 통신 요청, 충돌 방지 및 카드 선택 등 통신 초기 설정에 대한 내용이다.
Part 4 는 전송 프로토콜로 카드와 리더 사이의 데이터 교환에 대한 사항을 명시했다.
(ISO 에서 명시한 Part 를 아래에 나올 NFC 포럼의 Type 과 헷갈리지 말아야 한다)
이러한 Part 구분과는 별개로 데이터 변조 및 부호화와 충돌방지 구현 방식에 따라 타입을 나누었다.
Type A 와 Type B (이후엔 Type F 도 포함됨) 가 있으며 각자 별개의 프로토콜을 사용한다.
이후에 등장하는 A,B 표현은 모두 이러한 타입 분류를 의미한다.
(NFC IP-1 에는 14443 A 타입만 포함되며, 후에 NFC IP-2 에서야 14443 B 타입이 추가됐다.)
사실 ISO 14443 A 표준은 Mifare 라는 실제 제품의 적용 기술들을 답습했다고 한다.
Mifare 는 NXP 社에서 개발한 것으로, 국제 표준은 아니지만 사실상 표준으로 인정 받아왔다.
때문에 ISO 14443 표준을 제정할 때도 이를 호환할 수 있는 프로토콜을 제정했다고 한다.
(Mifare 제품에 따라 ISO 14443 에서 정의한 Part 를 모두 준수하기도, 일부만 준수하기도 한다)
3. NFC 포럼 표준
앞서 말했듯, NFC 포럼은 NFC 제품을 생산하고 적용하는 회사들의 컨소시엄이므로
NFC 기술의 적용과 사용에 대한 체계적인 협의가 필요했고 이를 표준으로 제정했다.
아래 그림은 NFC 포럼에서 정의한 NFC 통신의 아키텍쳐를 표현한 것이다.
[출처 : nfc-forum.org]
그림과 같이 NFC는 3가지 모드 P2P Mode, R/W Mode, Card Emulation Mode 가 가능하다.
3가지 모드가 상호 배제되는 특성을 가진 것은 아니고,
역할(카드 또는 리더)을 수행하기 위한 모드에 대한 분류로 볼 수 있다.
P2P 모드는 기기간의 통신을 의미하며, P2P가 지원되는 두 장치가 통신하는 모드이다.
카드 에뮬레이션 모드는 NFC 장비가 설정에 의해 카드 역할을 수행하는 모드를 의미한다.
(핸드폰에 탑재된 NFC를 교통카드 등으로 쓸 때 이 모드가 사용된다)
R/W 모드는 통상적인 카드 리더기를 의미하며, 카드 에뮬레이션 모드인 장비 또는 NFC 태그(카드)와 통신한다.
좀 더 상세한 내용의 참고 링크를 남겨둔다.
http://nfc-forum.org/our-work/specifications-and-application-documents/specifications/
위의 링크에서 이어지는 'NFC Forum Technical Specifications' 에는
위 그림에서 나타난 각각의 요소들에 해당하는 기술 스펙들을 소개해주고 있다.
그림 가운데 있는 Tag Type 은 NFC 포럼에서 분류한 태그(카드) 플랫폼을 의미하며
Type 1 은 ISO 14443 A 표준을 기반으로 삼으며 Innovation Topaz 제품에서 사용된다.
Type 2 도 ISO 14443 A 표준을 기반으로 삼으며 NXP 의 Mifare 제품에서 사용된다.
Type 3 은 ISO 18092 표준으로 삼는다. (정확히는 Felica 기술인 JIS X 6319-4 를 기반으로 함)
Type 4 은 ISO 14443 A, B 표준을 완전히 만족하며, NXP 의 DESFire, SmartMX-JCOP 제품에서 사용된다.
(앞서도 말했지만 ISO 에서 표준화한 Part 와는 전혀 다르다)
위의 그림과 하단의 표는 비슷한 맥락으로 볼 수 있다.
위 그림에서 아래에 적힌 RF Analog, Digital Protocol, Acitivies 는
하단 표의 Listen, RF Collision Avoidance (이하 초기 설정) 등과 같은 내용이다.
또한 이는 ISO 14443 의 Part 2 와 3 에 해당한다.
(Part 2의 변조 기술부터 Part 3의 초기화 및 충돌 방지에 대한 내용)
그림에서 그 위에 위치한 Tag 1-4 Type Operation 은 하단 표의 Device Activation 과 같은 내용이다.
이는 ISO 14443 Part 4 에 해당하는 내용이다.
(Part 4는 카드 선택-Device Acitvation-과 실제 데이터 통신 과정에 대한 내용)
그림 상단에 위치한 NDEF 는 '교환'하는 데이터 타입에 따른 포맷을 의미하고,
그 위의 RTD 는 데이터 '저장' 방식에 대한 포맷을 의미한다.
(text, url 과 같은 데이터 포맷 정의)
아래 표는 NFC SPEC 문서에서 발췌한 테이블로,
왼쪽의 각 Activity 에 해당하는 오른쪽의 표준들이 적용되고 있음을 보여준다.
[ Activity 별 표준 구분 ]
각각의 표준은 같은 열에 있는 다른 표준과 같이 쓰인다.
즉, 초기 설정에서 NFC-B 표준을 사용하는 카드는
Device Activation 에선 Type 4B 플랫폼을, Data Exchange, Deactivation 에선 ISO-DEP 를 사용한다.
앞서 말했듯, 초기 설정 단계는 ISO 14443 Part 2,3 에 해당하며
데이터 변조 및 리더기에서 카드의 접근을 파악하고 이를 처리하기 위한 프로토콜이다.
Device Activation 은 ISO 14443 Part 4 의 앞 부분이며
앞선 과정에서 리더기가 받은 정보를 토대로 특정 카드를 활성화하고,
이 카드와 통신할 것임을 알리기 위한 과정이다.
그리고 Data Exchange 와 Device Deactivation 은 실제 데이터 교환과 통신 종료에 대한 프로토콜이다.
Device Activation 과 함께 ISO 14443 Part 4 에 해당하는 내용이다.
4. 종합 및 실전
국내에서 유통되는 NFC 카드들은 많은 수가 NFC-A 표준을 따르며, Mifare Classic 규격을 사용한다고 한다.
Mifare Classic 은 ISO Part 3 까지만 지원하고, 실제 통신은 독자적인 규격을 사용한다.
아래는 각각 NFC-A, NFC-B 타입의 카드를 NFC Tools 라는 앱을 통해 읽은 결과이다.
왼쪽은 NFC-A 타입 카드이며, ISO 14443-3A 타입으로 분류되고 상세한 기술 및 제품 정보가 나온다.
오른쪽은 NFC-B 타입 카드이고, ISO 14443-4 타입에 대한 내용만 나타난다.
여기서 나온 3과 4는 NFC 포럼의 태그 타입이 아닌,
ISO에서 분류한 Part 를 어디까지 지원하는지에 대한 정보이다.
즉, ISO 14443-3A 는 ISO 14443 의 Part 3 까지 지원하는 A 변조 방식의 카드임을 나타낸다.
(앞서 말했듯 Mifare Classic 은 실제로 이와 같은 특성을 지닌다)
NFC-B 카드에 대한 정보는 많이 읽히지 않았는데, NFC-B 자체가 국내외에서 많이 쓰이지 않는 것으로 보였다.
심지어 표준을 따르는 리더기에서 데이터가 읽히지 않는 현상이 있었지만, 원인은 파악하지 못했다.
또한, NFC-A 타입의 카드들이 4바이트 고정된 UID (위 사진에서 Serial number) 를 쓰는데 반해,
NFC-B 타입 카드는 4바이트 ID 값이 유동적이었다.
wiki 문서를 읽어보니 몇몇 태그의 종류에 따라 random ID 를 지원한다고 한다.
이를 종합해보면, 우리가 타겟으로 삼은 카드는
ISO 14443 part 4 까지 지원하며 타입에 B 형식 변조를 사용하는 태그로 보인다.
이에 해당하는 제품을 찾아보았는데, NXP 의 SmartMX-JCOP 이라는 태그가 존재한다.
이러한 방식으로 본인이 타겟으로 삼은 카드가
어느 표준과 규격을 따르고 어느 곳의 제품인지 대략적으로 유추가 가능하다.
(카드 별 사용 표준과 상세 정보가 정리된 링크 :
http://open-nfc.org/wp/home/documentation/tags-compatibility/)
다만 위에서 파악한 것은 태그 분류일 뿐, 실제 데이터 교환에 대해선 여전히 해결점을 찾지 못했다.
때문에 타겟 도어락과 카드 사이에서 스니핑 하여 RAW 데이터를 직접 해석하는 방식으로 진행했다.
우선, Listen Activity 에 해당하는 부분으로,
ALLB_REQ and SENSB_REQ (또는 REQB) 라는 이름의 데이터를 리더기가 카드에게 전송한다.
(각 전송마다 2바이트 CRC가 제일 끝부분에 포함되어 있으며, 이에 대한 내용은 생략한다.)
3바이트 데이터이며, 실제 읽은 데이터의 HEX 값은 [ 05 00 00 71 ff ] 이다.
카드는 이에 대한 응답으로 ATQB 라는 12바이트 데이터를 전송한다.
실제 HEX 값 [ 50 d6 4e 0f 3e 40 00 00 00 00 71 e1 fa ba ]
리더기가 카드의 응답을 토대로 카드를 선택 및 활성화 데이터를 전송한다.
이는 ATTRIB 라고 불리며 9바이트 데이터로 구성된다.
실제 HEX 값 [ 1d 45 6a bb e6 00 08 01 00 d0 dc ]
카드는 이에 대한 응답으로 1바이트 데이터를 전송한다.
실제 HEX 값 [ 40 7C B2 ]
위의 과정을 통해 Listen 과 Activation 이 완료됐으므로
실제 데이터 교환에 대한 프로토콜이 나와야 되나,
스니핑한 데이터가 프로토콜 스펙과 일치하지 않아 분석이 진행되지 않고 있다.
이에 대한 내용은 추후에 진행 상황에 따라 추가하기로 한다.