[Tech Report] 앱과 악성코드를 선별하는 몇 가지 방안
<연재 목차>
1. 앱보다 많은 모바일 악성코드의 ‘위협’(2012년 3월호)
2. 앱과 악성코드를 선별하는 몇 가지 방안(이번 호)
|
최근 안드로이드 운영체제가 탑재된 최신형 스마트폰을 구입한 K씨. 그는 스마트폰을 받자마자 평소 취미로 즐기는 기타연주 관련 앱을 검색했다. 구글 안드로이드 마켓에서 ‘Guitar’를 키워드로 검색해 무료 앱을 바로 다운로드했다. K씨는 실제 기타 못지않은 소리에 감탄하며 온종일 스마트폰을 붙잡고 있었다. 그런데 갑자기 K씨의 스마트폰이 루팅(rooting)되고, 스마트폰 기기 정보와 개인정보가 외부로 유출되었다. 그의 스마트폰이 악성코드에 감염된 것이다. K씨는 구글 안드로이드 마켓에서 앱을 선택했고, 설치된 앱 또한 정상적으로 동작하는데, 대체 왜 K씨의 스마트폰은 악성코드에 감염된 것일까? 원인은 K씨가 다운로드한 앱에 있다. 악성코드 제작자들은 변별하기 힘들 만큼 감쪽같이 위장한 악성 앱을 마켓에 등록해 사용자들을 유혹한다.
|
안드로이드 악성코드는 어떻게 만들어지는가?
악성코드 제작자는 리패키징(repackaging) 기법을 이용하여 인기 있는 앱에 악성코드를 삽입하고 앱의 이름을 변경한 후 다시 안드로이드 마켓에 등록한다.

[그림 1] 정상/악성 앱
[그림 1]의 오른쪽 그림이 악성 앱이다. 겉모습만 봐서는 왼쪽의 정상 앱과 구분하기 쉽지 않다. 저작권(Copyright)과 버튼이 있다는 점만 다를 뿐이다. 또한, 악성 앱을 실행하더라도 정상 앱과 다름없이 앱의 기능이 잘 실행되기 때문에 유심히 살펴보지 않는다면 이 둘을 구분할 수 없다.
이와 같이 리패키징 기법을 이용한 안드로이드 악성코드는 2011년 처음 발견된 이후 계속 증가하고 있으며, 구글 안드로이드 마켓, 서드파티 마켓, 블랙 마켓, P2P 등의 다양한 경로를 통해 배포되고 있다.
1) 리패키징이란?
대부분의 프로그래밍 언어들은 컴파일(compile) 과정을 거쳐 사람이 알 수 있는 소스 코드(source code)에서 기계가 인식할 수 있는 바이너리(binary) 파일로 변경된다. 안드로이드에서는 여기에 프로그램을 묶어주는 패키징(packaging)과 코드 사인(code sign) 작업이 추가된다. 그림으로 살펴보면 [그림 2]와 같다.

[그림 2] 안드로이드 앱 제작 과정
리패키징이란 앱의 제작 과정을 거꾸로 하여 앱의 최초 형태인 소스 코드로 변환한 후 소스 코드를 수정하거나 다른 코드를 삽입하고 앱을 다시 제작하는 일련의 과정을 말한다.

[그림 3] 안드로이드 앱 리패키징 과정
[그림 3]과 같이 APK 파일의 압축을 해제하여 나온 바이너리 형태의 파일을 디컴파일(decompile)하면 소스 코드로 변환된다. 결과물로 나온 소스 코드를 해커나 개발자가 수정하여 다시 컴파일과 패키징 작업을 거치면 APK 파일이 생성된다. 마지막으로 개발자 인증서로 코드 사인 과정만 거치면 실행 가능한 앱이 완성되는데, 개발자 인증서는 압축 파일 형식으로 되어 있는 APK 파일을 압축 해제하는 언패킹(unpacking) 과정에서 추출할 수 없으므로 새로운 인증서로 코드 사인을 해야만 한다.

