트렌드

스미싱 문자에 낚여봤어요, 일부러

2014.07.11

“딩동~”

7월 10일 오후 5시, 평소처럼 인터넷 뉴스를 살펴보고 있는데 문자메시지 한 통이 도착했다. 내가 인터넷상에서 악플로 명예훼손 및 협박죄로 진정서가 접수됐으니 확인해 달라는 내용이었다.

phishing_sms_001

문자 메시지 내용은 한눈에 봐도 요즘 유행하는 ‘스미싱’의 일종으로 보였다. 경찰이 행정부 소속이긴 하지만, ‘서울정부’라는 명의로 서류를 발송하지는 않는다. 진정서가 접수됐다 해도 참고인으로 출석하라는 출석요구서가 발송하는 게 우선이지, 피진정인에게 그것도 문자메시지로 진정서를 보여줄 리 없다.

모바일 앱 개발자인 나로선 이러한 스미싱 앱을 분석해보고 싶은 욕구가 샘솟았다. 한 번 스미싱을 시도하려는 자(이하 ‘녀석’이라 한다)가 어떤 수법을 사용하는지, 사용자들이 일명 ‘낚이는’ 이유도 알고 싶었다.

‘녀석’이 보낸 문자메세지는 ‘[서울정부]시민수사 인터넷 악플 명예훼손,협박죄로(진정서)확인 http://bit.do/xxx’ 형식으로 돼 있었다. 이 메시지를 누르면 ‘녀석’이 만든 가짜 경찰서 웹페이지로 이동한다.

‘녀석’은 bit.do와 같이 단축 웹주소 서비스를 사용한다. 문자메시지가 글자수 초과로 미전송될 경우를 고려한 것으로 추측된다. ‘놈’의 웹사이트가 차단될 경우 우회하거나, 경찰 수사가 진행될 경우 등록된 단축 웹주소를 지워 수사에 혼선을 줄 여지도 있다.

phishing_notice

‘녀석’이 보낸 웹주소의 도메인 기록을 조회했다. 2014년 6월24일에 외국 도메인 등록 대행업체를 통해 등록했고, 서버 본거지는 중국에 있는 것으로 확인됐다. 적어도 한국에 있는 서비스는 아니었다. 더욱 수상해졌다.

‘녀석’이 보낸 웹주소를 눌러봤다. 서울지방경찰청 공식 홈페이지처럼 보이는 웹사이트로 이동했다. HTML 소스코드를 열어보니 서울지방경찰청 스타일 시트(CSS)와 레이아웃 구조 등 모든 부분을 그대로 베껴썼다. 심지어 탭 메뉴를 누르면 실제 서울지방경찰청 웹페이지로 이동하도록 돼 있었다. 일반 사용자 입장에선 지레 겁을 먹을 수밖에 없도록 구현돼 있었다.

phishing_03

‘녀석’이 구현한 웹사이트에서 허접해 보이는 ‘서류접수확인’ 버튼을 누르니, apk 파일을 내려받도록 유도했다. 옳거니! 여기서 나는 이 문자메시지가 스미싱인 걸 확신할 수 있었다.

웹페이지에서 안드로이드나 iOS 응용프로그램(앱)을 설치할 수 있도록 링크를 제공하는 일은 흔하다. 하지만 신뢰할 수 있는 개발자가 만든 앱이라면 보통 구글플레이나 애플 앱스토어처럼 신뢰할 수 있는 앱 장터로 이동하지, apk 파일만 달랑 내려받게 하는 경우는 흔치 않다. 앱 장터 정책 때문이다.

안드로이드 OS는 기본적으로 플레이 스토어나 신뢰할 수 있는 개발자가 제공한 앱이 아니면 설치를 못 하게 돼 있다. 사용자가 옵션에서 이를 허용하지 않는 한 설치가 허가되지 않는다. apk 파일을 직접 내려받게 하는 까닭은 대개 구글에서 검열했을 때 앱이 내려갈 가능성이 높기 때문이다. ‘놈’도 자신이 만든 앱이 구글 정책에 부합하지 않는 모종의 이유, 혹은 나중에 추적이 불가능하게끔 하고 싶은 이유가 있기 때문에 이런 방법을 쓰는 걸로 보인다.

