Android Android Introduzione all'architettura, alla ...

37
Alessandro Tanasi - Alessandro Tanasi - http://www.tanasi.it http://www.tanasi.it - [email protected] - [email protected] Android Android Introduzione all’architettura, alla Introduzione all’architettura, alla programmazione e alla sicurezza programmazione e alla sicurezza

description

 

Transcript of Android Android Introduzione all'architettura, alla ...

Page 1: Android Android Introduzione all'architettura, alla ...

Alessandro Tanasi - Alessandro Tanasi - http://www.tanasi.ithttp://www.tanasi.it - [email protected] - [email protected]

AndroidAndroidIntroduzione all’architettura, alla Introduzione all’architettura, alla programmazione e alla sicurezzaprogrammazione e alla sicurezza

Page 2: Android Android Introduzione all'architettura, alla ...

LUG TriesteAlessandro Tanasi - [email protected]

Fun & profit

● Fun● Sviluppo applicazioni● Invenzione di “nuove” applicazioni per soddisfare

vecchie e nuove esigenze● Attività di ricerca

● Profit● Vendita delle applicazioni● Sviluppo applicazioni su commissione● Vendita o abuso dei risultati di ricerca

Page 3: Android Android Introduzione all'architettura, alla ...

Architettura

Page 4: Android Android Introduzione all'architettura, alla ...

LUG TriesteAlessandro Tanasi - [email protected]

Android

● Software stack per device mobili● Sistema operativo● Linux con kernel 2.6● Driver per l'hardware (GPS, accelerometri, ..)

● Middleware● Librerie● Android runtime● Application framework

● Applicazioni● Native: telefono, contatti, browser, …● Di terze parti

Page 5: Android Android Introduzione all'architettura, alla ...

LUG TriesteAlessandro Tanasi - [email protected]

Kernel

● Linux kernel e driver che fanno da hardware abstraction layer

● Core system services per security, memory management, process management, network stack

Page 6: Android Android Introduzione all'architettura, alla ...

LUG TriesteAlessandro Tanasi - [email protected]

Librerie e runtime

● Librerie (per la gran parte in linguaggio nativo) esposte attraverso l'application framework

● Android runtime: Dalvik Virtual Machine e sue librerie core

Page 7: Android Android Introduzione all'architettura, alla ...

LUG TriesteAlessandro Tanasi - [email protected]

Application framework

● API ad alto livello● Le applicazioni native Android e quelle di

terze parti usano le stesse API

Page 8: Android Android Introduzione all'architettura, alla ...

LUG TriesteAlessandro Tanasi - [email protected]

Sequenza di avvio

● Il bootloader carica il kernel

● Demoni per la gestione low level dell'hardware

● Zygote e Dalvik VM● Il service manager

viene avviato (binders e comunicazioni IPC)

● Altri manager● App rimanenti

Page 9: Android Android Introduzione all'architettura, alla ...

LUG TriesteAlessandro Tanasi - [email protected]

Dalvik Virtual Machine

● Bytecode interpreter (no JIT)● Lente CPU (250-500 MHz), poca RAM (64MB)● Senza swap

● Register based● Alta densità semantica● Istruzioni speciali

● Ottimizzata per istanze multiple● Ottimizzata per avere un memory footprint

minimale● Esegue file .dex su OS POSIX compliant● Si appoggia al kernel per threading e

memory management di basso livello

Page 10: Android Android Introduzione all'architettura, alla ...

LUG TriesteAlessandro Tanasi - [email protected]

Dalvik Executable Format

● Riduzione delle dimensioni● Sostanziale differenza semantica con il

bytecode Java● Nessuna compressione● Comunque minori di un JAR nel caso medio● Vengono gestiti in modo efficace da mmap()

● Dexdump, undx

http://www.dalvikvm.com/http://sites.google.com/site/io/dalvik-vm-internals

Page 11: Android Android Introduzione all'architettura, alla ...

LUG TriesteAlessandro Tanasi - [email protected]

Compilazione e building

● Compilazione con il compilatore standard Java

● Conversion in .dex con l'utility dx● Nel caso si usino IPC, processing AIDL● Le risorse sono incluse nel package apk

Page 12: Android Android Introduzione all'architettura, alla ...

Sviluppo

Page 13: Android Android Introduzione all'architettura, alla ...

LUG TriesteAlessandro Tanasi - [email protected]

Android SDK

● Android API● Development tools● Emulatore Android● Dalvik Debug Monitoring Service (DDMS)● Documentazione ed esempi

