Author Archives: Erkan YILDIZ

About Erkan YILDIZ

Software Engineer, iOS - Tokyo | Istanbul

“What happens on your iPhone, stays on your iPhone” really?

Even though Apple occasionally comes up with vulnerabilities that cause data leaks, it is known for attaching great importance to privacy policies in its products in general.
Especially Sign in with Apple feature announced with iOS 13, is one of the latest examples of this.
However, when it comes to data security and privacy, not everything may go as Apple intended.
Let's touch upon what a malicious app developer or various SDKs innocently added to the apps can do without any permission from the user or abuse various permissions granted:

What happens on your iPhone, stays on your iPhone.
Photo credit: Chris Velazco

Paste Board

Paste Board is the unit where copy-paste operations are managed on iOS.
All apps can read copied text or images from here without any permission.
It does not matter whether the app is actively on the screen or in the background, it just needs to be running.
An explicit action such as "paste" command by the user is also not required.
So, text or images copied by the users are vulnerable to abuse.

In addition, apps can write their own text or images to the Paste Board, without user's consent.
Thus, things that may put the user in a difficult situation can be placed to the Paste Board, as if the user copied them.

For technical details, please see Apple's docs.

Photos

Apps that are granted photos access, along with all the photos, can also access the data embedded in these photos such as location and time.
Hence, regardless of location permission, apps can obtain location info both retroactively and continiously as the user keeps taking photos.

With iOS 11, Apple had announced a solution that could partially work.
A photo selection UI component called UIImagePickerController, designed to give only the selected photos to the app once, instead of granting access to all photos forever.
However, since Apple does not force the use of this component, it is not preferred by the app developers and the apps often require unnecessary full photos access.

For technical details, please see this issue on GitHub.

Microphone

Apps that are granted microphone access do not have to show any warning during voice recording.
If the app is recording audio while in the background or making a voice call, iOS automatically chages the color of the status bar and notifies the user visually.
However, if the app is recording audio while actively on the screen, it may not always be possible to notice this.
For example, an app like WhatsApp granted microphone access for voice calls, may be recording audio, not only during the voice calls, but also while text messaging or even on its settings screen.

Update: On WWDC 2020 keynote Apple announced that there will always be an indicator dot in the status bar, while an app is recording audio on iOS 14.

Camera

Procedure of video recording with the camera is similar to the audio recording with the microphone.
Apps with camera permission can secretly record video while actively on the screen without any indicators.

Update: On WWDC 2020 keynote Apple announced that there will always be an indicator dot in the status bar, while an app is recording video on iOS 14.

Bluetooth

While iOS apps are actively working, they can scan the surrounding Bluetooth beacons without any permission.
Thus, with the beacons placed in points with high pedestrian traffic such as shopping malls, stadiums and public transportation, it is possible to track how much time a user spends at an exact point, with exact day and time info.
With iOS 13, Apple restricted this feature, and now requiring explicit user permission to use Bluetooth.

For technical details, please see Apple's docs.

WiFi SSID

WiFi SSID the device is connected to can be read by all apps without any permission.
This may give a clue about the user's location, especially if it is a publicly available network.

Apple first restricted this flaw with iOS 12, then tightened the requirements with iOS 13.
As of iOS 13, apps must have location permission or be capable of network settings, to access SSID information.

For technical details, please see Apple's docs.

URI Scheme

URI scheme, in simple terms, is the first part of a URL and specifies its type.
The best known examples are such as http://, ftp://, mailto://.

All apps can define their own URI schemes like twitter://, instagram:// youtube://, nflx://.
If a URL starts with a URI scheme defined by any app, iOS will open the URL with that associated app.
This feature is very important for cross-app transitions, deep linking and 3rd party login features.

However, all apps can discover which other apps are installed on a user's device by querying if some specific URI schemes are defined or not.

Thus, fine targeted ads becomes possible via advanced segmentations such as 'Netflix and Amazon Prime Video apps are installed on this user's device, but not there are no social media apps'.

Although Apple has introduced some restrictions for querying URI schemes with iOS 9, this method is still technically possible as of iOS 13.

Another important point is that there are no restrictions on which app can define which URI schemes on iOS.
For this reason, a completely irrelevant app can manage to open all the URLs that start with youtube:// just by defining youtube:// URI scheme.
This may also allow various phishing attacks.

For technical details, please see Apple's docs.

In-App Browser

In some apps, the links that are clicked by user can be opened with an interface component called WKWebView (or older UIWebView) within the app, without switching to Safari app.
All browsing activity inside this in-app browser can be read by the app.
It can be associated with previous or future browsing activities and may be used for profile linking.