[그림 4] 리패키징 예제 앱
[그림 4]는 리패키징 기법을 활용하여, 버튼을 눌렀을 때 출력되는 메시지를 ‘반갑습니다’에서 ‘안녕하세요’로 변경한 예이다. 자바 언어에 대해 어느 정도 이해하고 있고, 관련된 몇 가지 도구들만 다룰 수 있으면 누구나 손쉽게 앱을 수정할 수 있다. 리패키징 기법은 악성코드 제작뿐만 아니라 안드로이드 앱의 한글화, 크래킹(cracking), 기능 추가•수정 등의 다양한 용도로 활용된다.
리패키징에서 가장 핵심이 되는 부분은 디컴파일 작업이다. 이것은 높은 수준의 기술력을 필요로 하는 어려운 작업으로 디컴파일하더라도 본래의 소스 코드로 온전히 회귀하기는 어렵다. 이 때문에 대부분의 언어에는 디컴파일이 요구되는 리패키징 기법을 활용할 수 없다.
하지만 안드로이드에서 주로 사용되는 개발 언어인 자바(Java)는 JAD, apktool 등 공개된 다양한 도구들을 활용하여 바이너리 파일에서 소스 코드로 쉽게 디컴파일할 수 있다. 결과물로 나온 소스 코드 또한 본래의 것과 비슷하다. 이것이 안드로이드에서 리패키징 기법을 활용한 악성코드가 유행하는 이유 중 하나이다.
2) 바이러스 vs. 리패키징
리패키징은 정상 프로그램에 악의적인 코드를 삽입한다는 점에서 바이러스(virus)나 패치드(patched) 악성코드와 유사하다. 그러나 구현 방법이나 내부 동작에는 큰 차이가 있다. PC에서 발견되는 일반적인 바이러스는, 기계어 형태의 악의적인 코드를 정상 파일의 어느 한 부분에 삽입하고 바이러스 코드가 호출되도록 프로그램 코드의 시작 주소를 수정하는 형태로 동작한다. 따라서 악성코드 제작자는 실행 파일의 구조와 기계어에 대해 높은 수준의 지식을 갖추어야 한다.
반면 안드로이드는 PC에서와 같이 바이너리 형태의 파일을 직접 수정하기 어렵다. 안드로이드 앱은 일반 PC 파일과 달리 단일 형태가 아닌 패키지 형태로 존재하는데, 모든 패키지에는 개발자의 코드 사인이 있어야만 한다. 패키지 내부의 파일 일부를 수정하면 코드 사인이 유효하지 않아 다시는 앱을 설치할 수 없다. 물론, 기존 바이러스 형태가 안드로이드에서 완전히 불가능한 것은 아니지만, 악성코드 제작자들이 리패키징이라는 손쉬운 방법을 두고 굳이 어려운 길을 택하지는 않을 것 같다.
3) 앱이 리패키징되지 않도록 하려면?
개발자의 입장에서 앱이 리패키징되는 것을 막을 방법은 없을까? 안타깝게도 앱 스스로 리패키징되는 것을 완벽히 방어할 수는 없다. 적어도 현재까지는 해결책이 없다. 다만, 다음과 같은 방법으로 리패키징을 어렵게 하거나 지연할 수 있다.
가. 코드 난독화
ProGuard와 같은 도구를 활용하여 코드를 최대한 난독화한다. 이렇게 하면 디컴파일을 하더라도 클래스나 함수 이름 등이 의미 없는 문자로 변경되어 해커가 앱을 파악하기가 어렵다. ProGuard란 코드 최적화, 난독화 등에 사용되는 도구로 자세한 내용은 다음 웹 페이지를 참고하기 바란다. http://developer.android.com/guide/developing/tools/proguard.html
나. 안드로이드 NDK를 이용한 개발
앞서 설명했듯이 자바로 개발된 프로그램은 디컴파일이 쉽다. 그러므로 보안이 필요한 중요 코드는 NDK(Native Development Kit)를 활용하여 C언어로 개발하도록 한다.
4) 리패키징된 앱으로 말미암은 악성코드 감염 피해를 줄이려면?
일반 사용자들은 리패키징된 악성 앱을 어떻게 피할 수 있을까?
가. 서드파티 마켓, 블랙 마켓 이용 자제
악성코드 제작자들은 앱을 등록할 때 검사가 허술한 마켓을 이용하는 경우가 많다. 그러므로 신뢰할 수 있는 마켓을 통해서만 앱을 다운로드한다.
나. 앱 정보 확인
악성코드 제작자들이 앱을 리패키징하여 마켓에 등록할 때 다른 것은 다 똑같이 위장하더라도 앱 이름과 제작자 정보는 정상 앱과 동일하게 할 수 없다. 마켓에서 유명한 앱을 다운로드하려고 할 때 이름은 유사하지만 조금 차이가 있거나, 제작자 정보가 알고 있는 것과 다르다면 리패키징을 의심해야 한다.
다. 앱 설치할 때 권한 요청 확인
안드로이드에서 앱이 설치될 때는 반드시 해당 앱에 필요한 권한 정보를 사용자에게 확인하게끔 되어 있다. 만약 설치하려는 앱이 과도한 권한을 요청한다면, 설치를 중단하고 앱을 확인해볼 필요가 있다.
라. 보안 제품 설치
많은 안드로이드 보안 제품이 출시돼 있다. 이 중 하나를 설치하여 주기적으로 보안 검사를 실시한다.
스마트폰 악성코드의 위험성: ‘프리미엄 SMS’ 악성코드
안드로이드 악성코드를 이용하여 금전적 이득을 취하는 방법 중에 가장 많이 쓰이는 Android-Trojan/SmsSend, 통칭 ‘프리미엄 SMS’ 악성코드에 대해서 알아보자.