다시 본론으로 돌아오자. ‘녀석’이 만든 웹사이트에서 버튼을 누르면 ‘ems.apk’라는 파일을 내려받게 된다. 이 파일은 실행시 경고 메시지를 띄운다. 사용자가 만약 구글의 경고를 무시하고 설치를 허가하면 ‘녀석’이 만든 앱이 사용자 폰에 설치된다.

그럼 ‘녀석’은 이 앱을 무슨 목적으로 만들었을까? 단축 웹주소를 사용하고, 구글플레이에 올리지 못할 만큼 구린 속내란 과연 무엇일까? 한번 ‘녀석’이 만든 apk 파일을 소프트웨어 역공학(Reverse engineering)으로 분석해보았다.

phishing_04

‘녀석’이 만든 ‘ems.apk’ 파일에서 요구하는 권한을 살펴봤다. 안드로이드 앱을 개발할 땐 인터넷 접속 허용이나 GPS 사용과 같은 부분은 ‘AndroidMenifest.xml’이라는 파일에 직접적으로 명시해야 그 권한을 부여받아 개발자가 이용할 수 있다.

아래는 ‘녀석’이 사용자의 스마트폰에서 정보를 취득하기 위해 열어둔 권한이다.

Android.permission.INTERNET
(인터넷과 데이터 통신을 하기 위한 권한이다. 이 권한이 있으면 데이터를 웹으로 주고받을 수 있다.)

Android.permission.READ_PHONE_STATE
(전화통화 상태를 확인할 수 있는 권한이다. 전화 통화와 관련 권한을 취합할 수 있다.)

Android.permission.RECEIVE_BOOT_COMPLETED
(재부팅된 상황을 알 수 있는 권한이다.)
Android.permission.READ_SMS
Android.permission.SEND_SMS
Android.permission.RECEIVE_SMS
(문자메시지 수·발신과 관련된 권한. 수신시의 상황을 알 수 있는 권한이다.)

Android.permission.WRITE_SETTINGS
(휴대폰 설정을 바꾸는 권한이다.)

안드로이드 개발 경험이 있는 내가 보기에도 ‘헉~’ 소리 낼 만한 권한이 많았다. 우선 ‘녀석’이 만든 앱에는 인터넷에 데이터를 보내고 받을 권한을 부여했다. 문자메시지를 읽거나 전송하고, 메시지가 전송되면 이를 바로 취득해 일부 설정을 바꾸거나, 폰이 새로 켜졌을 경우 바로 앱을 실행할 수 있는 권한도 부여돼 있다.

‘녀석’이 만든 앱은 실질적으로 실행되는 액티비티(Activity)가 없고, 브로드캐스트 리시버(Broadcast-Receiver)로 메시지가 전송될 경우 실행되는 서비스(Service)만 구현돼 있다. 이렇게 구현하면 사용자가 ‘ems.apk’라는 앱을 설치하더라도 사용자 앱 목록에는 나오지 않는다.

안드로이드에서 ‘서비스’란, 프로그램이 실행되지 않더라도 지속적으로 비활성화나 활성화 상태에서 모두 작업을 이어할 수 있는 것을 뜻한다. ‘녀석’이 만든 앱에서는 아래 상황에서 서비스가 자동으로 켜지도록 설정돼 있다.

Android.app.action.DEVICE_ADMIN_ENABLED
Android.provider.Telephony.SMS_RECEIVED
Android.intent.action.PHONE_STATE

위 목록은 ‘녀석’이 만든 ‘ems.apk’ 앱이 가동되기 위한 조건들이다. 사용자가 전화를 받거나 끊을 때, 문자메시지를 수신할 때, 스마트폰 설정을 바꿀 때 자동으로 가동되게 돼 있다.

종합하자면 ‘녀석’은 사용자 문자메시지 정보, 휴대폰 수신 정보를 지속적으로 캐내오고 싶은 것이다. 일단 앱을 설치했다면 스마트폰을 다시 부팅하거나 폰 설정을 바꾸더라도 앱은 지속적으로 구동하도록 구현해, 사용자가 스마트폰을 완전 초기화하지 않는 이상 계속 정보를 빼내오게 했다.

