2011년 8월 9일 화요일

당신의 스마트폰 누군가 훔쳐보고 있다?

[관련 기사] 공짜 앱 하나 깔았을 뿐인데…당신의 스마트폰 누군가 훔쳐보고 있다
안드로이드 '좀비폰' 올 2.5배 늘어... 앱 잘못 깔면 통화 도청 당할 수도

이번에는 안드로이드 보안에 대해 이야기 해 보려고 합니다. 위 관련 기사에서도 지적하고 있지만 앱 하나 잘못 깔면 보안에 위험해 집니다.

아이폰에 비해서 안드로이드가 가지는 기능적인 매력은 다들 아실 겁니다. 하지만 그 기능을 제공하기 위해 보안을 희생했다는 사실은 잘 모르실지도 모릅니다. 이제부터 안드로이드의 보안 취약성에 대해서 서술해 보겠습니다.


안드로이드의 프로세스 종류


안드로이드의 프로세스, 즉 프로그램의 종류는 크게 다음 3가지로 분류할 수 있습니다.
  • 응용프로그램(앱): 일반적으로 사용자가 실행시키면 구동되는 응용프로그램입니다.
  • 서비스: 사용자의 구동 여부에는 관계 없이 항상 실행되어 있으며 눈에 보이지 않는 프로그램 입니다.
  • 위젯: 직접 실행시키지 않아도 바탕화면(스프링보드 등)에서 작동되는 프로그램입니다.

위젯과 앱은 사용자의 눈에 보입니다. 따라서 어느 정도 사용자의 제어가 통합니다.

문제는 서비스입니다. 백그라운드 프로세스(Background Process)와도 일맥 상통합니다. 서비스는 UI가 없는 형태이기 때문에 사용자는 이 프로그램이 무엇을 하는지 알 수가 없습니다. 계속해서 사용자를 감시하게 될 지도 모르지요.

사실 서비스와 위젯은 모두 앱 분류에 들어갑니다. 앱이 서비스를 실행시킬 수도 있고 앱이 위젯 역활을 할 수도 있습니다. 결국 앱 자체가 잠재적인 보안 문제를 가질 수 있다는 말이 되는군요.

안드로이드에서 제공되는 기능 - 리시버


일단 대표적으로 리시버(Receiver)라고 칭했습니다.

단순히 이야기 하자면, 스마트폰의 정보를 가로챌 수 있는 기능입니다. 예를 들어 문자(SMS)가 왔을 경우 이 내용을 가로채서 정보를 읽을 수 있다는 이야기입니다.

물론 가로챌 수 있는 정보는 굉장히 많습니다만, 리시버는 실시간으로 정보를 가로챈다는 점에서 뭔가 특별합니다.

관련 기사에서도 이야기 하고 있지만, 도청 또한 가능하다는 말입니다.

안드로이드에서 제공되는 기능 - 권한


위 리시버와도 관계가 있겠지만, 안드로이드는 앱에 많은 기능을 부여할 수 있습니다. 사용자에겐 당연히 기능이 많으면 편해질 수 있겠지요.

하지만 그 덕분에 보안상의 문제를 내포하고 있습니다. 아래 URL은 안드로이드 권한(Permission)에 대한 기술 문서입니다.

http://developer.android.com/reference/android/Manifest.permission.html

딱히 읽지 않아도 됩니다. 단순히 정리하겠습니다. 사용자의 개인 정보에 접근할 수 있는 권한이 이 문서에 포함되어 있습니다. SMS/MMS나 E-mail이나 전화번호부나 전화 기록 등등에 접근할 수 있습니다. 읽고 쓸 수도 있습니다. 마이크에 녹음되는 소리 데이터를 읽을 수도 있습니다.

이런 권한은 앱을 설치할 때 경고문구로 사용자에게 알려줍니다. 설치 단계에서 앱이 어떤 권한을 요구하니 확실히 확인하고 설치하라고 메시지로 안내해 줍니다. 하지만, 이 권한 정보를 자세히 읽어보는 사용자는 드물 것입니다.

앱 등록 심사


애플의 앱스토어는 심사(Review)로 인해 악명이 높습니다. 자기네들 정책에 반하면 앱 자체에 문제가 없어도 통과 안시켜 주니깐요.

구글의 앱스토어는 심사가 없습니다. 그래서 개발자들에겐 호감적일 수 밖에 없지요.

하지만, 이로 인해 악성코드나 잠재적인 문제를 내포한 앱을 사전에 걸러낼 수가 없게 됩니다. 심사에는 장단점이 존재하지만, 보안 문제에 한해서 사전심사는 굉장한 장점을 가지고 있습니다.

