[Android/안드로이드] 암시적인 내부 인텐트 보안 - 앱에 암시적인 내부 인텐트 취약성이 있습니다.

SoyoungLee·2022년 8월 10일
0
post-thumbnail

💌[Android/Kotlin] 암시적인 내부 인텐트 보안 - 앱에 암시적인 내부 인텐트 취약성이 있습니다.

📌💜🤍
안드로이드 프로젝트 구글 플레이 스토어에 출시 중 경고가 있었다.

암시적인 내부 인텐트
앱에 암시적인 내부 인텐트 취약성이 있습니다.

💜 인텐트란?

  • Intent 객체에는 Android 시스템이 어느 구성 요소를 시작할지 판별하는 데 사용하는 정보가 담겨 있다.
    (예를 들어 정확한 구성 요소 이름 또는 인텐트를 수신해야 하는 구성 요소 카테고리 등).

  • 또한 수신자 구성 요소가 작업을 적절히 수행하기 위해 사용할 정보(예: 수행할 작업 및 조치를 취할 데이터 위치 등)도 이 안에 담겨 있다.

  • 인텐트는 명시적과 암시적으로 나뉘는데 자세한건 이전 포스팅 참고.
    액티비티 컴포넌트 - 인텐트 포스팅 링크

프로젝트에서 푸시 알림을 받아 브로드 캐스트를 구현하는 코드에서 암시적인 인텐트를 사용하였다.

구글 경고에 권장사항을 읽어보니

암시적 인텐트는 그 내용이 공개적(public)이고, 그에 따른 인텐트 필터를 정의하면 어느 어플리케이션이나 인텐트를 수신할 수 있다는 점에서 공격에 이용될 수 있는 취약성을 가진다.
그에 따른 인텐트 필터를 정의하면 어느 어플리케이션이나 인텐트를 수신할 수 있다는 점에서 공격에 이용될 수 있는 취약성을 가진다.

📌 해결방안

  • 명시적 인텐트를 사용 권장
  • Intent.setComponent를 사용하여 인텐트를 처리할 구성요소를 명시적으로 설정합니다.
  • Intent.setClass 또는 Intent.setClassName을 사용하여 타겟 구성요소를 명시적으로 설정합니다.
  • Intent.setPackage를 사용하여 이 인텐트가 연결되는 구성요소를 제한합니다.

기존 암시적 내부 인텐트 사용한 코드

private void sendPushBroadcast(Map<String, String> data){
        Intent intent = new Intent(Define.BROAD_CAST);
        intent.putExtra("data", data);
        sendBroadcast(intent);
}

💜 Intent.setPackage 를 사용해 구성요소를 제한.

private void sendPushBroadcast(Map<String, String> data){
        Intent intent = new Intent(Define.BROAD_CAST);
        intent.setPackage(getPackageName());
        intent.putExtra("data", data);
        sendBroadcast(intent);
    }

참고 : https://developer.android.com/guide/components/intents-filters?hl=ko

profile
Android Developer..+ iOS 슬쩍 🌱 ✏️끄적끄적,,개인 기록용 👩🏻‍💻

0개의 댓글