악성 금융 앱에는 국경이 없다

세계적으로 많은 스마트폰이 공급되고 하드웨어 성능이 발전하면서 스마트폰은 일상에 없어서는 안 될 중요한 기기가 되었다. 단말에 대한 의존도가 높아지면서 민감한 개인정보를 기기에 저장하게 되었고, 공격자들도 이러한 변화에 발맞춰 데이터를 탈취하려는 새로운 공격 방법을 고안하게 되었다.

 

이번 글에서는 사용자를 속여 ID, 비밀번호 및 추가 인증 내용을 탈취하는 뱅커 악성 앱 분석 내용을 공유한다.


국내 대형 포털 도메인 사칭 비율​​

본 문서에서 서술할 뱅커(Banker) 악성 앱은 ‘접근성’ 서비스를 악용한 키 로거(Key Logger) 혹은 SMS를 통해 2팩터(2 Factor) 인증에 필요한 정보를 탈취한다. 이를 통해 공격자는 피해자에게 직접적인 금전 피해를 입힐 수도 있다.

 

[그림 1] Teardroid 악성 앱 소개

 

해당 악성 앱은 공개되어 있는 Teardroid 오픈 소스를 사용했는데, 안드로이드에서 사용할 수 있는 모든 악성 기능이 ‘코틀린(Kotlin)’ 언어로 작성되어 있다. 그리고, 앱이 종료되더라도 설정 변경을 통해 악성 앱 동작이 지속할 수 있다.

 

악성 앱의 정보 탈취 방법​​​ ​

뱅킹 악성 앱의 목적은 사용자의 계정을 탈취하는 것이다. [그림 2] 중 좌측은 뱅커 악성 앱을 실행했을 때 접근성 서비스를 신청하는 화면이다.

 

[그림 2] 앱 실행 화면

 

접근성 서비스를 허가하고 나면 가운데 그림처럼 계정 정보를 입력하는 부분이 나온다. 하지만 계정을 입력하는 화면은 피싱 화면으로, 공격자가 BBVA 앱과 유사하게 제작해 놓은 화면이다. 우측 그림이 실제 BBVA 앱의 로그인 화면이다. 마찬가지로 계정을 해야 하지만, 피싱 페이지와 달리 등록되지 않은 계정 입력 시 다음 단계로 넘어가지 않는다.

 

[그림 3] 악성 앱 인증 정보 입력 요청

 

[그림 3]은 악성 앱에서 SMS를 통해 인증 정보를 요청하는 화면이다. 정상적인 URL로 요청을 보내는 것으로 보아 키 로거(Key Logger)를 활용하는 대신 SMS 인증 내용을 탈취하는 것으로 추측할 수 있다.

 

기능 및 동작 분석​ ​​

멀티 팩터 인증의 개념

멀티 팩터 인증은 로그인을 시도하려는 사용자의 신원을 확인하기 위해 ID, 비밀번호 외 사용자만이 알고 있는 고유 정보로 추가 인증하는 것을 말한다. 2017년 열린 블랙햇(Blackhat) 컨퍼런스에서 보안 업계 종사자들을 대상으로 실시한 조사에 따르면, 권한 탈취를 가장 힘들게 하는 것이 멀티 팩터 인증인 것으로 나타났다. 반대로 하면, 멀티 팩터 인증이 사용자의 보안을 강화할 수 있는 효과적인 방법이라 할 수 있다.

 

현재 우리나라에서도 2팩터 인증을 주로 하는데 사용자의 신원을 증명하기 위해 ID, 비밀번호 외 SMS, 보안카드, OTP 등을 통해 인증을 거친다.

 

앞서 소개한 BBVA는 스페인 최대 은행으로 앱 로그인 시 사용자에게 ID와 비밀번호를 요구하고 2팩터 인증을 거쳐 사용자의 신원을 확인한다. 공격자는 악성 앱의 로그인 화면 및 인증 정보 입력 화면을 정상 앱과 유사하게 구성했다. 다만, 정상 앱에서 거치는 몇 가지 입력 정보는 생략했다. 이는 공격자가 피해자의 로그인 계정과 패스워드, 그리고 OTP나 SMS를 통한 인증 정보만 노린다는 것을 뜻한다.

 