자바(Java)의 한계


자바(Java)는 안드로이드 앱을 만들때 사용하는 프로그래밍 언어 입니다. 자바의 특징 상당 수는 일단 생략하겠습니다.

단 한가지, 자바의 경우 역컴파일(해석)이 가능하다는 점을 문제삼을 수 있습니다. 즉, 프로그램을 사람이 알 수 있는 언어로 변환이 가능하다는 점입니다. 그래서 여기다 트로이의 목마(trojan - 대표적인 악성코드 종류) 등을 넣기 쉽습니다.

물론 자바 만이 역컴파일이 가능한건 아닙니다. 단지, 역컴파일된 내용의 수준이 다르다는 이야기입니다. 보통 C/C++/Objective-C 등의 언어는 컴파일된 결과물을 역컴파일 하면 원본 소스코드와는 완전히 다른 내용이 나옵니다.

안드로이드앱의 경우 바이트컴파일을 할 때 소스코드를 암호화(읽기 어렵게 만드는 것) 해서 배포하는게 일반적입니다. 하지만 그렇다고 해도 다른 바이너리로 컴파일하는 언어에 비하면 역컴파일의 결과물은 굉장히 읽기 좋은 편입니다.

참고) 바이너리 라는 건 2진수 데이터를 의미합니다만, 여기서는 기계어 코드로 이해하는 편이 좋습니다. 사람이 읽기에는 제법 고통스럽고 이해하기도 어려운 언어이지요. 컴퓨터 입장에서는 가장 선호하는(?) 언어겠지만...

참고2) 컴파일: 컴파일(Compile)이라는 용어는 사람이 이해하기 편한 프로그래밍 언어(C/C++/Objective-C 등등)를 기계어로 변환한다는 것을 의미합니다.

반면 아이폰은...


현재로썬 비교하기 가장 적절한 스마트폰이 아이폰인 것 같아서 아이폰만 거론합니다. 정확히는 iOS와 iOS SDK도 함께 거론해야 겠지만 대충 아이폰이라고 하지요.

애플에서 제공하는 아이폰 개발 도구는 개인정보 접근에 상당히 제약적입니다. 안드로이드가 기능을 많이 제공하는 것 과는 다르게 기능 자체가 제한적입니다. 대신 덕분에 개인정보보호에서만은 아이폰의 우위가 됩니다. 심지어, 악성코드를 개발하려 해도 정식으로 배포된 애플의 개발도구 만으로 악성코드를 개발한다는 것 자체가 불가능합니다.

물론 앱스토어 등록 심사에서도 개인정보 유출 가능성이나 악성코드 포함 여부를 걸러냅니다.

하지만 아이폰도 위험할 때가 있으니 바로 탈옥(jailbreak) 했을 때 이지요. 막혀 있는 API(기능)을 마구 사용할 수 있으며, 제한된 기능을 풀어줄 수 있게 됩니다. 아이폰의 모든 정보를 읽을 수 있는 관리자 권한 부여도 가능해집니다. (안드로이드의 경우도 탈옥(루팅)을 하면 어차피 똑같이 위험해집니다.)

안드로이드는 상대적으로 보안에 취약합니다


이상으로 왜 안드로이드가 iOS에 비해 보안이 취약한지를 설명하였습니다.

사용자 입장에서는 보안의 문제가 있을 수도 있으니 앱을 설치할 때는 언제나 주의해야 합니다. 마켓에서 부터 앱이 요구하는 권한 까지 하나하나 꼼꼼히 살펴봐야 합니다. 그렇지 않고서는 언제 어떻게 해킹을 당하거나 개인정보가 빼내질 지 모르는 일이지요.

불행히도 모든 사용자가 꼼꼼히 이런 정보를 걸러내는 것은 불가능에 가깝다는게 현실입니다. 결과적으로 구글에서 어떻게든 조취를 취하던가 안드로이드 자체의 보안기능 개선을 통해 보완해 나가는 것이 가장 현실적인 대안입니다만... 시간이 얼마나 걸릴지 알 수가 없네요.

최근 글

문재인 정부가 경제를 죽인다는 황교안

연일 보수세력의 현 정부 공격이 계속되고 있다. 특히 소득주도성장은 처음부터 끝까지 물고 늘어지고 있는 먹이감(?)으로 보이나보다. 이번 글도 이 내용의 연장선으로, 아래 기사에서 출발한다. "문재인 정권이 자유시장 경제를 망가뜨리고 있...

일주일간 인기글