Claude Code가 루팅된 안드로이드 폰에서 서브웨이 서퍼를 자율 해킹한 사건 분석
Claude Code가 루팅된 안드로이드 폰에서 서브웨이 서퍼를 자율 해킹한 사건 분석
AI 에이전트에게 루팅된 안드로이드 폰을 주면 무슨 일이 벌어질까요? Workers IO 팀이 실제로 실험했습니다. Claude Code에 ADB, UI Automator, mitmproxy, Frida를 연결하고 서브웨이 서퍼를 해킹하라는 미션을 줬습니다. 결과는 놀라웠습니다. 코인 10,000개가 2회 플레이 만에 2,050,000개가 되었습니다.
이 글에서는 이 사건의 기술적 배경, 에이전트의 전략 전환 과정, 그리고 모바일 보안에 미치는 영향을 분석합니다.
AI 에이전트에게 제공된 도구 3가지
Workers IO 팀은 Claude Code에 최소한의 도구만 제공했습니다.
UI Automator: 안드로이드 화면의 UI 요소를 XML 덤프로 읽을 수 있게 해주는 도구입니다. 에이전트가 현재 화면 상태를 파악하는 데 사용합니다.
mitmproxy: 네트워크 트래픽을 가로채서 분석하는 프록시 도구입니다. 앱과 서버 간 통신 패턴을 파악하는 데 활용됩니다.
Frida: 실행 중인 프로세스에 JavaScript를 주입해서 함수 호출을 가로채거나 수정할 수 있는 동적 분석 도구입니다. 모바일 보안 연구의 핵심 도구로 널리 사용됩니다.
이 3가지 도구를 ADB(Android Debug Bridge)를 통해 루팅된 안드로이드 폰에 연결했습니다. 이후 에이전트는 관찰 → 행동 → 가로채기 → 결정 → 반복이라는 루프를 자율적으로 실행했습니다.
전략 전환: 네트워크 분석에서 바이너리 분석으로
이 사건에서 가장 주목할 부분은 에이전트의 적응적 사고입니다.
Claude Code는 처음에 네트워크 트래픽 인터셉트를 시도했습니다. 대부분의 모바일 앱은 서버와 통신하므로 합리적인 첫 번째 접근이었습니다. 하지만 서브웨이 서퍼는 Unity 엔진으로 만들어진 게임이고, 게임플레이 로직이 전부 클라이언트에서 로컬로 처리됩니다.
에이전트는 네트워크에서 게임 관련 데이터가 흐르지 않는 것을 확인한 후, 스스로 판단을 내렸습니다.
"네트워크 프록시는 의미 없다. IL2CPP 바이너리 분석으로 전환해야 한다."
이것은 사람 보안 전문가가 침투 테스트 중에 보여주는 것과 동일한 적응적 사고입니다. 초기 가설이 실패하면 다른 공격 벡터로 전환하는 능력 — 이것이 단순 스크립트 실행과 자율 에이전트의 결정적 차이입니다.
기술 분석: IL2CPP 메타데이터 추출
에이전트는 APK를 추출하고 Unity IL2CPP 바이너리 구조를 분석했습니다.
추출된 파일 구조
| 파일 | 크기 | 역할 |
|---|---|---|
| base.apk | 209MB | 기본 APK 패키지 |
| split_config.arm64_v8a.apk | 32MB | ARM64 네이티브 라이브러리 |
| global-metadata.dat | 15MB | IL2CPP 메타데이터 (클래스명, 메서드명, 오프셋) |
| libil2cpp.so | 79MB | 컴파일된 C++ 게임 바이너리 |
핵심은 global-metadata.dat 파일이었습니다. IL2CPP로 빌드된 Unity 게임은 C# 코드를 C++로 변환하지만, 메타데이터 파일에 원본 클래스명, 메서드명, 필드 오프셋이 그대로 남아있습니다. 이것은 Unity IL2CPP 게임의 구조적 약점입니다.
에이전트가 이 메타데이터에서 찾아낸 핵심 클래스는 다음과 같습니다.
- WalletModel: 게임 내 화폐 관리
- RunSessionData.AddCoins: 달리기 세션에서 코인 수집 처리
- SafeInt: 값 난독화를 위한 안티치트 래퍼
- CurrencyType 열거형: Coins=1, Keys=2, Hoverboards=3
SafeInt 안티치트 우회
서브웨이 서퍼의 안티치트 시스템은 SafeInt라는 래퍼 클래스를 사용합니다. 실제 값을 메모리에 평문으로 저장하지 않고, XOR 키 기반 난독화를 적용합니다.
actual_value = _value - _offset
메모리 스캐너(예: GameGuardian)로 단순히 값을 검색해서 수정하는 공격을 막기 위한 장치입니다. 하지만 이 보호는 정적 메모리 스캔에만 유효합니다. Frida 같은 동적 분석 도구로 함수 호출 레벨에서 후킹하면, 값이 복호화된 상태에서 가로챌 수 있습니다.
Claude Code는 SafeInt의 구조를 분석한 후, Frida Interceptor를 사용해 AddCoins와 AddCurrency 메서드를 후킹하는 코드를 직접 작성했습니다.
해킹 결과: 이중 증폭으로 200배 효과
에이전트가 설계한 공격은 이중 증폭(double amplification) 구조였습니다.
1단계 (수집 레벨): AddCoins 메서드에서 코인 수집량을 100배로 증폭 2단계 (지갑 레벨): 지갑에 저장할 때 다시 100배로 증폭
실제 동작 로그를 보면 그 효과가 분명합니다.
| 시점 | 코인 수 | 비고 |
|---|---|---|
| 시작 | 10,000 | 원래 잔고 |
| 코인 4개 수집 | 400 (4 x 100) | 1단계 증폭 |
| end-of-run 보상 | 400 | 세션 종료 보상 |
| 지갑 저장 | 40,000 (400 x 100) | 2단계 증폭 |
| 1회 플레이 후 | 50,000 | 누적 |
| 2회 플레이 후 | 2,050,000 | 최종 |
2번의 플레이만으로 코인이 205배 증가했습니다.
모바일 보안 관점에서의 시사점
서브웨이 서퍼는 싱글플레이어 게임이라 실제 피해는 없습니다. 하지만 이 실험이 보여주는 시사점은 심각합니다.
Unity IL2CPP 게임의 구조적 약점
- 클라이언트 사이드 신뢰: 게임 로직이 전부 클라이언트에서 실행됩니다. 서버 검증이 없으면 변조를 탐지할 방법이 없습니다.
- 메타데이터 노출: global-metadata.dat에 원본 심볼 정보가 그대로 남아서, 리버스 엔지니어링의 난이도를 크게 낮춥니다.
- 런타임 보호 부재: Frida 같은 도구의 주입을 탐지하거나 차단하는 메커니즘이 없습니다.
동일 기법이 적용 가능한 영역
게임이 아닌 금융 앱, 이커머스 앱, 인증 앱에서도 클라이언트 사이드 로직에 의존하는 부분이 있다면, 동일한 방식으로 공격받을 수 있습니다. AI 에이전트가 이 과정을 자동화할 수 있다는 점이 기존 수동 침투 테스트와 차원이 다릅니다.
AI 보안 에이전트 트렌드
이 사건은 단독이 아닙니다. AI 에이전트를 활용한 보안 연구가 빠르게 확산되고 있습니다.
- Zane St. John: Claude Code로 안드로이드 프로젝터의 멀웨어를 역공학해서 C2 프로토콜과 펌웨어를 분석했습니다.
- Reddit 사례: Disney Infinity의 13년 된 게임 바이너리를 Claude Code로 리버스 엔지니어링해서 캐릭터 제한을 해제했습니다. 24시간 만에 완성됐습니다.
- Randy Westergren: Claude와 Frida를 결합해서 Flutter 앱의 SSL 피닝을 우회하고 프록시 라우팅에 성공했습니다.
- RAPTOR 프레임워크: Claude Code 기반의 자율 보안 연구 프레임워크로, Semgrep, CodeQL, AFL++ 등을 통합했습니다.
보안 연구의 진입 장벽이 급격히 낮아지고 있습니다. 동시에 방어 측도 AI를 활용한 자동 방어 메커니즘을 준비해야 하는 시기입니다.
직접 시도하기
Workers IO는 이 실험에 사용한 도구를 공개했습니다. 설치는 단일 명령으로 가능합니다.
npx skills add workersio/spec
루팅된 안드로이드 폰과 ADB 연결만 있으면 바로 시작할 수 있습니다. 단, 자신이 소유한 기기와 앱에서만 테스트해야 하며, 타인의 시스템에 무단 접근하는 것은 불법입니다.
마무리
Claude Code의 서브웨이 서퍼 해킹은 AI 에이전트가 보안 연구에서 보여줄 수 있는 가능성을 명확히 보여줍니다. 단순히 주어진 스크립트를 실행하는 것이 아니라, 초기 전략이 실패하면 스스로 대안을 찾아 전환하는 적응적 사고를 보여줬습니다.
보안 업계에서는 이것을 두 가지 관점으로 바라봐야 합니다. 공격 측면에서는 침투 테스트의 자동화가 가속되고 있고, 방어 측면에서는 AI 기반 공격에 대응할 수 있는 런타임 보호와 서버 사이드 검증이 더욱 중요해지고 있습니다.