[그림 4] 2팩터 인증 순서

 

BBVA 은행 앱의 인증 과정은 [그림 4]와 같이 ID와 비밀번호를 입력하는 로그인 화면을 통해 사용자 계정을 확인하고, 해당 계정에 등록되어 있는 식별 정보를 통해 SMS로 전송된 번호를 입력하도록 한다. 2번의 인증 과정을 거쳐 앱의 로그인을 성공할 수 있게 되어 있다.

 

[그림 5] 공격 순서

 

악성 앱의 공격은 사용자의 인증 값을 탈취하기 위해 [그림 5]와 같이 수행된다. 먼저 사용자의 계정과 비밀번호를 훔치기 위한 피싱 화면을 화면에 비춰준다. 사용자가 계정을 입력하면 키 로거를 통해 입력 정보가 공격자 서버(C2)로 전송되고 2차 인증을 수행한다. 사용자는 SMS를 통해 2차 인증 정보를 전달받는데, SMS 리시버가 이를 탈취하여 C2 서버로 보내는 구조로 만들어져 있다.

 

세부 공격 절차​​ ​​​

앞서 설명한 악성 앱의 공격 절차를 좀 더 자세히 알아보도록 하자.

 

1. 로그인 계정 탈취

처음 앱이 실행되면 계정을 탈취하기 위한 피싱 화면이 작동한다. 해당 화면은 잘못된 계정을 입력해도 로그인이 되는 것처럼 구성되어 있으며, 접근성 서비스를 통해 EditText 객체에 값이 입력될 때마다 이를 감지하여 저장한다.

 

[그림 6] EditText 값 탈취

 

[그림 6]과 같이 0x10을 감지하도록 설정된 접근성 서비스에서는 EditText 객체가 값이 변할 때마다 해당 값을 가져오게 되어 있다. 글자가 입력될 때마다 감지되기 때문에 입력되는 값들을 하나의 배열로 저장하는 것을 알 수 있다.

 

2. SMS 탈취

[그림 7]은 매니페스트(Manifest)에 정의된 권한이다. 참고로, 매니패스트란 패키지에 포함된 구성요소를 열거한 파일을 뜻한다.

 

[그림 7] 사용 권한 목록

 

요청 목록을 보면 악성 앱에서 흔히 사용하는 INTERNET, SMS, ACCESSIBILITY, FOREGROUND_SERVICE 권한이 있는 것을 알 수 있다.

 

[그림 8] 식별 번호 할당

 

악성 앱에서는 감염된 기기에 대한 식별 번호를 할당한다. 이는 고유의 랜덤 번호로 이뤄져 있으며, ‘DeviceID_Store’라는 xml 파일에 저장된다. 할당된 번호가 존재한다면 그 번호를 그대로 가져오고 null이면 새로 랜덤 번호를 부여한다. 부여된 victimId는 C2 서버로 넘어가는데 android_version, device model에 대한 정보와 같이 전달된다.

 

해당 C2 서버 주소는 ‘http://80.85.153.49:4000’다.

 

[그림 9] SMS 데이터 탈취

 

[그림 9]에서는 BroadcastReceiver를 활용해 SMS 데이터를 탈취한다. 데이터를 탈취한 이후 이전 할당된 victimId와 메시지 송신자, 메시지 내용 취합 정보를 C2 서버로 전달한다. C2 서버는 이전 virctimId를 전달했던 주소와 같다.

 

3. 키 로거 기능

사용자 계정을 요구하는 금융 앱들은 사용자가 단말기 화면에서 인증에 필요한 정보를 입력하도록 한다. 따라서 뱅커 계열의 악성 앱들은 사용자가 입력하는 데이터를 탈취하기 위해 접근성 서비스를 활용한 키 로깅 기능을 사용하는 경우가 많다.

 

[그림 10] 접근성 서비스 설정

 

