처리중입니다. 잠시만 기다려주세요.
TTJ 코딩클래스
정규반 단과 자료실 테크 뉴스 코딩 퀴즈
테크 뉴스
Reddit 2026.03.29 42

[심층분석] 백악관 공식 앱을 디컴파일했더니 나온 것들 — GPS 추적, 페이월 우회, 개인 GitHub에서 JS 로딩까지

Reddit 원문 보기
[심층분석] 백악관 공식 앱을 디컴파일했더니 나온 것들 — GPS 추적, 페이월 우회, 개인 GitHub에서 JS 로딩까지

누군가 백악관 앱의 속을 들여다봤어요

얼마 전 미국 백악관이 공식 모바일 앱을 출시했어요. "트럼프 행정부에 대한 전례 없는 접근"이라는 슬로건과 함께요. 뉴스, 라이브 스트리밍, 정책 정보 등을 한곳에서 볼 수 있는 일종의 콘텐츠 포털 앱이었는데요.

그런데 한 개발자가 이 앱의 APK 파일을 뜯어봤어요. APK가 뭐냐면, 안드로이드 앱의 설치 파일이에요. 윈도우에서 .exe 파일 같은 거죠. 이걸 디컴파일(decompile) — 쉽게 말해 완성된 앱을 다시 소스 코드에 가까운 형태로 되돌리는 작업 — 해서 앱이 실제로 무엇을 하는지 낱낱이 분석한 거예요.

그 결과가 꽤 충격적이었어요. 4.5분마다 GPS 위치를 추적하고, 쿠키 동의와 페이월(유료 결제벽)을 자동으로 우회하는 코드가 들어있고, 심지어 어떤 개인의 GitHub Pages에서 JavaScript를 불러오는 구조였거든요. 정부 공식 앱에서요.

이 분석이 중요한 이유는 단순히 "백악관 앱이 이상하다"는 가십이 아니에요. 모바일 앱 보안, 사용자 프라이버시, 그리고 정부 소프트웨어의 품질 관리라는 주제에서 개발자로서 꼭 알아둬야 할 교훈이 가득하기 때문이에요.


앱의 기술 스택 — React Native + WordPress 조합