Apple introduced the component called 'SFSafariViewController' which could be the solution to this problem with iOS 9.
The browsing activity under SFSafariViewController cannot be read by the apps.
But, since Apple does not force the use of this component, there are still some apps that use 'WKWebView'.

For technical details, please see Apple's docs.

Fingerprinting

Although it is not only specific to iOS devices, it may be possible to detect and track the user by collecting all kinds of permanent or dynamic info that can be obtained from the device.
This includes but not limited to; selected language and region settings, time zone, device model, storage capacity, percentage of free storage, battery percentage, whether the charging cable is connected or not, operator information, device name, Apple Watch pairing status, connection type, IP address and access permission states.

Device Name

The device name is the name of the device displayed in places such as iTunes, AirDrop and Find My iPhone.
Generally, it is like "John's iPhone" or "Jane's iPad", and it can give clues about the user's name and gender.
It can be read by all apps running on the device without requiring any permission.
It can be set from Settings > General > About screen of iOS.

Operator

The cellular service operator the device is connected to can be read by all apps without permission.
This can give a clue about the user's whereabouts.
In addition, when the user visits another country while the roaming setting is on, change of the operator information can also give clues about which country the user went to, even if no internet connection is made.

For technical details, please see Apple's docs.

NSNull

NSNull is a singleton instance representing null values on iOS.
However, the NSNull singleton remains in system-wide memory, not application-specific.
Therefore, if the pointer value is printed and examined from different applications, it can be observed that it is exactly the same address.
This value will change only when the device is rebooted, otherwise it will stay the same.

Exactly the same memory address values such as 0x1ebe1bc30 can allow user detection and tracking even among the apps that do not belong to the same developer.

For technical details, please see Apple's docs.

IDFA

Identifier for Advertisers (IDFA) is Apple's official way for app developers to track users and serve advertisements.
Unfortunately, as of iOS 13 it is still enabled by default, and can be opted-out using Limit Ad Tracking switch under Settings > Privacy > Advertising screen of iOS.

Until iOS 10, IDFA value was accesible even for opted-out users, and app developers were just asked to respect users' preference about it, without further limitation.
But with iOS 10, IDFA value was replaced with a hardcoded 00000000-0000-0000-0000-000000000000 value for all opted-out users.

For technical details, please see Apple's docs.

Keychain - iCloud - GameCenter

Encrypted data store Keychain, cloud data service iCloud and online gaming service Game Center, may allow developers to identify the user even after the app is deleted and reinstalled.

In some apps that require login, this can be a convenience for the user.
But it can also be used for user detection and tracking before the user logs in, or even logs in with a different account.

While the data stored in the local Keychain is cleared only when the device is reset, iCloud and Game Center data are accessible unless the user logs out from iOS Settings.

Summary

These are some of the examples of what a malicious app developer or various SDKs in the apps can do.
Apple regulary removes some apps from the App Store, and even terminates Apple Developer Program memberships for violating its review guidelines.
But, usually this happens only if the issue is reported by the users or detected by review team by chance.
So, it is always better to know the systems we are using everyday, and to be on the precautious side.

“iPhone’unuzda olan iPhone’unuzda kalır” mı?

For the English version of this post: https://erkanyildiz.me/blog/what-happens-on-your-iphone-stays-on-your-iphone-really/

Apple, her ne kadar ara sıra veri sızıntılarına neden olan açıklarla gündeme gelse de, ürünlerinde genel olarak gizlilik politikalarına oldukça önem veren bir firma.
Özellikle iOS 13 ile duyurduğu Sign in with Apple özelliği de bunun en son örneklerinden biri.
Fakat, yine de veri güvenliği ve gizlilik söz konusu olunca her şey Apple'ın istediği gibi olmayabiliyor.
Kötü niyetli geliştiricilerin ya da uygulamalara masumca eklenen çeşitli SDK'lerin kullanıcıdan izin almadan neler yapabileceklerine ya da aldıkları çeşitli izinleri nasıl suistimal edebileceklerine değinelim:

What happens on your iPhone, stays on your iPhone.
Fotoğraf: Chris Velazco

Paste Board

Paste Board, iOS'te kopyala-yapıştır işlemlerinin yönetildiği birimdir.
Tüm uygulamalar, kopyalanan metin ya da görselleri herhangi bir izne tâbi olmadan buradan okuyabilirler.
Uygulamanın aktif olarak ekranda ya da arkaplanda oluşu farketmez, sadece çalışıyor olması yeterlidir.
"Yapıştır" komutu gibi bir kullanıcı aksiyonu da gerekmez.
Bu nedenle, kullanıcıların kopyaladığı metin ya da görseller uygulama geliştiricilerin istismarına açık durumdadır.

