Bezbednost u mobilnom razvoju: šta je to, koje su pretnje i kako se zaštititi

Аутор: IT Sectr Објављено: 2026-03-28 Време читања: 12 мин

Mobilna bezbednost je skup mera za zaštitu aplikacije, korisničkih podataka i serverske infrastrukture od napada i curenja podataka. По данным OWASP Mobile Top 10 (2024), nesigurno čuvanje podataka ostaje najčešća ranjivost u mobilnim aplikacijama. U ovom članku ćemo razmotriti glavne pretnje, metode enkripcije, bezbedno skladištenje, autentifikaciju i zaštitu koda — sve što treba da zna početnik programer.

Glavno

  • OWASP Mobile Top 10 — lista glavnih ranjivosti mobilnih aplikacija, ažurirana svake 2–3 godine.
  • AES — simetrična enkripcija za čuvanje podataka na uređaju; RSA — asimetrična za prenos.
  • iOS использует Keychain для безопасного хранения токенов и паролей, Android — Keystore.
  • OAuth 2.0 и JWT — стандарты аутентификации и обмена токенами между приложением и сервером.
  • ProGuard / R8 — обфускаторы, усложняющие обратную разработку кода, а RASP защищает от атак в рантайме.

Glavne pretnje: OWASP Mobile Top 10

Šta je OWASP Mobile Top 10?

OWASP (Open Web Application Security Project) — некоммерческая организация, публикующая рейтинг самых опасных уязвимостей мобильной безопасности. OWASP Mobile Top 10 je lista koja pomaže programerima da shvate na šta prvo treba obratiti pažnju. U verziji iz 2024. godine vode problemi vezani za nesigurno čuvanje podataka, slabu autentifikaciju i nesigurnu mrežnu komunikaciju.

M1: Nesigurno čuvanje podataka — najčešći problem: lozinke, tokeni i lični podaci ostaju u SharedPreferences, NSUserDefaults ili lokalnim fajlovima bez enkripcije. M2: Slaba autentifikacija — odsustvo provere na strani servera, slabe lozinke. M3: Nesigurna mrežna komunikacija — odsustvo HTTPS ili nepravilna provera SSL sertifikata. M4 i M5 su povezane sa kriptografijom i nepravilnom upotrebom API-ja.

M6: Nesigurna autorizacija — korisnik može dobiti pristup podacima drugog korisnika putem zamene ID-ja u zahtevu. M7: Injekcije koda (SQL Injection, XSS). M8: Manipulacije aplikacijom — repacking, zamena koda. M9 i M10 — curenje podataka kroz treće biblioteke i obrnuti inženjering. Za svaku od ovih pretnji postoje proverene protivmere, i u IT Sectr ih primenjujemo u svim projektima od 2017. godine.

Man-in-the-Middle (MITM) napadi

MITM napad (napad „čovek u sredini“) se dešava kada napadač presreće saobraćaj između aplikacije i servera. Ovo je moguće putem zamene DNS-a, ARP spoofinga ili povezivanja na nezaštićenu Wi-Fi mrežu. Za zaštitu se koriste SSL/TLS sertifikati i Certificate Pinning.

Certificate Pinning — mehanizam kojim aplikacija proverava da li sertifikat servera odgovara unapred sačuvanom u kodu aplikacije. Čak i ako napadač zameni sertifikat putem proxy-ja (npr. Burp Suite), aplikacija će odbaciti vezu. Pinning je dva tipa: pinning po javnom ključu (Public Key Pinning) i po hešu sertifikata (Certificate Hash Pinning).

Enkripcija i heširanje: AES, RSA, SSL/TLS

Simetrična enkripcija: AES

AES (Advanced Encryption Standard) — симметричный алгоритм шифрования, основа безопасности данных на устройстве. AES koristi isti ključ za šifrovanje i dešifrovanje podataka. AES podržava ključeve dužine 128, 192 ili 256 bita. U mobilnom razvoju AES-256 se koristi za enkripciju podataka na uređaju: fajlova, keša, zapisa u lokalnoj bazi podataka.

AES režimi: GCM (preporučen) — obezbeđuje autentifikaciju podataka, CBC — osnovni režim sa lancem blokova, ECB — nesiguran, nemojte ga koristiti. Za iOS AES je dostupan kroz CommonCrypto (CCOptions), za Android — kroz Cipher u Java Cryptography Architecture (JCA). Važno: ključ za enkripciju nikada ne sme biti sačuvan u kodu aplikacije — koristite Keychain/Keystore.

Asimetrična enkripcija: RSA — koristi par ključeva (javni i privatni). RSA se koristi za enkripciju malih količina podataka — obično za razmenu simetričnog ključa između klijenta i servera. Dužina RSA ključa je minimum 2048 bita (preporučuje se 4096). U iOS RSA je dostupan kroz Security Framework (SecKeyCreateRandomKey), u Android — kroz KeyPairGenerator u Android Keystore.

Heširanje i SSL/TLS

