Alessandro Tanasi -Alessandro Tanasi - http://www.tanasi.ithttp://www.tanasi.it - alessandro@tanasi.it- alessandro@tanasi....
LUG TriesteAlessandro Tanasi - alessandro@tanasi.it
Fun & profit
● Fun
● Sviluppo applicazioni
● Invenzione di “nuove” app...
LUG TriesteAlessandro Tanasi - alessandro@tanasi.it
Devices
Architettura
LUG TriesteAlessandro Tanasi - alessandro@tanasi.it
Android
● Software stack per device mobili
● Sistema operativo
● Linux...
LUG TriesteAlessandro Tanasi - alessandro@tanasi.it
Kernel
● Linux kernel e driver che fanno da hardware
abstraction layer...
LUG TriesteAlessandro Tanasi - alessandro@tanasi.it
Librerie e runtime
● Librerie (per la gran parte in linguaggio
nativo)...
LUG TriesteAlessandro Tanasi - alessandro@tanasi.it
Application framework
● API ad alto livello
● Le applicazioni native A...
LUG TriesteAlessandro Tanasi - alessandro@tanasi.it
Sequenza di avvio
● Il bootloader carica il
kernel
● Demoni per la
ges...
LUG TriesteAlessandro Tanasi - alessandro@tanasi.it
ps
USER PID PPID VSIZE RSS WCHAN PC NAME
root 1 0 252 164 c0082240 000...
LUG TriesteAlessandro Tanasi - alessandro@tanasi.it
Dalvik Virtual Machine
● Bytecode interpreter (no JIT)
● Lente CPU (25...
LUG TriesteAlessandro Tanasi - alessandro@tanasi.it
Dalvik Executable Format
● Riduzione delle dimensioni
● Sostanziale di...
LUG TriesteAlessandro Tanasi - alessandro@tanasi.it
Compilazione e building
● Compilazione con il compilatore standard
Jav...
Sviluppo
LUG TriesteAlessandro Tanasi - alessandro@tanasi.it
Android SDK
● Android API
● Development tools
● Emulatore Android
● Da...
LUG TriesteAlessandro Tanasi - alessandro@tanasi.it
Native Development Kit (NDK)
● Permettono l'utilizzo di componenti in ...
LUG TriesteAlessandro Tanasi - alessandro@tanasi.it
Android Scripting Environment
● Programmare in Python, Perlm, Jruby,
B...
LUG TriesteAlessandro Tanasi - alessandro@tanasi.it
Development Tools
● Eclipse Plugin: Andreoid Dev Tools
● Compila e cre...
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
scherm...
LUG TriesteAlessandro Tanasi - alessandro@tanasi.it
User interface
● Composta da oggetti View e ViewGroup (vari
tipi)
● La...
LUG TriesteAlessandro Tanasi - alessandro@tanasi.it
Esempio
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:and...
LUG TriesteAlessandro Tanasi - alessandro@tanasi.it
Resource e asset
● Generalmente sono elementi esterni
referenziati dal...
LUG TriesteAlessandro Tanasi - alessandro@tanasi.it
Data Storage
● Tecniche differenti per memorizzare dati
● Shared prefe...
LUG TriesteAlessandro Tanasi - alessandro@tanasi.it
Multimedia
● Grafica 2D e grafica 3D con OpenGL ES API
● Offre funzion...
LUG TriesteAlessandro Tanasi - alessandro@tanasi.it
AndroidManifest.xml
● Ogni applicazione deve avere un
AndroidManifest....
LUG TriesteAlessandro Tanasi - alessandro@tanasi.it
Esempio di manifest
<manifest xmlns:android="http://schemas.android.co...
LUG TriesteAlessandro Tanasi - alessandro@tanasi.it
Life Cycle
● Le applicazioni running sono gestite in una
gerarchia:
● ...
LUG TriesteAlessandro Tanasi - alessandro@tanasi.it
Life cycle in dettaglio
http://code.google.com/android/reference/andro...
LUG TriesteAlessandro Tanasi - alessandro@tanasi.it
Pubblicare un'applicazione
● Iscriversi al market come sviluppatore (2...
Sicurezza
LUG TriesteAlessandro Tanasi - alessandro@tanasi.it
Android Security Model
● Ogni processo viene eseguito in una DVM
separ...
LUG TriesteAlessandro Tanasi - alessandro@tanasi.it
Android Permissions
● Limite alle funzionalità di un software:
android...
LUG TriesteAlessandro Tanasi - alessandro@tanasi.it
Ma ...
● Bypass memory protections
● Vunerabilità riscontrate
● La san...
Conclusioni
LUG TriesteAlessandro Tanasi - alessandro@tanasi.it
Conclusioni
● L'architettura è disegnata pensando anche
allo sviluppat...
LUG TriesteAlessandro Tanasi - alessandro@tanasi.it
Approfondimenti
http://code.google.com/android/
http://developer.andro...
Domande
Upcoming SlideShare
Loading in …5
×

Android Introduzione All Architettura Programmazione Sicurezza Serate A Tema @ serate a tema

2,644 views

Published on

Published in: Technology, Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
2,644
On SlideShare
0
From Embeds
0
Number of Embeds
60
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Android Introduzione All Architettura Programmazione Sicurezza Serate A Tema @ serate a tema

  1. 1. Alessandro Tanasi -Alessandro Tanasi - http://www.tanasi.ithttp://www.tanasi.it - alessandro@tanasi.it- alessandro@tanasi.it AndroidAndroid Introduzione all’architettura, allaIntroduzione all’architettura, alla programmazione e alla sicurezzaprogrammazione e alla sicurezza
  2. 2. LUG TriesteAlessandro Tanasi - alessandro@tanasi.it Fun & profit ● Fun ● Sviluppo applicazioni ● Invenzione di “nuove” applicazioni per soddisfare vecchie e nuove esigenze ● Poter soddisfare le proprie esigenze, personalizzazione ● Attività di ricerca ● Profit ● Vendita delle applicazioni ● Sviluppo applicazioni su commissione ● Vendita o abuso dei risultati di ricerca
  3. 3. LUG TriesteAlessandro Tanasi - alessandro@tanasi.it Devices
  4. 4. Architettura
  5. 5. 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
  6. 6. 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
  7. 7. 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
  8. 8. 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
  9. 9. 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
  10. 10. LUG TriesteAlessandro Tanasi - alessandro@tanasi.it ps USER PID PPID VSIZE RSS WCHAN PC NAME root 1 0 252 164 c0082240 0000ab0c S /init root 2 0 0 0 c0048eac 00000000 S kthreadd root 3 2 0 0 c003acf0 00000000 S ksoftirqd/0 root 4 2 0 0 c0045e5c 00000000 S events/0 root 5 2 0 0 c0045e5c 00000000 S khelper root 8 2 0 0 c0045e5c 00000000 S suspend/0 root 33 2 0 0 c0045e5c 00000000 S kblockd/0 root 36 2 0 0 c0045e5c 00000000 S cqueue/0 root 38 2 0 0 c0150c44 00000000 S kseriod root 75 2 0 0 c005bed0 00000000 S pdflush root 76 2 0 0 c005bed0 00000000 S pdflush root 77 2 0 0 c005f880 00000000 S kswapd0 root 78 2 0 0 c0045e5c 00000000 S aio/0 root 201 2 0 0 c014e2f4 00000000 S mtdblockd root 217 2 0 0 c0045e5c 00000000 S kmmcd root 231 2 0 0 c0045e5c 00000000 S rpciod/0 root 450 1 728 300 c00386a4 afe092ac S /system/bin/sh root 451 1 1256 96 ffffffff 0000ceb4 S /sbin/adbd root 452 1 2816 284 ffffffff afe08b9c S /system/bin/usbd root 453 1 636 216 c017c114 afe08e9c S /system/bin/debuggerd root 454 1 12576 584 ffffffff afe08b9c S /system/bin/rild root 455 1 56572 14616 c01dc388 afe083dc S zygote root 456 1 18528 2072 ffffffff afe0861c S /system/bin/runtime bluetooth 458 1 1200 760 c0082240 afe0947c S /system/bin/dbus-daemon root 467 455 95616 18728 ffffffff afe0861c S system_server app_4 503 455 74148 15340 ffffffff afe09604 S com.google.android.home phone 506 455 96528 19244 ffffffff afe09604 S com.google.android.phone app_2 522 455 73372 14704 ffffffff afe09604 S com.google.process.content app_1 805 455 91460 14296 ffffffff afe09604 S com.google.android.contacts root 1178 450 932 312 00000000 afe083dc R ps
  11. 11. 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
  12. 12. 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
  13. 13. 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
  14. 14. Sviluppo
  15. 15. 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
  16. 16. 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
  17. 17. 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/
  18. 18. 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
  19. 19. LUG TriesteAlessandro Tanasi - alessandro@tanasi.it Esempio
  20. 20. Anatomia di un'app
  21. 21. 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
  22. 22. 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
  23. 23. 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>
  24. 24. 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
  25. 25. 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.*
  26. 26. 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
  27. 27. 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
  28. 28. 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>
  29. 29. 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
  30. 30. LUG TriesteAlessandro Tanasi - alessandro@tanasi.it Life cycle in dettaglio http://code.google.com/android/reference/android/app/Activity.html#ActivityLifecycle
  31. 31. 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
  32. 32. Sicurezza
  33. 33. 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
  34. 34. 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>
  35. 35. 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
  36. 36. Conclusioni
  37. 37. 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
  38. 38. LUG TriesteAlessandro Tanasi - alessandro@tanasi.it Approfondimenti http://code.google.com/android/ http://developer.android.com/index.html http://source.android.com/ http://www.blackhat.com/presentations/bh-usa-09/BURNS/BHUSA09-Burns-AndroidSurgery-PAPER.pdf http://jon.oberheide.org/files/cansecwest09-android.pdf http://groups.google.com/group/android-internals
  39. 39. Domande

×