포스팅 내용

악성코드 분석 리포트

Trojan.Android.Banker 악성코드 분석 보고서



안녕하세요? 이스트시큐리티 시큐리티대응센터(이하 ESRC)입니다.


최근 유럽에서 SMS를 통한 뱅킹 악성 앱 유포 사례가 발생하고 있습니다. 이 악성 앱들은 러시아인들을 대상으로 제작되었으나 수정을 거쳐 유럽에도 유포되기 시작했습니다. 유포 경로는 SMS를 이용 하고 있으며 메시지에 포함된 링크를 통해 피해자들에게 악성 apk 파일이 전달됩니다. 


피해자들이 다운받은 apk 파일은 쇼핑 앱 등의 친숙한 아이콘과 파일이름을 가지고 있어 별다른 의심없이 설치를 진행하게 됩니다. 이렇게 설치된 악성 앱들은 피해자의 신용 카드 정보 탈취를 목적으로 하고 있으며 피해자가 피해 사실을 인지하기 어려울 정도로 정교하게 제작되어 있습니다. 


이번 분석 보고서에서는 러시아 발 악성 앱인 “Trojan.Android.Banker”를 상세 분석하고자 합니다.



악성코드 상세 분석


Trojan.Android.Banker의 핵심 악성 행위는 피해자의 신용카드정보 탈취에 있습니다. 이를 위해 피해자의 스마트폰 사용을 감시하며 악성 앱이 타겟으로 하는 금융 앱이나 구글 플레이스토어등의 결제 화면 노출 시 악성 앱의 화면으로 대체합니다. 이를 인지하지 못한 피해자는 결제에 필요한 신용 카드 정보를 공격자에게 넘겨주게 되는 것입니다. 분석 악성 앱의 C2가 다운되어 실제 동작 화면을 첨부하지는 못하였습니다.


이번 분석 보고서의 분석 샘플은 aviasales라는 항공권과 호텔 예약 서비스를 제공하는 러시아 회사의 모바일앱으로 위장 했습니다. 항공권과 호텔 예약을 진행 시 필수로 카드 정보 제공과 결제를 거치게 되는데 이점을 노린 것입니다.


[그림 1] aviasales 모바일 웹 화면


Trojan.Android.Banker는 신용 카드 정보 탈취를 위해 librealtalk-jni.so 라이브러리와 Accessibility 기능을 활용합니다. librealtalk-jni.so 라이브러리의 코드는 악성 앱의 셋팅을 저장하거나 읽어 들이는 코드, 공격 대상이 되는 앱을 식별하는 코드 그리고 하드 코딩 된 C2의 URL을 전달하는 코드로 구성되어 있습니다. 그리고 악성 앱은 Accessibility(접근성) 기능을 활용하여 피해자의 스마트폰 사용을 감시합니다.


위 두가지 특징을 코드 분석을 통해 살펴보도록 하겠습니다.


1.1 라이브러리

librealtalk-jni.so 라이브러리는 다음과 같은 주요 기능들을 가지고 있습니다.


-하드 코딩 된 C2 주소를 알려줍니다.

다음 그림은 하드 코딩 된 C2주소를 반환하는 코드로 앱 실행 후 C2 주소를 가져와 접속하며 피해자에게 보여줍니다. 현재 접속 시 404에러로 페이지를 볼 수 없지만 정상적으로 동작할 경우 그림1에서 보이는 위장한 회사의 홈페이지를 수정하여 보여줄 것으로 추측됩니다.  C2의 명령은 응답 데이터에 포함되어 있습니다.

 

[그림 2] 하드 코딩 되어 있는 C2 주소


-하드 코딩 된 뱅킹 앱 리스트를 이용하여 공격 대상 뱅킹 앱 여부와 리다이렉션 할 수 있는 C2 주소를 알려줍니다.


다음 그림의 코드는 악성 앱 실행 시 초기에 한번 실행되어 앱의 저장 공간에 json 형태로 저장되며 필요할 때 마다 사용합니다. 리다이렉션 주소는 공격자의 C2 서버로 연결되며 해당 뱅킹 앱의 웹 페이지로 위장한 페이지를 보여 줄 것으로 추측됩니다.

 

[그림 3] 하드 코딩 되어 있는 뱅킹 앱 리스트를 가져오는 코드

 

[그림 4] 라이브러리의 뱅킹 앱 리스트 반환 코드


다음 그림은 위 그림 3의 코드가 가져온 뱅킹 앱 리스트의 일부입니다.

 

[그림 5] 하드 코딩 되어 있는 뱅킹 앱 리스트의 일부


뱅킹 앱 리스트는 이름으로 구분되며 하위 리스트에 앱의 패키지 명이 존재합니다. 이 패키지 명을 이용하여 현재 실행 앱이 뱅킹 앱인지 여부를 판단하며 뱅킹 앱 종류별로 리다이렉션 링크가 존재합니다.


-하드 코딩 된 백신 리스트를 이용하여 백신 앱 여부를 알려줍니다. 

Accessibility로 감시 중 현재 실행 앱이 백신인지 여부를 판별할 때 다음 그림의 코드를 이용합니다. 코드는 악성 앱이 보내주는 패키지 명을 하드 코딩 된 백신 리스트와 비교합니다.

 

[그림 6] 백신앱 리스트와 비교하는 라이브러리 코드

 

[그림 7] 하드 코딩 된 백신 앱 리스트


현재 실행 앱이 백신 리스트에 존재할 경우 악성 앱은 홈 화면이 나오는 코드를 실행 시킵니다. 즉 백신 앱 화면을 피해자가 볼 수 없도록 하여 악성 앱의 생존율을 높이려는 시도를 합니다.