Heširanje (SHA-256, SHA-3) — nepovratna transformacija podataka u string fiksne dužine. Heševi se koriste za proveru integriteta podataka i čuvanje lozinki. Za lozinke obavezno koristite bcrypt, scrypt ili Argon2 — običan SHA-256 je ranjiv na napade dužinim tabelama. SSL/TLS — protokol za enkripciju mrežnog saobraćaja između klijenta i servera. Savremeni standard je TLS 1.3, koji obezbeđuje Perfect Forward Secrecy (PFS).

TLS 1.3 je brži od prethodnika: handshake traje jedan round-trip umesto dva. Na Android-u minimalna TLS verzija se podešava kroz SSLSocket, na iOS-u — kroz ATS (App Transport Security), koji podrazumevano zahteva TLS 1.2 ili viši. Isključivanje ATS-a za iOS aplikaciju je dozvoljeno samo za konkretne domene sa obrazloženjem.

Bezbedno skladištenje: Keychain i Keystore

iOS: Keychain

Keychain (Связка ключей) — защищённое хранилище в iOS / macOS для паролей, ключей шифрования, сертификатов и токенов. Podaci u Keychain se šifruju hardverskim ključem, jedinstvenim za svaki uređaj. Pristup Keychain-u se kontroliše kroz Security Framework (SecItemAdd, SecItemCopyMatching). Keychain se automatski zaključava kada se uređaj zaključa i šifruje se pomoću Secure Enclave.

Android: Keystore

Android Keystore — системное хранилище криптографических ключей, изолированное от приложения. Od Android 6.0 (API 23), Keystore koristi hardversku podršku (TEE — Trusted Execution Environment) na uređajima sa bezbednosnim čipom. Ključevi u Keystore nikada ne napuštaju zaštićeno područje — aplikacija dobija samo handle za operacije šifrovanja i potpisivanja.

Poređenje Keychain (iOS) i Keystore (Android)
Parametar iOS Keychain Android Keystore
Tip čuvanih podataka Lozinke, tokeni, ključevi, sertifikati Kriptografski ključevi
Hardverska podrška Secure Enclave (svi iPhone sa A7+) TEE (Android 6+, zavisi od čipa)
Шифрование AES-256 hardverska AES/GCM sa hardverskim ključem
Биометрия Face ID / Touch ID za pristup BiometricPrompt za pristup
iCloud / bekap Sinhronizacija kroz iCloud Keychain Ne sinhronizuje se sa oblakom
Performanse Sporije (hardverska enkripcija) Brže (TEE)

SharedPreferences и NSUserDefaults nisu namenjeni za čuvanje poverljivih podataka — oni čuvaju informacije u otvorenom obliku. Za zaštitu podataka koristite EncryptedSharedPreferences (Android) ili šifrujte podatke pre čuvanja u UserDefaults (iOS). U IT Sectr uvek koristimo Keychain i Keystore za tokene pristupa i lozinke.

Autentifikacija: OAuth 2.0, JWT i biometrija

OAuth 2.0 и OpenID Connect

OAuth 2.0 — protokol delegirane autorizacije koji obezbeđuje siguran pristup resursima korisnika bez prenošenja lozinke. U mobilnim aplikacijama najčešće se koristi Authorization Code Flow sa PKCE (Proof Key for Code Exchange). PKCE sprečava presretanje autorizacionog koda — obavezni zahtev za mobilne aplikacije.

OpenID Connect (OIDC) je nadogradnja na OAuth 2.0 za autentifikaciju korisnika. OIDC dodaje ID Token u JWT formatu koji sadrži informacije o korisniku (ime, email, id). OAuth 2.0 + OIDC tok uključuje: preusmeravanje korisnika na stranicu za prijavu, dobijanje autorizacionog koda, razmenu koda za tokene (access + refresh + id), korišćenje access tokena za API zahteve.

JWT: Access, Refresh и Session Token

JWT (JSON Web Token) — компактный URL-безопасный формат токена, который содержит claims в формате JSON. JWT se sastoji od tri dela: header (tip i algoritam potpisa), payload (podaci) i signature (potpis). Access Token je kratkotrajni token (15–60 minuta) za pristup API-ju. Refresh Token je dugotrajni (dani/nedelje) za dobijanje novog access tokena bez ponovne prijave.

Session Token — традиционный подход, где сервер хранит сессию в БД или Redis, а клиент получает случайный идентификатор. U mobilnom razvoju JWT je poželjniji: ne zahteva serversko čuvanje sesija, sadrži sve informacije unutar sebe i lako se proverava. Međutim, JWT se ne može momentalno opozvati — ovo je kompromis koji se rešava kratkim vekom trajanja access tokena i korišćenjem refresh tokena.

Biometrijska autentifikacija

Face ID и Touch ID на iOS, Fingerprint Auth на Android — биометрические методы аутентификации, использующие уникальные физические характеристики пользователя. U iOS biometrija radi kroz LocalAuthentication (LAContext), u Android — kroz BiometricPrompt (Android 9+) ili FingerprintManager (zastareo). Biometrija se koristi za otključavanje aplikacije, potvrđivanje plaćanja i pristup zaštićenim podacima.

