Your SlideShare is downloading. ×
Android
  Introduzione all’architettura, alla
  programmazione e alla sicurezza




Alessandro Tanasi - http://www.tanasi....
Fun & profit
  ●   Fun
      ●   Sviluppo applicazioni
      ●   Invenzione di “nuove” applicazioni per soddisfare
       ...
Architettura
Android
  ●   Software stack per device mobili
      ●   Sistema operativo
      ●   Linux con kernel 2.6
      ●   Driver...
Kernel
  ●   Linux kernel e driver che fanno da hardware
      abstraction layer
  ●   Core system services per security, ...
Librerie e runtime
  ●   Librerie (per la gran parte in linguaggio
      nativo) esposte attraverso l'application
      fr...
Application framework
  ●   API ad alto livello
  ●   Le applicazioni native Android e quelle di
      terze parti usano l...
Sequenza di avvio
                               ●     Il bootloader carica il
                                     kernel...
Dalvik Virtual Machine
  ●   Bytecode interpreter (no JIT)
      ●   Lente CPU (250-500 MHz), poca RAM (64MB)
      ●   Se...
Dalvik Executable Format
 ●    Riduzione delle dimensioni
 ●    Sostanziale differenza semantica con il
      bytecode Jav...
Compilazione e building
  ●   Compilazione con il compilatore standard
      Java
  ●   Conversion in .dex con l'utility d...
Sviluppo
Android SDK
  ●   Android API
  ●   Development tools
  ●   Emulatore Android
  ●   Dalvik Debug Monitoring Service (DDMS)...
Native Development Kit (NDK)
    ●   Permettono l'utilizzo di componenti in codice
        nativo ( C o C++)
    ●   Cross...
Android Scripting Environment
  ●   Programmare in Python, Perlm, Jruby,
      BeanShell, Lua..
  ●   Per casi particolare...
Development Tools
  ●   Eclipse Plugin: Andreoid Dev Tools
      ●   Compila e crea il pacchetto automaticamente
      ●  ...
Esempio




                    




          Alessandro Tanasi - alessandro@tanasi.it   LUG Trieste
Anatomia di un'app
Lego per costruzioni
  ●   Activity: Componente UI (tipicamente una
      schermata, presentation layer)
  ●   Service: Ta...
User interface
  ●   Composta da oggetti View e ViewGroup (vari
      tipi)
  ●   Layout definito in file XML
  ●   String...
Esempio

  <?xml version="1.0" encoding="utf-8"?>
  <LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/andr...
Resource e asset
  ●   Generalmente sono elementi esterni
      referenziati dall'applicazione
  ●   Immagini, audio, vide...
Data Storage
  ●   Tecniche differenti per memorizzare dati
  ●   Shared preferences: meccanismo per
      memorizzare str...
Multimedia
  ●   Grafica 2D e grafica 3D con OpenGL ES API
  ●   Offre funzioni built-in di encoding/decoding
      per al...
AndroidManifest.xml
  ●   Ogni applicazione deve avere un
      AndroidManifest.xml file
  ●   Descrive l'applicazione:
  ...
Esempio di manifest
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
       package="org.sipdroid.sipu...