과정을 보면 먼저, 사용자가 입력하는 정보를 탈취하기 위해 접근성 서비스를 실행한다. 서비스가 동작하면 해당 서비스에 대한 설정이 진행되는데 eventType이 0x10으로 설정된다. 이를 통해 안드로이드 뷰에서 EditText 부분에 대한 변화를 감지한다. 앱에서 일반적으로 계정 정보를 입력하는 부분은 EditText를 사용하여 개발하는데, 이와 같은 정보를 탈취하기 위해 접근성 서비스를 설정하는 것이다.

 

[그림 11] 키 로그 정보 저장

 

이후, 접근성 서비스를 이용하여 EditText 객체의 변화를 감지한다. 해당 정보는 SQLite를 이용해 저장하는데 그림 11에서 그 과정이 나타나 있다. ‘keylog_table’이라는 테이블에 해당 값을 넣으며 칼럼명은 ‘logs’이다. 데이터베이스에 업데이트 되는 키 로그 정보는 접근성 서비스에서 해당 내용을 감지할 때마다 값이 업데이트가 된다.

 

[그림 12] 키 로그 정보 전달

 

SMS와 같이 저장된 키 로그 정보들은 C2 서버로 전달된다. 주소는 SMS와 전달 도메인은 동일하고 restapi 형식만 다르다. 접근성 서비스가 감지하는 EditText의 변화가 일어날 때마다 안드로이드 데이터베이스에 저장하고 동시에 C2 서버로 해당 정보를 읽어 전달한다.

 

뱅커 악성 앱 변천사​​​ ​​​​

악성 앱을 활용해 개인과 기업의 민감 정보를 탈취하는 방식은 이제 많은 공격자들이 활용하고 있다. 다음은 이번 뱅커 악성 앱을 분석하면서 확인한 몇 가지 특징들을 정리한 것이다.

 

1. 접근성 서비스의 사용

접근성 서비스를 이용한 탈취 기능은 뱅커 악성 앱의 큰 특징 중 하나다. 접근성 서비스는 원래 안드로이드 기기 이용을 어려워하는 사용자들을 위해 개발되었지만, 해당 기능들이 악성 앱에서 사용되고 있다. 본 문서에서 소개한 뱅커 악성 앱은 사용자의 금융 정보 탈취를 목적으로 하며, 안드로이드의 접근성 서비스를 이용한 키 로깅, SMS 탈취 기능을 보유하고 있다.

 

1차 인증을 위해 입력되는 사용자의 계정과 패스워드는 키 로깅 기능을 활용해 탈취하여 C2 서버로 보낸다. 그리고, 2차 인증을 위해 수신되는 SMS는 Recevier를 활용하여 탈취하므로 BBVA 앱에 로그인하는 사용자의 모든 인증 정보를 공격자가 가져갈 수 있게 된다.

 

접근성 서비스는 API 4 버전부터 서비스되어 초창기 안드로이드 기기에서도 사용할 수 있었다. 또한, 악성 동작을 위해 사용하는 메소드들도 같은 API 버전에서 제공된다. 하지만 과거의 뱅커 악성 앱은 키 로거 기능이 없이 SMS 내용을 탈취하거나, 관리자 권한을 얻어 악성 행위를 하는데 치중했다.

 

[그림 13] 과거 뱅커 악성 앱의 SMS 탈취 기능

 

다만, 2017년 중반 카스퍼스키(Kaspersky)에서 새로운 유형의 뱅커 악성 앱을 발표했는데 이 때 접근성 서비스를 사용한 키 로깅 기능이 등장했다. 2단계 이상의 인증을 사용하는 금융 서비스가 늘어나면서, 공격자들이 고안해낸 방법인 것으로 보인다.

 

그림 14] 접근성 서비스 이벤트 처리

 

[그림 14]는 당시 카스퍼스키에서 발표한 접근성 서비스 사용 뱅커의 이벤트 처리 코드다. 현재와 유사하게 발생하는 접근성 서비스 이벤트 별로 분기를 나눠 처리하고, 그에 맞는 악성 동작을 수행하도록 되어있다.

 

2. 소셜 엔지니어링 기법

