마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

액티비티(Activity) 취약점에 대한 시큐어코딩 질문

0 추천

실습 환경

- Windows7 64bit

- 안드로이드 스튜디오, AVD

- JAVA JDK 64bit

- 실습 파일 : http://dbdhack.tistory.com/entry/액티비티Activity-취약점에-대한-시큐어코딩-질문

 

질문 : 액티비티 취약점이 존재하는 안드로이드앱의 AndroidManifest.xml 파일에서 android:exported="true"값을 false로 변경 후 재컴파일 및 사인을 하고, 해당 .apk 파일을 AVD에 설치하였습니다. 그리고 am start 명령어를 입력하여도 이전과 마찬가지로 액티비티 취약점이 존재(다음 액티비티로 넘어갑니다)합니다. exported값을 false로 변경하거나 삭제하면 am start 명령어를 입력해도 다음 액티비티로 넘어가지 않는다고 하는데,,, 왜 넘어갈까요???

구글링해보면 exported값을 수정하거나 삭제하면 am start 명령어를 입력해도 다음 액티비티로 넘어가지 않는다고 하는데.... 

 

원본 testapp.apk 파일을 실행하면 비밀번호를 입력해야 다음 액티비티로 넘어가는데요.

그림과 같이 잘못된 비밀번호를 입력하면 다음 액티비티로 넘어가지고 않고 Wrong Password 문자열이 출력됩니다.

1.

 

정확한 비밀번호(password)를 입력하면 다음 액티비티로 넘어갑니다.

2

 

원본 testapp.apk 파일을 디컴파일하면 디컴파일된 testapp 폴더가 생성됩니다.

3

 

AndroidManifest.xml 파일에서 하위 액티비티의 exported값을 false로 변경합니다.

4

 

java -jar apktool.jar b testapp.apk 명령어를 입력하여 재컴파일을 하면 dist폴더에 testapp.apk 파일이 생성됩니다.

6

 

dist 폴더에 존재하는 testapp.apk 파일을 signapk 명령어로 사인작업을 수행합니다.

8

11

 

adb 명령어를 이용해 수정된 aftertestapp.apk 파일을 설치합니다.

123

 

am start 명령어를 입력하였더니 다음 액티비티로 넘어갑니다. 비밀번호도 입력하지 않았는데 말이죠.

분명히 exported값을 false로 변경하고 재컴파일하고 사인작업까지 했는데 말이죠...

뭐가 문제일까요???

1212

 

EternalDaze (120 포인트) 님이 2016년 1월 17일 질문
EternalDaze님이 2016년 1월 17일 수정

3개의 답변

0 추천
그냥 외부에서 특정 activity를 강제 실행하는걸 막는게 목적이라면...

퍼미션을 이용한 방법은 어떠신지요?

퍼미션을 하나 만드시고 welcome 액티비티에 그 퍼미션을 주시는거죠...

그리고 만드시는 퍼미션의 프로텍션레벨은 시그너쳐 정도로 해두시면 될것같습니다...
비애천사 (12,090 포인트) 님이 2016년 1월 18일 답변
답변 감사합니다. 퍼미션에 대해 찾아봐야겠네요.
0 추천
정상적으로 수정된 것 같은데요?

링크로 주신 apk 중에서 1번으로 하면 첨부하신 것과 같은 화면이 나옵니다

3번을 설치하고 스샷처럼 am start하면 아래처럼 나오면서 저 화면이 나오지 않습니다.

am start -n com.isi.testapp/.Welcome
Starting: Intent { cmp=com.isi.testapp/.Welcome }
java.lang.SecurityException: Permission Denial: starting Intent { flg=0x10000000 cmp=com.isi.testapp/.Welcome } from nul
l (pid=31810, uid=2000) not exported from uid 10695
        at android.os.Parcel.readException(Parcel.java:1465)
        at android.os.Parcel.readException(Parcel.java:1419)
        at android.app.ActivityManagerProxy.startActivityAsUser(ActivityManagerNative.java:2200)
        at com.android.commands.am.Am.runStart(Am.java:682)
        at com.android.commands.am.Am.onRun(Am.java:270)
        at com.android.internal.os.BaseCommand.run(BaseCommand.java:47)
        at com.android.commands.am.Am.main(Am.java:76)
        at com.android.internal.os.RuntimeInit.nativeFinishInit(Native Method)
        at com.android.internal.os.RuntimeInit.main(RuntimeInit.java:250)
        at dalvik.system.NativeStart.main(Native Method)
cc1232 (35,280 포인트) 님이 2016년 1월 18일 답변
0 추천
저도 동일한 증상이에요 ㅠㅠ

기존 답변 내용 중 퍼미션에 대한 조언이 있는데요.

위 질문은 교재에 있는 실습이 정상적으로 되지 않는 현상에 대한 질문이라서 실습 조건안에서의 문제점을 찾고 싶습니다.ㅠㅠ

참고로 저도 질문자님께서 링크해주신 aftertestapp.apk 로 테스트도 해봤지만 동일 현상(인증우회)이 확인되었습니다.
익명사용자 님이 2016년 9월 2일 답변
2016년 9월 2일 수정
저도 같은 현상입니다. 책내용이 다소 틀린듯
혹시 가상폰이 루트권한이라서 되는게 아닐까요..?
...