본문 바로가기

현장속으로/세미나

내가 분실한 스마트폰을 해커가 습득했다면?

하루종일 손에 붙어있는 시간이 많은 스마트폰. 메시지를 주고받는 일부터 사진을 찍고 SNS에 글을 올리고 메일을 확인하고 문서를 보는 일까지, 스마트폰이 우리 생활에 들어오면서 우리는 많은 일들을 스마트폰으로 해결하고 있다. 그렇기 때문에 스마트폰을 잃어버리면 개인정보 유출 등 심각한 피해를 입을 수 있고, 휴대폰 분실이 큰 문제로 이어질 수도 있다. 


지난 8월 30일부터 9월 1일까지, 양재 KT 연구개발센터에서 개최된 INCOGNITO Hacking Conference 2013에서 다양한 주제의 발표가 진행되었다. 그 중, 인하대학교 정보보안동아리 NewHeart 소속의 박민건씨가 <Variety of SmartPhone Hacking>이라는 주제로 진행한 발표 내용을 소개한다. 




분실한 스마트폰을 해커가 습득했을 때 어떤 일들을 할 수 있을까? 해커가 스마트폰을 습득했을 때 해커의 관점에서 어떤 식으로 해킹을 할 수 있는지, 총 5가지의 시나리오를 토대로 발표가 진행되었다. 아래의 내용은 발표 내용을 발표자의 말로 재구성한 것이다. 




1. Smudge Attack


스마트폰을 습득했을 때 가장 빠르게 스마트폰을 해킹할 수 있는 방법이다. 폰을 비스듬하게 놓고 보면 지문이 보이는데, 보통 패턴으로 잠금이 걸려있을 경우 쉽게 패턴이 노출된다. 


즉, Smudge Attack이란 터치스크린에 묻어있는 지문으로 패턴이나 비밀번호를 유추해내는 공격이다. 다양한 각도나 밝기, 명암을 조성하여 성공률을 높일 수 있다. 실제로 논문으로 나오기도 하는 연구 주제로, 유명한 공격이다. 




2. Take Shell


Smudge Attack에 성공을 했든 안했든, 스마트폰을 습득했을 경우에는 루팅을 하는 것이 가장 획기적인 방법이다. 참고로, 루팅이 합법적일까 불법적일까 의구심이 들어서 조사해 보았는데, 조사한 결과 루팅은 합법적이다. 루팅과 관련한 법규가 아직 없기 때문이다. 하지만 루팅을 할 때는 조심히 진행해야 하는데, 잘못될 경우 흔히 말하는 '벽돌' 이 될 수 있다. 


루팅을 할 수 있는 방법은 3가지 정도가 있다. 알려진 커널 익스플로잇을 이용해 루팅을 하는 방법이 있고(Android Kernel Exploit), 루트 권한을 가진 이미지를 가지고 플래싱을 하는 방법(Rooted Image Flashing), 그리고 Update.zip 파일을 이용해 플래싱 하는 방법(Using Update.zip to set rooted environment)이다. 


다양한 종류의 안드로이드 버전이 있는데, 각 버전에 따라서 구글링을 통해 커널 익스플로잇을 구할 수 있다. 통상 커널 익스플로잇보다 이미지를 이용한 플래싱을 하는 방법을 더 많이 사용한다. 'fastboot mode'로 진입한 뒤에 커스터마이징한 이미지를 플래싱하는 방법인데, 커널 익스플로잇을 찾는 것보다 훨씬 쉬운 방법이다. 역시 구글링을 통해서 순정롬을 획득한 뒤 커스터마이징을 해서 사용하면 된다. Update.zip 파일을 이용하는 방법은 이미지를 플래싱하는 방법과 유사하다. Update.zip 파일 안에 boot.img 파일을 이용하는 방법이다. 


루팅을 할 때는 USB 디버깅 모드가 ON으로 되어 있을 경우 쉬워진다. OFF가 되어있을 경우에는 persist.service.adb.enable의 값이 0으로 설정 되어있는 것을 1로 바꿔준 뒤에 이미지 플래싱을 하면 된다고 하는데, 직접 해본 결과 성공하지는 못했다. 하지마 커널 이미지를 실제로 고칠 수 있다는 점은 변함이 없기 때문에 디버깅 모드가 ON이든 OFF이든 루팅을 할 수 있는 것은 확실하다.


3. Pattern Lock BruteForcing


스크립트에서 중요한 부분은 permutations 함수를 이용하는 것이다. 안드로이드의 패턴락에 관한 데이터파일은 /data/system/gesture.key 경로에 있다. 해당 key파일은 SHA-1 해쉬 알고리즘으로 암호화가 되어있다. 이 파일을 명령어를 통해 추출을 해 놓은 다음, 파이썬으로 BruteForce하는 스크립트를 짜서 이용한다.