[그림 5] 프리미엄 SMS 악성코드 설치 화면
Android-Trojan/SmsSend로 구분되는 악성코드군에는 매우 다양한 변형들이 있다. [그림 5]는 그 중에서 비교적 간단한 Android-Trojan/SmsSend.KH의 설치 화면이다. 이 악성 앱은 설치 시에 인터넷 사용, 문자 열람, 요금이 부과되는 문자 발송 등의 권한을 요구한다. 해당 앱이 문자를 전송할 필요가 있는지 생각해보아야 한다.

[그림 6] 프리미엄 SMS 악성코드 실행 화면
앱을 실행하면 [그림 6]의 설치 안내 화면이 나온다. 프로그램을 설치해주는 앱으로 위장하고 있지만 사실은 아래와 같은 악의적 기능을 수행한다.

[그림 7] Android-Trojan/SmsSend.KH의 SMS 관련 코드
앱을 살펴보면 [그림 7]과 같은 형태의 코드가 계속 나열된 것을 볼 수 있다. 이 코드는 앱이 실행되는 스마트폰의 MCC(Mobile Country Code)에 따라 SMS를 전송할 번호를 저장한다.

[그림 8] SMS 발송 코드
국가에 맞는 번호를 저장한 후에는 [그림 8]의 코드와 같이 해당 번호로 SMS를 발송한다. [그림 9]와 같이 다양한 국가들의 코드가 저장된 것을 알 수 있다.

[그림 9] SMS 발송에 사용되는 국가 코드
여기서 한 가지 의문이 생긴다. 단순히 특정 번호로 SMS를 전송하는 것을 왜 악의적인 행위로 규정하는 것일까? 사용자 동의 없이 이루어졌다는 점에서 잘못된 행위로 볼 수 있지만, SMS를 대량으로 전송하지 않는 이상 피해자는 100원 미만의 아주 적은 피해를 볼 뿐이다. 금전적 이득을 취하는 것이 악성코드 제작자의 목적일 텐데, 제작자는 SMS 전송으로 어떻게 돈을 버는 것일까?
유럽이나 러시아에는 [그림 10]과 같은 휴대전화 결제 서비스를 제공하는 업체가 많다. 해당 사이트를 살펴보면 SMS를 보내는 것만으로 제작자가 어떻게 돈을 버는지 알 수 있다.