Life Cycle
  ●   Le applicazioni running sono gestite in una
      gerarchia:
      ●   foreground process (priorità criti...
Life cycle in dettaglio




http://code.google.com/android/reference/android/app/Activity.html#ActivityLifecycle
         ...
Pubblicare un'applicazione
  ●   Iscriversi al market come sviluppatore (25€)
  ●   Dare un numero di versione
  ●   Firma...
Sicurezza
Android Security Model
  ●   Ogni processo viene eseguito in una DVM
      separata
  ●   File non condivisi tra applicazi...
Android Permissions
  ●   Limite alle funzionalità di un software:
      android.permission
  ●   Granularità sulle azioni...
Ma ...
  ●   Bypass memory protections
  ●   Vunerabilità riscontrate
  ●   La sandbox è abbastanza granulare per far
    ...
Conclusioni
Conclusioni
  ●   L'architettura è disegnata pensando anche
      allo sviluppatore
  ●   Lo sviluppo è semplice e veloce
...
Approfondimenti
http://code.google.com/android/
http://developer.android.com/index.html
http://source.android.com/
http://...
Domande
Upcoming SlideShare
Loading in...5
×

Android: Introduzione all'architettura, alla programmazione e alla sicurezza

6,516

Published on

Android: Introduzione all'architettura, alla programmazione e alla sicurezza

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

No Downloads
Views
Total Views
6,516
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
0
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Transcript of "Android: Introduzione all'architettura, alla programmazione e alla sicurezza"

  1. 1. Android Introduzione all’architettura, alla programmazione e alla sicurezza Alessandro Tanasi - http://www.tanasi.it - alessandro@tanasi.it
  2. 2. 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 Alessandro Tanasi - alessandro@tanasi.it LUG Trieste
  3. 3. Architettura
  4. 4. 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 Alessandro Tanasi - alessandro@tanasi.it LUG Trieste
  5. 5. Kernel ● Linux kernel e driver che fanno da hardware abstraction layer ● Core system services per security, memory management, process management, network stack Alessandro Tanasi - alessandro@tanasi.it LUG Trieste
  6. 6. 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 Alessandro Tanasi - alessandro@tanasi.it LUG Trieste
  7. 7. Application framework ● API ad alto livello ● Le applicazioni native Android e quelle di terze parti usano le stesse API Alessandro Tanasi - alessandro@tanasi.it LUG Trieste
  8. 8. 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 Alessandro Tanasi - alessandro@tanasi.it LUG Trieste
  9. 9. 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 Alessandro Tanasi - alessandro@tanasi.it LUG Trieste
  10. 10. 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 Alessandro Tanasi - alessandro@tanasi.it LUG Trieste
  11. 11. 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 Alessandro Tanasi - alessandro@tanasi.it LUG Trieste
  12. 12. Sviluppo
  13. 13. 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 Alessandro Tanasi - alessandro@tanasi.it LUG Trieste
  14. 14. 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 Alessandro Tanasi - alessandro@tanasi.it LUG Trieste
  15. 15. 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/ Alessandro Tanasi - alessandro@tanasi.it LUG Trieste
  16. 16. 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 Alessandro Tanasi - alessandro@tanasi.it LUG Trieste
  17. 17. Esempio Alessandro Tanasi - alessandro@tanasi.it LUG Trieste
  18. 18. Anatomia di un'app
  19. 19. 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 Alessandro Tanasi - alessandro@tanasi.it LUG Trieste
  20. 20. 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 Alessandro Tanasi - alessandro@tanasi.it LUG Trieste
  21. 21. 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> Alessandro Tanasi - alessandro@tanasi.it LUG Trieste
  22. 22. 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 Alessandro Tanasi - alessandro@tanasi.it LUG Trieste
  23. 23. 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.* Alessandro Tanasi - alessandro@tanasi.it LUG Trieste
  24. 24. 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 Alessandro Tanasi - alessandro@tanasi.it LUG Trieste
  25. 25. 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 Alessandro Tanasi - alessandro@tanasi.it LUG Trieste
  26. 26. 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> Alessandro Tanasi - alessandro@tanasi.it LUG Trieste
  27. 27. 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 Alessandro Tanasi - alessandro@tanasi.it LUG Trieste
  28. 28. Life cycle in dettaglio http://code.google.com/android/reference/android/app/Activity.html#ActivityLifecycle Alessandro Tanasi - alessandro@tanasi.it LUG Trieste
  29. 29. 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 Alessandro Tanasi - alessandro@tanasi.it LUG Trieste
  30. 30. Sicurezza
  31. 31. 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 Alessandro Tanasi - alessandro@tanasi.it LUG Trieste
  32. 32. 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> Alessandro Tanasi - alessandro@tanasi.it LUG Trieste
  33. 33. 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 Alessandro Tanasi - alessandro@tanasi.it LUG Trieste
  34. 34. Conclusioni
  35. 35. 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 Alessandro Tanasi - alessandro@tanasi.it LUG Trieste
  36. 36. 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 Alessandro Tanasi - alessandro@tanasi.it LUG Trieste
  37. 37. Domande

×