"오픈 소스이기 때문에 안전하다."
나는 이런 말을 자주 들어. 아이디어는 간단하다: 코드가 공개되어 있다면 누군가가 검토했을 것이다. 취약점이 포착될 것이다. 커뮤니티가 이를 수정할 것이다.
나는 실제 데이터로 이 가설을 테스트하기로 결정했다.
F-Droid에서 10개의 인기 있는 오픈 소스 안드로이드 앱을 가져와서 — 매일 수백만 명이 사용하는 앱들 — 그리고 나는 그것들을 내 정적 분석 보안 스캐너를 통해 실행했습니다. 그런 다음 저는 디컴파일된 APK 코드에 대해 각각의 발견을 수동으로 검증했습니다.
결과: 10개 앱에 걸쳐 60개의 확인된 취약점.
앱들
나는 의도적으로 다양한 카테고리에서 유명하고 활발히 유지보수되는 앱을 선택했습니다:
- AntennaPod — 파드 관리자
- Bitcoin Wallet — 암호화폐 지갑
- DAVx5 — CalDAV/CardDAV 동기화
- GnuCash Android — 재무 회계
- K-9 Mail — 이메일 클라이언트
- KeePassDX — 비밀번호 관리자
- NewPipe — 유튜브 프론트엔드
- Nextcloud — 클라우드 저장소 클라이언트
- Signal — 암호화 메신저
- VLC — 미디어 플레이어
이것들은 버려진 부가 프로젝트가 아닙니다. 이것들은 발전했고 인기 있는 앱들로 활발한 개발자 커뮤니티가 있습니다. 그중 일부는 매우 민감한 데이터를 처리합니다 - 비밀번호, 암호화폐, 개인 메시지, 금융 기록.
방법론
각 앱에 대해 I:
- F-Droid에서 APK를 다운로드
- 내 정적 분석 스캐너를 실행(자동화된 SAST가 매니페스트 분석, smali 코드 분석, 네이티브 라이브러리 검사, 오염 분석 및 암호화 검사를 포함합니다)
- APK를 디컴파일했습니다.APKTool을 사용하여 smali 코드, мани페스트, 및 리소스를 얻기
- 수동으로 모든 발견을 확인했습니다실제 디컴파일 코드와 대조하여, 지정된 코드가 진정으로 취약한지 아니면 거짓 긍정인지 확인합니다.
이 마지막 단계는 중요합니다. 자동 스캐너는 많은 후보를 생성합니다. 수동 검증 없이 진짜 것이 무엇이고 노이즈가 무엇인지 알 수 없습니다.
나는 발견한 것: 가장 흔한 5가지 취약점
10개 앱 전체의 모든 결과를 수동으로 검증한 후, 명확한 패턴이 나타났습니다. 같은 실수가 반복되었습니다 — 앱의 인기 여부나 다루는 데이터의 민감도에 관계없이.
1. 허가 없이Экспор트된 구성 요소
10앱 중 9개에서 찾음
안드로이드 구성 요소(액티비티, 서비스, 리시버, 콘텐츠 제공자)가 선언된 것들exported="true"그들과 상호작용할 때 허가 없이도 가능하다는 것을 의미합니다. 이는 같은 기기에 설치된 어떤 앱도 이러한 구성 요소를 실행할 수 있으며, 이들에게 데이터를 보내거나 이들로부터 데이터를 받을 수 있다는 것을 의미합니다.
이것이 위험한 이유: 금융 앱에서는 악성 앱이 "돈을 보내기" 화면을 실행할 수 있습니다. 비밀번호 관리자에서는 데이터베이스 해제 흐름을 트리거할 수 있습니다. 이메일 클라이언트에서는 사전에 채워진 데이터와 함께 편집 화면을 실행할 수 있습니다.
수정은 간단합니다 — 외부 접근이 필요하지 않은 컴포넌트에 대해 exported="false"를 설정하거나 추가하면 됩니다.android:permission는 어떤 사람이 그들과 상호작용할 수 있는지 제한하는 속성으로 사용됩니다.
2. 너무 광범위한 FileProvider 경로
발견된 곳: 10개 앱 중 4개
안드로이드의 FileProvider는 앱 간 파일을 안전하게 공유하기 위해 설계되었습니다. 하지만 제공자의 경로 구성이 <root-path path="." />를 포함하고 있으면<external-path path="." />는 효과적으로 전체 파일 시스템 또는 모든 외부 저장 공간에 접근을 허용합니다.
파일 제공자 설정이 /storage/ (모든 외부 저장 공간), 전체 앱 내부 디렉토리, 그리고 최악의 경우 전체 기기 파일 시스템에 접근을 허용하는 앱을 발견했습니다.
이 제공자들은 일반적으로 내보내지지 않지만, 그들은 사용합니다grantUriPermissions="true" — 그래서 어떤 xuất khẩu된 활동이 URI 권한을 전달한다면 (일반적인 Android 패턴), 광범위한 경로는 활용될 수 있습니다.
3. 평문 트래픽 허용 + 사용자 CA 신뢰
발견된 곳: 10개 앱 중 6개
많은 앱들이 네트워크 보안 설정에 cleartextTrafficPermitted="true"를 가지고 있어 암호화되지 않은 HTTP 연결을 허용했습니다. 몇몇은 또 사용자가 설치한 CA 인증서를 명시적으로 신뢰했습니다.<certificates src="user" />.
자체 호스팅 서버(캘다브, 이메일, 클라우드 저장소)에 연결하는 앱에 대해서는 일부 의도적입니다 — 사용자는 자신의 서버에 연결해야 하며, 이는 HTTP 또는 자체 서명 인증서를 사용할 수 있습니다. 하지만 구성은 전역적으로 적용되며, 자체 호스팅 엔드포인트에만 적용되지 않습니다. 앱이 수행하는 모든 연결 — API 호출, 분석, 업데이트 확인 —은 기본적으로 중단을 허용합니다.
특히 우려되는 사례: 미디어 플레이어가 평문 HTTP를 통해 업데이트 파일을 다운로드했습니다. 같은 네트워크에 있는 중간자 공격자는 악성 APK를 정당한 업데이트로 제공할 수 있습니다.
4. 약한 암호화 구현
발견된 곳: 10개 앱 중 3개
위험한 것부터 고대적인 것까지 다양했습니다.
- SSL 검증이 완전히 비활성화되었습니다 — 하나의 앱이 실제로 모든 인증서를 검증 없이 받는 메서드를 호출한다. 금융 앱. 실제 돈을 다루고 있다.
- ECB 암호 모드 — 미디어 플레이어의 원격 액세스 기능이 AES를 ECB 모드로 사용하며, 동일한 평문 블록은 동일한 암호문 블록을 생성한다. 이는 교과서적인 암호학 오류이다.
-
java.util.Random암호학적 맥락에서 — 대신SecureRandom로 출력이 예측 가능해집니다. - TOFU(Trust-On-First-Use) 없이 고정하지 않음 — 서버 인증서가 수락되면 영원히 신뢰하며, 인증서가 변경되더라도 (MITM 공격을 시사할 수 있음) 신뢰합니다.
5. 탭잭킹(오버레이 공격) 방지 기능 누락
발견된 곳: 10개 앱 중 8개
앱 중 거의 없이 설정하지 않음filterTouchesWhenObscured="true"는 민감한 UI 요소 위에서 작동합니다. 이는 오버레이 권한을 가진 악성 앱이 앱 위에 가시성 없는 레이어를 그리고 사용자의 탭을 캡처할 수 있거나, 사용자가 의도하지 않은 버튼을 탭하도록 속일 수 있음을 의미합니다.
특히 다음과 같은 경우에 문제가 됩니다.
- 비밀번호 관리자 (마스터 비밀번호 입력 캡처)
- 암호화폐 지갑 (거래 확인)
- 인증서 신뢰 대화 상자 (악성 인증서 수락)
- OAuth/로그인 화면 (접근 권한 부여)
의미
오픈 소스는 자동으로 안전하다는 의미는 아닙니다. 코드가 검토에 확장된다는 의미이지, 그것이 확인되었다는 의미는 아닙니다을 검토했습니다. 이 앱들은 인기가 많고 잘 유지되고 있으며, 활발한 커뮤니티를 가지고 있지만, 시스템적인 검토를 통해 발견될 수 있는 보안 문제가 여전히 있습니다.
이것은 개발자들을 비난하는 것이 아닙니다. 오픈 소스 유지보수자들은 종종 뛰어난 업적을 이루는 자원봉사자들이 많습니다. 중요한 것은 보안은 헌신적이고 집중적인 주의가 필요하다는 것입니다. 기능 구축과는 다른 기술 세트이며, 전문 도구와 전문 지식의 혜택을 받습니다.
Android 앱이 민감한 데이터를 처리하는 경우——금융 정보, 자격 증명, 개인적인 통신, 건강 데이터——보안 검토가 필요합니다. 단순히 수백 개의 후보를 생성하고 일을 끝내는 자동 스캔만으로는 아니라, 모든 발견 사항이 검증되고 맥락에 맞게 평가하는 올바른 접근이 필요합니다.
핵심 요약
자동 스캐너는 후보를 찾는 것이 아니라 확인된 취약점은 아닙니다. 수동 검증 없이 진짜 것이 무엇인지 알 수 없습니다.
거의 모든 앱에서 동일한 5가지 취약점 패턴이 나타납니다.Экспортированные компоненты, 광범위한 파일 공급자, 평문 트래픽, 약한 암호화 및 누락된 오버레이 보호. 이는 어떤 보안 검토도 포착해야 할 쉬운 과일입니다.
문맥은 매우 중요합니다. 미디어 플레이어에서 공개 비디오를 스트리밍하는 때의 평문 트래픽은 은행 앱에서의 평문 트래픽과는 다른 위험입니다. 맥락 없이 발견된 보안 문제는 보고서의 한 줄에 불과합니다.
오픈 소스는 보안 검토를 가능하게 하지만, 그것을 대체하지는 않습니다. 코드가 공개되어 있어 철저한 분석의 전제 조건이지만, 분석이 이루어진 것을 보장하지는 않습니다.
안드로이드 애플리케이션 보안 평가에 특화된 모바일 보안 연구원입니다. 앱의 보안 포지션에 대해 논의하고 싶으시면 yehor.mamaiev@gmail.com으로 연락해 주세요.











