Mobil Uygulamalarda Code Injection — nedir, saldırı türleri ve koruma

Yazar: IT Sectr Yayınlanma: 2026-04-04 Okuma süresi: 10 dk

Code Injection, bir saldırganın uygulamanın giriş verileri aracılığıyla kötü amaçlı kod ileterek yetkisiz işlemler gerçekleştirdiği bir saldırı türüdür. OWASP, 2024'e göre, enjeksiyonlar en kritik güvenlik açıkları arasında ilk üçte yer almaktadır. Kod enjeksiyonu mekanizmalarını anlamak, geliştiricilerin geliştirmenin ilk gününden itibaren güvenli sistemler tasarlamasını sağlar.

Önemli Noktalar

  • Code Injection — kötü amaçlı kodun kullanıcı girişi aracılığıyla iletilerek uygulama veya sunucu bağlamında yürütüldüğü bir saldırı.
  • SQL Injection — veritabanı sorgularına SQL kodu enjekte ederek yetki olmadan verileri okuma, değiştirme veya silme.
  • Cross-Site Scripting — WebView'a JavaScript kodu enjekte ederek diğer kullanıcıların tarayıcı bağlamında çalıştırma.
  • Command Injection — mobil uygulamadan temizlenmemiş shell çağrıları aracılığıyla sistem komutlarının yürütülmesi.
  • Input Validation — tüm giriş verilerinin doğrulanması, temizlenmesi ve parametrelendirilmesi için temel bir savunma yöntemi.

Code Injection Nedir?

Code Injection, bir saldırganın güvenilmeyen giriş verileri aracılığıyla uygulamaya yürütülebilir kod enjekte ettiği bir saldırı sınıfıdır. Mobil uygulamalarda, giriş alanları, derin bağlantılar, push bildirimleri, QR kodları ve dosya alışverişi yoluyla saldırı mümkündür.

İşletim sistemi düzeyindeki saldırıların aksine, Code Injection uygulamanın kendi kodundaki mantıksal hataları kullanır: kaçış karakteri eksikliği, güvensiz dize birleştirme veya harici veri kaynaklarına güven. Positive Technologies (2025) raporuna göre, finans sektöründeki mobil uygulamalardaki tüm güvenlik açıklarının %23'ü enjeksiyonlardır.

Code Injection'ın ana tehlikesi tam veri ihlalidir: bir saldırgan veritabanına, cihaz dosya sistemine veya diğer kullanıcıların hesaplarına erişebilir. Ödeme verileri veya tıbbi bilgilerle çalışan mobil uygulamalar için sonuçlar kritik olabilir.

Geliştiricilerin enjeksiyon türlerini anlaması ve veri girişinden görüntüleme ve depolamaya kadar tüm seviyelerde koruma mekanizmaları uygulaması gerekir. Modern çerçeveler yerleşik güvenlik araçları sağlar, ancak bunların kullanımı bilinçli bir yaklaşım gerektirir.

Mobil Uygulamalarda Code Injection Türleri

Code Injection sınıflandırması, mobil geliştirme bağlamında üç ana saldırı türünü içerir. Her tür, uygulamanın farklı bileşenlerini kullanır ve belirli koruma yöntemleri gerektirir.

Mobil Uygulamalarda SQL Injection

SQL Injection (SQLi), yerel veya uzak bir veritabanına sorgu parametreleri aracılığıyla kötü amaçlı SQL kodu enjekte edilmesidir. Mobil uygulamalarda, cihazda SQLite ile güvensiz bir şekilde çalışırken veya dize birleştirme ile REST API'sine HTTP istekleri oluştururken güvenlik açığı ortaya çıkar.

Tipik bir saldırı vektörü, değeri doğrudan bir SQL sorgusunda değiştirilen bir arama veya filtre alanıdır. Geliştirici parametreli sorgular yerine doğrudan birleştirme kullanırsa, bir saldırgan 1' OR '1'='1 gibi bir dize iletebilir. OWASP Mobile Top 10 (2024)'e göre SQL Injection, güvensiz veri depolama kategorisinde mobil uygulamalarda en sık görülen ikinci kritik güvenlik açığı olmaya devam etmektedir.