‘녀석’이 만든 앱을 통해 가장 먼저 피해가 발생할 수 있는 부분은 휴대폰 소액결제로 예상된다. 휴대폰 소액결제는 휴대폰 번호, 통신사, 이름, 생년월일 등의 정보를 입력하면 휴대폰 메시지로 확인번호를 입력해 결제가 이뤄지는 방식이다.

이런 확인번호를 사용하는 방식을 ‘캡차’(CAPTCHA, Completely Automated Public Test to tell Computers and Humans Apart)라고 한다. 캡차는 실제 입력된 값이 사용자가 입력한 값인지, 컴퓨터가 입력한 값인지 검증하는 방식을 뜻한다. 회원가입을 하다 보면 뜬금없이 일그러진 숫자를 입력하라는 부분이 나오는데, 이 부분이 사용자가 컴퓨터인지 아닌지 구분하기 위한 캡차다.

문제는, ‘녀석’은 문자메시지가 발송되면 즉시 그 문자를 읽을 수 있는 권한을 획득했다는 것이다. 즉 문자메시지로 발송한 확인번호를 바로 빼내 소액결제가 이루어지게끔 할 수 있다. 최근 유행하는 소액결제 피해 사례도 이와 비슷한 수법을 사용한 것으로 보인다.

그럼 일반 사용자들이 피해를 입지 않는 방법이 무엇이 있을까? 우선 안드로이드 개발자로서 당부하고 싶은 것은, 출처가 불분명한 앱은 설치하지 않는 것이 좋다는 점이다.

최근 문자 메시지를 통해 프로모션 형식으로 앱 설치 링크를 보내는 경우가 많다. 이번 ‘녀석’의 사례도 사용자가 겁 먹을 상황을 유도해 ‘녀석’의 앱을 설치하게끔 강권하는 것으로 보인다. 되도록이면 이렇게 문자메시지로 날아온 경로로 앱을 설치하지 않는 것이 바람직하다.

앱을 꼭 설치해야 하는 상황이라면, 구글플레이 등 신뢰할 수 있는 앱 장터에서 검색해서 앱을 내려받는 게 현명하다.

수상한 문자메시지의 웹주소는 어떠한 것이든 누르지 않는 것이 좋다. 일단 정부기관 등에서는 웹주소나 파일로 출석요구서를 발송하지 않는다. 확인이 필요한 문자메시지라면 해당 부처 민원실에 전화를 걸어 문자메시지 내용의 진위여부를 파악하면 피해를 예방할 수 있다.

최근 통신사에서는 소액결제 피해 사례를 방지하기 위해, 소액결제 자체를 차단하는 서비스도 운영하고 있다. 휴대폰 소액결제 서비스는 간단한 절차로 결제할 수 있어 유용하지만, 종종 스미싱 등의 수법으로 피해가 발생하곤 한다. 만약 소액결제를 이용할 의사가 없다면, 통신사에 소액결제를 차단해 달라고 요청하면 된다. 이러면 적어도 문자메시지 유출로 인해 소액결제 피해가 발생하는 건 원천적으로 차단할 수 있다.

사업자도 요즘 문자메시지를 가로채려는 시도가 많다는 점을 인지하고 정책을 마련했으면 한다. 소액결제시 나타나는 캡차를 문자메시지 이외에 전화나 음성을 통해 알려주는 방법도 좋다. 이런 피해 사례를 미연에 방지할 수 있으니까.

leehd_100글_이희덕. 숭실대 글로벌미디어학부에 재학 중이면서, 한국마이크로소프트와 네이버 라인플러스에서 소프트웨어 개발자 인턴으로 일했다. 목표는 기술로 세상의 불편한 점을 개선하는 개발자가 되는 것이다. 2010년 SK텔레콤에서 주최한 안드로이드 앱 공모전에서 금상을 수상했다. ‘할인을 찾아서’, ‘유세윤’, ‘타요버스 찾기’, ‘링펫’ 등 다양한 안드로이드 앱 서비스를 직접 개발·운영하고 있다. hhdd@adnaru.com

bloter@bloter.net

블로터는 블로거(BLOGGER)와 리포터(REPORTER)가 결합된 말입니다. 블로거의 전문적 분석능력과 리포터의 현장취재력이 결합된 소셜시대의 새로운 저널리스트를 꿈꿉니다. # Twitter : @bloter_news # Facebook : facebook.com/bloter.net