[그림 10] 영국의 휴대전화 결제 서비스 업체
이들의 휴대전화 결제 서비스는 결제한 비용이 다음 달 휴대전화 요금으로 청구된다는 점은 우리나라와 같지만, 그 방식은 약간 다르다. 우리나라에서는 결제를 하려면 SMS로 받은 인증번호를 사용자가 입력해야 하지만, 일부 국가에서는 사업자에게 제공된 특정 번호(shortcode number)로 사용자가 SMS를 보내기만 하면 바로 결제가 이루어진다. 이러한 방식으로 결제를 받는 사업자들은 일반적으로 다음과 같은 서비스를 제공한다.
- 고객 지원, 전화번호 안내
- 뉴스, 교통, 스포츠, 운세, 성인 콘텐츠
- 벨소리, 동영상, 사진, 게임 다운로드
- 휴대전화를 이용한 투표
- 기부금
악성코드 제작자들은 이를 이용해 해당 업체에 서비스를 등록하여 과금할 수 있는 번호를 받고, 이 번호로 결제 SMS를 전송하는 악성코드를 유포하여 손쉽게 돈을 벌 수 있다.

[그림 11] 프리미엄 번호 7781에 대한 안내
[그림 12]는 러시아의 한 사이트에서 프리미엄 번호 7781에 대한 안내를 조회한 화면이다. SMS 한 건당 203루블의 금액이 결제되며 그 중 일부를 특정 사업자에게 전달한다고 설명되어 있다.

[그림 12] 이동통신사별 SMS 과금 명세
또한 통신사별 가격이 안내되어 있다. 환율이 1루블당 37원일 때 한화로 7천 원 정도의 금액이 SMS 발송만으로 부과되는 것이다.
악성코드 제작자들은 휴대전화 결제 서비스에 가입하여 SMS 수신으로 과금되는 번호를 받는다. 그리고 해당 번호로 SMS를 발송하는 안드로이드 앱을 제작 및 배포하여 불법적으로 금전적 이득을 취한다. 또한, 악성코드를 널리 퍼뜨리기 위해 안티바이러스로 진단되지 않는 다양한 방법을 구사한다. 이를 간단하게 정리하면 [그림 13]과 같다.

[그림 13] 프리미엄 SMS 악성코드의 수익 구조
그렇다면 우리나라는 어떨까? 오디션 프로그램의 건당 100원의 유료문자 투표나 라디오 프로그램의 건당 50원의 문자 응모가 있다는 것을 생각해보면 우리나라도 결코 안전하지만은 않을 것이다. 안랩 시큐리티대응센터(ASEC)에서 국내 상황을 조사해본 결과, 유럽처럼 간단하지는 않지만 SMS 수신으로 요금이 부과되는 번호를 발급받을 수 있었다. 이를 MO(Message Oriented) 서비스라고 한다. [그림 14]는 MO 서비스를 제공하는 업체 중 하나이다.

[그림 14] 국내 MO 서비스 제공 업체
해당 사이트에서 결제를 통해 건당 100원의 정보 이용료가 발생하는 SMS 수신 번호를 발급받을 수 있으며, 이 번호로 SMS가 1만 건 이상 수신되면 수익금의 30%를 개인이 가져갈 수 있다. 국내에서도 사용자 몰래 SMS 발송으로 피해를 주는 악성코드가 등장할 가능성은 충분한 것이다. 안드로이드 마켓에는 누구나 쉽게 자신의 앱을 등록할 수 있으므로 악성코드에 의한 피해를 미리 방지하려면 마켓에서 앱을 설치할 때 불필요한 권한을 요구하는지 주의 깊게 살펴보아야 한다.
스마트폰 악성코드의 유포 방식
[그림 15]는 안랩의 V3 Mobile for Android에 진단 추가된 악성코드의 숫자를 월별로 정리한 그래프다.

