피드로 돌아가기
Dev.toInfrastructure
원문 읽기
Android 15 seccomp 제약을 극복한 Native glibc 바이너리 실행 구조 설계
Running Native glibc (Debian) Binaries on Android 15 Without PRoot
AI 요약
Context
Android 15의 강화된 seccomp 필터가 PRoot의 syscall 에뮬레이션을 차단하여 glibc 기반 바이너리 실행 시 SIGSYS 오류 발생. 기존의 PRoot-distro 방식으로는 set_robust_list와 같은 필수 syscall 호출이 불가능한 아키텍처적 한계 직면.
Technical Solution
- PRoot 에뮬레이션 계층을 완전히 제거하고 patchelf를 통해 ELF 바이너리의 interpreter 경로를 직접 수정하는 Native Execution 구조 채택
- LD_PRELOAD= 설정을 통한 Termux Bionic 라이브러리 주입 차단으로 glibc와 Bionic 간의 심볼 충돌 및 크래시 방지
- LD_LIBRARY_PATH 설정을 통해 glibc rootfs 내의 aarch64-linux-gnu 라이브러리 의존성을 직접 해결하는 런타임 환경 구축
- Root 권한으로 생성된 심볼릭 링크의 보안 속성이 Termux UID 접근을 차단하는 문제를 해결하기 위해 Python 기반의 심볼릭 링크 재생성 로직 구현
- 단순 바이너리부터 복잡한 의존성을 가진 패키지까지 대응 가능한 3단계(Direct, Wrapper, Smart APT) 계층적 실행 전략 수립
실천 포인트
- ELF 바이너리의 Interpreter 경로 확인 및 patchelf를 통한 수정 검토 - 라이브러리 충돌 방지를 위한 LD_PRELOAD 및 LD_LIBRARY_PATH 환경 변수 제어 - Root 생성 파일의 권한 상속 및 UID 접근 제어 여부 확인 - 커널 Syscall 차단 시 에뮬레이션 대신 Native 로더 활용 가능성 분석