'단말기 내 중요정보 저장'에 해당되는 글 1건

반응형

0. 개요

스크래핑을 위한 인증정보는 보통 단말기에 저장이 된다.

새로 조회를 할 때 단말기에 저장되어 있는 인증정보로 데이터를 불러와야하기 때문이다.


그런데 단말기에 만약 인증정보(ID/PW,공인인증서 비밀번호 등)가 평문으로 저장되어 있다면 단말기가 탈취되었을 때 이러한 인증정보가 노출될 가능성이 존재한다.


따라서 단말기에 저장한다 하더라도 이런 중요 정보들은 암호화된 상태로 저장해야 한다.



1. 인증정보 암호화 상태로 저장

인증정보를 암호화된 상태로 저장하였을 때를 생각해보면 2가지 포커스가 있다.

(1) 어떻게 암호화, 복호화를 할 것인가?

(2) 키 관리는 어떻게 할 것인가?


만약 암호화, 복호화를 앱에서 자체적으로 진행할 경우에는 앱 분석을 통해 암복호화 로직을 찾아 평문으로 획득할 가능성이 존재한다.

하지만 키 값이 앱 소스코드에 존재하지 않고 서버에서 관리를 한다면 말이 달라진다.

암/복호화 로직을 찾았다 하더라도 키값을 모르기 때문에 복호화가 불가능하다.


그렇다면 서버에서 관리하는 키 값으로 인증정보를 어떻게 암/복호화 할 것인가?

이것은 Step 별로 작성해보겠다.


Step 1. 사용자가 스크래핑을 위해 인증정보를 입력

Step 2. 서버에서 key 값을 받아 앱에서 암호화 진행

Step 3. 암호화된 인증정보를 단말기에 저장


이렇게 진행하면 안전할 것 같지만 몇가지 보안적으로 위험한 부분이 있다.

① 서버에서 key 값을 전달받을 때 key 값이 평문으로 노출될 가능성이 존재한다.

② 앱에서 key 값을 통해 암호화하였기 때문에 메모리 상에 key 값이 노출될 가능성이 존재한다.


이 두가지 위험으로부터 안전하기 위해서는 어떤 방법이 있을까?



2. 세션 데이터 이용

우선 첫번째 위험으로부터 안전하기 위해서는 세션 데이터를 이용하면 될 것이라 생각한다.


세션 데이터를 이용할 경우 패킷이 노출된다 하더라도 세션 내 데이터가 직접적으로 노출되지 않기 때문에 Key가 안전할 것이며, 각 사용자별로 Key를 달리 적용할 경우 더욱 안전성이 높아질 것으로 예상된다.


두번째 위험으로부터 안전하기 위해서는 Key를 통해 암/복호화 진행 후 Key를 저장한 변수를 null로 초기화하여 메모리 상에 키 값이 노출되지 않도록 하면 된다.



3. 이외 정보들

각 OS 별로 중요 정보를 저장하기 위한 것이 존재한다.

중요 데이터를 저장할 때에는 아래에서 말하는 장소에 저장하는 것이 보안상 좋다.


(1) Android

 : 안드로이드의 경우 Keystore 시스템이 존재한다. 이 시스템은 암호화 키를 저장하는 시스템으로 이 시스템에 키를 저장하게 될 경우 컨테이너에 저장하여 키를 암호화 작업에 사용할 수는 있지만 내보낼 수 없는 상태이므로 보안상 유리하다.

 : 상세한 정보는 아래 링크를 참고하길 바란다.

 https://developer.android.com/training/articles/keystore


(2) IOS

 : IOS의 경우 Keychain Service가 존재한다. 해당 서비스는 앱에서 사용하는 사용자의 정보를 안전하게 저장할 수 있도록 도와주는 암호화된 데이터베이스이다.

 : 해당 서비스를 이용할 경우 탈옥된 단말기에서는 특정 툴을 통해 복호화가 가능하므로 Keychain에 저장하는 데이터 또한 위에서 말한대로 암호화하여 저장해야 한다.

 : 상세한 정보는 아래 링크를 참고하길 바란다.

https://developer.apple.com/documentation/security/keychain_services



반응형

'Hacking > Mobile' 카테고리의 다른 글

안드로이드 잠금패턴 확인  (0) 2020.07.02
앱 무결성 검증 우회 방지  (0) 2020.06.11
CCCrypt hooking code  (0) 2020.05.29
IOS hooking code  (0) 2020.05.29
Fridalab Writeup  (0) 2020.03.30
블로그 이미지

rootable

,