Važne nijanse: biometrija je zgodan UX, ali ne zamenjuje serversku autentifikaciju. Nakon uspešne biometrijske verifikacije aplikacija treba da dobije access token od servera. Na Android-u obavezno proverite da uređaj koristi Class 3 (Strong) biometriju, a ne samo prepoznavanje lica putem kamere (Class 1).

Zaštita koda: ProGuard, R8 i Root Detection

Obfuskacija: ProGuard i R8

ProGuard — инструмент обфускации, сжатия и оптимизации Java-байткода для Android, повышающий безопасность кода от обратной разработки. R8 je njegov naslednik, ugrađen u Gradle od Android Studio 3.4. R8 obavlja četiri zadatka: kompresiju (uklanja neiskorišćene klase i metode), optimizaciju (inline metode, pojednostavljuje kod), obfuskaciju (preimenuje klase i metode u kratka imena) i pre-verifikaciju (provera bajtkoda).

DexGuard — коммерческая версия ProGuard с расширенной защитой: шифрование строк, обфускация ресурсов, защита от репаккинга, контроль целостности APK. Za većinu projekata dovoljan je R8, ali za finansijske i bankarske aplikacije DexGuard obezbeđuje dodatni nivo zaštite. Включается R8 через build.gradle: minifyEnabled = true и proguardFiles.

Root i Jailbreak Detection

Root Detection (Android) и Jailbreak Detection (iOS) — механизмы, которые проверяют, получены ли на устройстве привилегии суперпользователя. Na hakovanim uređajima može se čitati memorija procesa, presretati saobraćaj i zamenjivati kod. Za proveru na Android-u koristi se provera prisustva SU-binarnog fajla, testnih ključeva potpisa i nestandardnih build flagova.

RASP (Runtime Application Self-Protection) — технология, которая защищает приложение во время выполнения. RASP otkriva pokušaje debugovanja, repackinga, injektiranja koda i prekida rad aplikacije kada otkrije pretnje. Primeri RASP rešenja: Dexter, Guardsquare, Promon. RASP radi u toku izvršenja i reaguje na anomalije — za razliku od statičke obfuskacije koja štiti kod pre pokretanja.

Reverse Engineering — процесс восстановления исходного кода из скомпилированного приложения. Alati: JADX (dekompajler APK-a), Ghidra, IDA Pro, Hopper. Zaštita od Reverse Engineering-a je kombinacija obfuskacije, enkripcije stringova, provere integriteta i Root Detection-a. Potpuna zaštita ne postoji — zadatak je da obrnuti inženjering bude dovoljno skup za napadača.

Često postavljana pitanja

Od čega početi učenje mobilne bezbednosti?

Начните с OWASP Mobile Top 10 — это дорожная карта самых частых уязвимостей. Zatim proučite HTTPS i SSL sertifikate, podesite Certificate Pinning i pređite na bezbedno skladištenje kroz Keychain / Keystore.

Po čemu se simetrična enkripcija razlikuje od asimetrične?

AES (симметричное) — один ключ для шифрования и расшифровки, быстрый, подходит для больших объёмов данных. RSA (asimetrična) — par ključeva (javni i privatni), sporiji, koristi se za razmenu simetričnog ključa.

Da li je potrebno šifrovati sve podatke u aplikaciji?

Шифровать нужно только конфиденциальные данные: пароли, токены, персональные данные пользователя, платёжную информацию. Slike, tekstovi i podešavanja interfejsa ne zahtevaju šifrovanje — to bi povećalo veličinu i usporilo aplikaciju.

Šta je Refresh Token i zašto je potreban?

Refresh Token — долгоживущий токен, который позволяет получить новый Access Token без повторного ввода пароля. Ovo povećava bezbednost — Access Token živi 15–60 minuta i čak i ako procure, napadač neće moći dugo da ga koristi.

Da li je obavezno koristiti ProGuard / R8?

Да, R8 обязательно включать для release-сборок Android. To nije samo zaštita od Reverse Engineering-a, već i smanjenje veličine APK-a i optimizacija performansi. Bez R8 vaš kod se može dekompajlirati u čitljiv oblik jednom JADX komandom.

Zaključak

  • OWASP Mobile Top 10 — ключевой список угроз; начинайте аудит безопасности с него.
  • AES-256 — стандарт симметричного шифрования для данных на устройстве; RSA — для обмена ключами.
  • Keychain (iOS) и Keystore (Android) — единственно правильные места для хранения токенов и паролей.
  • OAuth 2.0 с PKCE и JWT — современный стандарт аутентификации для мобильных приложений.
  • R8 — обязательный инструмент обфускации для Android; Root/Jailbreak Detection защищает от взломанных устройств.
  • Certificate Pinning предотвращает MITM-атаки даже при подмене сертификата.
  • Bezbednost je proces, a ne funkcija: testirajte ranjivosti na svakom koraku razvoja.

Развићемо мобилну апликацију под кључ

IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.

Разговарајте о пројекту