모바일 앱의 보안성을 평가하거나 취약점을 연구하기 위해 Frida라는 도구를 사용해 본 적이 있으신가요? Frida는 강력한 리버싱 및 인젝션 도구로, 보안 연구자 및 개발자들에게 매우 유용한 툴입니다. 이번 블로그에서는 Frida를 사용해 모바일 앱을 해킹하는 방법을 코드 예시와 함께 소개하려고 합니다.
주의: 본 글은 연구 목적으로 작성된 자료입니다. 타인의 앱을 허가 없이 해킹하는 것은 불법이며, 모든 실습은 본인이 소유한 앱에서만 진행하시기 바랍니다.
1. Frida란 무엇인가?
Frida는 동적 코드 주입(dynamic code injection)을 통해 애플리케이션을 분석하고 런타임 중에 동작을 변경할 수 있는 강력한 도구입니다. Android와 iOS 같은 모바일 플랫폼뿐만 아니라 Windows, macOS, Linux에서도 사용할 수 있습니다. Frida는 모바일 애플리케이션 내부 동작을 파악하고 후킹을 통해 데이터 흐름을 추적하거나 특정 동작을 변조하는 데 널리 사용됩니다.
Frida의 주요 기능은 다음과 같습니다:
후킹(Hooking): 애플리케이션의 메서드를 후킹하여 원래의 기능을 분석하거나 변경할 수 있습니다.
스크립트 실행: JavaScript로 작성된 스크립트를 통해 애플리케이션 내부의 특정 동작을 원하는 대로 조작할 수 있습니다.
멀티 플랫폼 지원: Android, iOS뿐만 아니라 다양한 운영 체제에서 활용 가능합니다.
2. Frida 설치 및 환경 설정
Frida를 사용하려면 먼저 컴퓨터와 모바일 디바이스에 Frida를 설치해야 합니다.
Frida 서버 설치 (모바일 디바이스에 설치):
Android의 경우, Frida 공식 GitHub에서 기기에 맞는 Frida server를 다운로드합니다.
다운받은 파일을 모바일 디바이스의 /data/local/tmp 폴더에 넣고 실행 권한을 부여합니다.
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을 우회할 수 있습니다.