먼저 이 앱이 어떻게 만들어졌는지부터 볼게요.

  • React Native + Expo (SDK 54): React Native는 JavaScript로 iOS와 안드로이드 앱을 동시에 만들 수 있는 프레임워크예요. Expo는 그 위에 올려서 개발을 더 편하게 해주는 도구 세트고요. 쉽게 비유하면, React Native가 요리 도구라면 Expo는 "밀키트"처럼 필요한 재료를 미리 세팅해주는 거예요.
  • Hermes JavaScript 엔진: Meta가 만든 경량 JS 엔진인데, React Native 앱의 실행 속도를 높여주는 역할을 해요. 앱의 실제 로직은 5.5MB짜리 Hermes 바이트코드 번들에 컴파일되어 있었어요.
  • 백엔드는 WordPress: 놀랍게도 백엔드가 WordPress였어요. whitehouse.gov의 WordPress REST API에서 커스텀 엔드포인트(whitehouse/v1)를 통해 콘텐츠를 가져오는 구조예요.
  • 이 조합 자체는 문제가 아니에요. React Native + Expo는 많은 기업에서 쓰는 검증된 스택이고, WordPress도 콘텐츠 관리 시스템으로서는 훌륭하죠. 문제는 이 위에 얹어진 것들이에요.

    앱을 만든 주체는 Expo 설정 파일에 따르면 "forty-five-press"라는 곳이었어요. 참고로 Expo 설정에서 눈에 띄는 플러그인 두 개가 있었는데, withNoLocationwithStripPermissions이에요. 이름만 봐도 "위치 권한 없애기", "권한 제거하기" 같은 느낌이죠? 이게 나중에 아주 아이러니한 상황을 만들어요.


    GPS 추적 — 4.5분마다 당신의 위치를 수집한다

    앱의 Expo 설정에는 withNoLocation, withStripPermissions라는 플러그인이 있었어요. 이름만 보면 "우리는 위치 정보를 안 써요"라고 말하는 것 같죠?

    그런데 실제 코드를 보면 이야기가 완전히 달라져요. 앱은 expo-location 라이브러리를 사용해서 사용자의 GPS 위치를 수집하고 있었거든요. 그것도 4.5분(270,000밀리초)마다 한 번씩이요.

    이게 뭐냐면, 쉽게 말해서 이런 거예요. 현관문에 "CCTV 없음"이라고 써놓고, 안에 들어가면 곳곳에 카메라가 설치되어 있는 셈이에요. 설정 파일에서는 위치 권한을 제거하는 척하면서, 실제 앱 코드에서는 GPS를 적극적으로 활용하고 있었던 거죠.

    개발자 관점에서 이게 왜 문제가 되냐면요:

    1. 투명성 부재: 사용자에게 위치 수집에 대해 명확하게 고지하지 않으면, 앱 스토어 정책 위반은 물론이고 개인정보보호법에도 저촉될 수 있어요.
    2. 과도한 수집 주기: 4.5분마다 GPS를 찍는다는 건 상당히 빈번한 수집이에요. 날씨 앱이나 네비게이션도 이 정도로 자주 위치를 확인하진 않거든요. 배터리 소모도 심하고요.
    3. 수집 목적 불명확: 뉴스와 정책 정보를 보여주는 앱이 왜 이렇게 자주 GPS 위치가 필요한 건지 기술적 근거가 없어요.

    이건 단순한 "실수"라고 보기 어려운 부분이에요. withNoLocation이라는 플러그인을 의도적으로 넣었다는 건, 누군가가 위치 권한이 드러나는 걸 의식하고 있었다는 뜻이니까요.


    쿠키 동의 / 페이월 우회 인젝터

    이 부분이 기술적으로 가장 흥미롭고, 동시에 가장 논란이 되는 지점이에요.

    앱 안에는 외부 링크를 열 때 사용하는 WebView가 있어요. WebView는 앱 안에 내장된 미니 브라우저라고 생각하면 돼요. 크롬이나 사파리를 열지 않고, 앱 안에서 바로 웹페이지를 보여주는 거죠.

    문제는 이 WebView에서 페이지가 로드될 때마다 JavaScript 코드를 주입(inject)한다는 거예요. 이게 뭘 하느냐면:

  • 쿠키 동의 배너를 자동으로 제거해요. 유럽의 GDPR이나 각국의 개인정보보호법에 의해 웹사이트들은 쿠키 사용 동의를 받아야 하거든요. 그 동의 팝업을 강제로 없애버리는 거예요.
  • 페이월(유료 결제벽)을 우회하려는 코드도 포함되어 있었어요. 쉽게 말해, 뉴스 사이트에서 "구독하세요" 하고 막아놓은 벽을 넘어가려는 시도예요.
  • 이걸 비유하면 이래요. 정부가 공식적으로 배포한 앱이 "다른 사이트의 현관문 자물쇠를 따는 도구"를 내장하고 있는 거예요. 기술적으로 이런 JavaScript 인젝션은 광고 차단기나 브라우저 확장 프로그램에서도 비슷하게 쓰이는 기법이긴 해요. 하지만 정부 공식 앱에 들어가 있다는 건 완전히 다른 차원의 이야기예요.

    왜냐하면:

  • 법적 문제: 페이월 우회는 해당 사이트의 이용약관 위반이고, 경우에 따라 저작권법 위반에도 해당할 수 있어요.
  • 쿠키 동의 우회의 의미: 쿠키 동의 배너를 없앤다는 건 사용자가 추적에 동의하지 않을 권리를 빼앗는 거예요. 사용자 보호를 위한 장치를 정부 앱이 무력화하는 셈이죠.
  • 보안 리스크: WebView에 임의의 JavaScript를 주입하는 건 보안적으로도 위험해요. 만약 이 코드에 취약점이 있다면, 사용자의 세션이나 인증 정보가 노출될 수 있거든요.

  • 개인 GitHub Pages에서 JavaScript 로딩

    분석에서 발견된 또 하나의 충격적인 사실은, 앱이 누군가의 개인 GitHub Pages에서 JavaScript 파일을 불러온다는 거예요.

    GitHub Pages가 뭐냐면, GitHub에서 제공하는 무료 웹 호스팅 서비스예요. 개인 포트폴리오나 프로젝트 문서를 올리는 데 주로 쓰이죠. 보통 username.github.io 같은 주소를 가져요.

    정부 공식 앱이 외부 JavaScript를 로드한다는 건, 쉽게 말해 이런 거예요. 청와대(비유적으로) 공식 건물의 보안 시스템을, 어떤 개인의 집에 있는 컴퓨터가 원격으로 제어하는 구조인 거예요.

    이게 왜 심각한 보안 문제냐면:

    1. 공급망 공격(Supply Chain Attack) 위험: 만약 그 GitHub 계정이 해킹당하거나, 계정 주인이 악의적인 코드로 교체하면, 백악관 앱 사용자 전체가 영향을 받아요. 앱을 업데이트할 필요도 없이, 서버 쪽 파일만 바꾸면 되니까요.
    2. 신뢰 체인의 붕괴: 소프트웨어 보안에서는 "신뢰 체인"이라는 개념이 중요해요. 이게 뭐냐면, 코드가 작성되고 → 검토되고 → 빌드되고 → 배포되는 과정에서 각 단계가 안전하다는 걸 보장하는 거예요. 외부 개인 GitHub에서 코드를 가져오면 이 체인이 완전히 끊겨요.
    3. 감사(Audit) 불가능: 정부 소프트웨어는 보안 감사를 받아야 하는데, 런타임에 외부에서 코드를 가져오면 감사 시점의 코드와 실행 시점의 코드가 달라질 수 있어요.

    이건 주니어 개발자의 실수 수준이 아니에요. 정부 프로젝트의 코드 리뷰와 보안 검토 프로세스 자체에 심각한 구멍이 있다는 뜻이에요.


    앱에 담긴 콘텐츠들 — 뉴스 앱에 ICE 신고 폼이?

    기술적인 문제 외에 앱의 콘텐츠 구성도 흥미로운 부분이 있어요.

    WordPress REST API 엔드포인트를 보면, 홈 화면, 뉴스, 라이브 스트리밍, 갤러리, 정책 이슈 등 일반적인 콘텐츠 포털 기능이 있어요. 그런데 여기에 "미디어 편향(Media Bias)" 섹션이라든가, X(트위터) 피드를 프록시하는 엔드포인트도 있었어요.

    바이트코드에서 추출된 하드코딩된 문자열 중에는 "THE TRUMP EFFECT", "Greatest President Ever!" 같은 것들도 있었고요. 더 눈에 띄는 건 ICE(미국 이민세관집행국) 신고 양식으로의 직접 링크가 포함되어 있었다는 거예요. 뉴스 앱에 이민 단속 신고 폼이 들어있는 건 기술적인 분석과는 별개로, 이 앱의 성격이 단순한 정보 제공을 넘어선다는 걸 보여줘요.


    업계 맥락 — 이런 문제가 처음은 아니에요

    모바일 앱의 과도한 데이터 수집이나 보안 문제는 사실 새로운 이야기가 아니에요. 하지만 이번 케이스가 특별한 건 정부 공식 앱이라는 점이에요.

    비교해볼 만한 사례들을 살펴보면:

  • TikTok 논란: TikTok이 과도한 데이터를 수집한다는 우려로 미국에서 금지 논의가 있었죠. 그런데 정작 자국 정부 앱이 비슷한 수준의 데이터 수집을 하고 있다는 건 상당한 아이러니예요.
  • COVID 추적 앱: 각국 정부가 코로나 추적 앱을 만들 때도 프라이버시 논란이 있었어요. 하지만 대부분의 나라에서는 블루투스 기반의 분산형 프로토콜을 채택하면서 최소한의 데이터만 수집하려고 노력했거든요.
  • 일반 상용 앱과의 비교: Facebook이나 Google 앱도 위치를 수집하지만, 최소한 사용자에게 명시적으로 동의를 구하고, 위치 권한을 앱 설정에서 투명하게 보여줘요. 설정 파일에서 "위치 안 씀"이라고 해놓고 실제로는 쓰는 경우는 드물어요.
  • React Native + WordPress 조합에 대해서도 이야기할 부분이 있어요. 이 스택 자체는 문제가 없지만, 정부급 보안 요구사항을 충족하기엔 좀 더 신경 써야 할 부분이 많아요. 특히 WebView를 통한 JavaScript 인젝션이나 외부 CDN 의존성 같은 부분은 일반 상용 앱에서도 주의해야 하는데, 정부 앱이라면 더더욱 엄격한 기준이 필요하죠.


    한국 개발자에게 주는 시사점

    이 분석에서 한국 개발자들이 가져갈 수 있는 교훈이 꽤 많아요.

    1. APK 디컴파일은 생각보다 쉬워요

    이번 분석에 사용된 도구는 JADX라는 오픈소스 디컴파일러예요. ADB(Android Debug Bridge)로 APK를 추출하고, JADX에 넣으면 Java 코드와 리소스 파일을 볼 수 있어요. Hermes 바이트코드도 문자열 추출이 가능하고요.

    이게 의미하는 바는, 여러분이 만든 앱도 누군가 이렇게 들여다볼 수 있다는 거예요. 특히 API 키, 비밀 엔드포인트, 하드코딩된 비밀번호 같은 건 바이트코드에서 추출할 수 있으니까 절대 클라이언트 사이드에 넣으면 안 돼요.

    실무 팁을 드리자면:

  • API 키는 반드시 서버 사이드에서 관리하세요
  • 민감한 로직은 클라이언트가 아니라 백엔드에서 처리하세요
  • 출시 전에 한번은 직접 APK를 디컴파일해서 뭐가 노출되는지 확인해보세요
  • 2. WebView JavaScript 인젝션의 위험성

    WebView에 JavaScript를 주입하는 패턴은 한국에서도 많이 쓰여요. 하이브리드 앱이나 인앱 브라우저에서 네이티브 ↔ 웹 통신을 위해 사용하죠. 하지만 이때 몇 가지를 꼭 지켜야 해요:

  • 인젝션하는 JavaScript가 최소 권한 원칙을 따르는지 확인하세요
  • 외부 사이트의 DOM을 조작하는 건 해당 사이트의 이용약관 위반이 될 수 있어요
  • 특히 금융 앱이나 인증 관련 WebView에서는 JavaScript 인젝션을 극도로 조심해야 해요
  • 3. 외부 의존성 관리의 중요성

    개인 GitHub Pages에서 JS를 로딩하는 건 극단적인 사례지만, 사실 비슷한 패턴은 생각보다 많아요. npm 패키지 중에서 유지보수가 안 되는 개인 프로젝트에 의존하는 경우, CDN에서 특정 버전을 고정하지 않고 최신 버전을 가져오는 경우 등이요.

    이를 방지하려면:

  • 의존성 감사(audit)를 정기적으로 수행하세요. npm audit이나 yarn audit 같은 도구를 CI/CD에 넣어두면 좋아요
  • 외부 스크립트는 가능하면 셀프 호스팅하고, 해시값으로 무결성을 검증하세요
  • Subresource Integrity(SRI)를 활용하세요. 외부에서 스크립트를 가져올 때 해시값을 지정해두면, 파일이 변조되었을 때 브라우저가 실행을 거부해요