스크립트에서 중요한 부분은 permutations 함수를 이용하는 부분인데, 패턴락이 순서를 가지고 있는 순열 형태이기 때문이다. 암호화 패턴이 가질 수 있는 최소값과 최대값을 설정하고, 패턴이 될 수 있는 모든 경우의 수를 리스트 형식으로 만들어 준 뒤 HEX값으로 바꾼 뒤 원래 값과 비교하는 방식으로 BruteForcing 할 수 있다. 


왜 이런 보안을 하지 않느냐 하면 사실 루팅을 하면 패턴 락이 걸려 있어도 lockscreen과 관련된 값을 1로 바꿔주면 끝나버리기 때문이다. 그렇기 때문에 패턴락 BruteForcing과 관련된 연구를 그렇게 활성화 되어있는 상태는 아니다.


4. Time To Hack Her


해커라면, 단순하게 볼 수 있는 정보에는 접근하지 않는다. 단순하게 볼 수 없는 정보의 예는 삭제된 통화기록이다. 사용자가 통화기록을 삭제하면, 안드로이드는 삭제와 동시에 Garbage-Collection을 진행하기 때문에, 그냥 볼 수가 없다. 보려면 다른 방법을 써야하는데, Logcat을 이용하면 삭제된 기록을 볼 수 있다.


또한 삭제된 사진 목록은 어떻게 볼 수 있을까? 간단하다. 이미지를 전부 덤프 뜬 뒤에 winhex나 foremost같은 도구를 이용하여 카빙 하면 된다.


또한, 스마트폰 메신저의 캐시 사진을 추출할 수도 있다. 스마트폰 주인이 예전에 설정했었던 프로필 사진까지 볼 수 있다. 사용자 뿐 아니라 사용자 친구들의 전 프로필 사진까지 전부 볼 수 있다. 데이터베이스에 접근한 뒤 확장자가 안적혀있는 파일들에 jpeg 확장자를 붙여주면 전부 사진으로 보인다. 수많은 사진을 일일이 jpeg 확장자를 달아줄 수 없어서, 간단한 스크립트를 통해 jpeg로 파일 확장자를 전부 바꿔주는 방식을 택했다. 


이제 습득한 스마트폰 주인의 사진까지 다 찾아볼 수 있었다. 그럼 그 다음에 무엇을 더 할 수 있을까? 스마트폰을 다시 주인에게 돌려준다. 단, 해당 스마트폰에 리버스쉘을 설치하면 스마트폰 메신저를 사칭할 수가 있다. 이런 방법은 금전 피해와도 연결될 수 있다. 리버스쉘을 해당 스마트폰에 설치한 뒤, 원격으로 데이터베이스에 접근하고, Select문으로 메시지를 엿본 후 Insert와 Update문으로 적절히 데이터를 조작해 보내는 것이다. 


스마트폰에 리버스쉘은 설치하면 되지만, 파이썬이나 루비는 안드로이드 스마트폰에 설치되어 있지 않다. busybox에 netcat이 설치되어 있긴 하지만, -e 옵션이 먹히지 않는다. 어떻게 할까 고민하다 보니 telnet을 떠올리게 되었다. 


예를 들어 공격자가 8888번 포트와 9999번 포트를 열고, 텔넷을 이용해서 8888번 포트로 들어오는 메시지를 시스템 명령어를 통해 출력한 다음, 9999포트로 넘겨주는 식이다. 이렇게 연결한 뒤 메시지를 Insert문을 통해 조작해서 보내면 된다. index 부분은 하나씩 늘려주고, 고유 id에는 겹치지 않는 숫자를 넣어준다. 그 뒤 전송할 메시지와 시간을 보낸다. 안 읽은 메시지 부분을 1로 설정해서 보낸다면 타겟을 완벽하게 속일 수 있다.


이런 기술적인 방법 말고도, 일반 사용자가 다른 사람의 스마트폰 메신저를 몰래 볼 수 있는 방법도 있다. airplane 모드 등을 켜서 단말기에 네트워크를 끊은 뒤 스마트폰 메신저에 접속하면, 이미 와있지만 확인하지 않은 메시지를 보더라도 읽지 않았다는 숫자 표시가 사라지지 않는다. 다시 네트워크를 연결하고 보면 숫자 표시가 사라진다. 이런 소소한 취약점을 이용해서도 남의 메시지를 들키지 않고 볼 수 있다. 


5. Can iPhone be attacked by DoS?



