모바일 앱 해킹: Frida로 하는 코드 인젝션 실습

2024. 11. 17. 22:50 보안 이야기/리버스엔지니어링

모바일 앱의 보안성을 평가하거나 취약점을 연구하기 위해 Frida라는 도구를 사용해 본 적이 있으신가요? Frida는 강력한 리버싱 및 인젝션 도구로, 보안 연구자 및 개발자들에게 매우 유용한 툴입니다. 이번 블로그에서는 Frida를 사용해 모바일 앱을 해킹하는 방법을 코드 예시와 함께 소개하려고 합니다.

주의: 본 글은 연구 목적으로 작성된 자료입니다. 타인의 앱을 허가 없이 해킹하는 것은 불법이며, 모든 실습은 본인이 소유한 앱에서만 진행하시기 바랍니다.

1. Frida란 무엇인가?

Frida는 동적 코드 주입(dynamic code injection)을 통해 애플리케이션을 분석하고 런타임 중에 동작을 변경할 수 있는 강력한 도구입니다. Android와 iOS 같은 모바일 플랫폼뿐만 아니라 Windows, macOS, Linux에서도 사용할 수 있습니다. Frida는 모바일 애플리케이션 내부 동작을 파악하고 후킹을 통해 데이터 흐름을 추적하거나 특정 동작을 변조하는 데 널리 사용됩니다.

Frida의 주요 기능은 다음과 같습니다:

  • 후킹(Hooking): 애플리케이션의 메서드를 후킹하여 원래의 기능을 분석하거나 변경할 수 있습니다.
  • 스크립트 실행: JavaScript로 작성된 스크립트를 통해 애플리케이션 내부의 특정 동작을 원하는 대로 조작할 수 있습니다.
  • 멀티 플랫폼 지원: Android, iOS뿐만 아니라 다양한 운영 체제에서 활용 가능합니다.

2. Frida 설치 및 환경 설정

Frida를 사용하려면 먼저 컴퓨터와 모바일 디바이스에 Frida를 설치해야 합니다.

  1. Frida 서버 설치 (모바일 디바이스에 설치):
    • Android의 경우, Frida 공식 GitHub에서 기기에 맞는 Frida server를 다운로드합니다.
    • 다운받은 파일을 모바일 디바이스의 /data/local/tmp 폴더에 넣고 실행 권한을 부여합니다.
      adb push frida-server /data/local/tmp/
      adb shell chmod +x /data/local/tmp/frida-server
      adb shell /data/local/tmp/frida-server &
  2. Frida 클라이언트 설치 (개발자 컴퓨터에 설치):
    • Python 패키지 관리자인 pip을 사용하여 Frida를 설치합니다.
      pip install frida-tools

3. 간단한 Frida 스크립트 작성

Frida를 사용하면 JavaScript를 통해 런타임 중에 앱의 함수를 후킹하거나 원하는 코드를 삽입할 수 있습니다. 예를 들어, 특정 앱의 중요한 함수의 반환값을 변경하려면 다음과 같은 스크립트를 사용할 수 있습니다.

  • 예시 스크립트: 특정 함수 후킹
    Java.perform(function() {
        var MainActivity = Java.use("com.example.targetapp.MainActivity");
        MainActivity.getSecretValue.implementation = function() {
            console.log("Original method called");
            return "Hacked Value";  // 원래 반환값을 해킹한 값으로 변경
        };
    });

위 코드는 대상 앱(com.example.targetapp)의 MainActivity 클래스에 있는 getSecretValue 메서드를 후킹하여 원래 반환값 대신 "Hacked Value"를 반환하도록 만듭니다. 이를 통해 실제 앱의 동작을 수정할 수 있습니다.

4. 실제 해킹 예시: 로그인 우회

이제, 실제 예시로 Frida를 활용하여 로그인 기능을 우회하는 방법을 살펴보겠습니다. 예를 들어, 타깃 앱에서 로그인 함수의 성공 여부를 반환하는 isAuthenticated 메서드를 후킹할 수 있습니다.

  • 로그인 우회 스크립트
    Java.perform(function() {
        var AuthClass = Java.use("com.example.targetapp.AuthManager");
        AuthClass.isAuthenticated.implementation = function() {
            console.log("isAuthenticated called. Returning true.");
            return true;  // 로그인 여부를 항상 true로 설정
        };
    });

위 스크립트를 실행하면 로그인 메서드의 호출을 가로채 항상 성공하도록 조작할 수 있습니다. 물론, 이는 앱의 인증 로직을 우회하는 것이므로 연구 목적으로만 사용해야 하며, 앱의 보안 문제를 식별하고 개선하는 데 도움을 주기 위해 사용해야 합니다.

5. SSL Pinning 우회하기

많은 모바일 애플리케이션에서는 보안을 강화하기 위해 SSL Pinning을 사용합니다. SSL Pinning은 애플리케이션이 신뢰하는 특정 인증서를 서버 통신 시 검사하는 방식입니다. 그러나 이로 인해 프록시 툴을 통한 트래픽 분석이 어려워집니다. Frida를 사용하면 SSL Pinning을 우회할 수 있습니다.

  • SSL Pinning 우회 스크립트
    Java.perform(function() {
        var TrustManagerImpl = Java.use('com.android.org.conscrypt.TrustManagerImpl');
        TrustManagerImpl.checkServerTrusted.implementation = function(chain, authType) {
            console.log('Bypassing SSL Pinning');
            // 인증서 검증을 생략하고 통과시킴
        };
    });

위 스크립트는 Android의 기본 SSL 핸들러인 TrustManagerImplcheckServerTrusted 메서드를 후킹하여 SSL 인증서를 무조건 신뢰하도록 조작합니다. 이를 통해 SSL Pinning이 적용된 앱의 트래픽을 분석할 수 있게 됩니다.

6. Frida 스크립트 실행

작성한 스크립트를 실제로 실행하기 위해서는 Frida CLI를 사용하거나 Python을 통해 스크립트를 호출할 수 있습니다.

frida -U -f com.example.targetapp -l your_script.js --no-pause

위 명령어는 USB로 연결된 Android 기기에서 앱을 실행하고, 작성한 your_script.js를 로드하여 코드 인젝션을 시도합니다.

7. 마무리 및 주의사항

Frida는 모바일 애플리케이션의 런타임 동작을 분석하고 수정하는 데 매우 강력한 도구이지만, 매우 조심스럽게 사용해야 합니다. 특히, 개인 데이터와 관련된 작업에서는 항상 윤리적 해킹 규칙을 준수하고 연구 목적으로만 사용해야 합니다.

  • 모범 사례
    • 본인이 소유한 앱에 대해서만 연구 목적으로 사용하세요.
    • Frida를 사용하여 발견된 취약점은 책임 있는 방식으로 보고하여 앱의 보안을 개선하도록 돕는 것이 중요합니다.

Frida를 활용한 해킹 실습은 앱의 취약점을 발견하고 이를 해결하는 데 중요한 도구가 될 수 있습니다. 여러분도 직접 실습해 보며 보안 연구자로서의 역량을 키워보세요!

'보안 이야기 > 리버스엔지니어링' 카테고리의 다른 글

루팅 우회(android)  (0) 2019.07.21
프리다 후킹 CTF  (0) 2019.07.21
루팅체크 우회 시도(iOS)  (0) 2019.07.21
오픈소스 APP진단 자동화 툴(android)  (0) 2019.07.21
SSL Pinning 우회 iOS  (0) 2019.07.21