4. 권한 요청의 투명성

한국의 개인정보보호법과 정보통신망법도 앱이 수집하는 개인정보에 대해 명확한 고지를 요구해요. 위치 정보는 특히 민감한 개인정보로 분류되고요. "설정에서는 안 쓴다고 해놓고 실제로는 쓰는" 패턴은 법적 제재를 받을 수 있어요.

특히 한국에서는 위치정보의 보호 및 이용 등에 관한 법률이 별도로 있어서, 위치정보 수집 시 반드시 사전 동의를 받아야 해요. 4.5분마다 GPS를 수집하면서 이를 고지하지 않는 건 한국이었다면 명확한 법 위반이에요.


리버스 엔지니어링, 어떻게 시작할까?

이 분석글을 보고 "나도 앱을 분석해보고 싶다"는 생각이 들었다면, 입문 경로를 간단히 알려드릴게요.

1. JADX 설치: GitHub에서 무료로 받을 수 있어요. GUI 버전도 있어서 코드를 시각적으로 탐색할 수 있어요.
2. ADB 사용법 익히기: Android SDK에 포함된 도구인데, adb pull로 설치된 앱의 APK를 추출할 수 있어요.
3. Frida 배우기: 실행 중인 앱에 훅(hook)을 걸어서 동적 분석을 할 수 있는 도구예요. 더 심층적인 분석이 가능해요.
4. CTF 대회 참가: Capture The Flag 보안 대회에서 안드로이드 리버싱 문제를 풀어보면 실력이 빠르게 늘어요.

