본문 바로가기

Security_News/해외보안소식

Android의 사용자 권한으로 고객 정보 유출의 우려

728x90

Android의 액세스 제어 정책에서 중요한 위치를 차지하는 것이 권한입니다. Android 단말의 정보에 액세스하기 위해 응용 프로그램은 특정 권한을 요청하고 허가를 얻어야합니다. 그러나 운영 체제 (OS)에 정의 된 권한을 초과하는 응용 프로그램은 사용자 지정 권한을 정의 할 수 있습니다. 일반적으로 이것은 응용 프로그램 자체의 기능과 데이터를 보호하기위한 것입니다.

이러한 사용자 지정 권한은 일반적으로 보호 수준 "signature"또는 "signatureOrSystem"로 정의됩니다. 이 두 가지 보호 수준은 "Android Open Source Project (AOSP)"에서 다음과 같이 정의되어 있습니다.

signature권한을 정의하고 응용 프로그램과 동일한 서명을 가진 응용 프로그램에만 주어지는 권한입니다. 서명이 일치하면 사용자에게 통보없이 또는 사용자의 명확한 승인없이 자동으로 권한을 부여합니다.
signatureOrSystemAndroid 시스템 이미지의 응용 프로그램 또는 권한을 정의하고 응용 프로그램과 동일한 서명을 가진 응용 프로그램에만 주어지는 권한입니다. signature의 보호 수준은 대부분의 요구를 만족시키고 또한 응용 프로그램의 설치 위치에 관계없이 유효하기 때문에이 보호 수준의 사용은 삼가 해주세요.signatureOrSystem는 여러 공급 업체가 시스템 이미지를 통합하는 응용 프로그램을 구축하거나 공동으로 구축하기위한 특정 기능의 공유가 필요한 경우 등 특별한 경우에만 사용합니다.

이러한 정의는 Android 개발자는 시스템 응용 프로그램 또는 그것과 동일한 signature를 가진 응용 프로그램 만이 권한에 액세스 할 수 있다고 생각합니다. 대부분의 경우 동일한 signature를 가진 응용 프로그램은 동일한 개발자가 만듭니다. 따라서 개발자는 액세스 제어가 추가된다고는 생각하지 않습니다. 그러나 예외가 있습니다.

Android OS는 사용자 지정 권한을 그 이름으로 추적합니다. 일단 권한이 정의되면 다른 응용 프로그램은 그것을 변경할 수 없습니다. 예를 들어, 유명한 응용 프로그램 "A"가 해당 데이터를 보호하기 위해 "permission-A"라는 권한을 signature 보호 수준에서 정의했다고합니다. 그러나 사용자가 A를 설치하기 전에 잘못된 응용 프로그램 "B"를 설치했습니다. 만약 B가 정규의 응용 프로그램 A에서 정보를 수집하도록 설계되어 있다면, A보다 전에 B가 permission-A를 작성하고 B에는 permission-A의 권한이 주어집니다. 응용 프로그램 A가 설치되면, B는 A 응용 프로그램의 보호 된 데이터를로드 허가합니다.

트렌드 마이크로는이 취약점의 위험에 노출되는 응용 프로그램이 약 1 만개 있는지 확인합니다. 어떤 응용 프로그램이 즉시 취약한 지 공개하지 않지만 취약점이있는 응용 프로그램을 쉽게 조사한 결과 다음의 것이 판명되어 있습니다.

  • 유명한 온라인 스토어에서 검색 기록이 유출하고있는
  • 유명한 채팅 앱에서 사용자의 앱 내에서 구매 내역을 공개하고있다
  • 유명한 소셜 네트워크 앱을 통해 삽입 된 가짜 메시지를 게시 할

개발자는 Android 구성 요소 "Activities, Receivers, Services, Providers '에 대한 액세스를 요청할 때 보호 수준에만 의존하지 않도록하십시오. "getCallingUid」나 「getCallingPackage"같은 기능이 OS에서 제공되고 있으며, 이러한 기능은 위의 컴퍼넌트를 요구해왔다 응용 프로그램을 확인하고 필요에 따라 액세스 제어를 할 수 있습니다.