http://developer.android.com/sdk/1.6_r1/index.html

Page 14: Android Android Introduzione all'architettura, alla ...

LUG TriesteAlessandro Tanasi - [email protected]

Native Development Kit (NDK)

● Permettono l'utilizzo di componenti in codice nativo ( C o C++)

● Cross-toolchains (compilatori, linkers, etc..) per generare binari ARM

● Libc, libm, OpenGL ES 1.1, JNI interface, libz● Non permette di creare applicazione native-

only● Il runtime applicativo rimane la Dalvik VM

http://developer.android.com/sdk/ndk/1.6_r1/index.html

Page 15: Android Android Introduzione all'architettura, alla ...

LUG TriesteAlessandro Tanasi - [email protected]

Android Scripting Environment

● Programmare in Python, Perlm, Jruby, BeanShell, Lua..

● Per casi particolare in cui bisogna adottare paradigmi di programmazione diversi da quelli imposti dall'SDK

● Accesso semplificato e non completo alle API

● Es: web server in 4 righe di python

http://code.google.com/p/android-scripting/

Page 16: Android Android Introduzione all'architettura, alla ...

LUG TriesteAlessandro Tanasi - [email protected]

Development Tools

● Eclipse Plugin: Andreoid Dev Tools● Compila e crea il pacchetto automaticamente● Lancia l'emulatore in debugging mode

● CLI: activityCreator.py● Genere la struttura del progetto● Ant build.xml file● IntelliJ project files

● DroidDraw, SensorSimulator

Page 17: Android Android Introduzione all'architettura, alla ...

LUG TriesteAlessandro Tanasi - [email protected]

Esempio

\

Page 18: Android Android Introduzione all'architettura, alla ...

Anatomia di un'app

Page 19: Android Android Introduzione all'architettura, alla ...

LUG TriesteAlessandro Tanasi - [email protected]

Lego per costruzioni

● Activity: Componente UI (tipicamente una schermata, presentation layer)

● Service: Task in background● Content Provider: Gestisce e condivide dati

tra applicazioni● Intent: Messaggistica asincrona● Intent filter: Dichiarazione XML dei

messaggi che possono essere gestiti● Broadcast Receiver: attende intents

broadcast che corrispondono a certi criteri (Intent filter)

● Manifest: Proprietà dell'applicazione

Page 20: Android Android Introduzione all'architettura, alla ...

LUG TriesteAlessandro Tanasi - [email protected]

User interface

● Composta da oggetti View e ViewGroup (vari tipi)

● Layout definito in file XML● Stringhe memorizzate separatamente● Sottoscrizione agli eventi dell'UI tramite

listener o overriding callback● Definizione dei menu e loro creazione

automatica● Notifiche● Adapter per le viste dinamicamente● Stili e temi

Page 21: Android Android Introduzione all'architettura, alla ...

LUG TriesteAlessandro Tanasi - [email protected]

Esempio

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:id="@+id/text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello, I am a TextView" /> <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello, I am a Button" /></LinearLayout>

Page 22: Android Android Introduzione all'architettura, alla ...

LUG TriesteAlessandro Tanasi - [email protected]

Resource e asset

● Generalmente sono elementi esterni referenziati dall'applicazione

● Immagini, audio, video, stringhe di testo, layout, temi

● Directory per resource (res/) e directory per asset (assets/)

● La differenza è nel metodo di accesso● I18n

Page 23: Android Android Introduzione all'architettura, alla ...

LUG TriesteAlessandro Tanasi - [email protected]

Data Storage

● Tecniche differenti per memorizzare dati● Shared preferences: meccanismo per

memorizzare strutture chiavi-valore● SQLite: “DBMS relazionale” per

memorizzare dati articolati● Files: RW di file sulla memoria locale ed SD

card● Network: Utilizzando java.net.* e

android.net.*

Page 24: Android Android Introduzione all'architettura, alla ...

LUG TriesteAlessandro Tanasi - [email protected]

Multimedia

● Grafica 2D e grafica 3D con OpenGL ES API● Offre funzioni built-in di encoding/decoding

per alcuni media types● MediaPlayer e MediaRecorder● android.location e Google Maps library● Accelerometro, bussola

Page 25: Android Android Introduzione all'architettura, alla ...

LUG TriesteAlessandro Tanasi - [email protected]

AndroidManifest.xml

● Ogni applicazione deve avere un AndroidManifest.xml file

