Android 에서 사용하는 WhiteBox라고 불리는 것은 무엇이며, 어떻게 동작, 사용하는지 알아봅시다.
먼저 WhiteBox에 대해 알아보기 전에 암호키 탈취 공격 유형에는 어떠한 것들이 있는지 알면 좋습니다.
암호키 탈취 공격의 유형
먼저 암호키를 탈취하려는 공격 기법을 보면, 아래 3가지 기법으로 구분하고 있다
Black-box(블랙박스) 공격 : 암호문과 평문을 가지고, 비대칭알고리즘인 경우는 공개키(Public-key)를 가지고, 암호키(Secret-key 또는 Private-key)를 유추해 내는 공격이다. 즉 암호 알고리즘이 동작되는 내부 정보 및 과정을 볼 수 없기 때문에 Black-box란 용어를 사용한다. 보안 강도는 사용되는 "암호 알고리즘"과 "암호키 길이"에 따라 결정되어지는데, 이 경우는 높은 성능을 가진 컴퓨터를 사용하여 암호키를 유추해 내기 때문에 절대적인 시간이 필요하다. 물론 힌트가 되는 정보(오랜 시간 관찰하면 pattern을 알 수 있다고 함)를 입수하면, 계산 시간이 단축되지만 이러한 공격에 대비하는 방법은 주기적으로 암호키를 변경하는 것이다.
Gray-box(그레이박스) 공격 :암호 연산 시 발생되는 부가적인(Side) 정보 즉 소요 시간, 전력 사용 패턴, 발생되는 전자기파 정보 등을 입수하여 암호키를 유추하는 공격이다. 이러한 공격을 Side Channel(부채널) 공격이라고도 부르는데, 공격을 방지하기 위해서, 물리적으로 부가적인 정보가 유출되지 않도록 방지하는 기법과, 부가적인 정보가 유출되더라도 암호 알고리즘 상에서 암호키를 유추하지 못하도록 구현하는 기법을 사용한다. 암호 알고리즘 상에서 Side Channel 공격을 방지하는 기능을 구현한 알고리즘을 "Side Channel 내성 암호 알고리즘"이라고 부른다. 메모리를 얼려서 암호키를 알아내는 공격인, Cold Boot Attack 도 Side Channel 공격의 한 종류로 분류하고 있다. Gray-box란 Black-box 와 White-box 의 중간 단계에 속한다는 의미이다.
White-box(화이트박스) 공격 : White-box란 용어가 내포하듯이 암호 연산 과정을 들여다 보면서 공격을 한다는 의미이다. emulator 등의 software 분석 tool을 사용하여, 메모리 정보나 동작 과정 정보 등을 알아내어 암호키를 찾아낸다. 예를 들면, 암호키를 사용하는 특정 Application 이나 시스템을 입수하여, 자신의 분석 환경에서 디버깅 기법이나 리버스 엔지니어링(Reverse Engineering) 기법으로 암호 연산 과정을 추적하여 암호키를 찾아내는 방식이다. White-box 공격 과 Total-access 공격은 같은 의미가 된다.
Black-box 공격의 어려움(난이도)를 알기 때문에, 암호키 탈취를 목표로 하는 공격자는, Gray-box 공격이나 White-box 공격을 시도하는 것이다. White-box 공격을 하기 위해서는, 백도어 기능을 가진 악성코드(Malware)를 사용자 시스템에 몰래 설치하여 실행시키거나, 암호키 정보를 가지고 있는 디바이스를 훔치는 것 등의 방법을 사용한다.
White-box 공격을 방지하기 위한 Solution
White-box 공격을 방지하기 위한 대응 Solution으로 나온 것이 HSM(Hardware Solution) 과 WBC(White Box Cryptography)(Software Solution) 이다.
Application을 개발하는 입장에서 보면, 동작되는 시스템에서 HSM기능(TPM module 이나 TEE 지원 등) 지원 여부에 따라, 암호키 보관 기능을 구현해야 한다. HSM 기능이 없다면, password방식의 암호기능이나 난독화 기능을 사용하여, 암호키가 평문으로 노출되는 것을 방지해야 한다.
WBC(White Box Cryptography)는 Software 방식, 즉 암호키가 노출되지 않고 암호 함수 속에 들어가 동작되기 때문에, Application 개발자에겐, Hardware Independent한 매력적인 Solution으로 여겨지고 있다.
Hardware Solution : HSM
HSM(Hardware Security Module)은 단어가 의미하듯이 Hardware 적인 장치를 사용하여 암호키를 특별하고 안전한 장소에 보관하는기능을 가진 Module 이다. HSM의 모양은 구현 기능과 방식에 따라 다양한데, "IC Card(스마트카드)", "USB 디바이스", "PCI Card", "Network I/F를 가진 독립된 장비" 등 다양하다. 국내에선 HSM을 "보안 하드웨어"라고도 부른다.
HSM 기능이 내장되어 시장에 판매되고 있는 제품으론, TPM(Trusted Platform Module)을 장착한 노트북PC 와 TEE(Trusted Execution Environment) 나 SE(Secure Element)기능을 내장한 스마트폰이 있습니다(참고로, TEE는 안드로이드 OS 4.3버전부터 지원하고 있으며, 9.0버전부터는 SE 기능도 지원하고 있다. 안드로이드의 "Android KeyStore 와 Android Keystore"가 대표적이다).
보다 자세한 내용은 KeyStore 에서 다룰 예정으로 Skip하겠다.
Software Solution : White Box Cryptography
White Box Cryptography(화이트박스 암호)는 암호알고리즘이 동작되는 platform이 open-platform이라는 가정하에, 즉 누구나 접근할 수 있는 환경하에서, 암호기능(암호화 및 복호화)를 수행할 수 있도록 개발된 암호기술이다. 사용자 관점에서 본 open-platform이란, 공격자 입장에서 보면 White Box 공격을 할 수 있는 환경이 된다.
WBC(White Box Cryptography)가 구현이 되어 있으면, 사용자가 암호기능이 수행되는 디바이스를 분실했더라도, 또는 해커가 몰래 침투해 있더라도, 암호키가 유출되지 않는다는 것이다. 또한 HSM 사용시, 비용의 증가 및 구현(디바이스 내부에 HSM기능 구현)의 난이도가 있는 반면, WBC는 Software만으로 쉽게 구현되며, patch 또는 Upgrade도 쉽게 되는 장점이 있다.
요약하면, WBC는 White-box 공격이 있는 상황에서도 암호 정보(암호키 및 Salt 정보)를 안전하게 지키는 목적으로 개발된 암호 기술이다. 암호키가 외부 입력 값으로 들어가지 않고 암호 함수 속에 섞여 있는 이러한 상태를 obfuscation이라고 부른다.
WBC는 기존 표준화된 암호 알고리즘과 경쟁 상태에 있는 기술이 아니라, 표준화된 암호 알고리즘을 사용하면서 암호키가 노출되지 않도록 보완하는 기법이다. 즉 사용되는 암호키를 software적으로 보다 안전하게 보호하기 위하여 개발된 암호 기술이다.
WBC에 대한 기본적인 개념을 먼저 설명하면, 암호 함수 code 와 암호키를 무작위로 섞어서 혼잡된(obfuscated) 새로운 code를 generate(생성)하여 사용하는 기법이다. 제안되었을 당시는 Table들을 사용하여 mapping하는 방식을 사용하였으나, 그 후 table 없이 code만으로 동일한 보안 강도를 구현하는 방식도 개발되었다. 새롭게 생성된 code는 동일한 암복호화 기능을 수행하게 된다. 즉, 암호키가 노출되지 않는 상태로 암복호화 기능이 수행된다. 생성된 새로운 code는 "WB 암호 함수 code" 라고 부르고, 아래 그림은 기본적 개념을 표시한 것입니다.
처음에 나온 "original white-box AES" 의 내부 구현 방식은 key-dependent table들을 사용하여 mapping하는 것인데, 무작위(random) bijection 방식으로 인코딩된 Table들을 lookup(조회 또는 검색)하는 방식으로 AES를 구현하였으며, table들 안에 암호키 정보를 숨겨 두었다. 즉, Table 전체가 암호키 역할을 하는 것이다.
하지만 이 방식은 나오자마자 공격자들에 의해서 break되었다. 그래서 현재는 이 방법은 사용하지 않고 좀 더 해독하기 어려운 WBC solution이 나오기 시작했다. 상용화된 WBC solution은, WB Engine을 사용하여 암호키를 해독하기 어려운 size가 큰 "protected key"로 변환시키는 기법을 사용한다. 현재 판매되고 있는 WBC Solution에 대해서는 아직 break 되었다는 보고는 없다.
상용화되는 WBC의 개념
WBC가 제안되었을 당시는 암호키가 고정된 것으로 간주 했다. 즉 "protected key"가 WBC 암호 함수 속으로 들어갔습니다. 하지만 산업계에선 "protected key"를 변경할 수 있도록 즉 외부 입력 값으로 할 수 있기를 원하기 때문에, 암호키가 동적으로 변경되는 경우에 대한 WBC 구현 방식도 개발되었다.
WBC의 단점
- 동작되는 code 전체를 copy하면, 다른 디바이스에서 암호키를 몰래 암복호화 기능이 동작되므로, code가 주어진 device에서만 동작되도록 하는 기법(node-locking 기법)도 함께 적용되어져야 한다.
- 큰 size를 차지하는 Table 또는 protected key를 사용하기 때문에 많은 양의 메모리를 필요로 하고, 암복호화 속도가 상대적으로 느리다.
참고로, 암호키를 password 방식으로 암호화시켜 파일(file)로 저장하는 것은, HSM 방식도 아니고 WBC 방식도 아니다. 따라서 공격자는, 암호키 파일을 입수한 후에는, Black-box 공격으로 password를 알아내면 된다. Password를 알아내는 것은 암호키를 알아내는 것과 비교할 수 없이 난이도가 쉽다. Password를 알아내면 암호키를 사용할 수 있는 상태가 된다.
WBC의 개선점
- Size를 줄이고, 속도를 높이는 것.
'Tech develop > 인증' 카테고리의 다른 글
HMAC(Hash-based Message Authentication Code) (1) | 2021.07.29 |
---|---|
RSA 암호 알고리즘이란? (0) | 2021.07.29 |
블록 암호화에서의 운영 모드 및 패딩 (0) | 2021.07.29 |
Android KeyStore 와 Keystore 의 차이 (0) | 2021.07.29 |