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

Loading...

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

0 comments

Post a comment

    Post a comment
    Embed Video
    Edit your comment Cancel

    Favorites, Groups & Events

    Android: Introduzione all'architettura, alla programmazione e alla sicurezza - Presentation Transcript

    1. Android Introduzione all’architettura, alla programmazione e alla sicurezza Alessandro Tanasi - http://www.tanasi.it - alessandro@tanasi.it
    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. Architettura
    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. 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. 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. 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. 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. 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. 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. 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. Sviluppo
    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. 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. 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. 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. Esempio Alessandro Tanasi - alessandro@tanasi.it LUG Trieste
    18. Anatomia di un'app
    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. 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. 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. 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. 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. 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. 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. 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. 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. Life cycle in dettaglio http://code.google.com/android/reference/android/app/Activity.html#ActivityLifecycle Alessandro Tanasi - alessandro@tanasi.it LUG Trieste
    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. Sicurezza
    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. 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. 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. Conclusioni
    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. 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. Domande

    + jekiljekil, 1 month ago

    custom

    191 views, 0 favs, 1 embeds more stats

    Android: Introduzione all'architettura, alla progra more

    More info about this document

    © All Rights Reserved

    Go to text version

    • Total Views 191
      • 181 on SlideShare
      • 10 from embeds
    • Comments 0
    • Favorites 0
    • Downloads 0
    Most viewed embeds
    • 10 views on http://www.tanasi.it

    more

    All embeds
    • 10 views on http://www.tanasi.it

    less

    Flagged as inappropriate Flag as inappropriate
    Flag as inappropriate

    Select your reason for flagging this presentation as inappropriate. If needed, use the feedback form to let us know more details.

    Cancel
    File a copyright complaint
    Having problems? Go to our helpdesk?

    Categories