악성 앱은 사용자의 단말기에 설치된다 하더라도 사용자가 이상한 것을 눈치채고 실행하지 않거나 권한을 허가하지 않으면 악성 행위를 할 수 없다. 따라서, 공격자들은 실행을 유도할 수 있도록 앱을 개발하고 실행이 되고 난 후 사용자를 속여 이를 유지하기 위해 다양한 방식을 활용해왔다

 

여기서 소개할 소셜 엔지니어링 기법은 ▲아이콘 실행 유도 및 숨김 ▲관리자 권한 요청 ▲ Foreground Service 유지 총 3가지다.

 

 

[그림 15] 뱅커 악성 앱 아이콘

 

과거의 악성 앱은 [그림 15]처럼 사람들이 흔히 사용하는 앱의 아이콘을 사용했다. 악성 앱이 동작하려면 일단 사용자가 클릭을 해야 하는데, 이를 유도하기 위함이다. 사용자는 아이콘 모양 때문에 착각할 수 있기 때문에 앱의 실행이 가능하다. 이러한 방식은 악성 앱이 설치 후 실행을 유도하기 위한 하나의 방법으로 쓰이고 있다. 또한, 실행한 이후 아이콘을 숨겨 사용자가 삭제하지 못하도록 하기도 한다.

 

또, 앱이 시작할 때 관리자 권한을 부여받으면, 사용자가 단말기에서 임의로 삭제하지 못한다. 이에, 악성 앱들은 시작 시 관리자 권한을 요청하여 악성 행위를 유지하려는 모습을 보인다.

 

다음은 Foreground Service 유지다. 안드로이드 9 이상 버전부터는 앱의 서비스를 유지하기 위해 Foreground Service 권한을 요청해야 한다. 그 버전까지는 Background Service를 요청해 사용할 수 있었지만, 9 버전 이상부터는 해당 서비스가 제한되기 때문이다.

 

[그림 16] Foreground Service 시작

공격자들은 Foreground Service를 유지하기 위해 상태 창에 사용자를 속일 수 있는 알림으로 전환한다. 본 문서에서 설명한 악성 앱의 경우 [그림 16]과 같이 정상적인 BBVA 은행 앱이 실행되는 것처럼 상태창이 나타나고 서비스가 유지되도록 한다.

 

3. 오픈소스 코드 사용

이탈리아 보안 기업 ‘클리피(Cleafy)’ 블로그에 따르면, 해당 악성 앱은 깃허브(github)에 공개되어 있는 Teardroid 코드를 따온 것으로 보인다. 실제로 뱅커 앱과 해당 코드는 많은 유사점을 가지고 있다.

 

[그림 17] 악성 앱에서의 autostart 설정

 

악성 앱에서는 제조사 검사 후, 중국제 단말기에 따른 설정을 각각 달리하여 부팅 후 자동으로 실행시킬 수 있도록 설정 가능한 액티비티를 작동시킨다. 이와 유사한 코드가 Teardroid 소스에서도 발견됐다.

 

[그림 18] Teardroid 코드 일부

 

[그림 18]은 오픈 소스로 공개되어 있는 Teardroid 코드의 일부이다. 안드로이드 단말 부팅 후 자동 실행을 위한 코드인데 두 앱의 자동 실행 로직이 완벽히 일치한다. 몇 가지의 다른 점이 존재하지만 선언되어 있는 클래스 명, 내부 로직 등에서 유사한 점들이 많이 보이는 것으로 보아 악성 앱을 제작할 때 공개되어 있는 Teardroid의 코드를 일부 사용한 것으로 보여진다.

 

결론

안드로이드의 기능이 다양해지면서, 사용자의 데이터를 탈취하기 위한 공격 방식도 변화하고 있다. 2017년 중반, 접근성 서비스를 이용한 악성 앱이 등장했고 현재 오픈소스에서도 기본적인 안드로이드 기능을 활용하여 악성 동작을 수행할 수 있는 코드들이 공개되고 있다. 이를 볼 때, 본 보고서에서 분석한 악성 앱이 스페인 은행을 노렸듯, 오픈소스를 사용하여 우리나라의 결제 시스템을 노리는 악성 앱 역시 등장할 가능성이 있다.

 

 

출처 : AhnLab

02-553-2331
견적 요청
카카오톡 문의