인시큐어뱅크 활용 안드로이드 모의해킹 공부

취약한 브로드캐스트 리시버

원준킹 2020. 12. 22. 18:36

 

 

안드로이드 시스템이 인텐트라는 메시지로 정보 전달

 

취약한 브로드캐스트 리시버 : 다른 앱이 인텐트를 사용하여 비밀번호 변경기능 접근 (접근제어X)

 

 

Adb로 진단방법

 

          

-      AndroidManifest.xml에 있는 <Receiver> 컴포넌트 점검

 

 

 

 

-      Receiver 컴포넌트가 구현된 해당 클래스의 onReceiver() 메소드 기능 점검

 

 

-      adb shell –> am broadcast -a theBroadcast -n com.android.insecurebankv2/.MyBroadCastReceiver

n  인자없이 메시지 전달

n  theBroadcast : 메시지

n  com.android.insecurebankv2/.MyBroadCastReceiver : 어떤 패키지의 어떤 컴포넌트 지정

 

          

 

          

 

-      am broadcast -a theBroadcast -n com.android.insecurebankv2/.MyBroadCastReceiver --es phonenumber 5839 --es newpass passwd

n  인자와 함께 메시지 전달

 

 

 

 

 

 

 

 

 

 

 

 

 

대응방안

-      AndroidManifest.xml에 구현되어 있는 android:exported=”true” 속성을 “false”로 변경하여 외부노출 금지

-      반드시 필요하다면 Permission 속성을 통한 권한으로 접근제어

 

Drozer로 진단방법

-      adb로는 System Process로 인해 권한 검사를 할 수 없다

-      따라서 Drozer를 사용하여 진단.

-      run app.package.attacksurface com.android.insecurebankv2

노출된 컴포넌트들의 개수

 

-      run app.broadcast.info -a com.android.insecurebankv2

노출된 브로드캐스트리시버

Permission: null = 아무나 접근가능

-      run app.broadcast.send –-component com.android.insecurebankv2 com.android.insecurebankv2.MyBroadCastReceiver

n  메시지 전달

 

 

 

 

-      run app.broadcast.send --component com.android.insecurebankv2 com.android.insecurebankv2.MyBroadCastReceiver --extra string phonenumber 5839 --extra string newpass sungwj

n  인자 포함 메시지 전달

 

 

 

 

 

 

 

 

 

대응방안

-      AndroidManifest.xml에 구현되어 있는 android:exported=”true” 속성을 “false”로 변경하여 외부노출 금지

n  Adb로는 여전히 호출가능 : 개발자들이 사용해야 되기 때문에 권한이 없어도 가능 (adb->system process)

n  Drozer 로는 호출 불가능 : 사용자레벨 권한, adb보다 권한 낮음, drozer로 진단이 더 실용적

 

Drozer로 메시지 보낼 시 Permission Denial

 

 

-      반드시 필요하다면 Permission 속성을 통한 권한으로 접근제어

n  Android:exported=”false” 로 하면 꼭 필요한 경우에도 사용 불가능

n  같은 개발자의 서명이 되어있는 앱끼리만 호출 가능

 

n  BroadcastSender.apk 에서 인텐트 보내기

인시큐어뱅크에서 정의한 permission과 동일한 이름의 permission 사용명시

 

 

인시큐어뱅크 앱의 서명과 동일한 서명으로 BroadcastSender.apk 서명

 

 

 

 

 

 

Permission null -> my.app.PERMISSION

 

 

 

브로드캐스트는 노출됨

 

 

 

 

인시큐어뱅크에 drozer로 인텐트 전송 시 Permission Denial 되지만

 

 

 

인시큐어뱅크와 같은 서명을 지닌 BroadcastSender.apk 에서 인텐트 전송 시 수신됨을 확인