Translated ['mobile-pentesting/android-app-pentesting/android-applicatio

This commit is contained in:
Translator 2024-10-05 13:16:49 +00:00
parent e5057b6b49
commit 798947a6b4

View file

@ -9,7 +9,7 @@ GCP Hacking'i öğrenin ve pratik yapın: <img src="/.gitbook/assets/grte.png" a
<summary>HackTricks'i Destekleyin</summary>
* [**abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* **Bize katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya **Twitter'da** **bizi takip edin** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Bize katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya **bizi** **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**'da takip edin.**
* **Hacking ipuçlarını paylaşmak için** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna PR gönderin.
</details>
@ -20,7 +20,7 @@ GCP Hacking'i öğrenin ve pratik yapın: <img src="/.gitbook/assets/grte.png" a
**İki katman vardır:**
* **OS**, kurulu uygulamaları birbirinden izole tutar.
* **uygulamanın kendisi**, geliştiricilerin **belirli işlevleri açığa çıkarmasına** ve uygulama yeteneklerini yapılandırmasına olanak tanır.
* **uygulamanın kendisi**, geliştiricilerin **belirli işlevleri açmasına** izin verir ve uygulama yeteneklerini yapılandırır.
### UID Ayrımı
@ -33,24 +33,24 @@ GCP Hacking'i öğrenin ve pratik yapın: <img src="/.gitbook/assets/grte.png" a
### Sandbox
**Android Uygulama Sandbox'ı**, **her uygulamanın** **ayrı bir kullanıcı kimliği altında ayrı bir işlem olarak çalışmasına** olanak tanır. Her işlem kendi sanal makinesine sahiptir, bu nedenle bir uygulamanın kodu diğer uygulamalardan izole bir şekilde çalışır.\
Android 5.0(L) itibarıyla **SELinux** uygulanmaktadır. Temelde, SELinux tüm işlem etkileşimlerini reddetti ve ardından **aralarındaki beklenen etkileşimleri yalnızca izin vermek için politikalar oluşturdu**.
**Android Uygulama Sandbox'ı**, **her uygulamanın** **ayrı bir kullanıcı kimliği altında ayrı bir işlem olarak çalışmasına** izin verir. Her işlem kendi sanal makinesine sahiptir, bu nedenle bir uygulamanın kodu diğer uygulamalardan izole bir şekilde çalışır.\
Android 5.0(L) itibarıyla **SELinux** uygulanmaktadır. Temelde, SELinux tüm işlem etkileşimlerini reddetti ve ardından **aralarındaki beklenen etkileşimlere yalnızca izin vermek için politikalar oluşturdu**.
### İzinler
Bir **uygulama yüklediğinizde ve izinler istediğinde**, uygulama **AndroidManifest.xml** dosyasındaki **`uses-permission`** öğelerinde yapılandırılan izinleri istemektedir. **uses-permission** öğesi, istenen iznin adını **name** **özniteliği içinde belirtir.** Ayrıca, belirtilen sürümden daha yüksek sürümlerde izin istemeyi durduran **maxSdkVersion** özniteliğine de sahiptir.\
Android uygulamalarının başlangıçta tüm izinleri istemesi gerekmediğini, dinamik olarak da **izin isteyebileceğini** unutmayın, ancak tüm izinler **manifestoda** **belirtilmelidir.**
Bir uygulama işlevsellik ığa çıkardığında, **yalnızca belirli bir izne sahip uygulamalara erişimi sınırlayabilir**.\
Bir uygulama işlevsellik sunduğunda, **yalnızca belirli bir izne sahip uygulamalara erişimi sınırlayabilir**.\
Bir izin öğesinin üç özniteliği vardır:
* İznin **adı**
* İzin grubu **özniteliği**, ilgili izinleri gruplamak için kullanılır.
* İzinlerin nasıl verildiğini belirten **koruma seviyesi**. Dört tür vardır:
* **Normal**: Uygulama için **bilinen tehditler yoksa** kullanılır. Kullanıcının **onaylaması gerekmez**.
* **Normal**: Uygulama için **bilinen bir tehdit yoksa** kullanılır. Kullanıcının **onaylaması gerekmez**.
* **Tehlikeli**: İznin, istek yapan uygulamaya bazı **yükseltilmiş erişim** sağladığını belirtir. **Kullanıcılardan onay istenir**.
* **İmza**: Yalnızca **bileşeni dışa aktaranla aynı sertifika ile imzalanmış uygulamalar** izin alabilir. Bu, en güçlü koruma türüdür.
* **İmza veya Sistem**: Yalnızca **bileşeni dışa aktaranla aynı sertifika ile imzalanmış uygulamalar veya **sistem düzeyinde erişimle çalışan uygulamalar** izin alabilir.
* **İmza**: Yalnızca **bileşeni dışa aktaranla aynı sertifika ile imzalanmış uygulamalara** izin verilir. Bu, en güçlü koruma türüdür.
* **İmza veya Sistem**: Yalnızca **bileşeni dışa aktaranla aynı sertifika ile imzalanmış uygulamalara** veya **sistem düzeyinde erişimle çalışan uygulamalara** izin verilir.
## Önceden Yüklenmiş Uygulamalar
@ -62,10 +62,10 @@ Bu uygulamalar genellikle **`/system/app`** veya **`/system/priv-app`** dizinler
## Rootlama
Bir fiziksel android cihazda root erişimi elde etmek için genellikle **1 veya 2 güvenlik açığını** **istismar etmeniz** gerekir; bu genellikle **cihaz** ve **sürüm** için **özgüdür**.\
İstismar çalıştığında, genellikle Linux `su` ikili dosyası, kullanıcının PATH ortam değişkeninde belirtilen bir konuma kopyalanır, örneğin `/system/xbin`.
Bir fiziksel android cihazda root erişimi elde etmek için genellikle **1 veya 2 güvenlik açığını** **istismar etmeniz** gerekir; bu genellikle **cihaz** ve **sürüm** için **özgüdüsel** olur.\
İstismar çalıştığında, genellikle Linux `su` ikili dosyası, kullanıcının PATH ortam değişkeninde belirtilen bir konuma, örneğin `/system/xbin`'e kopyalanır.
Su ikili dosyası yapılandırıldıktan sonra, `su` ikili dosyası ile etkileşimde bulunmak ve **root erişim taleplerini işlemek için** başka bir Android uygulaması kullanılır, örneğin **Superuser** ve **SuperSU** (Google Play mağazasında mevcuttur).
Su ikili dosyası yapılandırıldıktan sonra, `su` ikili dosyası ile etkileşimde bulunmak ve **root erişim taleplerini işlemek için** başka bir Android uygulaması kullanılır; bu uygulamalar **Superuser** ve **SuperSU**'dur (Google Play mağazasında mevcuttur).
{% hint style="danger" %}
Rootlama işleminin çok tehlikeli olduğunu ve cihazı ciddi şekilde zarar verebileceğini unutmayın.
@ -76,11 +76,11 @@ Rootlama işleminin çok tehlikeli olduğunu ve cihazı ciddi şekilde zarar ver
**Özel bir yazılım yükleyerek işletim sistemini değiştirmek mümkündür**. Bunu yaparak, eski bir cihazın kullanımını uzatmak, yazılım kısıtlamalarını aşmak veya en son Android koduna erişmek mümkündür.\
**OmniROM** ve **LineageOS**, kullanılacak en popüler yazılımlardan ikisidir.
**Cihazı rootlamanın her zaman gerekli olmadığını** unutmayın; **bazı üreticiler**, bootloader'larının iyi belgelenmiş ve güvenli bir şekilde kilidini açılmasına izin verir.
**Cihazı rootlamak her zaman gerekli değildir**; bazı **üreticiler**, bootloader'larını iyi belgelenmiş ve güvenli bir şekilde kilidini açmaya izin verir.
### Sonuçlar
Bir cihaz rootlandığında, herhangi bir uygulama root olarak erişim talep edebilir. Kötü niyetli bir uygulama bunu elde ederse, neredeyse her şeye erişimi olacak ve telefonu zarar verebilecektir.
Bir cihaz rootlandığında, herhangi bir uygulama root olarak erişim talep edebilir. Kötü niyetli bir uygulama bunu elde ederse, neredeyse her şeye erişimi olacaktır ve telefonu zarar verebilir.
## Android Uygulama Temelleri <a href="#2-android-application-fundamentals" id="2-android-application-fundamentals"></a>
@ -101,22 +101,22 @@ Bir cihaz rootlandığında, herhangi bir uygulama root olarak erişim talep ede
- `x86`: X86 işlemciler için kod
- `mips`: yalnızca MIPS işlemcileri için kod
- assets/
- Uygulamanın ihtiyaç duyduğu çeşitli dosyaları depolar, potansiyel olarak ek yerel kütüphaneler veya DEX dosyaları içerebilir; bazen kötü amaçlı yazılım yazarları tarafından ek kodu gizlemek için kullanılır.
- Uygulamanın ihtiyaç duyduğu çeşitli dosyaları depolar; bunlar bazen kötü amaçlı yazılım yazarları tarafından ek kodu gizlemek için kullanılan ek yerel kütüphaneler veya DEX dosyaları içerebilir.
- res/
- resources.arsc içine derlenmemiş kaynakları içerir.
### **Dalvik & Smali**
Android geliştirmede, **Java veya Kotlin** uygulama oluşturmak için kullanılır. Masaüstü uygulamalarındaki gibi JVM kullanmak yerine, Android bu kodu **Dalvik Executable (DEX) bytecode**'a derler. Daha önce, Dalvik sanal makinesi bu bytecode'u yönetiyordu, ancak şimdi, daha yeni Android sürümlerinde Android Runtime (ART) devralıyor.
Android geliştirmede, **Java veya Kotlin** uygulama oluşturmak için kullanılır. Masaüstü uygulamalarındaki gibi JVM kullanmak yerine, Android bu kodu **Dalvik Executable (DEX) bytecode**'a derler. Daha önce, Dalvik sanal makinesi bu bytecode'u yönetiyordu, ancak şimdi, daha yeni Android sürümlerinde Android Runtime (ART) devralmıştır.
Tersine mühendislik için, **Smali** kritik hale gelir. DEX bytecode'un insan tarafından okunabilir versiyonudur ve kaynak kodunu bytecode talimatlarına çevirerek montaj dili gibi çalışır. Smali ve baksmali, bu bağlamda montaj ve ayrıştırma araçlarını ifade eder.
## Niyetler
Niyetler, Android uygulamalarının bileşenleri arasında veya diğer uygulamalarla iletişim kurmanın birincil yoludur. Bu mesaj nesneleri, uygulamalar veya bileşenler arasında veri taşıyabilir; HTTP iletişimlerinde GET/POST isteklerinin nasıl kullanıldığına benzer.
Niyetler, Android uygulamalarının bileşenleri arasında veya diğer uygulamalarla iletişim kurmanın birincil yoludur. Bu mesaj nesneleri, uygulamalar veya bileşenler arasında veri taşıyabilir; bu, HTTP iletişimlerinde GET/POST isteklerinin nasıl kullanıldığına benzer.
Yani bir Niyet, temelde **bileşenler arasında iletilen bir mesajdır**. Niyetler **belirli bileşenlere veya uygulamalara yönlendirilebilir** veya **belirli bir alıcı olmadan gönderilebilir**.\
Basitçe, Niyet şu amaçlarla kullanılabilir:
Basit olmak gerekirse, Niyet şu amaçlarla kullanılabilir:
* Bir Aktivite başlatmak, genellikle bir uygulama için bir kullanıcı arayüzü açmak
* Sistemi ve uygulamaları değişiklikler hakkında bilgilendirmek için yayınlar olarak
@ -128,11 +128,11 @@ Eğer savunmasızsa, **Niyetler çeşitli saldırılar gerçekleştirmek için k
### Niyet-Filtre
**Niyet Filtreleri**, **bir aktivite, hizmet veya Yayın Alıcısının farklı türdeki Niyetlerle nasıl etkileşimde bulunabileceğini tanımlar**. Temelde, bu bileşenlerin hangi eylemleri gerçekleştirebileceği veya hangi tür yayınları işleyebileceği gibi yeteneklerini tanımlar. Bu filtreleri beyan etmenin birincil yeri **AndroidManifest.xml dosyasıdır**, ancak Yayın Alıcıları için kodlamak da bir seçenektir.
**Niyet Filtreleri**, **bir aktivite, hizmet veya Yayın Alıcısının farklı türdeki Niyetlerle nasıl etkileşimde bulunabileceğini tanımlar**. Temelde, bu bileşenlerin hangi eylemleri gerçekleştirebileceği veya hangi tür yayınları işleyebileceği gibi yeteneklerini tanımlar. Bu filtreleri tanımlamanın birincil yeri **AndroidManifest.xml dosyasıdır**, ancak Yayın Alıcıları için kodlama da bir seçenektir.
Niyet Filtreleri, kategoriler, eylemler ve veri filtrelerinden oluşur ve ek meta verilerin dahil edilmesi mümkündür. Bu yapı, bileşenlerin beyan edilen kriterlere uyan belirli Niyetleri işleyebilmesini sağlar.
Niyet Filtreleri, kategoriler, eylemler ve veri filtrelerinden oluşur ve ek meta verilerin dahil edilmesi mümkündür. Bu yapı, bileşenlerin belirtilen kriterlere uyan belirli Niyetleri işleyebilmesini sağlar.
Android bileşenlerinin (aktivite/hizmet/içerik sağlayıcıları/yayın alıcıları) kritik bir yönü, görünürlükleri veya **kamusal durumlarıdır**. Bir bileşen, **`exported`** değeri **`true`** olarak ayarlandığında kamuya açık kabul edilir ve diğer uygulamalarla etkileşimde bulunabilir. Ancak, geliştiricilerin bu bileşenleri özel tutmak için açıkça ayarlama imkanı vardır; bu, **`exported`** özniteliğini **`false`** olarak ayarlayarak sağlanır.
Android bileşenlerinin (aktivite/hizmet/içerik sağlayıcıları/yayın alıcıları) kritik bir yönü, görünürlükleri veya **kamusal durumlarıdır**. Bir bileşen, **`exported`** değeri **`true`** olarak ayarlandığında kamuya açık kabul edilir ve diğer uygulamalarla etkileşimde bulunabilir. Ancak, geliştiricilerin bu bileşenleri özel tutarak, diğer uygulamalarla istemeden etkileşimde bulunmamalarını sağlamak için bir yolu vardır. Bu, **`exported`** özniteliğini manifest tanımlarında **`false`** olarak ayarlayarak gerçekleştirilir.
Ayrıca, geliştiricilerin bu bileşenlere erişimi daha da güvence altına almak için belirli izinler talep etme seçeneği vardır. **`permission`** özniteliği, yalnızca belirlenen izne sahip uygulamaların bileşene erişebilmesini sağlamak için ayarlanabilir ve bu, kimlerin etkileşimde bulunabileceği üzerinde ek bir güvenlik ve kontrol katmanı ekler.
```java
@ -159,7 +159,7 @@ Bu intent, aşağıdaki örnekte olduğu gibi manifest içinde tanımlanmalıdı
```
Bir intent-filter'ın bir mesajı alabilmesi için **action**, **data** ve **category** ile eşleşmesi gerekir.
"Intent çözümleme" süreci, her mesajın hangi uygulama tarafından alınacağını belirler. Bu süreç, i**ntent-filter bildirimi**nde ayarlanabilen **öncelik niteliğini** dikkate alır ve **daha yüksek önceliğe sahip olan seçilecektir**. Bu öncelik -1000 ile 1000 arasında ayarlanabilir ve uygulamalar `SYSTEM_HIGH_PRIORITY` değerini kullanabilir. Eğer bir **çatışma** ortaya çıkarsa, **kullanıcının karar verebilmesi için** bir "seçici" Penceresi görünür.
"Intent çözümleme" süreci, her mesajı hangi uygulamanın alması gerektiğini belirler. Bu süreç, i**ntent-filter bildirimi** içinde ayarlanabilen **öncelik niteliğini** dikkate alır ve **daha yüksek önceliğe sahip olan seçilecektir**. Bu öncelik -1000 ile 1000 arasında ayarlanabilir ve uygulamalar `SYSTEM_HIGH_PRIORITY` değerini kullanabilir. Eğer bir **çelişki** oluşursa, **kullanıcının karar verebileceği** bir "seçici" Penceresi görünür.
### Açık Intents
@ -167,7 +167,7 @@ Açık bir intent, hedef aldığı sınıf adını belirtir:
```java
Intent downloadIntent = new (this, DownloadService.class):
```
Diğer uygulamalarda daha önce tanımlanan intent'e erişmek için şunu kullanabilirsiniz:
Diğer uygulamalarda daha önce tanımlanmış bir intent'e erişmek için şunu kullanabilirsiniz:
```java
Intent intent = new Intent();
intent.setClassName("com.other.app", "com.other.app.ServiceName");
@ -175,7 +175,7 @@ context.startService(intent);
```
### Pending Intents
Bunlar diğer uygulamaların **uygulamanız adına eylemler gerçekleştirmesine** izin verir, uygulamanızın kimliğini ve izinlerini kullanarak. Bir Pending Intent oluştururken **bir intent ve gerçekleştirilecek eylem belirtilmelidir**. Eğer **belirtilen intent Açık değilse** (hangi intent'in bunu çağırabileceğini belirtmiyorsa) **kötü niyetli bir uygulama, belirtilen eylemi** mağdur uygulama adına gerçekleştirebilir. Dahası, **bir eylem belirtilmemişse**, kötü niyetli uygulama **mağdur adına herhangi bir eylem gerçekleştirebilir**.
Bunlar diğer uygulamaların **uygulamanız adına eylemler gerçekleştirmesine** olanak tanır, uygulamanızın kimliği ve izinlerini kullanarak. Bir Pending Intent oluştururken **bir intent ve gerçekleştirilecek eylem belirtilmelidir**. Eğer **belirtilen intent Açık değilse** (hangi intent'in bunu çağırabileceğini belirtmiyorsa) **kötü niyetli bir uygulama, belirtilen eylemi** mağdur uygulama adına gerçekleştirebilir. Dahası, **bir eylem belirtilmemişse**, kötü niyetli uygulama **mağdur adına herhangi bir eylem gerçekleştirebilir**.
### Broadcast Intents
@ -183,16 +183,16 @@ Bunlar diğer uygulamaların **uygulamanız adına eylemler gerçekleştirmesine
Alternatif olarak, **yayın gönderirken bir izin belirtmek de mümkündür**. Alıcı uygulamanın bu izne sahip olması gerekecektir.
**İki tür** Yayın vardır: **Normal** (asenkron) ve **Sıralı** (senkron). **Sıra**, **alıcı** öğesindeki **yapılandırılmış önceliğe** dayanır. **Her uygulama Yayını işleyebilir, iletebilir veya düşürebilir.**
**İki tür** Yayın vardır: **Normal** (asenkron) ve **Sıralı** (senkron). **Sıralama**, **alıcı** öğesindeki **yapılandırılmış önceliğe** dayanır. **Her uygulama Yayını işleyebilir, iletebilir veya düşürebilir.**
`Context` sınıfından `sendBroadcast(intent, receiverPermission)` fonksiyonunu kullanarak **bir yayın göndermek** mümkündür.\
Ayrıca, **`LocalBroadCastManager`**'dan **`sendBroadcast`** fonksiyonunu kullanarak **mesajın uygulamadan asla çıkmamasını** sağlayabilirsiniz. Bunu kullanarak bir alıcı bileşenini dışa aktarmanıza gerek kalmaz.
Ayrıca, **`LocalBroadCastManager`**'dan **`sendBroadcast`** fonksiyonunu kullanarak **mesajın uygulamadan çıkmamasını** sağlayabilirsiniz. Bunu kullanarak bir alıcı bileşenini dışa aktarmanıza bile gerek kalmaz.
### Sticky Broadcasts
Bu tür Yayınlar **gönderildikten uzun süre sonra erişilebilir**.\
Bunlar API seviyesi 21'de kullanımdan kaldırıldı ve **kullanılmamaları önerilir**.\
**Herhangi bir uygulamanın verileri dinlemesine, aynı zamanda bunları değiştirmesine izin verir.**
**Herhangi bir uygulamanın verileri dinlemesine, ayrıca bunları değiştirmesine olanak tanır.**
"sticky" kelimesini içeren fonksiyonlar bulursanız, örneğin **`sendStickyBroadcast`** veya **`sendStickyBroadcastAsUser`**, **etkisini kontrol edin ve kaldırmaya çalışın**.
@ -212,7 +212,7 @@ Android uygulamalarında, **deep links** bir eylemi (Intent) doğrudan bir URL a
</intent-filter>
[...]
```
Önceki örnekteki şema `exampleapp://` (aynı zamanda **`category BROWSABLE`**'ı da not edin)
Önceki örnekteki şema `examplescheme://` (aynı zamanda **`category BROWSABLE`**'ı da not edin)
Ardından, veri alanında **host** ve **path** belirtebilirsiniz:
```xml
@ -231,15 +231,15 @@ HTML sayfaları kullanmadan [derin bağlantıları nasıl çağıracağınızı
## AIDL - Android Arayüz Tanım Dili
**Android Arayüz Tanım Dili (AIDL)**, Android uygulamalarında **işlem arası iletişim** (IPC) yoluyla istemci ve hizmet arasındaki iletişimi kolaylaştırmak için tasarlanmıştır. Android'de başka bir işlemin belleğine doğrudan erişim izni verilmediğinden, AIDL, nesneleri işletim sistemi tarafından anlaşılan bir formata marşal ederek süreci basitleştirir ve farklı işlemler arasında iletişimi kolaylaştırır.
**Android Arayüz Tanım Dili (AIDL)**, Android uygulamalarında **işlem arası iletişim** (IPC) yoluyla istemci ve hizmet arasında iletişimi kolaylaştırmak için tasarlanmıştır. Android'de başka bir işlemin belleğine doğrudan erişim izni verilmediğinden, AIDL, nesneleri işletim sistemi tarafından anlaşılan bir formata marşallayarak süreci basitleştirir ve farklı işlemler arasında iletişimi kolaylaştırır.
### Temel Kavramlar
- **Bağlı Hizmetler**: Bu hizmetler, IPC için AIDL kullanarak, aktivitelerin veya bileşenlerin bir hizmete bağlanmasını, isteklerde bulunmasını ve yanıt almasını sağlar. Hizmetin sınıfındaki `onBind` metodu, etkileşimi başlatmak için kritik öneme sahiptir ve güvenlik incelemesi için zafiyet arayışında önemli bir alan olarak işaretlenmelidir.
- **Messenger**: Bağlı bir hizmet olarak çalışan Messenger, `onBind` metodunu kullanarak veri işleme odaklı IPC'yi kolaylaştırır. Bu metodun, güvensiz veri işleme veya hassas fonksiyonların yürütülmesi açısından dikkatlice incelenmesi önemlidir.
- **Messenger**: Bağlı bir hizmet olarak çalışan Messenger, `onBind` metodu aracılığıyla veri işleme odaklı IPC'yi kolaylaştırır. Bu metodun, güvensiz veri işleme veya hassas fonksiyonların yürütülmesi açısından dikkatlice incelenmesi önemlidir.
- **Binder**: Binder sınıfının doğrudan kullanımı, AIDL'nin soyutlaması nedeniyle daha az yaygındır, ancak Binder'ın farklı işlemlerin bellek alanları arasında veri transferini kolaylaştıran bir çekirdek düzeyinde sürücü olduğunu anlamak faydalıdır. Daha fazla bilgi için [https://www.youtube.com/watch?v=O-UHvFjxwZ8](https://www.youtube.com/watch?v=O-UHvFjxwZ8) adresine başvurabilirsiniz.
- **Binder**: AIDL'nin soyutlaması nedeniyle Binder sınıfının doğrudan kullanımı daha az yaygındır, ancak Binder'ın farklı işlemlerin bellek alanları arasında veri transferini kolaylaştıran bir çekirdek düzeyinde sürücü olduğunu anlamak faydalıdır. Daha fazla bilgi için [https://www.youtube.com/watch?v=O-UHvFjxwZ8](https://www.youtube.com/watch?v=O-UHvFjxwZ8) adresine başvurabilirsiniz.
## Bileşenler
@ -249,7 +249,7 @@ Bunlar: **Aktiviteler, Hizmetler, Yayın Alıcıları ve Sağlayıcılar.**
Android uygulamalarında, **aktiviteler** ekranlar gibidir ve uygulamanın kullanıcı arayüzünün farklı bölümlerini gösterir. Bir uygulama birçok aktiviteye sahip olabilir, her biri kullanıcıya benzersiz bir ekran sunar.
**Başlatıcı aktivite**, bir uygulamanın ana kapısıdır ve uygulamanın simgesine dokunduğunuzda başlatılır. Uygulamanın manifest dosyasında belirli MAIN ve LAUNCHER intentleri ile tanımlanmıştır:
**Başlatıcı aktivite**, bir uygulamanın simgesine dokunduğunuzda başlatılan ana geçittir. Uygulamanın manifest dosyasında belirli MAIN ve LAUNCHER intentleri ile tanımlanmıştır:
```markup
<activity android:name=".LauncherActivity">
<intent-filter>
@ -258,9 +258,9 @@ Android uygulamalarında, **aktiviteler** ekranlar gibidir ve uygulamanın kulla
</intent-filter>
</activity>
```
Tüm uygulamaların bir başlatıcı aktiviteye ihtiyacı yoktur, özellikle kullanıcı arayüzü olmayanlar, arka plan hizmetleri gibi.
Tüm uygulamaların bir başlatıcı etkinliğe ihtiyacı yoktur, özellikle de arka plan hizmetleri gibi kullanıcı arayüzü olmayanlar.
Aktiviteler, manifestoda "exported" olarak işaretlenerek diğer uygulamalara veya süreçlere sunulabilir. Bu ayar, diğer uygulamaların bu aktiviteyi başlatmasına izin verir:
Etkinlikler, manifestoda "exported" olarak işaretlenerek diğer uygulamalara veya süreçlere sunulabilir. Bu ayar, diğer uygulamaların bu etkinliği başlatmasına izin verir:
```markdown
<service android:name=".ExampleExportedService" android:exported="true"/>
```
@ -292,7 +292,7 @@ super.onCreate();
Servisler çok yönlüdür; çeşitli şekillerde başlatılabilirler, **Intents** bunları bir uygulamanın giriş noktası olarak başlatmanın birincil yöntemidir. Bir servis `startService` yöntemi kullanılarak başlatıldığında, `onStart` yöntemi devreye girer ve `stopService` yöntemi açıkça çağrılana kadar çalışmaya devam eder. Alternatif olarak, bir servisin rolü aktif bir istemci bağlantısına bağlıysa, istemciyi servise bağlamak için `bindService` yöntemi kullanılır ve veri geçişi için `onBind` yöntemi devreye girer.
Servislerin ilginç bir uygulaması, arka planda müzik çalma veya kullanıcıların bir uygulama ile etkileşimini engellemeden ağ verisi alma gibi işlemlerdir. Ayrıca, servisler **dışa aktarma** yoluyla aynı cihazdaki diğer süreçlere erişilebilir hale getirilebilir. Bu varsayılan bir davranış değildir ve Android Manifest dosyasında açık bir yapılandırma gerektirir:
Servislerin ilginç bir uygulaması, arka planda müzik çalma veya kullanıcıların bir uygulama ile etkileşimini engellemeden ağ verisi alma gibi işlemlerdir. Ayrıca, servisler **dışa aktarma** yoluyla aynı cihazdaki diğer süreçlere erişilebilir hale getirilebilir. Bu, varsayılan bir davranış değildir ve Android Manifest dosyasında açık bir yapılandırma gerektirir:
```xml
<service android:name=".ExampleExportedService" android:exported="true"/>
```
@ -300,19 +300,19 @@ Servislerin ilginç bir uygulaması, arka planda müzik çalma veya kullanıcıl
**Broadcast receivers** mesajlaşma sisteminde dinleyici olarak işlev görür ve birden fazla uygulamanın sistemden gelen aynı mesajlara yanıt vermesine olanak tanır. Bir uygulama **iki ana yolla** **bir alıcı kaydedebilir**: uygulamanın **Manifest** dosyası aracılığıyla veya uygulamanın kodu içinde **dinamik olarak** **`registerReceiver`** API'si ile. Manifest'te, yayınlar izinlerle filtrelenirken, dinamik olarak kaydedilen alıcılar kaydedilme sırasında izinleri de belirtebilir.
**Intent filtreleri**, her iki kayıt yönteminde de kritik öneme sahiptir ve hangi yayınların alıcıyı tetikleyeceğini belirler. Eşleşen bir yayın gönderildiğinde, alıcının **`onReceive`** metodu çağrılır ve uygulamanın buna göre tepki vermesini sağlar; örneğin, düşük pil uyarısına yanıt olarak davranışını ayarlamak gibi.
**Intent filtreleri**, her iki kayıt yönteminde de kritik öneme sahiptir ve hangi yayınların alıcıyı tetikleyeceğini belirler. Eşleşen bir yayın gönderildiğinde, alıcının **`onReceive`** metodu çağrılır ve uygulamanın buna göre tepki vermesini sağlar; örneğin, düşük pil uyarısına yanıt olarak davranışı ayarlamak gibi.
Yayınlar **asenkron** olabilir, tüm alıcılara sırasız ulaşır veya **senkron** olabilir, burada alıcılar belirlenen önceliklere göre yayını alır. Ancak, herhangi bir uygulamanın kendisini önceliklendirebileceği ve bir yayını kesebileceği potansiyel güvenlik riskini not etmek önemlidir.
Yayınlar **asenkron** olabilir, tüm alıcılara sırasız ulaşır veya **senkron** olabilir; burada alıcılar, belirlenen önceliklere göre yayını alır. Ancak, herhangi bir uygulamanın kendisini önceliklendirebileceği ve bir yayını kesebileceği potansiyel güvenlik riskini not etmek önemlidir.
Bir alıcının işlevselliğini anlamak için, sınıfı içinde **`onReceive`** metodunu arayın. Bu metodun kodu, alınan Intent'i manipüle edebilir ve alıcıların veri doğrulama ihtiyacını vurgular, özellikle **Sıralı Yayınlar**'da, bu Intent'i değiştirebilir veya atlayabilir.
Bir alıcının işlevselliğini anlamak için, sınıfı içinde **`onReceive`** metodunu arayın. Bu metodun kodu, alınan Intent'i manipüle edebilir ve alıcıların veri doğrulama ihtiyacını vurgular; özellikle **Sıralı Yayınlar**'da, Intent'i değiştirebilir veya atlayabilir.
### Content Provider
**Content Providers**, uygulamalar arasında **yapılandırılmış verilerin paylaşımı** için gereklidir ve veri güvenliğini sağlamak için **izinlerin** uygulanmasının önemini vurgular. Uygulamalara veritabanları, dosya sistemleri veya web gibi çeşitli kaynaklardan verilere erişim sağlar. **`readPermission`** ve **`writePermission`** gibi belirli izinler, erişimi kontrol etmek için kritik öneme sahiptir. Ayrıca, uygulamanın manifestinde **`grantUriPermission`** ayarları aracılığıyla geçici erişim sağlanabilir ve `path`, `pathPrefix` ve `pathPattern` gibi nitelikler kullanılarak ayrıntılı erişim kontrolü yapılabilir.
**Content Providers**, uygulamalar arasında **yapılandırılmış verilerin paylaşımı** için gereklidir ve veri güvenliğini sağlamak için **izinlerin** uygulanmasının önemini vurgular. Uygulamalara, veritabanları, dosya sistemleri veya web gibi çeşitli kaynaklardan veri erişimi sağlar. **`readPermission`** ve **`writePermission`** gibi belirli izinler, erişimi kontrol etmek için kritik öneme sahiptir. Ayrıca, uygulamanın manifestinde **`grantUriPermission`** ayarları aracılığıyla geçici erişim sağlanabilir; `path`, `pathPrefix` ve `pathPattern` gibi nitelikler detaylı erişim kontrolü için kullanılır.
Girdi doğrulaması, SQL enjeksiyonu gibi güvenlik açıklarını önlemek için son derece önemlidir. Content Providers, veri manipülasyonu ve uygulamalar arasında paylaşımı kolaylaştıran temel işlemleri destekler: `insert()`, `update()`, `delete()`, ve `query()`.
**FileProvider**, dosyaları güvenli bir şekilde paylaşmaya odaklanan özel bir Content Provider'dır. Erişimi kontrol etmek için belirli niteliklerle uygulamanın manifestinde tanımlanır ve klasör yapılandırmalarını gösteren `android:exported` ve `android:resource` ile belirtilir. Duyarlı verilerin yanlışlıkla ifşa edilmesini önlemek için dizinleri paylaşırken dikkatli olunmalıdır.
**FileProvider**, dosyaları güvenli bir şekilde paylaşmaya odaklanan özel bir Content Provider'dır. Erişimi kontrol etmek için belirli niteliklerle uygulamanın manifestinde tanımlanır; bu nitelikler, klasör yapılandırmalarını gösteren `android:exported` ve `android:resource` ile belirtilir. Duyarlı verilerin yanlışlıkla ifşa edilmesini önlemek için dizinleri paylaşırken dikkatli olunmalıdır.
FileProvider için örnek manifest bildirimi:
```xml
@ -347,26 +347,26 @@ Android, iki ana WebView türü sunar:
İçerik yüklemek için ````loadUrl````, ````loadData````, ve ````loadDataWithBaseURL```` gibi yöntemler mevcuttur. Bu URL'lerin veya dosyaların **kullanım için güvenli** olduğundan emin olmak kritik öneme sahiptir. Güvenlik ayarları, ````WebSettings```` sınıfı aracılığıyla yönetilebilir. Örneğin, JavaScript'i ````setJavaScriptEnabled(false)```` ile devre dışı bırakmak, XSS saldırılarını önleyebilir.
JavaScript "Bridge", Java nesnelerinin JavaScript ile etkileşimde bulunmasına olanak tanır ve Android 4.2'den itibaren güvenlik için yöntemlerin ````@JavascriptInterface```` ile işaretlenmesi gerekir.
JavaScript "Bridge", Java nesnelerinin JavaScript ile etkileşimde bulunmasına olanak tanır ve Android 4.2'den itibaren güvenlik için yöntemlerin ````@JavascriptInterface```` ile işaretlenmesi gerekmektedir.
İçerik erişimine izin vermek (````setAllowContentAccess(true)````), WebView'ların İçerik Sağlayıcılarına ulaşmasına olanak tanır, bu da içerik URL'leri güvenli olarak doğrulanmadıkça bir risk oluşturabilir.
İçerik erişimine izin vermek (````setAllowContentAccess(true)````), WebView'lerin İçerik Sağlayıcılarına ulaşmasına olanak tanır, bu da içerik URL'leri güvenli olarak doğrulanmadıkça bir risk oluşturabilir.
Dosya erişimini kontrol etmek için:
- Dosya erişimini devre dışı bırakmak (````setAllowFileAccess(false)````), dosya sistemine erişimi sınırlar, belirli varlıklar için istisnalarla, bunların yalnızca hassas olmayan içerikler için kullanılmasını sağlar.
- Dosya erişimini devre dışı bırakmak (````setAllowFileAccess(false)````), dosya sistemine erişimi sınırlar, belirli varlıklar için istisnalarla, yalnızca hassas olmayan içerikler için kullanılmasını sağlar.
## Other App Components and Mobile Device Management
## Diğer Uygulama Bileşenleri ve Mobil Cihaz Yönetimi
### **Digital Signing of Applications**
### **Uygulamaların Dijital İmzalanması**
- **Dijital imza**, Android uygulamaları için zorunludur, uygulamaların yüklemeden önce **gerçekten yazıldığı** garantisini sağlar. Bu süreç, uygulama kimliği için bir sertifika kullanır ve yükleme sırasında cihazın paket yöneticisi tarafından doğrulanmalıdır. Uygulamalar **kendinden imzalı veya harici bir CA tarafından sertifikalandırılmış** olabilir, yetkisiz erişime karşı koruma sağlar ve uygulamanın cihaza teslimatı sırasında değiştirilmediğini garanti eder.
- **Dijital imzalama**, Android uygulamaları için zorunludur, uygulamaların yüklemeden önce **gerçekten yazıldığı** garantisini sağlar. Bu süreç, uygulama kimliği için bir sertifika kullanır ve yükleme sırasında cihazın paket yöneticisi tarafından doğrulanmalıdır. Uygulamalar **kendinden imzalı veya harici bir CA tarafından sertifikalandırılmış** olabilir, yetkisiz erişime karşı koruma sağlar ve uygulamanın cihazına teslimatı sırasında değiştirilmediğini garanti eder.
### **App Verification for Enhanced Security**
### **Geliştirilmiş Güvenlik için Uygulama Doğrulaması**
- **Android 4.2**'den itibaren, **Uygulamaları Doğrula** adlı bir özellik, kullanıcıların yüklemeden önce uygulamaların güvenliğini kontrol etmelerine olanak tanır. Bu **doğrulama süreci**, kullanıcıları potansiyel olarak zararlı uygulamalar hakkında uyarabilir veya özellikle kötü niyetli olanların yüklenmesini engelleyebilir, kullanıcı güvenliğini artırır.
- **Android 4.2**'den itibaren, **Uygulamaları Doğrula** adı verilen bir özellik, kullanıcıların yüklemeden önce uygulamaların güvenliğini kontrol etmelerine olanak tanır. Bu **doğrulama süreci**, kullanıcıları potansiyel olarak zararlı uygulamalar hakkında uyarabilir veya özellikle kötü niyetli olanların yüklenmesini engelleyebilir, kullanıcı güvenliğini artırır.
### **Mobile Device Management (MDM)**
### **Mobil Cihaz Yönetimi (MDM)**
- **MDM çözümleri**, **Cihaz Yönetimi API'si** aracılığıyla mobil cihazlar için **denetim ve güvenlik** sağlar. Mobil cihazları etkili bir şekilde yönetmek ve güvence altına almak için bir Android uygulamasının yüklenmesini gerektirir. Ana işlevler arasında **şifre politikalarını uygulamak**, **depolama şifrelemesini zorunlu kılmak** ve **uzaktan veri silme izni vermek** bulunur, bu da mobil cihazlar üzerinde kapsamlı kontrol ve güvenlik sağlar.
- **MDM çözümleri**, **Cihaz Yönetimi API'si** aracılığıyla mobil cihazlar için **denetim ve güvenlik** sağlar. Mobil cihazları etkili bir şekilde yönetmek ve güvence altına almak için bir Android uygulamasının yüklenmesini gerektirir. Ana işlevler arasında **şifre politikalarının uygulanması**, **depolama şifrelemesinin zorunlu kılınması** ve **uzaktan veri silme izni verme** bulunur, bu da mobil cihazlar üzerinde kapsamlı kontrol ve güvenlik sağlar.
```java
// Example of enforcing a password policy with MDM
DevicePolicyManager dpm = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);