• No results found

4.3 Den utvecklade applikationen

5.1.4 Androids aktivitetsstack

N¨ar en ny aktivitet startas i Android l¨aggs den p˚a en aktivitetsstack som hanteras av operativsystemet. Den aktivitet som senast k¨orde ligger d˚a kvar under den nya aktiviteten och n¨ar den nya aktiviteten p˚a n˚agot s¨att avslutas, ˚aterupptas den aktivitet som nu ligger h¨ogst upp p˚a stacken. Ett s¨att att avsluta en aktivitet ¨ar att anv¨anda den bak˚atknapp som finns p˚a m˚anga androidtelefoner.

H¨ar har vi uppt¨ackt ett m¨ojligt s¨akerhetsproblem. Ponera att en ap- plikation har en inloggningsfunktion. N¨ar anv¨andaren loggat in anv¨ands

32 5.1. Identifierade s¨akerhetsproblem

applikationen p˚a korrekt s¨att och anv¨andaren loggar sedan ut och appli- kationen ˚aterg˚ar d˚a till inloggningssk¨armen. Om anv¨andaren d˚a trycker p˚a bak˚atknappen kan senast anv¨anda aktivitet visas f¨or anv¨andaren. Det- ta kan d˚a vara en aktivitet som inte avslutades n¨ar anv¨andaren loggade ut fr˚an applikationen vilket eventuellt kan leda till att applikationen kan anv¨andas trots att anv¨andaren egentligen ¨ar utloggad. Det ¨ar viktigt att t¨anka p˚a hur Android hanterar aktiviteter och tj¨anster s˚a att problem som dessa inte uppst˚ar. Det finns vissa sv˚arigheter med att l¨osa detta problem. En l¨osning p˚a detta ¨ar dock att anv¨anda sig av en intentflagga som heter ”FLAG ACTIVITY CLEAR TOP” n¨ar startaktiviteten anropas[42]. Den- na flagga inneb¨ar att alla aktiviteter som ligger ¨over den anropade aktivi- teten avslutas och den anropade aktiviteten hamnar h¨ogst upp p˚a stacken. Genom att utf¨ora omfattande tester vid utveckling av applikationer som g¨or undantag fr˚an Androids standardhantering av aktiviteter kan liknande problem uppt¨ackas tidigt under utvecklingen och inte n¨ar applikationen ¨ar sl¨appt.En god f¨orst˚aelse f¨or hur Androids aktivitetscykel och aktivitetshan- tering rekommenderas ocks˚a.

5.1.5

SQL-injektion

D˚a varje applikation har tillg˚ang till en sqldatabas ¨ar attacken aktuell. En SQL-injektionattack ¨ar en attack som utnyttjar d˚aligt saniterad indata och anv¨ander indatan i fr˚agor mot databas. Genom v¨alutformad indata kan en anfallare plocka ut eller ¨andra data i databasen. Ett exempel visas nedan [43][44]. Tanken med f¨oljande query ¨ar att f˚a ut anv¨andardata fr˚an anv¨andartabellen f¨or det username som anges.

q u e r y = ”SELECT * FROM u s e r s WHERE name =” + username + ” ; ”

Om en anv¨andare skriver in anv¨andarnamnet som ‘ or ‘1’ = ‘1 resulterar detta ist¨allet i att all anv¨andardata returneras.

SELECT * FROM u s e r s WHERE name = ”” or 1=1;

I Android, liksom i m˚anga andra moderna system, mitigeras attackerna genom funktionalitet f¨or att hj¨alpa programmeraren att utforma sql fr˚agor och att sanera indata. Det ¨ar viktigt d˚a det kan vara m˚anga steg mellan skapande av databasfr˚agan och exekveringen av fr˚agan. Ett vanligt exem- pel ¨ar att kommunikation sker indirekt med en databas via en content

Resultat och analys 33

resolver som i sin tur kommunicerar med en content provider. Ett viktigt verktyg i kampen mot SQL-injektion ¨ar funktionen query i SQLiteQuery- Builder. Denna funktion anv¨ander sig av parametrisering av sql-argument. Parametrisering inneb¨ar att de argument som anv¨ands f¨or att utf¨ora se- lektionen j¨amf¨ors i sin helhet och kan allts˚a inte tolkas som ytterligare SQL-kommandon.

F¨or att hj¨alpa till med sanering av indatan finns funktionen append- WhereEscapeString i SQLiteQueryBuilder [45]. Denna funktion saniterar str¨angar fr˚an escape tecken.

