카드의 고유 식별 번호이다. 카드가 시스템에서 식별되는 데 사용된다. 이 번호는 카드 제조사에 의해 프로그램되며, 대부분 변경할 수 없다.
-ATQA (Answer To Request Type A):
00 04: 카드의 타입과 호환성을 나타내는 응답 코드이다. 이는 카드가 ISO/IEC 14443-A 프로토콜을 따른다는 것을 의미하며, 카드가 어떤 기능과 속성을 지원하는지를 나타낸다.
-SAK (Select Acknowledge):
08 [2]: 카드의 응답 데이터로, 카드의 종류와 지원 기능을 나타낸다. 예를 들어, 08은 일반적으로 MIFARE Classic 1K 카드를 의미한다. 이 정보는 카드가 MIFARE Classic 프로토콜을 준수하고, 보안이나 메모리 관련 기능에 대한 정보를 제공한다.
-TYPE (Card Type):
NXP MIFARE CLASSIC 1k | Plus 2k SL1: 카드의 제조사 및 모델명이다. 이 경우, NXP에서 제조한 MIFARE Classic 1K 또는 Plus 2K SL1 카드이다. 이는 카드의 메모리 용량과 보안 레벨을 나타낸다.
-Proprietary Non ISO14443-4 Card Found:
이 문구는 카드가 표준 ISO/IEC 14443-4 프로토콜을 지원하지 않는다는 것을 의미한다. MIFARE Classic 카드는 자체 프로토콜을 사용하기 때문에, 이는 일반적인 경고 문구이다.
-RATS (Request for Answer To Select) Not Supported:
RATS는 ISO/IEC 14443-4 카드에서 초기화 및 통신 설정에 사용된다. 이 경고는 해당 카드가 RATS 명령을 지원하지 않는다는 것을 나타내며, MIFARE Classic 카드에서는 일반적인 경우이다.
-No Chinese Magic Backdoor Command Detected:
일부 카드에는 백도어 명령을 사용하여 보안 메커니즘을 우회할 수 있는 비공식 기능이 있다. 이 메시지는 해당 카드가 그러한 명령을 지원하지 않는다는 것을 나타낸다. 즉, 이 카드에는 알려진 백도어가 없다는 의미이다.
-Prng Detection: WEAK:
카드의 난수 생성기(PRNG)의 보안 수준을 나타낸다. WEAK는 카드의 PRNG가 예측 가능성이 높아 보안상 취약할 수 있다는 것을 의미한다. MIFARE Classic 카드의 보안 취약점 중 하나이다.
•이 명령어는 MIFARE Classic 카드의 모든 섹터에 대해 기본 키를 사용하여 읽기 시도 및 검증을 수행한다.
•*1은 카드의 첫 번째 메모리 블록부터 모든 섹터를 확인하겠다는 의미이다.
•?는 읽기 시도를 하고 키가 올바른지 확인하도록 지시한다.
•t 옵션은 터미널 출력 모드를 지정하며 결과를 표 형식으로 출력하도록 한다.
- 출력 내용 설명
1.No key specified, trying default keys:
•지정된 키가 없어서 기본 키 목록을 사용하여 시도하고 있다는 의미이다.
2.chk default key[0] ~ key[17]:
•이 부분은 Proxmark3가 MIFARE Classic 카드의 기본 키 리스트를 사용해 각 섹터의 읽기 권한을 확인하고 있는 과정이다.
•예를 들어, ffffffffffff, 000000000000, a0a1a2a3a4a5 등 잘 알려진 기본 키를 사용해 각 섹터에 대한 액세스 시도를 수행한다.
-표 내용 분석:
•sec: 섹터 번호이다. 000, 001, 002, … 등의 번호가 섹터를 나타낸다.
•key A: 섹터에 대한 Key A의 값이다. ffffffffffff와 같은 기본 키를 사용해 시도한 결과를 표시한다.
•res (결과): 시도한 키로 접근이 성공했는지를 나타내며, 1은 성공, 0은 실패를 의미한다.
•key B: 섹터에 대한 Key B의 값이다. 역시 기본 키를 사용해 시도한 결과가 표시된다.
•res (결과): Key B에 대한 접근 성공 여부를 나타낸다.
- 요약
•Proxmark3가 기본 키로 각 섹터의 접근을 시도했고, 대부분 성공한 것을 볼 수 있다.
•이 과정은 MIFARE Classic 카드의 보안 분석이나 카드 복제를 위한 중요한 단계이다.
•접근이 실패한 섹터의 경우, 추가적인 키 추출이나 분석이 필요할 수 있다.
3. 카드 키를 크래킹하고 덤프파일 생성
hf mf nested 1 0 A ffffffffffff d
- 명령어 분석: hf mf nested 1 0 A ffffffffffff d
•hf mf nested: MIFARE Classic 카드의 키를 크래킹하는 명령어이다. 인증 방식을 통해 기본 키를 사용하여 다른 섹터의 키를 찾는다.
•1: 첫 번째 섹터(섹터 1)에서 시작하겠다는 의미이다.
•0: 블록 0에서 인증을 시도한다.
•A: Key A를 사용해 인증을 시도한다.
•ffffffffffff: 인증에 사용할 기본 Key A 값이다.
•d: 결과를 출력할 때 디버그 정보를 표시한다.
- 출력 내용 설명
1.Nested statistic:
•명령어의 실행 결과에 대한 요약 통계이다.
• 'Iterations count: 6'은 이 작업이 6번의 반복을 거쳐 수행되었음을 나타낸다.
• 'Time in nested'는 이 작업이 걸린 총 시간을 보여주며, 4.921초 동안 수행되었다.
2.각 섹터에 대한 결과 표:
•sec: 섹터 번호이다. 각 섹터의 Key A와 Key B에 대한 시도 결과가 표시된다.
•key A: 발견된 Key A 값이다.
•res (결과): Key A의 인증 결과를 나타내며, 1은 성공, 0은 실패를 의미한다.
•key B: 발견된 Key B 값이다.
•res (결과): Key B의 인증 결과를 나타낸다.
3.유효한 키 발견:
•Found valid key 메시지와 함께 표시된 키는 작업 중에 유효한 키가 발견되었음을 나타낸다.
•예를 들어, 섹터 9에서 Key A와 Key B에 대해 각각 유효한 키가 발견되었고, 그 키가 표에 표시되어 있다.
4.Printing keys to binary file dumpkeys.bin...:
•발견된 키들을 dumpkeys.bin 파일로 출력하여 저장하고 있다는 의미이다. 이 파일은 나중에 카드 데이터에 접근하거나 복제할 때 사용할 수 있다.
- 주요 설명
•Nested 공격 방식은 인증된 섹터의 키를 사용해 이웃 섹터의 키를 추출해 나가는 방식으로, 보안 연구나 교육 목적으로 사용된다.
•성공적인 키 발견은 해당 섹터의 Key A 또는 Key B를 찾았다는 것을 의미하며, 이를 통해 카드의 다른 섹터에 접근할 수 있게 된다.
•디버그 정보는 각 인증 시도의 세부적인 과정과 실패/성공 여부를 자세히 보여준다.
- 결론
•이 결과는 MIFARE Classic 카드의 특정 섹터에서 Key A와 Key B를 성공적으로 찾아냈음을 보여준다. 이를 통해 해당 카드의 데이터를 덤프하거나 복제할 수 있는 기반이 마련됬었다.
- 발견된 키 정보 저장
hf mf chk keydump > keys.bin
4. 홈 디렉토리에 ‘dumpkeys.bin’파일이 생성된다.
5. 모든 섹터 데이터를 덤프
hf mf dump
... 중간 생략 ...
6.홈 디렉토리에 ‘dumpdata.bin’파일이 생성된다.
7. 원본 카드를 제거하고 복제할 카드를 올려놓는다.
8. 복제할 카드의 UID값을 원본 카드의 UID값을 설정한다.
hf mf csetuid xxxxxxxx
9. 복사할 카드에 원본데이터로 복원한다.
hf mf restore 1
... 중간 생략...
- 명령어 분석: hf mf restore 1
섹터 1의 데이터를 덮어쓰기하며, 백업된 데이터가 유효하고 올바른 접근 키를 사용할 수 있어야 한다.
현재 위치에 존재하는 dumpdata.bin 또는 dumpkeys.bin 파일을 읽어 두번째 섹터1에 복제한다.
10.복제완료.
- 전원 OFF 이후 다시 복제 시도
hf mf nested명령으로 발견된 키 정보는 카드의 섹터 접근 권한을 얻기 위해 필요하다. 이 키 정보는hf mf restore명령어가 섹터의 데이터를 복원할 때 인증 단계에서 사용된다. 해당 키 정보는 Proxmark3의 메모리에 남아있다. 즉, 전원이 OFF되면 해당 정보는 사라진다.
만약 Proxmark3 메모리에 키 정보가 없는 상태에서 덤프파일로 복제를 시도하려면 키 파일을 로드한 후 복제 명령을 시도하면 된다.
Objective-C 개발시 ARC 혹은 MRC를 선택하여 개발을 한다. ARC는 Objective-C Class에만 해당되어 만약 Core Foundation과 같이 C/C++ 계열의 API는 Type Casting을 해줘야 ARC를 사용할 수 있다. (일명 Toll-Free Bridging) 오늘 소개할 내용은 *.m 파일에 ARC or Non-ARC Compile Flag를 사용하는 방법이며, 위에 얘기한 것처럼 Type Casting 없이 개별 파일에 Compile Flag만 변경해서도 사용할 수 있는 방법이다.
우선 프로젝트 폴더의 상단 프로젝트명을 선택해서 나오는 Target에서Build Phases중 Compile Sources를 열어보면 Compile될 *m파일 리스트가 보이며 Compile Flag 변경을 원하는 파일을 더블클릭하면 변경가능하다.
* 먼저 'PRAM'이라는 명칭은 애플이 파워피씨(PowerPC) 기반의 맥을 판매하던 2006년 이전까지 사용되어 온 명칭이며, 비교적 근래에는 애플 스스로 'NVRAM'이라는 명칭을 사용하고 있습니다. 하지만 PRAM이라는 이름이 오래 사용되어 온 탓에 맥 커뮤니티에서는 상대적으로 PRAM이라는 명칭이 더 빈번히 사용되고 있습니다.
NVRAM(Nonvolatile Random Access Memory)/PRAM(Parameter Ram)은 비휘발성 메모리 영역에 시스템 구동과 관련된 정보와 수치들을 미리 저장해 두었다 맥이 부팅하면서 정보를 읽어드리는 장소입니다. 이로 인해 전원이 차단 되더라도 정보들이 사라지지 않으며 매 부팅시마다 새로운 수치를 저장장치에서 읽어올 필요 없이 비교적 빠른 속도로 OS X 세팅값과 사용자의 정보를 불러올 수 있습니다. 단, 불특정한 이유로 인해 NVRAM/PRAM에 저장된 정보가 변질되거나 무결성이 깨질 경우 아래 정리된 기능에 문제가 발생하거나 시스템 오작동이 발생할 수 있습니다.
이 때 NVRAM/PRAM을 깨끗이 비워주고 다시 정보를 읽는 초기화 작업을하여 문제를 해결할 수 있습니다.
• AppleTalk 정보 // OS 클래식 환경에서 기기간 공유 기능을 담당하던 프로토콜 • 직렬 포트 구성 및 포트 정보 • 알람 시간 설정 • 응용 프로그램 서체 • 직렬 프린터 정보 • 키 반복 입력 간격 • 스피커 볼륨 • 주의(경고음) 사운드 • 마우스 및 트랙패드 이중 클릭 간격 • 캐럿 깜박임 시간(삽입점 비율) // 터미널 환경 • 마우스 크기 및 마우스 속도 • 시동 디스크 정보 • 메뉴 깜박임 수 • 모니터 심도 (색상 정보) • 32비트 주소 지정 • 가상 메모리 • RAM 디스크 • 디스크 캐시
1-2. NVRAM(PRAM) 재설정 방법
NVRAM/PRAM을 리셋하는 방법은 2016년 맥북프로를 제외한 모든 기종이 동일합니다. 맥이 완전히 꺼져 있는 상태에서 command + option + p + r 키를 먼저 누른 상태에서 전원 버튼'을 누르고 있으세요. 부팅이 한 번 됐다 다시 자동으로 리부팅 됩니다. 그리고 재부팅 직후 누르고 있던 키에서 손을 땝니다.
1-3. MacBook Pro (Late 2016) 모델에서 NVRAM을 재설정하는 방법
2016 신형 맥북프로의 경우 시동음이 들리지 않기 때문에 NVRAM을 재설정하는 방법이 조금 다릅니다.
앞서 출시된 다른 맥북은 전원을 켠 뒤 시동음이 들리면 command + option + p + r 키를 길게 누르는 방법으로 NVRAM을 초기화할 수 있습니다. 하지만 시동음이 들리지 않는 2016 맥북프로는 전원을 켠 직 후 command + option + p + r 키를 누르고 20초간 손가락을 떼지 않아야 한다고 합니다. 터치바 탑재 여부와 상관없이 2016년 출시된 모든 맥북프로에 공통으로 적용되는 사항입니다.
SMC는 전원이나 방열 팬, 백라이트 및 부팅 등 맥 전원 체계와 시스템에 연결된 각종 외부 장치들을 총제적으로 관리하는 칩입니다. 다음과 같은 문제가 발생할 경우 SMC를 초기화하는 것으로 효과를 볼 수 있습니다.
• 배터리 관련 이상 증상 • 배터리 인디케이터 오작동 • 디스플레이 밝기 관련 이상 증상 • 키보드 백라이트 관련 이상 증상 • 시스템 팬 관련 이상 증상 • 전원 버튼 오작동 • 잠자기 관련 이상 증상 • 외부 전원(USB, FireWire등) 관련 이상 증상 • 외부 장치(USB HDD등) 관련 이상 증상 • 외부 모니터 인식 문제 • 에어포트 및 블루투스 관련 이상 증상 • 급작스럽게 시스템 전원이 나가는 증상 • SMS(하드 충격 방지 시스템) 오작동
2-2. SMC 재설정 방법
• 포터블 맥(배터리를 탈착할 수 있는 구형 맥북 모델)
1. (맥이 켜져 있는 상태라면) 맥을 종료시킵니다. 2. 전원 케이블을 맥에서 연결 해제합니다. 3. 배터리를 제거합니다. 4. 전원 버튼을 5초간 눌러준 후 손을 땝니다. 5. 배터리를 다시 장착하고 전원 어댑터를 연결합니다. 6. 전원 버튼을 누르고 OS X을 부팅해 줍니다.
• 포터블 맥(배터리를 탈착할 수 없는 맥북 모델)
1. (맥이 켜져 있는 상태라면) 맥을 종료시킵니다. 2. (전원 케이블이 분리되어 있는 상태라면) 전원 케이블을 연결해 줍니다. (배터리 탈착가능한 모델과 반대입니다.) 3. 내장 키보드의 왼쪽 shift + control + option + 전원 버튼을 동시에 눌러줍니다. 4. 마찬가지로 동시에 위 키들에서 손가락을 땝니다. 5. 전원 버튼을 눌러 맥을 시동시킵니다.