Microsoft는이 문제에 관해, Google의 Android 보안 팀에보고하고 있습니다.

※ 협력 작성자 : Veo Zhang

참고 기사 :

  • Android Custom Permissions Leak User Data " 
  • by Weichao Sun (Mobile Threats Analyst)
  • Android のアクセス制御ポリシーで重要な位置を占めるのがパーミッションです。Android端末上の情報にアクセスするためには、アプリケーションは特定のパーミッションを要求し、許可を得なければなりません。しかし、オペレーティングシステム(OS)に定義されたパーミッションを超えるものについては、アプリケーションはカスタムパーミッションを定義することができます。一般的に、これはアプリケーション自身の機能やデータを保護するためのものです。

    このようなカスタムパーミッションは通常、保護レベル「signature」もしくは「signatureOrSystem」で定義されます。この 2つの保護レベルは、「Android Open Source Project(AOSP)」で、以下のように定義されています。

    signatureパーミッションを定義したアプリケーションと同じ署名を持つアプリケーションのみに与えられるパーミッションです。署名が一致した場合、ユーザへの告知なしに、もしくはユーザの明確な承認なしに自動的にパーミッションを付与します。
    signatureOrSystemAndroidのシステムイメージ内のアプリケーション、もしくはパーミッションを定義したアプリケーションと同じ署名を持つアプリケーションのみに与えられるパーミッションです。signature の保護レベルはほとんどの要求を満たし、またアプリケーションのインストール先に関係なく有効であるため、この保護レベルの使用はお控え下さい。signatureOrSystem は、複数のベンダがシステムイメージを組み込んだアプリケーションを構築する場合や、共同で構築するため特定の機能の共有が必要なときなど、特別の場合のみ使用します。

    これらの定義により、Android の開発者は、システムアプリケーションもしくはそれと同じ signature を持つアプリケーションだけがこれらのパーミッションにアクセスできると考えています。大抵の場合、同じ signature を持つアプリケーションは、同じ開発者が作成します。そのため、開発者はアクセス制御が追加されるとは考えていません。しかし、例外があります。

    Android の OS は、カスタムパーミッションをその名前で追跡します。一度パーミッションが定義されると、他のアプリケーションはそれを変更できません。例えば、有名なアプリケーション「A」が、そのデータを保護するために、「permission-A」というパーミッションを signature の保護レベルで定義したとします。しかしユーザは、A をインストールする前に、不正なアプリケーション「B」をインストールしていました。もし、B が正規のアプリケーション A から情報を収集するよう設計されていたら、A よりも前に、B が permission-A を作成し、B には permission-A の許可が与えられます。アプリケーションA がインストールされると、B はアプリケーションA の保護されたデータを読み込む許可を得ます。

    トレンドマイクロでは、この脆弱性の危険にさらされているアプリケーションが約1万個あることを確認しています。どのアプリケーションがすぐに攻撃を受けやすいかは公開しませんが、この脆弱性を持つアプリケーションを簡単に調べたところ、以下のことが判明しています。

    • 有名なオンラインストアで、閲覧履歴が漏えいしている
    • 有名なチャットアプリで、ユーザのアプリ内での購買履歴が漏えいしている
    • 有名なソーシャルネットワークで、アプリ経由で挿入された偽のメッセージを投稿できる

    開発者は、Androidコンポーネント「Activities、Receivers、Services、Providers」へのアクセスを要求されるときは、保護レベルだけに頼らないようにして下さい。「getCallingUid」や「getCallingPackage」といった機能が OS から提供されており、これらの機能は上記のコンポーネントを要求してきたアプリケーションを特定し、必要に応じてアクセス制御を行うことができます。

    弊社では、この問題に関し、Google の Androidセキュリティチームに報告しています。

    ※協力執筆者:Veo Zhang

    参考記事:

  • Android Custom Permissions Leak User Data
    by Weichao Sun (Mobile Threats Analyst)

  • 728x90