Genom att anv¨anda sig av Androids inbyggda l¨osningar kan man f¨or- sv˚ara utf¨orandet av SQL-injektionsattacker. Attacken kan ¨aven ske mot den server som applikationen kommunicerar med och n¨odv¨andiga ˚atg¨arder b¨or g¨oras ¨aven p˚a denna del av systemet.

5.1.6

Gamla versioner

Ett problem ¨ar att m˚anga telefoner k¨or gamla versioner av Android som eventuellt har kvar gamla svagheter. En stor orsak till detta ¨ar att det ¨ar tillverkarna av telefonerna som har ansvar f¨or att skicka ut uppdateringar till telefonerna. Flera tillverkare prioriterar inte uppdateringar f¨or ¨aldre telefonmodeller

5.2

Hj¨alpmedel

I detta avsnitt beskrivs n˚agra av de hj¨alpmedel som kan utnyttjas av ut- vecklare f¨or att ¨oka s¨akerheten p˚a applikationerna.

5.2.1

Obfuskering

All kod g˚ar att dekompilera f¨or att kunna se hur applikationen ¨ar byggd. Obfuskering d¨oper om variabler till oigenk¨annlighet, tar bort d¨od kod och tar bort alla kommentarer. Koden kommer inte att bli om¨ojlig att l¨asa men det kommer att ta betydligt l¨angre tid. Eftersom obfuskering h¨anger starkt ihop med spr˚ak och byggprocessen har endast obfuskering r¨orande androidplattformen ber¨orts.

34 5.2. Hj¨alpmedel

ProGuard

Det obfuskeringsverktyg som Android har valt att integrera heter ProGu- ard. Det ¨ar ett ¨oppenk¨allkodsprojekt och har funnits l¨angre ¨an Android och fungerar f¨or Java i allm¨anhet. ProGuard f¨oljer med bland Androids utvecklingsverktyg och integreras v¨al med resten av processen som ¨ar au- tomatiserad om man anv¨ander till exempel Eclipse som utvecklingsmilj¨o. N¨ar ProGuard ¨ar aktiverat k¨ors classfilerna ett varv genom ProGuard innan de ¨overs¨atts till dexfiler. Det h¨ar g¨aller bara n¨ar applikationen ¨ar i s˚a kallat releasel¨age och inte i utvecklingsl¨age d˚a obfuskering f¨orsv˚arar debuggning.

Hur stor skillnad g¨or obfuskering

En del av koden ur den applikation som utvecklades kan ses nedan. ¨Overst visas originalk¨allkoden, i mitten en uppackad apkfil utan obfuskering och sest en uppackad apkfil med obfuskering.

// S e t v a r i a b l e s s a l t T a s k = new S a l t H e l p e r ( ) ; l o g i n T a s k = new L o g i n H e l p e r ( ) ; Button btn = ( Button ) f i n d V i e w B y I d (R . i d . l o g i n b u t t o n ) ; u s e r n a m e E d i t T e x t = ( E d i t T e x t ) f i n d V i e w B y I d (R . i d . l o g i n u s e r n a m e e d i t t e x t ) ; Button l o c a l B u t t o n = ( Button ) f i n d V i e w B y I d ( 2 1 3 1 3 6 1 8 1 9 ) ; E d i t T e x t l o c a l E d i t T e x t 1 = ( E d i t T e x t ) f i n d V i e w B y I d ( 2 1 3 1 3 6 1 8 1 5 ) ; t h i s . u s e r n a m e E d i t T e x t = l o c a l E d i t T e x t 1 a l o c a l a = new a ( ) ; t h i s . e = l o c a l a ; c l o c a l c = new c ( ) ; t h i s . f = l o c a l c ; Button l o c a l B u t t o n = ( Button ) f i n d V i e w B y I d ( 2 1 3 1 3 6 1 8 1 9 ) ; E d i t T e x t l o c a l E d i t T e x t 1 = ( E d i t T e x t ) f i n d V i e w B y I d ( 2 1 3 1 3 6 1 8 1 5 ) ; t h i s . b = l o c a l E d i t T e x t 1 ;

Som exemplet ovan visar ¨ar koden fortfarande relativt l¨asbar. Namn- valen f¨orsvinner vilket f¨orsv˚arar l¨asandet. Dock ¨ar alla externa API-anrop fullt l¨asbara. S˚a obfuskeringen i ett starkt typat spr˚ak som Java ¨ar inte speciellt effektiv. Aktiveringen av ProGuard ¨ar dock enkel och en utveckla- re b¨or anv¨anda denna funktion. Utvecklaren b¨or vara medveten om graden av obfuskering.

Resultat och analys 35

Related documents