[보안/기술] 삼성 KNOX (삼성 녹스) 란? -- 삼성 KNOX 원리 -1-
안녕하세요. 학생개발자입니다.
-번역 컨텐츠-
KNOX 원리
먼저 하드웨어 기반인 보안 시스템인 SECURE/TRUSTED BOOT 및 하드웨어 루트 오브 트러스트입니다. 보안 수단의 우회 또는 손상을 방지하기 위해 Knox는 하드웨어 루트 오브 트러스트에 의해 지원되는 부트 타임 보호로 부팅 프로세스가 진행되는 동안 디바이스의 무결성을 확인합니다.
루트 오브 트러스트(ROOT OF TRUST)
*리눅스 / 유닉스 계열에서는 ROOT는 시스템 권한을 가진 파워 유저라는 의미로 사용됩니다. Knox는 하드웨어 난수 생성기를 사용하여 디바이스 제조 단계에서 생성된 DUHK (장치 고유 하드웨어 키: 삼성은 장치 초기 제조 시 장치 하드웨어에 장치 고유의 대칭 키인 DUHK를 통합합니다. DUHK는 데이터 (예 : 장치 상태 증명 데이터)를 특정 장치에 바인딩하며 하드웨어 암호화 모듈에서만 액세스 할 수 있으며 장치 소프트웨어에 직접 노출되지 않습니다.
그러나 소프트웨어는 DUHK가 데이터를 암호화하고 해독하도록 요청할 수 있습니다. 이 DUHK 암호화 데이터는 장치에 바인딩되어 있으며 다른 장치에서 해독할 수 없습니다.)는 Device Root Key (DRK)와 Samsung Attestation Key(SAK). DRK 및 SAK에는 수신자가 제공된 장치의 IMEI 및 일련번호를 확인할 수있게하는 인증 코드가 들어 있습니다.
기존 구매 시스템은 장치의 IMEI 및 일련 번호를 사용하여 DRK 식별자가 아닌 장치를 추적하므로 사용자는 구입 한 장치와 상호 작용한다는 증거를 얻을 수 있습니다. DUHK는 TrustZone 운영 체제에서만 사용할 수 있습니다.
TrustZone OS는 DUHK를 사용하여 각 신뢰할 수 있는 응용 프로그램에 고유 한 후속 키를 만듭니다. 신뢰할 수있는 응용 프로그램은 이러한 키를 사용하여 안전하게 데이터를 저장합니다. DRK 및 SAK는 신뢰할 수있는 응용 프로그램이 자신의 ID 및 실행중인 장치의 ID를 증명할 수있게 해주는 개인 키입니다. 이러한 신뢰할 수있는 응용 프로그램은 하드웨어와 깊이 통합되어 하드웨어 지원 보안을 제공합니다.
장치를 시작할 때 삼성은 SSBK ( Samsung Secure Boot Key )를 사용하여 모든 소프트웨어 구성 요소를 검사합니다. 구성 요소 중 하나는 보안 코드 및 데이터를 위해 예약된 칩 분할 영역 인 TrustZone Secure World입니다. TrustZone Secure 영역 내에서 실행되는 특별히 권한이 부여된 소프트웨어 모듈 만이 이러한 키에 액세스 할 수 있습니다. *Samsung Secure Boot Key (SSBK) 란? SSBK는 삼성에서 승인 한 부트 실행 파일에 서명하는 데 사용되는 비대칭 키 쌍입니다. SSBK의 퍼스널 키 부분은 삼성이 보조 및 앱 부트 로더에 서명하는 데 사용됩니다. SSBK의 퍼블릭 키 부분은 삼성 공장 제조 시 하드웨어의 일회용 실시간 재프로그래밍 퓨즈(efuse)에 저장됩니다. 보안 부팅 프로세스는 이 공개 키를 사용하여 로드되는 각 부팅 구성 요소의 승인 여부를 확인합니다.
*efuse란? efuse는 허가되지 않는 접근이 발생하면 스스로 회로를 끊어버려서 특정한 상태를 나타냅니다. 삼성 디바이스가 루팅 된 경우 knox 워렌티가 0x0(정상)에서 0x1(보증 만료)로 변경되며 efuse는 한번 상태가 변경되면 초기화가 불가능하여 강력한 보안 기능을 제공합니다.
Samsung Knox 장치는 e-fuse를 사용하여 "신뢰할 수 없는"(Samsung 이외의) 부팅 경로가 실행되었는지 여부를 나타냅니다. 장치가 Samsung 이외의 부트 로더, 커널, 커널 초기화 스크립트 또는 데이터로 부팅되는 경우 e-fuse가 설정됩니다. 따라서 장치를 켜고 비 삼성 안드로이드 버전을 설치하면 e-fuse가 설정됩니다. e-fuse가 설정되면 장치는 더 이상 Knox Workspace 컨테이너를 만들거나 기존 Knox 작업 영역에 저장된 데이터에 액세스 할 수 없습니다.
루트 오브 트러스트는 실행을 허용하기 전에 각 Knox 플랫폼 기능에 대한 점검을 수행합니다.
이러한 일련의 보안 검사는 최초의 하드웨어 검사로 시작되므로 각 기능은 하드웨어 루트 신뢰로 보호됩니다.
공격자가 목표로 하는 체인의 링크에 관계없이 보안 검사 중 하나가 이를 탐지합니다.
보안 하드웨어
ARM TrustZone Secure World는 매우 민감한 소프트웨어가 실행되는 환경입니다.
ARM TrustZone 하드웨어는 메모리를 보장하며 보안 영역 (예 : 지문 판독기)에는
Secure World에서만 액세스 할 수 있습니다.
커널, 미들웨어 및 앱을 포함한 대부분의 시스템은 일반 세계에서 실행됩니다.
반면 Secure World 소프트웨어는 더 많은 권한을 가지며 보안 및 일반 세계 자원에 모두 액세스 할 수 있습니다.
부트 로더 ROM - PBL (Primary Bootloader)은 부트 프로세스 중에 실행되는 첫 번째 코드입니다.
PBL은 부팅 체인을 측정하고 확인하기 위해 신뢰됩니다.
변조를 방지하기 위해 PBL은 보안 하드웨어의 ROM에 보관됩니다.
장치 하드웨어는 부팅 시 ROM에서 PBL을 로드하고 실행하며 PBL은 보안 및 신뢰할 수 있는 부팅 프로세스를 시작합니다.
하드웨어 키
장치 고유 하드웨어 키 (DUHK) - 삼성은 장치 초기 제조 시 장치 하드웨어에 장치 고유의 대칭 키인 DUHK를 통합합니다.
DUHK는 데이터 (예 : 장치 상태 증명 데이터)를 특정 장치에 바인딩하며
하드웨어 암호화 모듈에서만 액세스 할 수 있으며 장치 소프트웨어에 직접 노출되지 않습니다.
그러나 소프트웨어는 DUHK가 데이터를 암호화하고 해독하도록 요청할 수 있습니다.
이 DUHK 암호화 데이터는 장치에 바인딩되어 있으며 다른 장치에서 해독할 수 없습니다.
장치 루트 키 (DRK) - DRK는 X.509 인증서를 통해 삼성의 루트 키로 서명된 장치 고유의 비대칭 RSA 키 쌍입니다.
이 인증서는 삼성이 DRK를 제작했음을 증명합니다.
DRK는 삼성 공장에서 제조 시 생성되며 DUHK에 의해 암호화된 장치에 저장되어 장치에 바인딩됩니다.
DRK는 TrustZone Secure World 내에서만 액세스 할 수 있으며 DUHK의 보호를 받습니다.
DRK는 다른 서명 키를 파생하므로 Trust of Root의 중요한 부분입니다.
DRK는 장치마다 고유하므로 암호화 서명을 통해 장치에 데이터를 연결할 수 있습니다.
서명 키는 DRK에서 파생되고 데이터에 서명하는 데 사용됩니다.
Samsung Secure Boot Key (SSBK) - SSBK는 삼성에서 승인 한 부트 실행 파일에 서명하는 데 사용되는 비대칭 키 쌍입니다.
SSBK의 개인 부분은 삼성이 보조 및 앱 부트 로더에 서명하는 데 사용됩니다.
SSBK의 공용 부분은 삼성 공장 제조 시 하드웨어의 일회용 프로그래머블 퓨즈에 저장됩니다.
보안 부팅 프로세스는 이 공개 키를 사용하여 로드되는 각 부팅 구성 요소의 승인 여부를 확인합니다.
SAK (Samsung Attestation Key) - SAK는 삼성의 루트 키로 서명된 장치 고유의 비대칭 키 쌍입니다.
이 서명 된 키 쌍은 SAK가 삼성에서 생산되었음을 증명합니다.
SAK는 장치가 신뢰 상태에 있는지를 나타내는 증명 blob에 서명하는 데 사용됩니다.
서명은 Attestation 데이터가 TrustZone Secure World에서 가져온 것임을 증명합니다.
DRK와는 달리 SAK는 ECDSA 키 세트입니다.
ECDSA는 RSA와 비슷하지만 더 작고 더 빠른 동일한 강도의 새로운 비대칭 알고리즘입니다.
하드웨어 퓨즈
RP (Rollback Prevention) 퓨즈 - RP 퓨즈는 삼성에서 승인 한 부트 로더의 최소 허용 버전을 인코딩합니다.
이전 소프트웨어에는 악용될 수 있는 알려진 취약점이 있을 수 있습니다.
롤백 방지는 승인되었지만 만료된 부트 로더가 로드되는 것을 제외합니다.
RP 퓨즈 버전 번호는 시스템 소프트웨어가 처음 설치될 때 및 특정 업데이트가 발생할 때 설정됩니다.
RP 퓨즈 버전 번호가 설정되면 기존 소프트웨어 버전으로 되돌릴 수 없습니다.
보증 퓨즈
Knox 플랫폼은 장치가 승인되지 않은 상태로 부팅되었는지 여부를 나타내는
일회용 프로그래머블 퓨즈를 사용합니다.
신뢰할 수 있는 부팅 프로세스가 감지하거나 승인되지 않은 구성 요소를 사용,
또는 SELinux가 같은 특정 중요 보안 기능을 사용할 경우, 퓨즈를 설정합니다.
퓨즈가 설정되면 다음과 같은 보안 조치가 취해집니다.
장치 상태 증명 확인이 실패합니다.
Knox Keystore는 민감한 데이터 보호 가 데이터 암호화 및 암호 해독에 사용하는 키를 제거하여
중요한 데이터에 대한 액세스를 차단합니다.
녹스 작업 공간은 더 이상 보안 기업 애플리케이션 및 내의 데이터에 대한 액세스를 방지 작동하지 않습니다.
2편에서는 KNOX의 커널 기반 보안의 원리를 포스팅합니다.
학생 개발자의 IT Story에 방문해주셔서 감사합니다.
본 포스팅의 내용을 무단 전재하거나 복제하지 마십시오.학생 개발자의 IT Story의 콘텐츠의 저작권은 학생 개발자에게 있습니다.euiseoad03@gmail.comcschauiseo1234@naver.comcopyright(c) 학생 개발자 2019
-본문 이미지 출처-
삼성 Knox 웹 사이트 : https://www.samsungknox.com
XDA 포럼 : https://www.xda-developers.com