블로그 목록으로 돌아가기

GOTROOT / 모의해킹

모바일 앱 모의해킹 — “클라이언트는 믿을 수 없다”는 가정에서 시작합니다 | GOTROOT

앱은 사용자 단말에서 돌기에 분석·변조·후킹이 가능합니다. 정적·동적 분석, SSL 피닝 우회, 로컬 저장소, 그리고 결국 핵심인 서버 API와 내장 SDK·라이브러리의 알려진 취약점까지, 클라이언트 신뢰 가정을 차분히 점검하는 방법을 정리했습니다.

GOTROOT 리서치 팀 2026. 6. 5.

모바일 앱 보안은 한 가지 가정에서 출발합니다 — “클라이언트는 신뢰할 수 없다.” 앱은 결국 사용자의 단말에서 실행되니까요. 분석할 수도, 변조할 수도, 실행 중에 후킹할 수도 있습니다. 그래서 클라이언트 안에서 하는 검증은 언제든 우회될 수 있다는 전제로 봅니다. 이 글은 저희가 Android/iOS 앱을 점검할 때의 흐름을, 어디에 무엇이 있는지부터 차분히 정리한 글입니다.

먼저, 신뢰 경계를 그려봅니다

점검을 시작할 때 머릿속으로 이런 그림을 그립니다. ‘어디까지가 공격자가 만질 수 있는 영역인가’를 나눠 보는 거죠.

[ 사용자 단말 — 신뢰할 수 없는 영역 ]
    앱 바이너리      (디컴파일·후킹 가능)   ← 정적/동적 분석
        │
    로컬 저장소      (평문 토큰·키가 있진 않은지)
        │
- - - - 통신 구간 (SSL 피닝이 걸려 있나? 평문은 없나?) - - - -
        │                                   ← 프록시로 가로채기
[ 서버 — 진짜 통제가 있어야 하는 곳 ]
    서버 API        (BOLA/BFLA?)            ← 사실 여기가 핵심

이 그림에서 가장 강조하고 싶은 건 맨 아래입니다. 모바일 점검은 ‘앱’에서 끝나는 게 아니라, 앱이 호출하는 서버 API까지 봐야 비로소 의미가 있습니다. 치명적인 결함은 의외로 백엔드 인가에서 나오거든요.

정적 분석 — 일단 열어봅니다

APK/IPA를 디컴파일해 코드·리소스·설정을 살펴봅니다. API 키, 비밀값, 숨은 엔드포인트, 디버그 플래그가 코드에 그대로 박혀 있는 경우가 생각보다 흔합니다.

apktool d app.apk -o out/       # 리소스·설정 추출
jadx -d src/ app.apk            # 자바 소스로 디컴파일
grep -rEi "api[_-]?key|secret|password|http://" out/ src/

동적 분석 — 실행 중에 들여다봅니다 (Frida)

실행 중인 앱의 함수를 후킹해, 루팅/탈옥 탐지나 인증 로직이 어떻게 동작하는지 런타임에 관찰하고 바꿔봅니다. 클라이언트 검증이 왜 ‘참고용’일 수밖에 없는지 직접 확인하는 단계입니다.

// Frida: 루팅 탐지가 항상 '안전'을 반환하도록 후킹해 봅니다
Java.perform(function () {
  var Sec = Java.use('com.app.security.RootCheck');
  Sec.isDeviceRooted.implementation = function () {
    return false;
  };
});

통신·저장소·인증

  • 통신: 프록시로 가로채려면 SSL 피닝을 우회해야 합니다. 우회 후 평문 전송·민감정보 노출·파라미터 변조를 봅니다.

  • 로컬 저장소: SharedPreferences·Keychain·DB에 토큰·개인정보·키가 평문으로 남아 있지 않은지 확인합니다.

  • 인증·세션: 토큰의 수명·갱신·바인딩, 생체 인증이 클라이언트에서만 막혀 있진 않은지 봅니다.

한 걸음 더 — 앱이 품고 있는 SDK와 라이브러리

요즘 앱은 광고·분석·결제·지도 같은 서드파티 SDK와 네이티브 라이브러리를 여럿 품고 있습니다. 그중 하나에 알려진 취약점이 있으면, 그게 곧 입구가 됩니다. 실제 표적 공격(APT)도 이런 ‘기대고 있는 부품’을 노리는 경우가 많아, 저희는 내장 컴포넌트의 버전을 식별하고 알려진 결함이 실제로 악용 가능한지 1-day 관점으로 확인합니다. (관련: 0-day는 어떻게 발굴되는가)

현장 노트: “난독화를 했는데 괜찮지 않나요?”라는 질문을 자주 받습니다. 난독화는 분석을 늦춰주긴 하지만 막아주진 못합니다. 보안은 클라이언트가 아니라 서버 쪽 통제에서 보장돼야 한다고 차분히 말씀드리곤 합니다.

자주 묻는 질문

Android와 iOS 둘 다 봐야 하나요?

저장소·권한·우회 방식이 플랫폼마다 달라 둘 다 점검하는 걸 권해드립니다. 다만 서버 API는 공통이라, 한 번 점검으로 양쪽에 도움이 됩니다.

앱만 보면 충분한가요?

앱은 입구일 뿐이고, 데이터의 관문은 서버 API입니다. 그래서 저희는 앱·통신·서버를 한 흐름으로 함께 봅니다.

마치며

클라이언트는 신뢰할 수 없다 — 이 한 문장을 전제로 하면, 모바일 점검에서 봐야 할 것들이 자연스럽게 정리됩니다. 우리 앱과 그 뒤의 서버 API를 함께 살펴보고 싶으시면 모바일 모의해킹 상담으로 편하게 연락 주세요.