[그림 15] 안랩 V3 Mobile for Android에 진단 추가된 모바일 악성코드 월별 수치
2011년 들어 그 숫자가 기하급수적으로 증가했으며, 이는 스마트폰이 그만큼 악성코드에 노출될 가능성이 커졌음을 의미한다. 최근의 사례를 중심으로 악성코드의 감염 경로와 예방법을 알아보자.
1) 안드로이드 마켓을 통한 설치
안드로이드 운영체제를 사용하는 스마트폰은 기본적으로 구글에서 운영하는 안드로이드 마켓을 통해 앱을 설치한다. 사용자들은 대부분 안드로이드 마켓에서 다운로드한 앱은 안전하다고 믿고 있다. 하지만 실상은 그렇지 않다.
[그림 16]은 실제 안드로이드 마켓에 등록된 테스트 목적의 앱으로 누구나 다운로드 및 설치할 수 있다. 이처럼 안드로이드 마켓은 개발자가 앱을 등록하는 순간 누구든 그 앱을 이용할 수 있다. 만약 악성코드 제작자가 악성 앱을 등록한다면 어떻게 될 것인가?

[그림 16] 안드로이드 마켓에 등록된 테스트 용도의 앱
실제 안드로이드 공식 마켓에 등록된 악성코드로 인해 다수의 사용자가 피해를 보고 있다. 이러한 문제가 지속적으로 발생하자 최근 구글은 악성코드를 검사하는 시스템인 ‘바운서(Bouncer)’를 운영하기 시작했다. 하지만 이것이 악성코드를 100% 차단할 수 있을지는 미지수다.

[그림 17] 구글 안드로이드 마켓에서 악성코드 다운로드
구글은 악성코드로 확인된 앱은 안드로이드 마켓에서 즉시 삭제한다. 따라서 최근에 등록된 앱은 다운로드 전에 다른 사용자들의 평가를 꼼꼼히 읽어본 후 문제가 없다고 판단되면 설치하는 것이 바람직하다. 또한, 안드로이드 앱은 [그림 18]과 같이 설치 전에 해당 앱이 사용할 시스템이나 자원에 대한 권한을 보여준다.

[그림 18] 앱 설치 전 권한 확인 창
사용하려는 앱에 해당 권한이 필요한지를 반드시 확인하고 지나치게 많은 권한을 요구하면 설치하지 않는 것이 좋다. 예를 들어, 문자나 전화 송•수신 앱이 아닌 단순한 게임 앱은 [그림 18]과 같이 '요금이 부과되는 서비스'를 사용할 이유가 없다.
2) 서드파티 안드로이드 마켓에서 다운로드 & 설치
안드로이드 운영체제를 사용하는 스마트폰은 구글이 운영하는 공식 안드로이드 마켓 이외에 제3자가 만든 앱 마켓의 사용을 허용하고 있다. 즉, 누구나 안드로이드 앱을 제공하는 마켓을 운영할 수 있다.

[그림 19] 서드파티 안드로이드 마켓
이러한 서드파티 안드로이드 마켓은 사용자가 비교적 적고 비공식적으로 운영되는 곳이 많아 앱의 악성 여부를 확인하는 데 시간이 오래 걸린다. 또한, 악의적인 목적으로 만들어진 서드파티 안드로이드 마켓도 있으므로 구글이 운영하는 안드로이드 마켓에 비해 악성코드를 설치하게 될 가능성이 크다.
따라서 서드파티 안드로이드 마켓에서 앱을 설치하기 전에 해당 앱이 구글이 운영하는 공식 마켓에 있는지 확인한 후, 될 수 있으면 구글이 운영하는 안드로이드 마켓을 이용하는 것이 좋다. 또한 서드파티 안드로이드 마켓 이용을 위한 전용 앱을 설치해야 한다면, 운영자가 신뢰할 만한지 확인하는 것이 바람직하다. 국내에서는 휴대전화 통신 서비스 제공사별로 안드로이드 마켓이 따로 운영된다. 통신사가 운영하는 안드로이드 마켓은 앱을 등록하기 전에 사용자에게 악의적인 영향을 줄 수 있는지를 검사하므로 비교적 신뢰할 만하다.
3) 인터넷 검색 최적화 및 사회공학적 기법을 이용한 배포
안드로이드 운영체제는 [그림 20]과 같이 안드로이드 마켓을 통하지 않고도 앱을 설치할 수 있다.
[그림 20] 시판되지 않은 응용 프로그램 설치 허용 옵션
[그림 20]의 옵션을 사용하면 안드로이드용으로 제작된 앱을 사용자가 마음대로 다운로드하여 설치하거나 내•외장 메모리를 이용하여 설치할 수 있다. 이러한 기능을 악용하여 악성코드를 설치하도록 유도한 사례가 발견되었다. 웹 브라우저를 통해 '악성코드에 감염되어 시스템이 보안상 위험하다'는 허위 진단 결과를 보여주어 사용자가 가짜 백신을 설치하도록 유도한다. 이때 설치되는 앱은 보안 제품이 아닌 프리미엄 SMS를 발송하여 과금을 발생시키는 악성코드다.

