안드로이드 악성코드 은폐를 위한 WebAssembly 활용 연구
초록
본 논문은 Android 애플리케이션에 WebAssembly(와스) 모듈을 삽입·실행함으로써 기존 정적·동적 분석 도구를 회피하는 새로운 악성코드 은폐 기법을 제시한다. 와스 실행 흐름, Android‑WebView 연계, JNI 브릿지 활용 방식을 상세히 조사하고, 두 개의 Proof‑of‑Concept을 통해 VirusTotal·MobSF와 같은 상용 분석 엔진이 와스 기반 페이로드를 탐지하지 못함을 입증한다.
상세 분석
AndroWasm 논문은 Android 생태계에 WebAssembly가 점차 통합되는 현상을 기술적·보안적 관점에서 정밀 분석한다. 먼저 Android APK 구조를 재조명하고, DEX와 native 라이브러리 외에 assets 혹은 WebView 로드 파일에 포함될 수 있는 .wasm 바이너리의 위치와 로딩 메커니즘을 상세히 설명한다. 특히 WebView‑JavaScript‑Wasm 삼각 브릿지를 이용해 Java/Kotlin 코드가 JavaScript 컨텍스트를 통해 Wasm 모듈을 로드하고, JNI‑OnLoad 혹은 RegisterNatives를 통해 네이티브 함수를 바인딩하는 흐름을 단계별로 제시한다.
와스 자체가 메모리‑안전 샌드박스이지만, linear memory와 table, import/export 구성을 통해 호스트 API를 노출시킬 경우 메모리 오버플로·use‑after‑free 등 C/C++ 기반 취약점이 그대로 전이될 수 있음을 강조한다. 논문은 현재 Android에서 지원되는 주요 Wasm 런타임(Wasmtime, Wasmer, WasmEdge, WasmAndroid 등)을 비교하고, 각각이 JIT·AOT·인터프리터 모드에서 제공하는 보안·성능 특성을 정리한다. 특히 WasmAndroid는 Android‑specific API와 연동하도록 설계돼 있어, 개발자는 별도 네이티브 라이브러리 없이도 .wasm 파일만으로 복잡한 로직을 구현할 수 있다.
악성코드 관점에서 저자는 두 가지 PoC를 제시한다. 첫 번째는 악성 페이로드(예: 동적 코드 로딩, 권한 남용, C&C 통신)를 Wasm 모듈에 숨기고, WebView‑JavaScript‑Wasm‑JNI 체인을 통해 실행하는 시나리오다. 이 경우 문자열 리터럴과 API 호출이 모두 Wasm 바이트코드에 암호화돼 있어, 기존 정적 분석기가 DEX나 native 라이브러리만 검사해도 악성 행위를 발견하지 못한다. 두 번째 PoC는 Wasm 모듈 내부에서 자체적인 암호화·복호화 루틴을 구현해, 네트워크 트래픽과 파일 시스템 접근을 동적으로 생성하도록 만든다. 실험 결과 VirusTotal과 MobSF는 두 PoC 모두 “clean” 혹은 “benign”으로 분류했으며, Wasm 바이트코드에 대한 시그니처 기반 탐지는 아직 미비함을 확인했다.
논문은 이러한 위협을 완화하기 위한 검출 방안을 제시한다. 첫째, APK 분석 파이프라인에 Wasm 바이너리 추출·디스어셈블(와abt, wasm2wat) 단계 추가를 권고한다. 둘째, WebView‑JavaScript‑Wasm 인터페이스 호출 로그를 실시간 모니터링하고, 비정상적인 import/export 매핑을 탐지하는 규칙 기반 엔진을 제안한다. 셋째, 기존 정적 분석 도구에 Wasm‑specific 정밀 분석 플러그인을 통합해, linear memory 초기값, 함수 테이블 크기, 외부 API 호출 패턴 등을 특성화한다. 마지막으로, 안드로이드 플랫폼 차원에서 Wasm 모듈에 대한 권한 모델을 강화하고, 런타임 시점에 최소 권한 원칙을 적용하도록 OS 레벨 정책을 제안한다.
전반적으로 AndroWasm은 WebAssembly가 Android 악성코드 은폐에 제공하는 새로운 공격 표면을 최초로 체계화했으며, 기존 보안 솔루션이 직면한 한계를 명확히 제시한다. 이는 향후 모바일 보안 연구와 산업계에서 Wasm 기반 위협 모델을 구축하고, 대응 방안을 설계하는 데 중요한 기준점을 제공한다.
댓글 및 학술 토론
Loading comments...
의견 남기기