단, 리버스 엔지니어링은 자신이 소유한 앱이나 법적으로 허용된 범위 내에서만 해야 해요. 타인의 앱을 분석해서 취약점을 공개할 때는 책임 있는 공개(Responsible Disclosure) 절차를 따라야 하고요.


마무리 — 공공 소프트웨어의 신뢰는 코드에서 나와요

이번 백악관 앱 디컴파일 분석은 여러 가지를 생각하게 해요.

정부 소프트웨어는 시민의 신뢰 위에 작동하는 거잖아요. 그 신뢰는 "우리를 믿어달라"는 말이 아니라, 투명한 코드와 검증 가능한 구조에서 나와야 해요. 오픈소스로 공개하거나, 최소한 독립적인 보안 감사를 받는 것이 기본이 되어야 하죠.

특히 이 사례에서 주목할 점은, 기술적으로 대단히 복잡한 공격이나 고도의 해킹이 아니라는 거예요. JADX라는 공개 도구로 APK를 열어본 것뿐인데, 이렇게 많은 문제가 드러났다는 건 기본적인 보안 리뷰조차 제대로 이루어지지 않았다는 뜻이에요.

한국에서도 정부24, 국민비서 같은 공공 앱이 계속 늘어나고 있는데요. 이번 사례는 공공 소프트웨어를 만드는 개발자와 이를 검수하는 기관 모두에게 좋은 반면교사가 될 거예요.

여러분에게 질문을 던져볼게요. 여러분이 만든 앱을 누군가 디컴파일한다면, 부끄럽지 않을 코드가 나올까요? 그리고 공공 소프트웨어는 어느 수준까지 투명해야 한다고 생각하시나요? 의견을 나눠주세요.


🔗 출처: Reddit

이 뉴스가 유용했나요?

이 기술을 직접 배워보세요

워드프레스로 수익 사이트를 만들어보세요

워드프레스 실전 강의에서 직접 배울 수 있습니다.

워드프레스 강의 보기

"비전공 직장인인데 반년 만에 수익 파이프라인을 여러 개 만들었습니다"

실제 수강생 후기
  • 비전공자도 6개월이면 첫 수익
  • 20년 경력 개발자 직강
  • 자동화 프로그램 + 소스코드 제공

매일 AI·개발 뉴스를 받아보세요

주요 테크 뉴스를 매일 아침 이메일로 전해드립니다.

스팸 없이, 언제든 구독 취소 가능합니다.