SQLi'ye karşı koruma üç düzeyde oluşturulur: parametreli sorgular kullanma (Java'da PreparedStatement, Android'de bindArgs ile rawQuery), istemci ve sunucu tarafında giriş doğrulaması ve minimum veritabanı ayrıcalıkları.

WebView'da Cross-Site Scripting (XSS)

Mobil uygulamalardaki XSS saldırıları, HTML içeriğini görüntüleyen yerleşik bir tarayıcı olan WebView bileşenini hedef alır. Bir uygulama, temizleme yapmadan WebView'a harici kaynaklardan veri yüklerse, bir saldırgan uygulama bağlamında yürütülen JavaScript kodu enjekte edebilir.

İki alt türü vardır: Depolanmış XSS — kötü amaçlı betik sunucuda kaydedilir ve her sayfa görüntülemede yürütülür; Yansıtılmış XSS — kod URL veya POST parametreleri aracılığıyla iletilir ve bir kez yürütülür. Mobil uygulamalarda, WebView'da diğer kullanıcılara görüntülenen yorumlar, incelemeler veya kullanıcı içeriği yoluyla Depolanmış XSS özellikle tehlikelidir.

Koruma, gerekli değilse WebView'da JavaScript'i devre dışı bırakmayı, Content Security Policy (CSP) kullanmayı ve Android için Jsoup veya iOS için SwiftSoup gibi kütüphaneler aracılığıyla HTML içeriğini temizlemeyi içerir.

Intent ve Shell Yoluyla Command Injection

Command Injection, Runtime.exec(), ProcessBuilder veya NSTask'a temizlenmemiş çağrılar aracılığıyla cihazda sistem komutlarının yürütülmesidir. Mobil uygulamalarda, uygulama kullanıcı verilerini shell komutlarına veya eylem içeren Intent'lere iletirse saldırı mümkündür.

En savunmasız alanlar dosya dönüştürme işlevleri, medya işleme (ffmpeg, ImageMagick) ve üçüncü taraf kütüphane kurulumudur. Bir saldırgan, cihazda rastgele kod yürüten bir boru veya yönlendirme karakteri içeren bir komut iletebilir. Android, sanal alan aracılığıyla shell erişimini kısmen kısıtlar, ancak root erişimi veya PrivEsc istismarları olan uygulamalar tehlikeye girebilir.

Önerilen koruma, kullanıcı verilerini işlemek için Runtime.exec()'in tamamen reddedilmesi, güvenli API'ye sahip kütüphanelerin kullanılması ve harici süreçlerin sıkı bir şekilde izole edilmesidir.

Android ve iOS'ta Kod Enjeksiyonu Nasıl Çalışır

Code Injection mekanizması, mimari farklılıklar nedeniyle Android ve iOS platformlarında farklılık gösterir. Android'de enjeksiyonlar genellikle Intent — uygulama bileşenleri arasında iletilen bir sistem mesajı — ile ilişkilidir. Bir saldırgan, SQL kodu veya shell komutları içeren ekstra verilerle kötü amaçlı bir Intent gönderebilir.

iOS'ta saldırılar daha sık olarak Süreçler Arası İletişim (XPC) mekanizması, Evrensel Bağlantılar ve URL Şeması işleme yoluyla gerçekleşir. Doğrulama yapmadan harici kaynaklardan veri kabul eden bir uygulama enjeksiyonlara karşı savunmasız hale gelir. Apple Security Research (2025)'e göre, iOS uygulamalarındaki güvenlik açıklarının yaklaşık %12'si yetersiz giriş verisi temizliği ile ilgilidir.

Her iki platform için ortak bir vektör, yerel depolama (SQLite, Realm, UserDefaults) yoluyla yapılan saldırıdır. Kötü amaçlı bir uygulama paylaşılan bir dizine veri yazabiliyorsa, okuma sırasında hedef uygulama tarafından yürütülecek kodu enjekte edebilir.

Tipik bir saldırı süreci üç aşamadan oluşur: keşif — uygulamanın giriş noktalarının analizi (formlar, derin bağlantılar, dosyalar), enjeksiyon — bulunan giriş noktası aracılığıyla kötü amaçlı yükün iletilmesi ve istismar — verilere veya işlevselliğe erişmek için enjeksiyonun yürütülmesi. Bu döngüyü anlamak, geliştiricilerin her aşamada koruma tasarlamasına yardımcı olur.