1.2 Accessibility

악성 앱은 카드 정보 탈취를 위해 피해자의 스마트폰 사용을 감시하며 이를 위해 Accessibility(접근성) 기능을 활성화 시킵니다. Accessibility는 Android OS에서 제공하는 기능으로 스크린 리더(음성 안내, 텍스트 읽어주기), 실시간 자막, 청각 보조 기능 등을 제공하는 것으로 장애인 분들의 스마트폰 사용을 보조하는 기능입니다. 그러나 공격자는 Accessibility기능을 스마트폰에서 실행되는 앱이 무엇인지 알아내는 감시 기능으로 활용합니다.


이 기능은 피해자가 스마트폰 화면을 클릭하면 특정 이벤트를 발생 시키고 이를 악성 앱이 받아서 처리하게 됩니다. 이벤트 발생 시 어떤 앱에서 무엇을 클릭했는지, 화면상의 위치는 어디인지 등의 정보가 함께 전달 됩니다.  악성 앱은 이 정보를 이용하여 뱅킹 앱이나 결제 관련앱인지의 여부를 판단합니다. 뱅킹 앱이나 결제 관련 앱일 경우 결제 관련 화면을 공격자가 만든 화면으로 대체하게 되며 이를 통해 카드 정보를 탈취 하게 됩니다.


다음은 Accessibility 이벤트 발생 시 처리하는 코드입니다.

 

[그림 8] Accessibility 이벤트 처리 코드


코드내 상수 32는 WINDOWS_CHANGE_ACTIVE라는 이벤트 이며 윈도우 내의 텍스트나 타이틀 등이 변할 경우 발생합니다. 악성 앱은 위 이벤트 발생 시 현재 실행 앱이 공격 대상 앱인지 체크합니다. 


다음 그림은 Accessibility 이벤트 발생 시 이벤트를 발생 시킨 앱을 체크하는 코드입니다.

 

[그림 9] 현재 실행 앱 판단 코드


위 코드는 현재 실행 앱이 무엇인지 파악하기 위해 다양한 체크를 진행합니다.  체크 내용은 다음과 같습니다.


- 환경 설정 창인지 여부

스마트폰의 환경 설정 창이 열리는지 감시합니다.

 

[그림 10] 현재 실행 앱 환경 설정 창 여부 확인 코드

 

[그림 11] 홈 화면으로 전환하는 코드


환경 설정 창으로 판단 되면 홈 화면으로 전환 시키는 코드를 실행 시킨다. 강제적인 홈 화면 전환으로 피해자는 환경 설정을 통한 앱 제거가 어렵게 됩니다.


- 공격 대상 앱 여부

환경 설정 창이 아니라면 현재 실행 앱이 공격 대상 앱인지 검사합니다.

 

[그림 12] 현재 실행 앱이 뱅킹 앱인지 판단하는 코드


현재 실행 앱이 공격 대상 앱인지 여부를 판단하는 코드는 라이브러리에 존재 하며 라이브러리 내에 하드 코딩 된 공격 대상 앱 리스트와 비교하는 단순한 코드로 되어 있습니다.


 

[그림 13] 하드 코딩 되어 있는 결제 앱 리스트


그림 13을 보면 공격 대상은 결제 관련 기능을 가지는 앱들 이며 빈번하게 사용 되는 앱들 이라는 것을 알 수 있습니다. 즉 카드 정보를 입력할 확률이 매우 높은 앱들일 것입니다.

- 백신 앱 여부

백신 앱 실행 여부를 확인 한다. 라이브러리에 코드가 있으며 그림 6의 코드입니다. 공격 대상을 확인 코드와 같이 하드 코딩 된 리스트를 확인 하는 단순한 코드입니다. 백신 앱으로 판단되면 강제로 홈 화면을 호출 하는 코드를 실행합니다. 


위 체크 과정을 마치면 실행 되고 있는 뱅킹 앱을 찾아 리다이렉션 URL로 설정 된 웹 화면을 실행 하여 피해자의 카드 정보 입력을 유도합니다.


다음 그림을 통해 수집하는 카드 정보와 지원하는 카드 종류를 알 수 있습니다.

 

[그림 14] 지원하는 카드 종류와 수집 카드 정보의 종류


카드는 American Express, Master, Visa의 3가지 카드를 지원하며 수집 하는 카드 정보는 카드 번호, 유효기간, CVC 번호를 수집합니다.


다음 그림은 카드 정보 탈취를 위해 카드 번호가 유효한지 검사하는 코드입니다.

 

[그림 15] 카드 번호 유효성 체크 코드



결론


이번 분석 대상 악성 앱은 해외에서 이슈가 되는 악성 앱 이지만 국내에서도 충분히 사용 가능한 공격 기법이기에 주의가 필요합니다. 특히 모바일을 통한 결제는 그 편리함에 이끌려 증가하는 추세에 있습니다. 물론 국내에서는 카드 정보 만으로 결제가 이루어지지는 않기에 비교적 안전 하다고 할 수 있지만 민감한 개인 정보인 카드 정보를 탈취 당하는 것만으로도 그리 유쾌한 일은 아닐 것입니다.


악성 앱에 감염되지 않기 위해서는 무엇보다 예방이 중요합니다. 출처가 불명확한 URL과 파일은 실행하지 않아야 합니다. 또한, 주변 기기의 비밀번호를 자주 변경하고 백신 애플리케이션을 설치하여 항상 최신 업데이트 버전으로 유지해야 합니다.

 

현재 알약M에서는 해당 악성 앱을 Trojan.Android.Banker 탐지 명으로 진단하고 있습니다.

티스토리 방명록 작성
name password homepage