[그림 21] 가짜 백신으로 허위 진단 결과를 보여주어 악성코드 설치 유도
성인 사이트를 개설해 놓고 해당 사이트에 접속한 사용자에게 악성코드 설치를 유도하는 사례도 발견되었다. [그림 22]와 같이 스마트폰으로 해당 성인 사이트에 접속하면 특정 콘텐츠를 보기 위해서는 앱을 설치해야 한다고 유도한다. 하지만 실제 설치되는 앱은 스마트폰의 중요 정보와 사용자 계정 관련 정보, 위치 정보를 외부로 유출하는 악성코드이다.

[그림 22] 성인 사이트 접속 사용자로 하여금 악성코드 설치 유도
이렇듯 누구나 호기심을 가질 만한 주제로 스마트폰 사용자를 유인한 후 악성코드의 설치를 유도하는 사회공학적 기법은 앞으로도 더욱더 정교한 형태로 사용자들을 유혹할 것이다. 따라서 사용자들은 추가로 앱을 설치하라고 유도하는 경우에는 한 번쯤 의심해 보고, 되도록이면 설치하지 않는 것이 보안상 바람직하다.

[그림 23] 사회공학적 기법을 이용한 악성코드 설치 유도
마켓을 잘 쓰는 법
마켓은 운영체제에 따라 앱스토어(애플), 안드로이드 마켓(안드로이드), 오비스토어(심비안), 앱월드(블랙베리), 바다(삼성) 등이 있다. 그중 사용자가 가장 많은 안드로이드 마켓의 특징을 알아보고, 마켓을 통해 앱을 설치하는 것이 왜 위험할 수 있는지 알아본다. 이를 기반으로 마켓의 위험성을 이해하고 안전하게 스마트폰을 이용하는 방법을 제시한다.
1) 안드로이드 마켓의 특징
안드로이드는 스마트폰 같은 휴대용 장치를 위한 미들웨어, 사용자 인터페이스, 표준 응용 프로그램을 포함하는 모바일 운영체제이다. 안드로이드는 애플의 앱스토어 운영 정책과는 달리 개방적인 정책을 시행하고 있다.
가. 사전 심의 없는 앱 등록
안드로이드 운영체제는 컴파일된 바이트 코드를 구동할 수 있는 런타임 라이브러리를 제공한다. 또한 개발자가 소프트웨어 개발 키트(SDK)를 별도의 등록 과정 없이 무료로 받을 수 있다. 이 때문에 제작된 프로그램을 안드로이드 마켓에 등록하면 별다른 심의 과정 없이 사용자에게 배포되는데, 이 점이 애플에서 운영하는 앱스토어와 다른 점이다.

[표 1] 앱스토어와 안드로이드 마켓의 차이점
나. 서드파티 마켓의 허용
일반적으로 말하는 안드로이드 마켓은 구글에서 운영하는 서비스를 의미한다. 하지만 안드로이드 운영체제는 통신사나 기기 제조사 등에서 운영하는 서드파티 마켓을 허용한다. 안드로이드 스마트폰을 구매했을 때 전화기 제조사의 마켓 프로그램과 가입된 통신사의 마켓 프로그램이 설치되어 있는 것은 이러한 안드로이드 진영의 정책 때문이다.