Ayrıca, uygulamalar kendi istedikleri metin ve görselleri kullanıcıdan habersiz şekilde Paste Board'a yazabilirler.
Böylece kullanıcıyı zor durumda bırakacak şeyler, kullanıcı kopyalamış gibi Paste Board'a yerleştirilebilir.

Kullanıcı adı, parola, private link gibi sıkça kopyala-yapıştır yapılan verilerin başka uygulamalar tarafından okunma olasılığını en aza indirmek için, yapıştırma işleminden sonra önemsiz metin ya da görseller gibi başka şeyler kopyalamak, ya da Paste Board temizliği yapabilen uygulamalardan birini kullanmak önerilebilir.

Teknik ayrıntılar için Apple'ın dokümantasyon sayfasını ziyaret edebilirsiniz.

Fotoğraf Erişim İzni

Fotoğraf erişimi için izin verilen uygulamalar, tüm fotoğraflarla birlikte, konum ve zaman gibi fotoğraflara gömülü bazı verilere de erişebilirler.
Böylece konum izninden bağımsız olarak, hem geçmişe dönük, hem de kullanıcı fotoğraf çektikçe anlık olarak konum bilgisini elde edebilirler.

Apple, bu sorunu tamamen çözmese de kısmen işe yarayabilecek bir çözümü iOS 11 ile duyurmuştu.
Fotoğraf seçmeye yarayan UIImagePickerController adlı arayüz bileşeni, tüm fotograflara erişim hakkı yerine sadece o an için seçilen fotoğrafları uygulamaya verecek şekilde çalışıyor.
Fakat Apple bu bileşenin kullanımını zorunlu tutmadığı için, geliştiriciler tarafından pek tercih edilmiyor ve uygulamalar genelde gereksiz yere tam fotoğraf erişimi talebinde bulunuyor.

Teknik ayrıntılar için bu GitHub issue sayfasını ziyaret edebilirsiniz.

Mikrofon Erişim İzni

Mikrofon erişimi için izin verilen uygulamalar ses kaydı esnasında herhangi bir uyarı göstermek zorunda değildirler.
Eğer uygulama sesli arama gerçekleştiriyorsa, ya da arkaplanda iken ses kaydı yapıyorsa, iOS otomatik olarak status bar'ın rengini değiştirerek bunu kullanıcıya görsel olarak bildiriyor.
Fakat uygulama aktif olarak ekrandayken ses kaydı yapıyorsa, bunu anlamak her zaman mümkün olmayabiliyor.
Yani, sesli arama için mikrofon izni verilen WhatsApp gibi uygulamalar, yalnızca sesli arama esnasında değil, yazılı şekilde mesajlaşırken ya da ayarlar ekranındayken bile ses kaydı yapıyor olabilirler.

Güncelleme: Apple, 22 Haziran 2020 tarihinde gerçekleştirdiği WWDC 2020 etkinliğinde, iOS 14'te herhangi bir uygulamanın ses kaydı yapıyor olması durumunda status bar'da uyarı amaçlı bir nokta belireceğini duyurdu.

Kamera Erişim İzni

Kamera ile görüntü kaydının işleyişi mikrofon ile ses kaydına benzer şekildedir.
Kamera iznine sahip uygulamalar, aktif olarak ekrandayken herhangi bir belirti vermeden gizlice görüntü kaydı yapabilirler.

Güncelleme: Apple, 22 Haziran 2020 tarihinde gerçekleştirdiği WWDC 2020 etkinliğinde, iOS 14'te herhangi bir uygulamanın görüntü kaydı yapıyor olması durumunda status bar'da uyarı amaçlı bir nokta belireceğini duyurdu.

Bluetooth

iOS uygulamaları aktif olarak çalışırken etrafta bulunan Bluetooth beacon'ları herhangi bir izne tâbi olmadan tarayabilirler.
Böylece, anlaşmalı mağazalar, AVM'ler, istasyonlar ve stadyumlar gibi yoğun insan trafiği yaşanan yerlere yerleştirilen beacon'lar ile kullanıcının hangi gün ve saatte, tam olarak hangi noktada ne kadar vakit harcadığı aytıntılı olarak takip edilebilir.
Apple, iOS 13 ile birlikte bu duruma kısıtlama getirerek Bluetooth kullanımı için kullanıcı iznini şart koşmaya başladı.

