View
1.266
Download
2
Category
Preview:
DESCRIPTION
Citation preview
Alessandro Tanasi - Alessandro Tanasi - http://www.tanasi.ithttp://www.tanasi.it - alessandro@tanasi.it - alessandro@tanasi.it
AndroidAndroidIntroduzione all’architettura, alla Introduzione all’architettura, alla programmazione e alla sicurezzaprogrammazione e alla sicurezza
LUG TriesteAlessandro Tanasi - alessandro@tanasi.it
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
Architettura
LUG TriesteAlessandro Tanasi - alessandro@tanasi.it
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
LUG TriesteAlessandro Tanasi - alessandro@tanasi.it
Kernel
● Linux kernel e driver che fanno da hardware abstraction layer
● Core system services per security, memory management, process management, network stack
LUG TriesteAlessandro Tanasi - alessandro@tanasi.it
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
LUG TriesteAlessandro Tanasi - alessandro@tanasi.it
Application framework
● API ad alto livello● Le applicazioni native Android e quelle di
terze parti usano le stesse API
LUG TriesteAlessandro Tanasi - alessandro@tanasi.it
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
LUG TriesteAlessandro Tanasi - alessandro@tanasi.it
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
LUG TriesteAlessandro Tanasi - alessandro@tanasi.it
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
LUG TriesteAlessandro Tanasi - alessandro@tanasi.it
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
Sviluppo
LUG TriesteAlessandro Tanasi - alessandro@tanasi.it
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
LUG TriesteAlessandro Tanasi - alessandro@tanasi.it
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
LUG TriesteAlessandro Tanasi - alessandro@tanasi.it
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/
LUG TriesteAlessandro Tanasi - alessandro@tanasi.it
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
LUG TriesteAlessandro Tanasi - alessandro@tanasi.it
Esempio
\
Anatomia di un'app
LUG TriesteAlessandro Tanasi - alessandro@tanasi.it
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
LUG TriesteAlessandro Tanasi - alessandro@tanasi.it
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
LUG TriesteAlessandro Tanasi - alessandro@tanasi.it
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>
LUG TriesteAlessandro Tanasi - alessandro@tanasi.it
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
LUG TriesteAlessandro Tanasi - alessandro@tanasi.it
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.*
LUG TriesteAlessandro Tanasi - alessandro@tanasi.it
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
LUG TriesteAlessandro Tanasi - alessandro@tanasi.it
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
LUG TriesteAlessandro Tanasi - alessandro@tanasi.it
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>
LUG TriesteAlessandro Tanasi - alessandro@tanasi.it
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
LUG TriesteAlessandro Tanasi - alessandro@tanasi.it
Life cycle in dettaglio
http://code.google.com/android/reference/android/app/Activity.html#ActivityLifecycle
LUG TriesteAlessandro Tanasi - alessandro@tanasi.it
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
Sicurezza
LUG TriesteAlessandro Tanasi - alessandro@tanasi.it
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
LUG TriesteAlessandro Tanasi - alessandro@tanasi.it
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>
LUG TriesteAlessandro Tanasi - alessandro@tanasi.it
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
Conclusioni
LUG TriesteAlessandro Tanasi - alessandro@tanasi.it
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
LUG TriesteAlessandro Tanasi - alessandro@tanasi.it
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
Domande
Recommended