libandroid_runtime Zygote Injection을 통한 펌웨어 수준 Android 백도어
Tip
AWS 해킹 배우기 및 연습하기:
HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기:HackTricks Training GCP Red Team Expert (GRTE)
Azure 해킹 배우기 및 연습하기:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks 지원하기
- 구독 계획 확인하기!
- **💬 디스코드 그룹 또는 텔레그램 그룹에 참여하거나 트위터 🐦 @hacktricks_live를 팔로우하세요.
- HackTricks 및 HackTricks Cloud 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.
개요
공급망 변조로 /system/lib[64]/libandroid_runtime.so를 조작하면 android.util.Log.println_native를 가로채서 Zygote에서 포크된 모든 앱이 공격자 코드를 실행하게 만들 수 있습니다. Keenadu 백도어는 println_native 내부에 네이티브 드로퍼를 구동하는 단일 호출을 추가합니다. 모든 앱 프로세스가 이 코드를 실행하기 때문에 Android 샌드박스 경계와 앱별 권한이 사실상 우회됩니다.
드로퍼 경로: native patch → RC4 → DexClassLoader
- 후킹 진입점:
println_native안에__log_check_tag_count로의 추가 호출 (주입된 정적 라이브러리libVndxUtils.a). - 페이로드 저장:
.so에 포함된 RC4로 암호화된 블롭을 복호화하여/data/dalvik-cache/arm[64]/system@framework@vndx_10x.jar@classes.jar로 드롭. - 로드 및 실행:
DexClassLoader가 jar을 로드하고com.ak.test.Main.main을 호출. 런타임 로그는 태그AK_CPP사용(분석 결과물). - 안티-분석: Google/Sprint/T-Mobile 시스템 앱 내에서 또는 킬스위치 파일이 존재하면 중단(abort).
- Zygote 역할 분리:
system_server에서는AKServer인스턴스화.- 다른 앱에서는
AKClient인스턴스화.
Binder 기반 클라이언트/서버 백도어
AKServer(system_server에서 실행)는 보호된 브로드캐스트를 보냄:com.action.SystemOptimizeService→ 클라이언트를 위한 binder 인터페이스.com.action.SystemProtectService→ 다운로드된 모듈을 위한 binder 인터페이스.
AKClient(모든 앱 내부)는 브로드캐스트로 해당 인터페이스를 수신하고attach트랜잭션을 수행해 IPC 래퍼를 전달한다. 이를 통해 서버는 임의의 DEX를 현재 앱 프로세스 내부에서 로드할 수 있다.- 노출된 특권 연산(
SystemProtectService통해): 모든 패키지에 대한 권한 부여/회수, 지리 위치 수집, 디바이스 정보 유출. 이는 권한 우회를 중앙집중화하면서도 선택된 대상 앱(Chrome, YouTube, launcher, 쇼핑 앱 등)에서 코드를 실행할 수 있게 한다.
C2 스테이징, 암호화, 및 게이팅
- 호스트 검색: Base64 → gzip → AES-128-CFB 복호화, 키
MD5("ota.host.ba60d29da7fd4794b5c5f732916f7d5c"), IV"0102030405060708". - 피해자 등록: IMEI/MAC/model/OS 수집, 키
MD5("ota.api.bbf6e0a947a5f41d7f5226affcfd858c")로 암호화,/ak/api/pts/v4에m=MD5(IMEI)및n=w|m(네트워크 타입) 파라미터로 POST. 응답의data도 동일하게 암호화됨. - 활성화 지연: C2는 요청의 “activation time“으로부터 약 2.5개월 이후에만 모듈을 제공하여 샌드박스 폭발을 방해한다.
- 모듈 컨테이너(독점):
struct KeenaduPayload {
int32_t version;
uint8_t padding[0x100];
uint8_t salt[0x20];
KeenaduChunk config; // size + data
KeenaduChunk payload; // size + data
KeenaduChunk signature;// size + data
} __packed;
- 무결성: MD5 파일 검사 + DSA 서명 (모듈을 발급할 수 있는 유일한 사람은 개인 키를 가진 운영자).
- 복호화: AES-128-CFB, 키
MD5("37d9a33df833c0d6f11f1b8079aaa2dc" + salt), IV"0102030405060708".
지속성 및 포렌식 팁
- 공급망 배치: 빌드 과정에서 악성 정적 라이브러리
libVndxUtils.a가libandroid_runtime.so에 링크됨 (예:vendor/mediatek/proprietary/external/libutils/arm[64]/libVndxUtils.a). - 펌웨어 감사: 펌웨어 이미지는 Android Sparse
super.img형식으로 제공됨; 파티션을 추출하고libandroid_runtime.so에서 추가된println_native호출을 검사하려면lpunpack(또는 유사 도구)을 사용. - 디바이스 상의 아티팩트:
/data/dalvik-cache/arm*/system@framework@vndx_10x.jar@classes.jar의 존재, logcat 태그AK_CPP, 또는com.action.SystemOptimizeService/com.action.SystemProtectService로 명명된 보호된 브로드캐스트는 compromise를 나타냄.
References
Tip
AWS 해킹 배우기 및 연습하기:
HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기:HackTricks Training GCP Red Team Expert (GRTE)
Azure 해킹 배우기 및 연습하기:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks 지원하기
- 구독 계획 확인하기!
- **💬 디스코드 그룹 또는 텔레그램 그룹에 참여하거나 트위터 🐦 @hacktricks_live를 팔로우하세요.
- HackTricks 및 HackTricks Cloud 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.


