SarangTrap 악성 앱 분석 | 몸캠피싱 초대코드와 연락처·사진 탈취 구조
SarangTrap 악성 앱 분석에서 먼저 알아야 할 점은 이것이 하나의 고정된 앱 이름이 아니라는 사실입니다. 공격자는 데이팅·친구 찾기·클라우드·파일 공유 서비스처럼 보이는 여러 앱과 피싱 사이트를 바꿔가며 유포했습니다. 초대코드가 서버에서 확인된 뒤에야 연락처·사진·기기정보 권한과 데이터 전송 동작이 나타나므로, 앱 첫 화면만 실행한 자동 분석으로는 핵심 행위를 놓칠 수 있습니다.
핵심 요약 2025년 7월 공개된 zLabs 분석은 250개가 넘는 Android 악성 앱과 88개 고유 도메인을 SarangTrap 캠페인으로 묶었습니다. 앱은 초대코드를 C2 서버로 보내 확인한 뒤 SMS·파일·연락처 같은 민감 권한을 요청했고, 전화번호·기기 식별값·전체 연락처·사진과 일부 변종의 SMS를 전송했습니다. 후기 변종은 SMS 권한을 제거했지만 관련 코드는 남겼습니다. 따라서 `코드 존재`, `권한 선언`, `사용자 허용`, `실제 수집`, `C2 전송`을 서로 다른 증거 수준으로 봐야 합니다.
SarangTrap은 단일 앱이 아니라 캠페인 묶음입니다
SarangTrap이라는 이름은 하나의 패키지명이나 고정 인증서를 뜻하지 않습니다. 공개 자료에는 데이팅 앱, 동네친구 앱, 비밀사진·파일 공유 앱, 클라우드 서비스, 자동차 관련 서비스처럼 보이는 여러 위장 유형이 포함돼 있습니다. 같은 운영 구조를 사용하더라도 앱 이름, 아이콘, 도메인, 권한 조합, 해시는 달라질 수 있습니다.
zLabs는 250개가 넘는 Android 악성 앱과 88개 고유 도메인을 확인했습니다. 70개가 넘는 도메인이 당시 악성 앱을 유포하는 피싱 사이트로 동작했습니다.
동네친구·애인 만들기·비밀사진·저장공간처럼 한국 사용자가 검색할 만한 제목과 문구를 사용했습니다.
정확한 코드를 입력해야 C2 확인과 후속 권한 요청이 이어져, 일반적인 짧은 자동 실행 분석을 피할 수 있었습니다.
연락처와 사진을 확보해 피해자의 지인 관계와 민감 자료를 동시에 압박 수단으로 만드는 구조입니다.
분석 단위가 중요합니다. “SarangTrap은 항상 SMS를 읽는다”처럼 캠페인 전체를 하나의 기능표로 표현하면 후기 변종을 잘못 설명할 수 있습니다. 앱 파일의 해시를 고정하고 그 샘플의 매니페스트, 코드, 네트워크 행위를 따로 확인해야 합니다.
검색 결과와 피싱 사이트를 이용한 유포 구조
SarangTrap의 유포는 메신저로 APK 파일 하나를 보내는 방식에만 의존하지 않았습니다. zLabs는 25개가 넘는 피싱 도메인이 당시 Google 검색에 색인되어 일반적인 데이팅 관련 검색 결과처럼 노출됐다고 설명했습니다. 사용자는 상대가 준 링크뿐 아니라 직접 검색한 결과라고 생각해 사이트를 더 신뢰할 수 있습니다.
- 검색 또는 대화 유입
동네친구, 데이팅, 비밀사진 공유, 클라우드 저장소처럼 보이는 페이지로 이동합니다. - 현지화된 설치 페이지
한국어 제목, 앱 아이콘, 다운로드 안내를 보여주며 공식 서비스와 비슷한 인상을 만듭니다. - Android APK 또는 iPhone 설치 안내 분기
기기 종류에 따라 APK 다운로드 또는 구성 프로필 설치 절차를 제시합니다. - 전용 코드 전달
상대가 가입 승인, 비공개 방, 개인 영상 확인에 필요하다며 초대코드를 보냅니다. - 코드 확인 뒤 권한 요청
앱은 입력값을 C2로 보내 검증한 다음 민감 권한과 가짜 기능 화면을 활성화합니다.
검색 결과에 표시됐다는 사실은 사이트의 운영 주체나 안전성을 보증하지 않습니다. 당시 색인됐던 도메인 수치는 2025년 7월 공개 분석 시점의 관찰값입니다.
초대코드가 분석 회피 장치가 되는 이유
초대코드는 단순한 가입 장식이 아닙니다. 앱은 사용자가 입력한 코드를 C2 서버로 전송하고 유효성을 확인한 뒤에야 민감 권한을 요청했습니다. 코드가 없거나 C2가 응답하지 않으면 자동 분석 환경에서는 로그인 화면만 보이고 종료될 수 있습니다.
| 단계 | 사용자에게 보이는 화면 | 내부 분석 포인트 | 놓치기 쉬운 이유 |
|---|---|---|---|
| 설치 직후 | 정상적인 로고·가입 또는 코드 입력 화면 | 앱 시작 시 즉시 악성 동작이 나타나는지 확인 | 초기 행위가 적어 보안 도구가 낮은 위험으로 판단할 수 있음 |
| 코드 입력 | 전용 서비스 인증처럼 보이는 입력창 | 입력값이 전송되는 주소, 응답값, 세션 생성 여부 | 유효한 코드가 없으면 다음 단계에 진입하지 못함 |
| 코드 승인 | 기능 사용을 위한 권한 안내 | 승인 전후 권한 요청과 네트워크 연결 차이 | 짧은 샌드박스 실행 시간 이후에 나타날 수 있음 |
| 가짜 기능 화면 | SMS 목록과 연락처·사진 선택 버튼 | 화면 표시 데이터와 백그라운드 전송 요청의 연결 | 사용자가 직접 선택한 자료만 처리하는 정상 앱처럼 보일 수 있음 |
권한과 실제 수집 데이터를 분리해서 보기
초기 SarangTrap 변종은 SMS, 파일, 연락처 접근을 요청했습니다. 권한이 허용되면 앱은 전화번호와 기기 식별정보, 전체 연락처, 사진, 일부 변종의 SMS 내용을 공격자 서버로 전송했습니다. 여기서 권한 선언과 데이터 전송은 같은 증거가 아닙니다.
| 대상 데이터 | 캠페인에서 확인된 행위 | 몸캠피싱 악용 가치 | 개별 기기에서 확인할 자료 |
|---|---|---|---|
| 전화번호·기기 식별정보 | 기기 기본정보와 함께 C2로 전송 | 피해 기기 구분, 세션 연결, 재접촉 정보로 사용 가능 | 전화 관련 권한, 앱 실행 시각, C2 연결 정황 |
| 전체 연락처 | 연락처 목록을 수집해 전송 | 가족·친구·직장 관계를 압박 대상 목록으로 구성 가능 | 연락처 권한, 동기화된 계정 범위, 상대가 제시한 연락처 표본 |
| 사진 | Luban 라이브러리로 압축한 뒤 전송 | 민감 사진뿐 아니라 명함·신분증·업무 캡처 같은 추가 자료 탐색 가능 | 사진·파일 권한 범위, 앱 캐시, 최근 데이터 사용량, 상대 제시 이미지 |
| SMS | 초기형에서 권한 허용 시 내용 수집·전송 | 계정 정보, 인증 문자, 관계 맥락을 추가 압박에 사용할 가능성 | 해당 샘플의 SMS 권한 선언과 실제 허용 여부 |
| 외부 저장소 파일 | 파일·디렉터리 탐색과 로컬 데이터 수집 기법으로 분류 | 사진 외 문서나 저장 파일까지 노출 범위가 넓어질 수 있음 | Android 버전별 저장소 권한, 앱이 접근할 수 있었던 실제 영역 |
증거 수준을 나누는 기준 매니페스트에 권한이 있으면 `요청 가능한 상태`, 사용자가 허용했으면 `접근 가능한 상태`, 코드와 실행 로그가 연결되면 `수집 정황`, C2 요청과 서버 측 표본까지 연결되면 `전송을 뒷받침하는 정황`으로 구분할 수 있습니다.
Luban 사진 압축 라이브러리의 분석 의미
zLabs는 SarangTrap이 사진을 전송하기 전에 Android용 오픈소스 이미지 압축 라이브러리인 Luban을 사용했다고 밝혔습니다. 고해상도 사진을 압축하면 업로드 크기와 시간이 줄어들고, 다수 파일을 전송하는 과정에서 데이터 사용량 급증이나 긴 대기 시간을 줄일 수 있습니다.
휴대폰 사진은 파일이 크기 때문에 그대로 올리면 시간이 오래 걸립니다. 압축은 더 많은 이미지를 짧은 시간에 전송하는 데 유리합니다.
앱 코드의 Luban 패키지, 압축용 캐시 파일, 원본과 다른 해상도·용량의 임시 이미지가 보조 단서가 될 수 있습니다.
Luban은 정상 앱도 사용하는 공개 라이브러리입니다. 라이브러리 존재만으로 악성 앱을 확정할 수 없습니다.
초대코드 C2 검증, 과도한 사진·연락처 권한, 업로드 주소, 가짜 기능 화면과 함께 나타날 때 의미가 커집니다.
초기형과 후기형의 권한 변화
SarangTrap 후기 샘플은 SMS 관련 권한을 매니페스트와 런타임 요청에서 제거했습니다. 하지만 SMS 전송 관련 코드는 소스 안에 남아 있었습니다. 이는 공격자가 기능을 완전히 버렸다기보다 탐지 가능성과 권한 조합을 시험하고 있을 가능성을 보여줍니다.
| 비교 항목 | 초기 변종 | 후기 변종 | 분석 결론 |
|---|---|---|---|
| SMS 권한 | 선언·요청 | 매니페스트와 런타임 요청에서 제거 | 후기 샘플이 SMS를 읽었다고 자동 추정하면 안 됨 |
| SMS 관련 코드 | 존재하며 권한 허용 시 수집 가능 | 코드는 남아 있음 | 코드 존재는 실행 증거가 아니며 향후 재활성화 가능성의 정황 |
| 연락처 | 수집·전송 | 계속 수집·전송 | 핵심 기능으로 유지된 것으로 평가 |
| 사진·외부 저장소 | 수집·압축·전송 | 계속 수집·전송 | 압박 자료 확보 기능으로 유지 |
| 전화번호·기기정보 | 수집 | 계속 수집 | 피해 기기와 C2 세션을 연결하는 식별 정보 |
없어진 권한과 남은 코드를 혼동하지 않아야 합니다. Android에서는 필요한 권한이 매니페스트에 없고 사용자 허용도 받지 못했다면 관련 API 호출은 제한됩니다. 후기 샘플에서 SMS 코드가 발견됐다는 이유만으로 SMS 탈취가 실행됐다고 쓰는 것은 과도한 해석입니다.
해시·도메인·C2 단서 확인
Zimperium은 SarangTrap 공개 IOC 저장소에 Android 샘플 해시, 피싱 도메인, C2 주소, iPhone 프로필 해시를 구분해 제공했습니다. 아래 값은 공개 목록의 일부를 안전하게 변형해 적은 예시이며, 주소를 직접 열어 확인해서는 안 됩니다.
| 유형 | 공개 예시 | 분석 용도 | 한계 |
|---|---|---|---|
| Android 샘플 해시 | 3c2c321ed5d1d68cbe630ab71fa33c5a 6abe6e57b67fd17d64ef5e794783fdb2 |
보존한 APK와 공개 샘플의 동일성 비교 | 파일이 조금만 바뀌어도 해시가 달라짐 |
| 피싱 도메인 | bunny19[.]com sfile365[.]com |
원본 링크와 캠페인 유포 인프라의 연관성 확인 | 현재 상태와 2025년 관찰 상태가 다를 수 있음 |
| C2 도메인 | love19[.]world zcloud[.]website |
초대코드 검증·데이터 전송 목적지와의 대조 | 공유 서버·변경된 인프라 때문에 단일 주소만으로 운영자를 확정할 수 없음 |
| iPhone 프로필 해시 | c18ef511ca132e9a8ee6d53befe1074f | 다운로드한 구성 프로필과 공개 IOC 비교 | 프로필의 실제 payload와 관리 등록 상태를 별도로 봐야 함 |
IOC는 과거 관찰값입니다. 일치하면 강한 연관 단서가 되지만, 불일치한다고 SarangTrap 계열 가능성이 사라지는 것은 아닙니다. 변종은 파일과 인프라를 계속 바꿀 수 있습니다.
몸캠피싱 악용 흐름과 확인 자료
zLabs가 소개한 한국 피해 사례에서는 데이팅 앱으로 접근한 상대가 개인 영상을 보기 위한 링크와 코드를 전달했고, 앱이 연락처와 영상 자료를 확보한 뒤 가족에게 퍼뜨리겠다는 압박에 사용했습니다. 다만 이 사례 설명과 모든 SarangTrap APK의 기술 기능을 동일시하면 안 됩니다. 카메라 녹화가 개별 샘플에서 확인됐는지, 영상이 통화 화면에서 따로 녹화됐는지 구분해야 합니다.
- 앱·피싱 사이트 식별
표시명과 아이콘뿐 아니라 원본 URL, APK 파일명, 설치 시각, 버전, 설치 출처를 남깁니다. - 초대코드 흐름 보존
코드를 보낸 계정, 메시지 시각, 코드 입력 뒤 나타난 권한과 화면을 연결해 정리합니다. 코드는 공개 게시물에 그대로 적지 않습니다. - 권한 상태 확인
연락처, 사진·동영상, 파일, 전화, SMS 권한을 각각 확인합니다. 모든 SarangTrap 변종이 같은 권한을 갖는다고 가정하지 않습니다. - 실제 노출 자료 대조
상대가 보낸 연락처 캡처와 사진 표본이 기기 내부 자료와 일치하는지, 공개 프로필이나 기존 대화에서 얻을 수 없는 내용인지 구분합니다. - 추가 앱·설정 확인
같은 시간대에 다른 APK, 화면공유 앱, 접근성 서비스, 기기 관리 설정이 추가됐는지 확인합니다. SarangTrap 공개 분석에 없는 원격제어 기능을 별도 앱이 담당했을 수 있습니다. - 삭제 전 원본 보존
가능하면 APK 원본과 해시, 권한 화면, 데이터 사용 기록, 상대 계정과 메시지를 먼저 남긴 뒤 삭제 방향을 정리합니다.
공개 분석에서 확인되지 않은 기능 SarangTrap의 핵심은 연락처·사진·기기정보 수집과 전송입니다. 접근성 서비스를 이용한 화면 원격제어, 기기 관리자 장악, 기본 SMS 앱 변경, 루팅 같은 기능은 공개된 핵심 분석에서 확인된 대표 기능이 아닙니다. 이런 흔적이 있다면 다른 앱이나 변종을 별도로 분석해야 합니다.
Android와 iPhone 확인 포인트
SarangTrap은 두 운영체제를 같은 파일로 감염시키지 않았습니다. Android에서는 APK가 핵심 분석 대상이고, iPhone에서는 피싱 페이지가 구성 프로필 설치 절차를 안내한 것으로 보고됐습니다.
| 구분 | Android | iPhone |
|---|---|---|
| 설치 대상 | 외부에서 받은 APK | 웹에서 받은 구성 프로필 또는 그와 연결된 관리·앱 설치 흐름 |
| 핵심 확인값 | APK 해시, 패키지·버전, 권한, C2, 앱 데이터 사용 | 설정 → 일반 → VPN 및 기기 관리의 프로필명, 조직, 인증서, VPN·계정·관리 payload |
| 연락처·사진 판단 | 앱 권한과 실제 API·전송 행위를 연결 | 프로필 존재만으로 전체 접근을 단정하지 않고 연결된 앱 권한과 앱 개인정보 보호 리포트를 함께 확인 |
| 삭제 전 주의 | APK 사본과 권한·설치 흔적을 먼저 보존 | 프로필 상세 화면과 연결된 앱·계정·VPN 설정을 먼저 기록 |
iPhone 프로필은 Android APK와 같은 증거가 아닙니다. Zimperium은 SarangTrap의 iPhone 유도에서 악성 구성 프로필을 보고했지만, 실제 연락처·사진 접근 범위는 프로필 payload, 기기 관리 등록, 연결된 앱, 사용자가 허용한 개인정보 권한을 확인한 뒤 판단해야 합니다.
자주 묻는 질문
Q1. SarangTrap이라는 이름의 앱을 찾으면 되나요?
아닙니다. SarangTrap은 여러 위장 앱과 도메인을 묶은 캠페인명입니다. 설치 목록에서는 데이팅·친구 찾기·클라우드·파일 공유처럼 다른 이름으로 보일 수 있습니다.
Q2. 초대코드를 입력하지 않았다면 핵심 동작이 실행되지 않았나요?
공개 분석에서는 코드 검증 뒤 권한 요청과 후속 화면이 활성화됐습니다. 코드 입력 전이라면 위험 범위가 달라질 수 있지만, 설치 직후 전송된 기기정보나 다른 변종 동작까지 없었다고 단정할 수는 없습니다.
Q3. 연락처 권한만 허용했고 사진 권한은 거부했습니다.
연락처 접근 가능성과 사진 접근 가능성을 분리해야 합니다. 상대가 가진 지인 목록이 실제 주소록과 일치하는지 확인하되, 사진까지 전송됐다고 함께 단정하지 않습니다.
Q4. 앱 안에 Luban 라이브러리가 있으면 SarangTrap인가요?
아닙니다. Luban은 정상 Android 앱도 사용하는 공개 이미지 압축 라이브러리입니다. 초대코드 C2, 권한 조합, 위장 UI, 전송 주소, 공개 해시 같은 단서가 함께 맞는지 봐야 합니다.
Q5. SMS 관련 코드가 있으면 문자도 모두 넘어간 건가요?
코드 존재만으로 실행을 확정할 수 없습니다. 특히 후기 변종은 SMS 권한을 매니페스트와 런타임 요청에서 제거했으므로, 해당 샘플의 권한과 실제 실행 기록을 확인해야 합니다.
Q6. 공개 IOC와 해시가 일치하지 않으면 안전한 앱인가요?
그렇지 않습니다. 파일을 조금 수정하거나 다시 서명하면 해시가 달라지고 새 도메인도 추가될 수 있습니다. IOC 불일치는 알려진 목록과 동일하지 않다는 뜻일 뿐입니다.
Q7. iPhone에서 프로필만 다운로드하고 설치하지 않았습니다.
Apple 안내상 다운로드한 프로필은 설정에서 사용자가 설치 절차를 완료해야 적용됩니다. 설치하지 않았다면 설정의 VPN 및 기기 관리에서 실제 프로필이 존재하는지 먼저 확인합니다.
함께 보면 좋은 콘텐츠
분석 기준으로 참고한 공개 자료
공개된 캠페인 분석과 IOC를 기준으로 작성했으며, 실제 기기의 개별 APK를 직접 분석한 결과와는 구분해야 합니다. 수치와 인프라 상태는 2025년 7월 공개 시점의 관찰값입니다.
(주)사이버헬퍼 상담 안내
데이팅 앱이나 비밀영상 확인 앱을 설치하고 초대코드를 입력한 뒤 연락처·사진·SMS 권한을 허용했다면 앱 이름만으로 노출 범위를 판단하기 어렵습니다. 삭제 전에 APK 파일, 원본 링크, 초대코드 전달 메시지, 권한 상태, 상대가 제시한 자료를 정리하면 개별 샘플과 실제 노출 정황을 더 정확하게 구분할 수 있습니다.