Kod Örnekleri: Güvenlik Açığı Olan ve Güvenli Uygulamalar

Android için Kotlin ve iOS için Swift'te Code Injection'ın belirli örneklerine bakalım. Her örnek, güvenlik açığı olan bir deseni ve güvenli alternatifini gösterir.

SQL Injection: Kotlin'de Güvenlik Açığı Olan Kod

İlk örnek, kullanıcı girişiyle bir sorgu dizesinin doğrudan birleştirilmesidir. userInput = "1' OR '1'='1" değeriyle sorgu, bir satır yerine tablonun tüm satırlarını döndürür.

kotlin
// ZAYIF: dize birleştirme
fun getUserById(userInput: String): List<User> {
    val db = openOrCreateDatabase()
    val query = "SELECT * FROM users WHERE id = " + userInput
    return db.rawQuery(query, null)
}

// GÜVENLİ: parametreli sorgu
fun getUserByIdSafe(userInput: String): List<User> {
    val db = openOrCreateDatabase()
    val query = "SELECT * FROM users WHERE id = ?"
    return db.rawQuery(query, arrayOf(userInput))
}

WebView'da XSS Koruması: iOS için Swift

İkinci örnek, WKWebView'da kullanıcı HTML içeriğinin yanlış ve doğru yüklenmesini gösterir. SwiftSoup kullanımı, işlemeden önce kötü amaçlı betikleri kaldırmaya olanak tanır.

swift
// ZAYIF: doğrudan HTML yükleme
let webView = WKWebView()
let html = "<div>\(userComment)</div>"
webView.loadHTMLString(html, baseURL: nil)

// GÜVENLİ: SwiftSoup ile temizleme
import SwiftSoup
let cleanHtml = try SwiftSoup.clean(
    userComment,
    Whitelist.basic()
)
webView.loadHTMLString(cleanHtml, baseURL: nil)

Command Injection: Kotlin'de Shell Saldırılarına Karşı Koruma

Üçüncü örnek, kullanıcı argümanlarıyla Runtime.exec() çağırmanın tehlikesi ve sabit API'ye sahip bir kütüphane aracılığıyla güvenli alternatifidir.

kotlin
// ZAYIF: kullanıcı girişiyle shell komutu
fun convertVideo(inputPath: String) {
    val cmd = "ffmpeg -i $inputPath -vcodec libx264 output.mp4"
    Runtime.getRuntime().exec(cmd)
}

// GÜVENLİ: argüman izolasyonu
fun convertVideoSafe(inputPath: String) {
    val cmd = listOf(
        "ffmpeg", "-i", inputPath,
        "-vcodec", "libx264", "output.mp4"
    )
    ProcessBuilder(cmd).start()
}

Mobil Uygulamaları Enjeksiyonlardan Koruma Yöntemleri

Code Injection'a karşı koruma, kodu, altyapıyı ve geliştirme süreçlerini kapsayan sistematik bir yaklaşım gerektirir. Hiçbir tek yöntem tam güvenlik sağlamaz — uygulamaların bir kombinasyonu gereklidir.

İlk seviye önlemedir: tüm giriş verilerinin sıkı doğrulaması. Uygulamanın bir kullanıcıdan, başka bir uygulamadan veya ağdan aldığı her alan, tür, uzunluk ve biçim açısından kontrol edilmelidir. OWASP ESAPI gibi kütüphaneler, yaygın senaryolar için hazır doğrulayıcılar sağlar.

İkinci seviye temizleme ve kaçıştır: verileri SQL sorgularında, HTML şablonlarında veya shell komutlarında kullanmadan önce dönüştürme. Parametreli sorgular SQL Injection'ı tamamen ortadan kaldırır ve HTML kaçışı XSS'yi önler. Android'de SQLite ile çalışmak için Room'u kullanın — otomatik olarak bind parametreleri uygulayan bir ORM.