● Descrive l'applicazione:● Nome del package Java● Descrive i suoi componenti● Permessi richiesti dall'applicazione● Permessi richiesti per interagire con i suoi

componenti● Opzionali informazioni per testing (profiling)● Dipendenza dalla versione delle android API● Librerie utilizzate

Page 26: Android Android Introduzione all'architettura, alla ...

LUG TriesteAlessandro Tanasi - [email protected]

Esempio di manifest<manifest xmlns:android="http://schemas.android.com/apk/res/android"

package="org.sipdroid.sipua" android:versionName="1.1.3 beta" android:versionCode="32">

<uses-sdk android:minSdkVersion="3" /> <application android:icon="@drawable/icon64" android:label="@string/app_name"> <activity android:name=".ui.Sipdroid" android:label="@string/app_name" android:launchMode="singleInstance" android:configChanges="orientation|keyboardHidden"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity><receiver android:name=".ui.Caller"/> <receiver android:name=".ui.Receiver" android:enabled="true">

<intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> </intent-filter> </receiver>

</application><uses-permission android:name="android.permission.INTERNET"></uses-

permission>

Page 27: Android Android Introduzione all'architettura, alla ...

LUG TriesteAlessandro Tanasi - [email protected]

Life Cycle

● Le applicazioni running sono gestite in una gerarchia:● foreground process (priorità critica)● visible process (alta priorità)● service process (bassa priorità)● background process● empty process

● Le Activity sono mantenute in un activity stack (LIFO)

● Un activity ha tre stati: running o active, paused, stopped

Page 28: Android Android Introduzione all'architettura, alla ...

LUG TriesteAlessandro Tanasi - [email protected]

Life cycle in dettaglio

http://code.google.com/android/reference/android/app/Activity.html#ActivityLifecycle

Page 29: Android Android Introduzione all'architettura, alla ...

LUG TriesteAlessandro Tanasi - [email protected]

Pubblicare un'applicazione

● Iscriversi al market come sviluppatore (25€)● Dare un numero di versione● Firmare il pacchetto● Pubblicare l'applicazione● Google trattiene il 30% degli incassi

Page 30: Android Android Introduzione all'architettura, alla ...

Sicurezza

Page 31: Android Android Introduzione all'architettura, alla ...

LUG TriesteAlessandro Tanasi - [email protected]

Android Security Model

● Ogni processo viene eseguito in una DVM separata

● File non condivisi tra applicazioni● Linux + Android permission model● UID e GID distinti assegnati all'installazione● Stack address randomization

Page 32: Android Android Introduzione all'architettura, alla ...

LUG TriesteAlessandro Tanasi - [email protected]

Android Permissions

● Limite alle funzionalità di un software: android.permission

● Granularità sulle azioni e sull'accesso ai dati● Specificate nel file manifest

<uses-permission android:name="android.permission.READ_CONTACTS"></uses-permission><uses-permission android:name="android.permission.WRITE_CONTACTS"></uses-permission>

Page 33: Android Android Introduzione all'architettura, alla ...

LUG TriesteAlessandro Tanasi - [email protected]

Ma ...

● Bypass memory protections● Vunerabilità riscontrate● La sandbox è abbastanza granulare per far

girare applicazioni non trusted?● Marketing profiling, E.T. chiama sempre casa● Non conoscenza del funzionamento interno

di un'applicazione (client HTTP o HTTPS?)● Rootkit, managed code rootkit

Page 34: Android Android Introduzione all'architettura, alla ...

Conclusioni

Page 35: Android Android Introduzione all'architettura, alla ...

LUG TriesteAlessandro Tanasi - [email protected]

Conclusioni

● L'architettura è disegnata pensando anche allo sviluppatore

● Lo sviluppo è semplice e veloce● Sistemi di security granulari allo scopo di

isolare le applicazioni in una sandbox● Lo sviluppo può essere divertente e redditizio● C'è ampio spazio per la ricerca

Page 36: Android Android Introduzione all'architettura, alla ...

LUG TriesteAlessandro Tanasi - [email protected]

Approfondimenti

http://code.google.com/android/http://developer.android.com/index.htmlhttp://source.android.com/http://www.blackhat.com/presentations/bh-usa-09/BURNS/BHUSA09-Burns-AndroidSurgery-PAPER.pdfhttp://jon.oberheide.org/files/cansecwest09-android.pdfhttp://groups.google.com/group/android-internals

Page 37: Android Android Introduzione all'architettura, alla ...

Domande