연구치명적

안드로이드 GPU 보안 강화: SELinux로 공격 표면 최소화하기

3분 읽기출처: Google Security Blog

구글과 Arm이 협력해 안드로이드 Mali GPU의 보안을 강화했습니다. SELinux 정책으로 고위험 IOCTL 접근을 제한해 공격 표면을 줄이는 방법에 대해 알아보세요.

안드로이드 GPU 보안 강화: 공격 표면 최소화를 위한 협력 노력

Google의 Android Security and Privacy TeamArm과 협력하여 전 세계 수십억 대의 안드로이드 기기에 탑재된 Mali GPU에 새로운 보안 강화 조치를 구현했습니다. 이 프로젝트는 SELinux(Security-Enhanced Linux) 정책을 활용해 고위험 IOCTL(Input/Output Controls) 접근을 제한함으로써 GPU 드라이버의 공격 표면을 줄이는 것을 목표로 합니다.

GPU 보안이 중요한 이유

GPU는 복잡성과 시스템 권한 접근성으로 인해 공격자들의 주요 표적이 되었습니다. 2021년 이후 안드로이드 커널 드라이버 기반 익스플로잇의 대부분은 GPU를 대상으로 했으며, 특히 **사용자 모드 드라이버(UMD, User-Mode Driver)**와 커널 모드 드라이버(KMD, Kernel-Mode Driver) 간의 인터페이스를 악용했습니다. 악의적인 입력이 이 인터페이스의 취약점을 악용하면 **메모리 손상(memory corruption)**을 유발하고 시스템을 장악할 수 있습니다.

기술적 접근: SELinux로 GPU IOCTL 제한하기

안드로이드 레드팀(Android Red Team)과 Arm은 Mali GPU IOCTL을 세 가지 그룹으로 분류했습니다:

  • 비특권 IOCTL(Unprivileged IOCTLs) – 일반 운영에 필요한 기능으로, 모든 애플리케이션이 접근 가능합니다.
  • 계측 IOCTL(Instrumentation IOCTLs) – 디버깅 및 프로파일링에 사용되며, shell 또는 debuggable 애플리케이션으로 제한됩니다.
  • 제한된 IOCTL(Restricted IOCTLs) – 더 이상 사용되지 않거나 개발 전용으로, 프로덕션 환경에서는 차단됩니다.

이러한 제한을 적용하기 위해 구글은 단계적 SELinux 정책 롤아웃을 통해 시스템 안정성을 유지했습니다:

  1. Opt-In 정책 – 초기에는 새로운 gpu_harden SELinux 속성을 사용해 선택된 시스템 앱에서 테스트했습니다.
  2. Opt-Out 정책 – 기본적으로 보안 강화 조치를 적용하되, 개발자가 다음 방법을 통해 제한을 우회할 수 있도록 했습니다:
    • 루팅된 기기
    • 앱 매니페스트에 android:debuggable="true" 설정
    • 영구적인 SELinux 정책 예외

OEM 및 개발자를 위한 구현 가이드

구글은 파트너사가 유사한 보안 강화 조치를 도입할 수 있도록 단계별 가이드를 제공했습니다:

1. 플랫폼 수준 강화 매크로 활용하기

system/sepolicy/public/te_macros에 추가된 새로운 매크로를 사용해 기기별 IOCTL 필터링이 가능합니다:

  • 비특권 IOCTL은 모든 애플리케이션(appdomain)에 허용합니다.
  • 계측 IOCTL은 디버깅 도구(shell, runas_app)로 제한합니다.
  • 더 이상 사용되지 않는 IOCTL은 타겟 SDK 버전에 따라 차단합니다.

2. 기기별 IOCTL 목록 정의하기

OEM은 기기의 SELinux 정책 디렉터리에 ioctl_macros 파일을 생성해 IOCTL을 분류해야 합니다(예: mali_production_ioctls, mali_instrumentation_ioctls).

예시:

define(`unpriv_gpu_ioctls', `0x0000, 0x0001, 0x0002')
define(`restricted_ioctls', `0x1110, 0x1111, 0x1112')
define(`instrumentation_gpu_ioctls', `0x2220, 0x2221, 0x2222')

Arm의 공식 IOCTL 분류는 r54p2 GPU 문서에서 확인할 수 있습니다.

3. GPU 디바이스에 정책 적용하기

기기의 SELinux 정책 디렉터리에 gpu.te 파일을 생성하고, 정의된 IOCTL 목록을 플랫폼 매크로에 적용합니다.

4. 테스트, 개선 및 적용

반복적인 SELinux 정책 개발 모범 사례를 따르며, 거부 로그를 감사해 합법적인 애플리케이션이 차단되지 않도록 합니다.

영향 및 향후 전망

이번 보안 강화 조치는 Mali GPU의 공격 표면을 줄여 사용자를 알려진 및 알려지지 않은 취약점으로부터 보호합니다. 취약점을 접근 불가능하게 만들어 장기적인 보안 이점을 제공하며, 구글은 OEM에게 이러한 조치를 채택해 안드로이드 생태계 전반의 GPU 보안을 강화할 것을 권장합니다.

공식 문서

감사의 말

이 프로젝트에 기여한 Jeffrey Vander Stoep에게 특별한 감사를 전합니다.

공유

TwitterLinkedIn