[그림 24] 안드로이드 마켓
네덜란드의 앱 조사기업 디스티모(DISTIMO)의 조사에 따르면 2011년 12월에만 40만 개가 넘는 앱이 안드로이드 마켓에 등록되었다.

[그림 25] 안드로이드 마켓에 등록된 앱의 수/앱스토어와 안드로이드 마켓의 앱 증가 추이
애플의 앱스토어와 비교했을 때, 등록된 앱 수가 20만 개를 돌파하는 기간은 앱스토어가 9개월 가량 빨랐지만, 이후로는 안드로이드 마켓이 빠른 증가 속도를 보이고 있다.
다. 개방성
안드로이드 운영체제는 개발자들에게 안드로이드 소스를 개방하는 오픈 소스 정책을 취하고 있다. 개발자는 개발 키트를 자유롭게 다운로드할 수 있고 개발한 앱을 자유롭게 마켓에 등록할 수도 있다.
안드로이드 공식 마켓과 서드파티 마켓, 웹 등 다양한 배포 경로를 제공하는 정책도 빠른 속도로 앱이 증가하는 이유 중 하나로 볼 수 있다.
자바로 개발되는 앱의 특성상 리버스 엔지니어링이 쉬운 편에 속하고, 이렇게 리버싱된 앱에 악성코드나 광고를 집어넣어 여러 마켓에 배포하면 배포자에게 수익이 돌아갈 수 있다는 점도 앱이 빠르게 증가하는 데에 일조하고 있다.
이러한 개방성이 안드로이드 생태계에 긍정적 효과만 주는 것은 아니다. 사전 심의 절차가 없기 때문에 마켓에는 사용자에게 불필요한 프로그램도 많이 등록되어 있다.
[그림 26]은 'Hello world'라는 키워드로 마켓에서 검색하였을 때의 결과이다. 'Hello world'는 C 언어를 개발한 Dennis Richie와 Kernighan이 쓴 책
이런 테스트 프로그램과 같이 사용자들에게 불필요한 프로그램이나 악의적인 영향을 미칠 수 있는 악성 앱도 안드로이드 마켓에 등록되어 있다. 현재까지 마켓에서 발견된 안드로이드 기반 악성코드는 단말기 정보 등 개인정보를 유출하거나 통화 및 SMS 발송을 통해 무단 과금하는 형태가 대부분이다. 이 중 일부는 ASEC 블로그를 통해서도 언급된 바 있다. 1. 안드로이드 마켓에서 유포된, 사용자폰을 강제 루팅시키는 악성 애플리케이션 주의 2. 구글 안드로이드 마켓, 또다시 악성코드 발견 2) 안전한 스마트폰 이용 가. 바운서, 새로운 보안 도구 나. 안드로이드의 보안 기능 다. 루팅 금지 루팅은 관리자 권한을 획득하는 행동을 의미한다. 관리자 권한을 얻으면 스마트폰에 기본적으로 설치된 앱을 제거하는 등 사용자 임의대로 시스템 설정을 변경할 수 있다. 안드로이드에 설치된 앱은 모두 고유한 리눅스 사용자 ID가 부여되어 다른 앱에서 생성한 데이터에 접근하는 것이 불가능하다. 하지만 루팅을 하면 이용자뿐만 아니라 앱 또한 시스템의 다른 데이터에 접근할 수 있다. 이러한 권한이 악용되면 사용자 데이터가 유출되는 등 보안상의 문제가 생길 수 있다. 라. 앱 설치 시 권한 확인 안드로이드 마켓은 앱을 설치할 때 요구되는 권한을 보여주는데, 사용자는 이를 확인한 후 앱을 설치할지를 결정해야 한다. 하지만 대부분의 사용자는 앱을 설치할 때 권한을 확인하지 않고 있다. 예를 들어 게임 앱은 진동 울림 권한을 이용할 수 있지만, 메시지 읽기나 주소록 접근 권한 등은 불필요하다. 스마트폰 사용자는 설치하고자 하는 앱의 종류에 따라 불필요한 권한이 없는지 주의를 기울여야 한다. 주의가 필요한 권한의 종류는 다음과 같다. - 전화 걸기 대부분의 무료 안드로이드 앱은 수익성 광고를 제공하기 때문에 인터넷 접근 권한을 요구한다. 따라서 무료 앱을 설치할 때는 스마트폰에 저장된 민감한 데이터에 대한 접근 요구가 없는지 다시 한 번 확인해야 한다. 마. 신뢰할 수 있는 마켓 이용 인터넷 검색을 통해 블랙 마켓에서 무료 앱을 다운로드하기보다는 구글이 운영하는 안드로이드 마켓이나 신뢰할 수 있는 서드파티 마켓을 이용해야 한다. 안드로이드 마켓을 이용하여 앱을 설치할 때도 혹시 모를 위험에 대비하기 위해 검색된 앱의 제작자 평점과 사용자 평점, 다운로드 수 등을 확인해야 한다. 설치되는 앱이 요청하는 권한을 잘 확인한다면 편리하고 안전하게 스마트폰을 이용할 수 있다. 현재 모바일 악성코드는 과거 PC 악성코드가 걸어왔던 길을 답습하고 있다. 과거에는 단순히 휴대전화 정보나 개인정보 등을 유출했지만, 최근에는 공격자의 명령을 받아 사용자 스마트폰의 보안 기능을 강제로 해제하여 악의적인 행위를 하는 악성코드가 늘고 있다. 또한 프리미엄 SMS 등을 이용하여 금전적 갈취를 하고 있으며, 사회공학적 기법을 사용하여 더 많은 사용자가 악성코드를 설치하도록 유도하고 있다. 이렇듯 악성코드는 날이 갈수록 사용자에게 직접적인 피해를 주도록 진화해 나갈 것이며, 그 배포 방법 또한 더욱 지능화될 것이다. 따라서 사용자들은 '나의 스마트폰도 악성코드에 감염될 수 있다'는 것을 염두에 두고 새로운 앱을 설치할 때 정말 필요한 시스템 권한과 자원을 사용하는지 확인해야 하며, 단말기 제조 회사에서 제공하는 업데이트를 충실히 수행해야 한다. 그리고 새로운 앱을 설치했다면 사용하기 전에 보안 제품으로 검사하고 이상이 없는 것을 확인한 후 사용해야 한다.@
[그림 26] Hello world로 검색된 앱
(http://asec.ahnlab.com/259)
(http://ahnlabasec.tistory.com/751)
지난 2012년 2월 3일 구글은 코드네임 ‘바운서(bouncer)’를 발표했다. 바운서는 안드로이드 마켓에 올라오는 앱이 악성코드를 포함하고 있는지를 몇 단계에 걸쳐 분석하는 서비스이다. 하지만 바운서는 앱이 마켓에 등록되기 전에 분석•탐지하는 시스템은 아니다. 따라서 마켓에 등록되는 악성코드가 일부 감소할 수 있으나 모두 차단되는 것은 아니다. 또한, 사용자들이 안드로이드 공식 마켓이 아니라 서드파티 마켓을 이용해 앱을 설치한다면 이 서비스는 도움이 되지 않는다.
안드로이드의 보안 원칙은 '어떤 앱도 다른 앱과 운영체제 또는 사용자에게 나쁜 영향을 미칠 수 있는 권한을 가지지 않는다'는 것이다. 이것은 샌드박스라는 기능을 통해 이루어지며 설치된 앱이 동작할 때 다른 앱이 가진 데이터에는 접근할 수 없다. 앱은 설치 시 요구한 권한만큼만 데이터 접근이나 기능 동작이 가능하며 한 번 앱이 설치되면 할당받은 권한은 변경되지 않는다. 안드로이드 사용자들은 이러한 특징을 이해하고 스마트폰을 사용할 때 조금만 주의하면 악성코드 감염을 상당 부분 예방할 수 있다.
- SMS 전송
- 메모리 카드 접근
- 주소록 접근
- 인터넷 접근
- IEMI 등의 정보에 대한 접근
- AhnLabASEC Report Vol.26