← Bloga dön
EN

2026-04-30 · 6 dk

iOS uygulama belleğinde hassas veri: logout sonrası neyi kontrol etmeli (2026)

Bellek kalıntısı nedir, OWASP bellek testini neden kaldırdı ve logout sonrası depolama ile önbellekler neden daha önemli. iOS Simulator için pratik bir önce/sonra kontrolü.

Hızlı özet

  • • Oturum boyunca token'ı bellekte tutmak normaldir; önemli olan logout sonrası hâlâ erişilebilir olandır.
  • • OWASP, MASTG-TEST-0060'ı (bellek) kullanımdan kaldırdı; logout sonrası kalıntı MASWE-0024 olarak izleniyor.
  • • Önce depolama ve önbellekleri, sonra belleği kontrol edin; logout öncesi ve sonrasını karşılaştırın.

“Bellek kalıntısı” ne demek

Kullanıcı logout yaptığında oturum token'ı, refresh token ve kişisel veriler uygulama tarafından erişilebilir olmaktan çıkmalıdır. Kalıntı, sonrasında hâlâ duran her şeydir: bir view model'deki veya singleton'daki kopya, URL önbelleğindeki bir yanıt, UserDefaults'taki bir değer veya SQLite'taki bir satır.

Oturum sırasında bellekteki bir kopya zafiyet değildir. Bearer kimlik doğrulaması kullanan her uygulama, kullanıcı giriş yapmışken access token'ını tutar. Soru, oturum bittikten sonra ne olduğudur.

Depolama neden bellekten önce gelir

OWASP MASTG bellek testini (MASTG-TEST-0060) kullanımdan kaldırdı: başka bir sürecin belleğini okumak jailbreak'li bir cihaz veya debug build gerektirir ve pentester'lar yalnızca-bellek bulgularını genellikle Low sayar. Depolama farklıdır. Cache.db'deki veya bir plist'teki token yeniden başlatmadan sağ çıkar ve yedeklere girebilir.

Kendi benchmark uygulamamız da aynı tabloyu gösterdi: bir pentester'ın rapora yazacağı kalıntılar önbelleklerde ve depolamadaydı (Cache.db, UserDefaults, SQLite); bellek ise Foundation'ın URL yükleme katmanının tuttuğu bir JWT kopyası ekledi.

Önce/sonra kontrolü

1. Giriş yapın ve sır işleyen ekranları açın. 2. Uygulamanın belleğini ve Simulator container'ını kaydedin. 3. Logout yapın. 4. Yeniden kaydedin ve karşılaştırın: ne kaldı, ne ortaya çıktı, ne temizlendi.

Değerleri adres veya dosya adıyla değil, anahtarlı hash ile eşleştirin: heap'ten Cache.db'ye taşınan token yine aynı token'dır.

Temiz bir sonuca ancak kayıt uygulamanın yazılabilir belleğinin çoğunu okuduysa güvenin. Dörtte birini okuyup hiçbir şey bulmayan bir tarama hiçbir şey kanıtlamaz.

iOS'ta sık kullanılan düzeltmeler

Kimlikli istekler için URLSessionConfiguration.ephemeral (veya Cache-Control: no-store) kullanın ve logout'ta URLCache.shared'ı temizleyin.

Token'ları UserDefaults veya @AppStorage'da değil Keychain'de tutun ve logout'ta Keychain öğelerini silin.

Logout'ta oturum nesnelerini bırakın: paylaşılan oturum deposunu serbest bırakın ve token'ı yakalamış görevleri iptal edin.

Çok kısa string'ler (yaklaşık 11 karaktere kadar, örneğin bir PIN) tagged pointer içinde yaşayabilir ve hiçbir bellek taramasında görünmez. Bunlar için bellek taramasına güvenmeyin.

WatchMemory bunu nasıl yapar

WatchMemory bu kontrolü iOS Simulator'da çalıştırır. Logout öncesi ve sonrası belleği ve depolamayı kaydeder, sonuçları sır bazında gruplar, depo ve anahtarı adlandırır ve PASS, FAIL veya INCOMPLETE (kapsam %90'ın altında) döndürür.

Yalnızca bellekte kalanlar kapıyı yalnızca sonuç güvenilir olduğunda kırar: MallocScribble açık native kod, yani serbest bırakılan belleğin üzerine yazılır. OWASP MASWE-0024 kontrolünü otomatikleştirir; hiçbir şeyi sertifikalandırmaz.

SSS

Oturum sırasında token'ın bellekte olması sorun mu?

Hayır. Uygulamaların kullanıcı giriş yapmışken access token'a ihtiyacı vardır. Kalıntı testi logout, hesap değiştirme veya hesap silme sonrası hâlâ erişilebilir olanla ilgilidir.

WatchMemory App Store build'ini tarayabilir mi?

Hayır. Simulator'da çalıştırdığınız debug build'leri (ve beta'da debuggable Android build'leri) kontrol eder. İşletim sistemi, aynı erişime sahip olmayan kimsenin release build'e bağlanmasına izin vermez.

Daha fazla içerik için WatchMemory Blog sayfasını inceleyin.

WatchMemory Mac uygulaması yerelde çalışır: taramalar cihazınızda kalır. Web analitikleri gizlilik dostudur ve yalnızca siteyi iyileştirmek için kullanılır.