반응형

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

,
반응형

안드로이드에 패턴으로 잠겨있는데 기억이 나지 않는다던가, 포렌식을 진행해야하는데 패턴으로 막혀있다면 다음과 같이 패턴을 확인하거나 제거할 수 있다.


아래 방법대로 진행하기 위해서는 2가지 전제 조건이 있다.

1. 루팅된 단말기여야 한다는 점

2. 개발자 옵션의 USB 디버깅이 설정되어 있어야 한다는 점


때문에 만약 자신이 사용하는 단말기의 패턴이 기억나지 않아 패턴을 해제하거나 찾고 싶은 경우에는 다른 글을 참고하시길 바란다.


루팅이 무엇인지 간단하게 설명하자면 다음과 같다.

루팅(영어: rooting)은 모바일 기기에서 구동되는 안드로이드 운영 체제 상에서 최상위 권한(루트 권한)을 얻음으로 해당 기기의 생산자 또는 판매자 측에서 걸어 놓은 제약을 해제하는 행위를 가리키는 말이다.

- 위키백과


구글링을 하다보면 루팅하는 방법이 많이 나와있으므로 여기서는 Skip 하도록 하겠다.

다시 본론으로 넘어와서 패턴을 확인하는 방법부터 이야기해보겠다.


아래와 같이 핸드폰이 잠겨있으며 패턴이 기억나지 않거나 모르는 상태라고 가정한다.


1. 단말기의 adb 명령어를 이용하여 단말기의 Shell에 붙는다.


2. /data/system 디렉토리 내 gesture.key 파일을 PC로 복사한다.

 - 여기서 복사하는 방법은 PC에서 접근 가능한 디렉토리로 복사하여 빼내는 방법도 있고 adb pull 명령어를 통해 빼내는 방법도 있다.

 - adb pull 명령어 : PC의 커맨드 창에서 [ adb pull /data/system/gesture.key ]를 입력하면 현재 디렉토리로 해당 파일을 가져온다.


3. 툴을 이용하여 패턴을 확인한다.

 - 사용한 툴은 androidpatternlock 이라는 툴이다. 툴 실행 결과를 보면 숫자로도 알려주고 친절하게 그림으로도 알려준다.

 - 다운로드 경로 : https://github.com/sch3m4/androidpatternlock


4. 패턴을 지우거나 패스워드를 지우고 싶을 때는 단말기 shell에 접근한 뒤 다음 명령어를 입력해주면 된다.

 - 패턴 삭제 : rm -f /data/system/gesture.key

 - 패스워드 삭제 : rm -f /data/system/password.key




반응형

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

스크래핑 인증정보 단말기 저장  (0) 2020.07.03
앱 무결성 검증 우회 방지  (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

,

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

CCCrypt hooking code

2020. 5. 29. 13:20

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

IOS hooking code

2020. 5. 29. 13:15

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

Fridalab Writeup

2020. 3. 30. 10:04

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

반응형

1. Java.use

 - Method가 다음과 같이 static으로 되어 있을 경우 프로그램 실행 시 메모리에 올라오기 때문에 instance가 필요없다. 이럴 경우 java.use를 이용한다.


 - 위 클래스의 chall01 변수 값을 1로 변경하는 hooking code

1
2
3
4
5
Java.perform(function() {
    var Activity1 = Java.use("uk.rossmarks.fridalab.challenge_01"); 
    Activity1.chall01.value=1;
});
        
cs



2. Java.choose

 - Method가 static이 아닐 경우 java.choose를 통해 instance를 이용해야 한다.


 - MainActivity 클래스의 chall02 메서드를 호출하는 hooking code

1
2
3
4
5
6
7
8
9
10
11
12
13
Java.perform(function() {
    var main;
    Java.choose("uk.rossmarks.fridalab.MainActivity",
    { 
        onMatch:function(instance){
            main=instance;
            main.chall02();
        },
        onComplete:function(){
        }
    });
});
        
cs



반응형

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

IOS hooking code  (0) 2020.05.29
Fridalab Writeup  (0) 2020.03.30
INSTALL_FAILED_OLDER_SDK  (0) 2020.03.05
IOS Pinning bypass  (0) 2020.03.04
메모리 내 중요정보 평문노출  (0) 2020.02.10
블로그 이미지

rootable

,

INSTALL_FAILED_OLDER_SDK

2020. 3. 5. 09:49

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.