Üçüncü seviye ayrıcalık minimizasyonudur: uygulama minimum gerekli izinlerle çalışmalıdır. Veritabanı, dosya sistemi ve süreçler arası iletişim için en az ayrıcalık ilkesini kullanın. iOS bu ilkeyi uygulama sanal alanı aracılığıyla, Android ise izin modeli ve süreç izolasyonu aracılığıyla uygular.

Dördüncü seviye izleme ve müdahaledir: şüpheli işlemlerin günlüğe kaydedilmesi, anormallik tespiti ve saldırılar tekrarlandığında otomatik engelleme. Firebase App Check gibi araçlar, tehlikeye girmiş istemcilerden backend'e sahte isteklerin tespit edilmesine yardımcı olur. RASP (Runtime Application Self-Protection) entegrasyonu, çalışma zamanında enjeksiyonları engellemeye olanak tanır.

Google Project Zero (2025) araştırmasına göre, bu dört seviyenin kombinasyonu başarılı bir Code Injection saldırısı riskini %94 oranında azaltır. Geliştiricilerin, güvenlik açıkları keşfedildikten sonra eklemek yerine, mimari tasarım aşamasında koruma mekanizmalarını uygulamaları önerilir.

Sıkça Sorulan Sorular

Code Injection basit bir dille nedir?

Code Injection, bir saldırganın uygulamaya veri değil kod göndermesidir. Örneğin, bir kullanıcı adı yerine, uygulamanın veritabanında yürüttüğü ve diğer kayıtlara eriştiği bir SQL sorgusu gönderir.

SQL Injection ile XSS arasındaki fark nedir?

SQL Injection, SQL sorguları aracılığıyla veritabanına saldırarak kayıtların okunmasını ve değiştirilmesini sağlar. XSS, kullanıcının tarayıcısında yürütülmek üzere WebView'a JavaScript kodu enjekte eder. Farklı hedefler, ancak ortak mekanizma — yetersiz giriş doğrulaması.

Bir Android uygulaması Code Injection'dan nasıl korunur?

SQLite için parametreli sorgularla Room kullanın, WebView'da JavaScript'i devre dışı bırakın, kod karıştırma için ProGuard/R8 uygulayın ve kullanıcı verilerini asla Runtime.exec()'e iletmeyin. Güvenlik yamalarıyla bağımlılıkları düzenli olarak güncelleyin.

Bir iOS uygulaması enjeksiyonlara karşı savunmasız olabilir mi?

Evet, iOS uygulamaları Core Data (ham sorgular) aracılığıyla SQL Injection'a, WKWebView aracılığıyla XSS'e ve Process aracılığıyla Command Injection'a karşı savunmasızdır. iOS sanal alanı saldırının boyutunu sınırlar ancak tamamen önlemez. Kullanmadan önce verileri her zaman temizleyin.

Bir uygulamada Code Injection güvenlik açıkları nasıl tespit edilir?

Kaynak kod taraması için SAST (Statik Analiz) — SonarQube, MobSF veya QARK gibi araçları kullanın. Ayrıca, çalışan uygulamayı test etmek için DAST tarayıcıları kullanın: tüm giriş alanlarına özel olarak hazırlanmış dizeler (‘, OR 1=1, <script>) girin.

Özet

  • Code Injection — güvenilmeyen uygulama giriş verileri aracılığıyla kötü amaçlı kodun enjekte edildiği kritik güvenlik açıkları sınıfı.
  • SQL Injection — en yaygın enjeksiyon türü, parametreli sorgular ve ORM kütüphaneleri ile önlenir.
  • WebView'da XSS — HTML içeriğine JavaScript kodu enjeksiyonu, SwiftSoup veya Jsoup ile temizleme yoluyla engellenir.
  • Command Injection — temizlenmemiş çağrılar aracılığıyla shell komutlarının yürütülmesi, argüman izolasyonu ve Runtime.exec()'den kaçınma ile korunur.
  • Dört koruma seviyesi — doğrulama, temizleme, ayrıcalık minimizasyonu ve izleme — saldırı riskini %94 azaltır.
  • Android ve iOS ortak enjeksiyon vektörlerini paylaşır ancak koruma mekanizmalarında farklılık gösterir: iOS sanal alanı vs Android izin modeli.
  • Düzenli test SAST ve DAST araçlarıyla uygulama güvenliğini sürdürmek için gereklidir.

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun