안드로이드 접근성 서비스(Accessibility Service)는 노약자나 장애인이 스마트폰을 더 편리하게 사용할 수 있도록 돕는 중요한 기능입니다. 하지만 같은 기능이 악성코드 개발자들에게는 사용자를 속이고 피해를 주는 도구로 악용될 여지를 열어주기도 합니다.
이번 글에서는 안드로이드 접근성 서비스가 무엇인지, 그리고 어떻게 악의적인 목적으로 사용될 수 있는지 자세히 살펴보겠습니다.
안드로이드 접근성 서비스란 무엇인가?
안드로이드 접근성 서비스는 앱이 특수한 작업을 수행하기 위해 휴대전화를 일부 제어할 수 있도록 허용하는 기능으로, 핵심 목적은 장애인의 기기 사용을 보조하는 것입니다.
예를 들어, 시력이 좋지 않아 화면의 글자를 읽기 어려운 사용자가 있다면 개발자는 이 서비스를 활용해 해당 텍스트를 소리 내어 읽어줄 수 있습니다.
또한 이 서비스는 사용자 대신 특정 동작을 수행하거나, 다른 앱 화면 위에 콘텐츠를 겹쳐 표시(오버레이)할 수도 있습니다. 이러한 기능들은 모두 다양한 장애를 가진 사용자들이 기기를 원활하게 사용하도록 돕기 위해 설계된 것입니다.
참고로 접근성 서비스는 '안드로이드 접근성 스위트(Android Accessibility Suite)'와는 다릅니다. 접근성 서비스는 앱 개발자가 자신의 앱을 개선하고자 사용하는 기능이고, 접근성 스위트는 장애인을 돕는 앱을 제공하기 위한 패키지입니다.
접근성 서비스는 어떻게 악용될 수 있는가?
안타깝게도 개발자에게 기기에 대한 더 많은 권한을 부여한다는 것은 항상 악용 가능성을 함께 의미합니다. 예컨대 사용자에게 텍스트를 읽어주는 기능과 동일한 기술로, 화면의 텍스트를 몰래 스캔해서 개발자에게 전송할 수도 있습니다.
사용자 동작을 대신 제어하는 기능과 다른 앱 위에 콘텐츠를 띄우는 오버레이 기능은 모두 '클릭재킹(clickjacking)' 공격의 핵심 요소입니다. 악성코드는 이 서비스를 이용해 스스로 버튼을 누를 수 있습니다. 대표적으로 자신에게 관리자 권한을 부여하도록 만드는 것이죠. 또한 화면 위에 가짜 콘텐츠를 띄워 사용자가 이를 클릭하도록 유도할 수도 있습니다.
접근성 서비스를 악용한 실제 사례
접근성 서비스를 악용한 악성코드의 위협을 이론적으로만 설명할 수도 있지만, 실제 사례를 통해 살펴보는 것이 훨씬 효과적입니다. 안드로이드 악성코드 역사에는 접근성 서비스를 악용해 이득을 취한 공격이 적지 않습니다. 대표적인 사례들을 알아보겠습니다.
Cloak and Dagger(클로크 앤 대거)
Cloak and Dagger는 이런 유형의 악성코드 중에서도 상당히 위협적인 사례였습니다. 접근성 서비스와 오버레이 드로잉 서비스를 결합해 사용자 휴대전화의 모든 정보를 엿볼 수 있었습니다.
Cloak and Dagger를 막기 어려웠던 핵심 이유는 공격 방식에 있었습니다. 이 악성코드는 정상적인 안드로이드 서비스만을 사용해 공격을 수행했기 때문에 백신 프로그램이나 탐지 시스템을 쉽게 우회할 수 있었습니다. 덕분에 개발자 입장에서도 구글 플레이 스토어의 보안 검사를 통과해 감염된 앱을 손쉽게 올릴 수 있었습니다.
Anubis(아누비스)
Anubis는 사용자의 금융 정보를 훔쳐 개발자에게 전송하는 뱅킹 트로이목마(banking Trojan)입니다. 뱅킹 트로이목마는 해커들이 은행 계좌에 침입할 때 즐겨 쓰는 수법 중 하나입니다.
Anubis는 접근성 서비스를 활용해 사용자가 입력하는 내용을 몰래 읽었습니다. 뱅킹 트로이목마는 보통 실제 은행 앱과 똑같이 생긴 가짜 오버레이를 띄워 사용자가 거기에 금융 정보를 입력하도록 속이는 방식을 사용합니다.
하지만 Anubis는 이 과정을 건너뛰고 키보드 입력 자체를 가로채는 방식을 택했습니다. 사용자가 아무리 조심해서 진짜 은행 앱에 직접 정보를 입력했더라도, Anubis는 여전히 그 정보를 빼낼 수 있었던 것입니다.
Ginp(진프)
조금 더 최근 사례를 살펴보겠습니다. Ginp는 Anubis에서 영감을 받은 안드로이드 트로이목마입니다. Anubis의 코드 일부를 포함하고 있지만, 원본 악성코드를 단순히 변형한 버전은 아니었습니다. 개발자는 처음부터 새로 제작한 뒤, 이후 특정 기능 구현을 위해 Anubis의 코드를 가져왔습니다.
Ginp는 Adobe Flash Player로 위장한 뒤 사용자에게 설치 여부를 묻습니다. 설치를 진행하면 접근성 서비스를 포함한 여러 권한을 요구합니다.
사용자가 가짜 Flash Player에 권한을 허용하면, Ginp는 접근성 서비스를 이용해 스스로 관리자 권한을 부여받습니다. 이 권한을 통해 자신을 휴대전화의 기본 전화 및 문자(SMS) 앱으로 설정할 수 있게 되며, 이후 문자 메시지를 수집하고, 자체적으로 메시지를 발송하고, 연락처 목록을 훔치고, 통화를 다른 번호로 돌리는 등의 행위가 가능해집니다.
설상가상으로 Ginp는 Anubis의 수법까지 차용해 금융 사기로 영역을 넓혔습니다. 접근성 서비스를 이용해 공식 은행 앱 화면 위에 가짜 로그인 페이지를 띄우고, 사용자의 로그인 정보와 신용카드 정보를 수집합니다.
구글은 사용자 보호를 위해 무엇을 하고 있는가?
접근성 서비스가 악성코드 개발자들의 손에 넘어가자 구글은 악용 방지에 나섰습니다. 2017년에는 개발자들에게 이메일을 보내, 장애인 지원 목적 외로 접근성 서비스를 사용하는 앱은 즉시 삭제하겠다고 경고했습니다.
그러나 이러한 조치로도 감염된 앱의 유통이 완전히 막히지는 않았습니다. 오히려 정식 안드로이드 서비스를 이용하는 특성상 접근성 남용 자체를 발견하기가 매우 어렵습니다.
서드파티 스토어의 상황은 더욱 심각합니다. 구글은 구글 플레이 스토어를 상시 스캔해 해킹 앱을 찾아내 삭제하지만, 서드파티 스토어에는 이런 검열 체계가 없습니다. 그 결과 서드파티 스토어의 앱들은 탐지되지 않은 채 접근성 서비스를 마음껏 악용할 수 있습니다.
접근성 서비스 악성코드를 피하는 방법
안드로이드에 앱을 설치할 때 때로는 앱이 요청하는 권한 목록이 표시됩니다. 메모 앱이 문자 메시지에 대한 전체 제어 권한을 요구한다든가 하는 명백한 경고 신호를 포착할 수 있습니다.
그러나 앱이 접근성 서비스 권한을 요청할 때는 크게 수상해 보이지 않습니다. 장애인을 위한 추가 기능이 있을 수도 있으니까요. 사용자들이 안심하고 '허용'을 누르기 쉬운 권한이기 때문에, 앱에 악의적인 의도가 숨어 있다면 큰 문제가 될 수 있습니다.
따라서 접근성 서비스 권한 요청에는 신중해야 합니다. 평점이 높고 널리 알려진 앱이 요청한다면 장애인 지원 목적이라고 판단해도 무방합니다. 하지만 리뷰가 거의 없는 비교적 최신 앱이 갑자기 이 권한을 요구한다면, 설치를 보류하고 경계하는 편이 좋습니다.
또한 가급적 공식 앱 스토어만 이용하세요. 접근성 공격은 발견하기 어렵지만, 구글은 적발되는 대로 해당 앱을 삭제합니다. 반면 서드파티 스토어는 악성 앱이 계속 유통되면서 더 많은 사용자를 감염시키더라도 방치할 수 있습니다.
권한 남용으로부터 스마트폰을 지키는 법
앱에 접근성(장애인 지원) 권한을 허용하는 것은 무해해 보이지만, 결과는 전혀 다를 수 있습니다. 악성 앱은 안드로이드 접근성 서비스를 이용해 사용자가 입력하는 내용을 감시하고, 가짜 화면을 띄워 사람들을 속이고, 심지어 자신에게 더 높은 권한을 부여할 수도 있습니다. 걱정된다면 내 안드로이드 폰이 해킹당했는지 확인하는 방법부터 점검해 보세요.
다른 접근성 기능에 관심이 있다면 게임에서 접근성이 왜 중요한지에 관한 글도 참고하시기 바랍니다.
악성코드의 권한 남용에 대해 더 알고 싶다면, 지금 바로 확인해야 할 스마트폰 앱 권한 목록을 살펴보세요.