이 공격에는 에피소드가 하나 있다. KUCIS 세미나를 동아리 멤버와 같이 들으러 갔는데, 그 친구가 심심하다고 내 휴대폰을 가지고 가서는 통화 애플리케이션을 실행시키더니 계속 번호를 눌렀다. 계속 누르길래 다시 휴대폰을 가져와서 통화를 눌러봤더니, 20분 동안 휴대폰이 움직이지를 않는 거다. 휴대폰이 고장난 줄 알았는데, 집에 와서 생각해보니 버퍼 오버플로우인가, 하는 생각이 들었다. 


그 친구는 보안에는 관심이 없고 소프트웨어 개발에만 관심이있는 친구였는데, 나는 보안에 관심이 있으니까 이런 생각을 하게 되는 것이다. 관점의 차이이다. 그래서 다시 한번 집에서 해 봤는데, 또 한 시간 동안 휴대폰이 움직이지 않는 상태에서 배터리는 막 소모되다가 재부팅되는 상황이 발생했다. 그래서 연구를 시작했다. 그렇게 뚜렷한 연구결과는 아니지만, 계속 연구해볼 의향이 있다.


취약점은 전화 애플리케이션에서 터진다. 전화 애플리케이션이 생각보다 취약한 것 같다. 아이폰의 전화 애플리케이션은 40자리 이하의 번호를 입력하면 입력이 잘못되었다고 알려주지만, 40자리 이상의 번호를 입력하면 그런 것 없이 가만히 휴대폰이 멈춰있는 현상이 발생한다. 애플리케이션이 입력값의 길이를 체크하지 않기 때문에 가능하다. 


입력값이 200자, 300자, 400자, 이렇게 늘어날수록 반응속도가 더욱 느려진다. 그러다가 1000개의 입력값을 넣고 통화버튼을 누르니 20~30분동안 아무것도 되지 않는다. 이런 취약점을 이용해서 어떤 공격을 할 수 있을까, 생각해 보았다. 그래서 일단 1000개 자리의 번호를 친구로 등록했다. 그 다음에 그 번호로 전화를 걸었더니 처음에는 3G가 꺼지고, 그 후에는 휴대폰 상태바에 통신사 이름이 사라지는 현상이 발생했다.


이것을 어떻게 더 응용해볼 수 없을까 생각하다가, 서버를 하나 만들어두고 TEL tag를 이용하는 방법을 생각해 보았다. TEL tag에 긴 숫자를 넣은 다음에 스미싱처럼 그 태그를 메시지로 친구들에게 보내는 것이다. 그렇게 되면 그 메시지를 받은 사람들이 태그를 누르는 순간, 해당 사용자의 휴대폰은 마비가 될 것이다. 일종의 DoS 공격이 되는 것이다. 분명 더 뚜렷한 취약점이 있을 것이다. 더 연구해 볼 생각이다.



이처럼 분실한 휴대폰을 해커가 습득했을 경우, 악의적인 목적을 가지고 얼마든지 정보를 유출하고 이용할 수 있다. 사실 이 발표는 발표 내용도 흥미로웠지만 각 공격 방법마다 데모 영상이 준비되어 있어서, 영상으로 공격 과정을 볼 수 있어서 더 흥미로웠다. 


특히 4번 공격 시나리오인 'Time To Hack Her'에서 스마트폰 메신저와 관련한 해킹 내용이 흥미로웠고, 5번 공격 시나리오인 'Can iPhone be attacked by DoS?'의 데모 영상 또한 인상깊었다. 특히 친구의 장난으로 시작된 현상을 취약점과 관련지어서 생각하고 연구하고 그것을 발표하는 것이 매우 재미있게 다가왔고, 보안 공부를 하는 사람의 입장에서 배워야 할 자세라는 생각이 들었다. 


이렇게 스마트폰을 가지고 할 수 있는 해킹 방법이 다양하다. 분실된 휴대폰으로 할 수 있는 여러 공격을 예방하기 위해서 모바일 운영체제나 모바일 애플리케이션에 대한 보안 또한 신경 써야 할 부분이 되었다. 그러나 스마트폰의 보안을 지키는 첫 걸음은 '휴대폰을 잃어버리지 않는' 것일지도 모르겠다. 분실된 스마트폰이 어디로 어떻게 흘러들어갈지, 돌려받은 휴대폰에 악성코드가 설치되어 있을지 파악하고 난 뒤는 이미 해킹을 당한 뒤일 테니 말이다. Ahn



대학생기자 강정진 / 숙명여자대학교 컴퓨터과학과


學而不思則罔思而不學則殆

배우기만 하고 생각하지 않으면 멍청해지고, 생각하기만 하고 배우지 않으면 위태로워진다.