Teknik ayrıntılar için Apple'ın dokümantasyon sayfasını ziyaret edebilirsiniz.

WiFi SSID

Cihazın bağlı olduğu WiFi'ın SSID'si tüm uygulamalar tarafından herhangi bir izne tâbi olmadan okunabilir.
Bu da kullanıcının konumu hakkında ipucu verebilir.

Apple, ilk olarak iOS 12 ile bu duruma kısıtlama getirdi, daha sonra iOS 13 ile birlikte şartları daha da sıkılaştırdı.
iOS 13 itibariyle uygulamalar SSID bilgisine erişebilmek için konum iznine sahip olmak ya da ağ ayarları yapabilme yetkisine sahip olmak zorundalar.

Teknik ayrıntılar için Apple'ın dokümantasyon sayfasını ziyaret edebilirsiniz.

URI Scheme

URI scheme, basit şekilde ifade edilecek olursa, bir URL'in en başında bulunan ve türünü belirten kısımdır.
En bilinen örnekleri http:// , ftp://, mailto:// gibileridir.

Tüm uygulamalar twitter://, instagram:// youtube://, nflx:// gibi kendi URI scheme'lerini tanımlayabilirler.
iOS'te açılmak istenen bir URL, herhangi bir uygulama tarafından tanımlanmış bir URI scheme ile başlıyorsa, söz konusu ilişkili uygulama ile açılır.
Bu özellik, uygulamalar arası geçişler, deep linking ve 3rd party login işlemleri için oldukça önemlidir.

Fakat tüm uygulamalar istedikleri URI scheme'lerin sistemde tanımlanmış olup olmadığını sorgulayarak, kullanıcının cihazında hangi uygulamaların yüklü olup olmadığını öğrenebilirler.

Böylece, bu kullanıcıda hem Netflix hem de Amazon Prime Video uygulamaları yüklü, fakat herhangi bir sosyal medya uygulaması kullanmıyor gibi sınıflandırmalar ve dolayısıyla hedefli reklamlar mümkün hale gelebilir.

Apple, iOS 9 ile birlikte sorgulanabilecek URI scheme'ler için bazı kısıtlamalar getirdiyse de, bu yöntem teknik olarak hala mümkün.

Bir başka önemli nokta da, iOS'te hangi uygulamanın hangi URI scheme'leri tanımlayabileceğine dair hiçbir kısıtlama olmaması.
Bu nedenle tamamen alâkasız bir uygulama, örneğin youtube:// URI scheme'ini tanımlayıp, youtube:// ile baslayan tüm URL'leri kendisi açmayı başarabilir.
Bu durum, kullanıcın dalgınlığıyla birlikte çeşitli phishing saldırılarına da imkan sağlayabilir.

Teknik ayrıntılar için Apple'ın dokümantasyon sayfasını ziyaret edebilirsiniz.

Uygulama İçi Tarayıcı

Bazı uygulamalarda tıklanan linkler, Safari uygulamasına geçilmeden uygulama içinde UIWebView ya da WKWebView adlı arayüz bileşenleri ile açılabilir.
Bu şekilde uygulama içinde açılan sayfalardaki linkler takip edilerek başka sayfalara gidildiğinde, tüm bu browsing aktivitesi uygulama tarafından izlenebilir.
Daha önceden yapılan ya da gelecekte yapılacak olan browsing aktiviteleriyle ilişkilendirilebilir.

Apple, iOS 9 ile birlikte bu soruna çözüm olabilecek SFSafariViewController adlı bileşeni tanıtmıştı.
SFSafariViewController ile gerçekleştirilen browsing aktivitesi uygulama tarafından okunamıyor. Fakat Apple bu bileşenin kullanımını zorunlu tutmadığı için, hâlâ WKWebView kullanan uygulamalar mevcut.

Teknik ayrıntılar için Apple'ın dokümantasyon sayfasını ziyaret edebilirsiniz.

Fingerprinting

Sadece iOS cihazlara özgü olmamakla birlikte, cihazdan elde edilmesi mümkün olan anlık ya da kalıcı her türlü verinin toplanması ile kullanıcının tespit ve takip edilmesi söz konusu olabilir.
Bu veriler; seçili dil ve bölge ayarları, saat dilimi, cihaz modeli, depolama kapasitesi, boş depolama yüzdesi, boş bellek yüzdesi, batarya doluluk yüzdesi, şarj kablosunun takılı olup olmaması, operatör bilgisi, cihaz adı, Apple Watch pairing durumu, bağlantı türü, IP adresi, erişim izinleri gibi şeylerdir.

Cihaz Adı

