Security by obscurity nemůže fungovat. Nebo ano? Softwarové protektory prošly během 16 let prudkým vývojem. Zhodnotíme, jaká je situace v roce 2016. Podíváme se, jak fungují dnešní protektory pro Windows a Android, ukážeme, co se snaží řešit a současně jaké problémy jejich nasazení přináší. Přednáška bude zajímavá i pro ty, které zajímá problematika malware.
2. Co můžeme ochránit?
●
Technický prostředek chránící například:
●
omezení redistribuce
●
dodržení zkušební lhůty zdarma
●
omezení funkcionality aplikace po uplynutí
zkušební lhůty
●
ochrana kódu hry proti cheaterům
3. Jiné způsoby
●
Copyright
– Jedna z netechnických možností ochrany
– V praxi nevynutitelný – morálka
●
Software jako služba
– kód je na serveru
●
Free to play
– nejdřív hraj, potom plať (nákupy v aplikaci)
●
Reklama v aplikaci
– cílená na uživatele
4. Motivace
●
Kvůli pirátství unikají peníze
– hausnumero: $63 miliard v roce 2014
– 2 z 5 kopií jsou pirátské
●
Ochrana know-how (algoritmy, kód)
●
Ochrana důvěryhodnosti
●
Studium protektorů ukazuje rovněž techniky
používané i malwarem
●
Copy protection je prý nesmysl
5. Životnost protekce
●
Životní cyklus klientského SW je krátký
●
Např. mobilní hry 3-4 měsíce
●
Největší prodeje těsně po vydání nové verze
SW
●
Za úspěch se považuje, pokud protekce vydrží
několik měsíců
7. Software Taggant System
●
Umožňuje protektoru podepsat ochráněný
program
●
Standard IEEE z roku 2011
●
IEEE v systému funguje jako root of trust,
uznávající producenty protektorů
●
Antiviry díky podpisu rozeznají, že jde o
"program ze známého zdroje"
8. Taggant vs. Authenticode
●
Authenticode: ověření vydavatele softwaru a
neporušenost souboru
●
Navzájem se nevylučují
●
Taggant hash by měl být rychlejší
●
Taggant system je určený producentům
protektorů, samotní uživatelé protektorů to
nemusí řešit
9. Intel Tamper Protection
●
Toolkit
●
Má chránit "kritický kód a hodnotná data" před
reverzováním a manipulací
●
Windows a Android binárky (.DLL a .SO
soubory)
●
Obfuskátor umožňuje silnou obfuskaci:
techniky sebemodifikujícího a zašifrovaného
kódu
10. Protektory pro Windows
●
Tradiční: packer (kompresor) s přidanou
funkcionalitou
●
S použitím VM
●
S aktivními prvky
●
Bez aktivních prvků
11. Rozšířená funkcionalita
●
API: např. ověření, že protekce nebyla
odstraněna
●
Integrace licenčního manageru (DRM)
●
Kontejner obsahující soubory aplikace
●
HW dongle
●
Kontrola integrity
12. Metody
●
Obrana proti disassemblingu a dekompilaci:
– obfuskace, transformace do vlastního
bytekódu, šifrování, komprese kódu
●
Detekce debuggeru (dynamická analýza)
●
Detekce virtualizovaného OS a emulátoru
●
Šifrování datových sekcí a resources
●
Skrytí importů
●
Přesun kódu aplikace (do loaderu či jinam)
13. Tradiční protektory
●
Transformují originální soubor a obalují ho
●
Protektorem přidaný kód („loader”) postupně
dešifruje originální kód a spouští ho
●
ASProtect
●
DotFix NiceProtect
●
Enigma Protector
14. S použitím VM
●
Převede původní kód do vlastního bytekódu,
kterému rozumí jenom přidaný virtuální stroj
●
Začíná být běžnou součástí všech protektorů
●
Zpomalení kódu ve virtualizační vrstvě
●
VMProtect
●
Denuvo
16. S aktivními prvky
●
S instalací ochráněné aplikace dojde k
nainstalování systémového driveru
●
StarForce: nechvalně se proslavil jako aktivní
ochrana pro hry: systém driverů kontrolujících
čtení a zápis na disk na nejnižší úrovni vedl k
poškození dat
17. Bez aktivních prvků
●
Pasivní ochrana:
●
Staví hradbu s různorodými obrannými
mechanismy, nepoužívá „zvědy v terénu”
18. Android Java aplikace
●
Dá se snadno získat přímo ze zařízení
●
Soubor <apk>/classes.dex
●
DEX dekompilery (JEB, JADX),
●
.dex → .class a pak Java dekompilery
●
Java (DEX) bytecode se dá jednoduše
dekompilovat do původní podoby – do
zdrojového kódu
●
Menšina aplikací také v C/C++ a C#
19. Android C/C++ aplikace
●
Standardní JNI – nativní kód se natahuje jako
shared library
●
Jde vytvořit i čistě nativní app
(android:hasCode="false")
●
Soubory <apk>/lib/lib*.so
●
Disassembling, dekompilace:
tradiční nástroje pro nativní kód jako objdump,
IDA, gdb
20. Android C# aplikace
●
Mono runtime (Xamarin) jako knihovna
<apk>/lib/<jméno>.so
●
CLI (ECMA-335) standard
●
Opět jednoduše dekompilovatelný bytecode
●
Dekompilace: bězné CLI dekompilery:
●
dotPeek, ILSpy, dnSpy, ...
21. Android App Encryption
●
Google
●
Android 4.1 (Jelly Bean, vydán 2012)
●
Ochrana proti kopírování: placená aplikace se
nainstaluje jenom na konkrétní zařízení
●
Během instalace dojde k dešifrování APK a
jeho instalaci do /mnt/asec/ ("encrypted
container")
22. Android App Encryption
●
Systém se ale pokoušel některé aplikace
(např. služby) spouštět dřív, než došlo k
mountnutí /mnt/asec/
●
Reakce: nejdřív Google Play app "dočasně"
vypnula instalace do /mnt/asec/
●
Celá technologie potichu skončila
23. Protektory pro Android
●
Vesměs pasivní
●
DexGuard (vymakaná verze ProGuard z
Android SDK)
●
Arxan
●
DexProtector
●
SecNeo (Bangcle)
25. Specificky pro Android
●
Obfuskace AndroidManifest
●
Testování „rootnutého” zařízení
●
Testování běhu na emulátoru
●
Certificate pinning – podepisovací certifikát
apk
26. Zvláštní pozornost
●
DexProtector
– umožňuje chránit i nativní kód
– skrývá kód jeho přesunutím z classes.dex do
jiného souboru
●
SecNeo (Bangcle)
– původní kód schovává do nativních knihoven
libsecexe a libsecmain
27. Závěr
●
Existuje poptávka po SW protektorech
●
Nezanedbatelné množství Windows aplikací
nějakou ochranu používá
●
Android aplikace se dají snadno cracknout
●
Jenom minimum Android aplikací používá
ochranu