Cihaz adı, cihazın iTunes, AirDrop ve Find My iPhone gibi yerlerde görüntülenen adıdır.
Genelde Ali'nin iPhone'u Ayşe'nin iPad'i gibi kullanıcının adı ve cinsiyeti hakkında ipucu verebilecek şekildedir.
Cihazda çalışmakta olan tüm uygulamalar tarafından herhangi bir izin gerektirmeden okunabilir.
Ayarlar > Genel > Hakkında ekranından ayarlanabilir.

Operatör

Cihaza takılı SIM kartın hangi operatör üzerinden hizmet aldığı, tüm uygulamalar tarafından doğrudan okunabilir.
Böylece kullanıcı profili hakkında ipucu elde edilebilir.
Ayrıca roaming ayarı açıkken ülke değiştirildiğinde, hiç internet bağlantısı yapılmasa bile operatör bilgisinin değişmesi kullanıcının hangi ülkeye gittiğine dair ipucu verebilir.

Teknik ayrıntılar için Apple'ın dokümantasyon sayfasını ziyaret edebilirsiniz.

NSNull

NSNull, null değerleri temsil eden ve [NSNull null] ile erişilen bir singleton'dır.
Fakat NSNull singleton'ı, uygulama özelinde değil sistem genelinde varlığını sürdürür.
Bu nedenle farklı uygulamalardan pointer değeri yazdırılıp incelenirse aynı adres olduğu gözlemlenebilir.
Bu değer yalnızca cihaz yeniden başlatıldığı zaman değişecek, aksi takdirde sürekli aynı kalacaktır.

Elde edilen 0x1ebe1bc30 gibi adres değerlerinin birebir aynı olması, aynı geliştiriciye ait olmayan uygulamalar arasında bile kullanıcı tespit ve takibine olanak sağlayabilir.

Teknik ayrıntılar için Apple'ın dokümantasyon sayfasını ziyaret edebilirsiniz.

IDFA

Identifier for Advertisers (IDFA), kullanıcıları takip etmek ve ilgili reklamlar sunabilmek için Apple'ın uygulama geliştiricilere sunduğu resmî yöntemdir.
Maalesef, iOS 13'te dahi hâlâ doğrudan aktif olarak gelmektedir.
iOS'in Ayarlar > Gizlilik > Reklam ekranı altındaki Reklam Takibini Sınırla seçeneği ile devre dışı bırakılabilir.

IDFA değeri iOS 10'a kadar, devre dışı bırakan kullanıcılarda bile uygulama geliştiricilerin erişimine açıktı.
Apple, herhangi bir teknik kısıtlama koymaksızın, uygulama geliştiricileri yalnızca kullanıcının tercihine saygı duymaya davet ediyordu.
IDFA değeri iOS 10 ile birlikte ayarlardan devre dışı bırakan tüm kullanıcılar için 00000000-0000-0000-0000-000000000000 olacak şekilde güncellendi.

Teknik ayrıntılar için Apple'ın dokümantasyon sayfasını ziyaret edebilirsiniz.

Keychain - iCloud - GameCenter

Kullanıcı adı ve parolalar gibi hassas verilerin encryption ile saklandığı Keychain, cloud data servisi iCloud ve oyun servisi Game Center gibi sistemler, uygulamalar silinip yeniden yüklendikten sonra bile kullanıcıyı tanıyabilme imkanı sunarlar.
Bu durum, login gerektiren bazı uygulamalarda kullanıcıya kolaylık sağlayabiliyorken, kullanıcı henüz login olmadan (ya da farklı bir hesap ile login olduğunda), habersiz bir şekilde tespit ve takip amacıyla da kullanılabilir.
Local Keychain'de saklanan veriler ancak cihaza reset atıldığında temizlenirken, iCloud ve Game Center verileri kullanıcı iOS Ayarlar'dan logout olmadıkça erişilebilir durumdadır.

Özet

Bunlar kötü amaçlı uygulama geliştiricilerin ya da uygulamalardaki çeşitli SDK'lerin neler yapabileceğinin bazı örnekleri.
Apple düzenli olarak bazı uygulamaları kuralları ihlal ettiği için App Store'dan kaldırıyor ve hatta bazen Apple Developer Program üyeliklerini sonlandırıyor.
Ancak bu genellikle söz konusu sorun son kullanıcılar tarafından bildirilirse ya da inceleme ekibi tarafından tesadüfen tespit edilirse gerçekleşiyor.
Bu nedenle, her gün kullandığımız sistemleri iyi bilmekte ve tedbiri elden bırakmamakta fayda var.