際際滷

際際滷Share a Scribd company logo
Alessandro Tanasi -Alessandro Tanasi - http://www.tanasi.ithttp://www.tanasi.it - alessandro@tanasi.it- alessandro@tanasi.it
AndroidAndroid
Introduzione allarchitettura, allaIntroduzione allarchitettura, 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
 Poter soddisfare le proprie esigenze,
personalizzazione
 Attivit di ricerca
 Profit
 Vendita delle applicazioni
 Sviluppo applicazioni su commissione
 Vendita o abuso dei risultati di ricerca
LUG油TriesteAlessandro Tanasi - alessandro@tanasi.it
Devices
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
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
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.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
Domande

More Related Content

Similar to Android Introduzione All Architettura Programmazione Sicurezza Serate A Tema @ serate a tema (20)

Introduzione ad Android
Introduzione ad AndroidIntroduzione ad Android
Introduzione ad Android
Emanuel Di Nardo
GWT Development for Handheld Devices
GWT Development for Handheld DevicesGWT Development for Handheld Devices
GWT Development for Handheld Devices
GWTcon
Data Analysis & Machine Learning
Data Analysis & Machine LearningData Analysis & Machine Learning
Data Analysis & Machine Learning
Caffeina
Siamo tutti bravi con il browser degli altri!
Siamo tutti bravi con il browser degli altri!Siamo tutti bravi con il browser degli altri!
Siamo tutti bravi con il browser degli altri!
Francesco Sciuti
Applicazioni mobili: strumenti, costi soluzioni e peformance
Applicazioni mobili: strumenti, costi soluzioni e peformanceApplicazioni mobili: strumenti, costi soluzioni e peformance
Applicazioni mobili: strumenti, costi soluzioni e peformance
Diego La Monica
Microsoft Fast - Overview
Microsoft Fast - OverviewMicrosoft Fast - Overview
Microsoft Fast - Overview
Francesco Sciuti
Introduzione alla programmazione Android - Android@tulug
Introduzione alla programmazione Android - Android@tulugIntroduzione alla programmazione Android - Android@tulug
Introduzione alla programmazione Android - Android@tulug
Ivan Gualandri
Angular kit e Design system del Paese - Meetup ngRome 30 Gennaio 2023
Angular kit e Design system del Paese - Meetup ngRome 30 Gennaio 2023Angular kit e Design system del Paese - Meetup ngRome 30 Gennaio 2023
Angular kit e Design system del Paese - Meetup ngRome 30 Gennaio 2023
AndreaStagi3
Presentarsi sul mercato globale con app di successo
Presentarsi sul mercato globale con app di successoPresentarsi sul mercato globale con app di successo
Presentarsi sul mercato globale con app di successo
Diego La Monica
Android vs iOS
Android vs iOSAndroid vs iOS
Android vs iOS
Domenico Gabriele
Smart Plant P&amp;Id Mobile
Smart Plant P&amp;Id MobileSmart Plant P&amp;Id Mobile
Smart Plant P&amp;Id Mobile
gmanca
Come sviluppare applicazioni cross device con HTML
Come sviluppare applicazioni cross device con HTMLCome sviluppare applicazioni cross device con HTML
Come sviluppare applicazioni cross device con HTML
Sinergia Totale
PostgreSQL - Hadoop: Why not? - PGDay.IT 2016
PostgreSQL - Hadoop: Why not? - PGDay.IT 2016PostgreSQL - Hadoop: Why not? - PGDay.IT 2016
PostgreSQL - Hadoop: Why not? - PGDay.IT 2016
Miriade Spa
Semantic ArDroid
Semantic ArDroidSemantic ArDroid
Semantic ArDroid
Alfredo Torre
MongoDB Atlas: il modo migliore per eseguire MongoDB in ambiente cloud 2
MongoDB Atlas: il modo migliore per eseguire MongoDB in ambiente cloud 2MongoDB Atlas: il modo migliore per eseguire MongoDB in ambiente cloud 2
MongoDB Atlas: il modo migliore per eseguire MongoDB in ambiente cloud 2
MongoDB
Android, panoramica e sviluppo
Android, panoramica e sviluppoAndroid, panoramica e sviluppo
Android, panoramica e sviluppo
Lorenzo Braghetto
[Ditedi]monitoring
[Ditedi]monitoring[Ditedi]monitoring
[Ditedi]monitoring
Dario Tion
Applicazioni mobili: dall'ideazione alla pubblicazione
Applicazioni mobili: dall'ideazione alla pubblicazioneApplicazioni mobili: dall'ideazione alla pubblicazione
Applicazioni mobili: dall'ideazione alla pubblicazione
Diego La Monica
Meetup Fluent Design e Progressive Web App
Meetup Fluent Design e Progressive Web AppMeetup Fluent Design e Progressive Web App
Meetup Fluent Design e Progressive Web App
dotnetcode
SMAU Milano 2014 GAE 24/10/2014 - IWA Italy
SMAU Milano 2014 GAE 24/10/2014 - IWA ItalySMAU Milano 2014 GAE 24/10/2014 - IWA Italy
SMAU Milano 2014 GAE 24/10/2014 - IWA Italy
Paolo Dadda
Introduzione ad Android
Introduzione ad AndroidIntroduzione ad Android
Introduzione ad Android
Emanuel Di Nardo
GWT Development for Handheld Devices
GWT Development for Handheld DevicesGWT Development for Handheld Devices
GWT Development for Handheld Devices
GWTcon
Data Analysis & Machine Learning
Data Analysis & Machine LearningData Analysis & Machine Learning
Data Analysis & Machine Learning
Caffeina
Siamo tutti bravi con il browser degli altri!
Siamo tutti bravi con il browser degli altri!Siamo tutti bravi con il browser degli altri!
Siamo tutti bravi con il browser degli altri!
Francesco Sciuti
Applicazioni mobili: strumenti, costi soluzioni e peformance
Applicazioni mobili: strumenti, costi soluzioni e peformanceApplicazioni mobili: strumenti, costi soluzioni e peformance
Applicazioni mobili: strumenti, costi soluzioni e peformance
Diego La Monica
Microsoft Fast - Overview
Microsoft Fast - OverviewMicrosoft Fast - Overview
Microsoft Fast - Overview
Francesco Sciuti
Introduzione alla programmazione Android - Android@tulug
Introduzione alla programmazione Android - Android@tulugIntroduzione alla programmazione Android - Android@tulug
Introduzione alla programmazione Android - Android@tulug
Ivan Gualandri
Angular kit e Design system del Paese - Meetup ngRome 30 Gennaio 2023
Angular kit e Design system del Paese - Meetup ngRome 30 Gennaio 2023Angular kit e Design system del Paese - Meetup ngRome 30 Gennaio 2023
Angular kit e Design system del Paese - Meetup ngRome 30 Gennaio 2023
AndreaStagi3
Presentarsi sul mercato globale con app di successo
Presentarsi sul mercato globale con app di successoPresentarsi sul mercato globale con app di successo
Presentarsi sul mercato globale con app di successo
Diego La Monica
Smart Plant P&amp;Id Mobile
Smart Plant P&amp;Id MobileSmart Plant P&amp;Id Mobile
Smart Plant P&amp;Id Mobile
gmanca
Come sviluppare applicazioni cross device con HTML
Come sviluppare applicazioni cross device con HTMLCome sviluppare applicazioni cross device con HTML
Come sviluppare applicazioni cross device con HTML
Sinergia Totale
PostgreSQL - Hadoop: Why not? - PGDay.IT 2016
PostgreSQL - Hadoop: Why not? - PGDay.IT 2016PostgreSQL - Hadoop: Why not? - PGDay.IT 2016
PostgreSQL - Hadoop: Why not? - PGDay.IT 2016
Miriade Spa
MongoDB Atlas: il modo migliore per eseguire MongoDB in ambiente cloud 2
MongoDB Atlas: il modo migliore per eseguire MongoDB in ambiente cloud 2MongoDB Atlas: il modo migliore per eseguire MongoDB in ambiente cloud 2
MongoDB Atlas: il modo migliore per eseguire MongoDB in ambiente cloud 2
MongoDB
Android, panoramica e sviluppo
Android, panoramica e sviluppoAndroid, panoramica e sviluppo
Android, panoramica e sviluppo
Lorenzo Braghetto
[Ditedi]monitoring
[Ditedi]monitoring[Ditedi]monitoring
[Ditedi]monitoring
Dario Tion
Applicazioni mobili: dall'ideazione alla pubblicazione
Applicazioni mobili: dall'ideazione alla pubblicazioneApplicazioni mobili: dall'ideazione alla pubblicazione
Applicazioni mobili: dall'ideazione alla pubblicazione
Diego La Monica
Meetup Fluent Design e Progressive Web App
Meetup Fluent Design e Progressive Web AppMeetup Fluent Design e Progressive Web App
Meetup Fluent Design e Progressive Web App
dotnetcode
SMAU Milano 2014 GAE 24/10/2014 - IWA Italy
SMAU Milano 2014 GAE 24/10/2014 - IWA ItalySMAU Milano 2014 GAE 24/10/2014 - IWA Italy
SMAU Milano 2014 GAE 24/10/2014 - IWA Italy
Paolo Dadda

More from jekil (17)

Names and virtual host discovery
Names and virtual host discoveryNames and virtual host discovery
Names and virtual host discovery
jekil
Cuckoo Sandbox: Automated malware analysis
Cuckoo Sandbox: Automated malware analysisCuckoo Sandbox: Automated malware analysis
Cuckoo Sandbox: Automated malware analysis
jekil
Client Side Security Settordici Lugts
Client Side Security Settordici LugtsClient Side Security Settordici Lugts
Client Side Security Settordici Lugts
jekil
Security by example
Security by exampleSecurity by example
Security by example
jekil
Sviluppo web con Ruby on Rails
Sviluppo web con Ruby on RailsSviluppo web con Ruby on Rails
Sviluppo web con Ruby on Rails
jekil
XPath Injection
XPath InjectionXPath Injection
XPath Injection
jekil
Web Application Insecurity Uncensored
Web Application Insecurity UncensoredWeb Application Insecurity Uncensored
Web Application Insecurity Uncensored
jekil
Web Application Insecurity L D2007
Web Application Insecurity  L D2007Web Application Insecurity  L D2007
Web Application Insecurity L D2007
jekil
Anonimato In Rete Summer Of Linux2007
Anonimato In Rete Summer Of Linux2007Anonimato In Rete Summer Of Linux2007
Anonimato In Rete Summer Of Linux2007
jekil
Linux Nelle Aziende Summer Of Linux 2007
Linux Nelle Aziende Summer Of Linux 2007Linux Nelle Aziende Summer Of Linux 2007
Linux Nelle Aziende Summer Of Linux 2007
jekil
Linux Nelle Aziende Installfest2007
Linux Nelle Aziende Installfest2007Linux Nelle Aziende Installfest2007
Linux Nelle Aziende Installfest2007
jekil
Sicurezza Informatica Nelle Aziende Installfest2007
Sicurezza Informatica Nelle Aziende Installfest2007Sicurezza Informatica Nelle Aziende Installfest2007
Sicurezza Informatica Nelle Aziende Installfest2007
jekil
Introduzione all'analisi forense
Introduzione all'analisi forenseIntroduzione all'analisi forense
Introduzione all'analisi forense
jekil
MySQL
MySQLMySQL
MySQL
jekil
MySQL 5
MySQL 5MySQL 5
MySQL 5
jekil
Intrusion Detection Systems
Intrusion Detection SystemsIntrusion Detection Systems
Intrusion Detection Systems
jekil
La sicurezza informatica nello studio legale
La sicurezza informatica nello studio legaleLa sicurezza informatica nello studio legale
La sicurezza informatica nello studio legale
jekil
Names and virtual host discovery
Names and virtual host discoveryNames and virtual host discovery
Names and virtual host discovery
jekil
Cuckoo Sandbox: Automated malware analysis
Cuckoo Sandbox: Automated malware analysisCuckoo Sandbox: Automated malware analysis
Cuckoo Sandbox: Automated malware analysis
jekil
Client Side Security Settordici Lugts
Client Side Security Settordici LugtsClient Side Security Settordici Lugts
Client Side Security Settordici Lugts
jekil
Security by example
Security by exampleSecurity by example
Security by example
jekil
Sviluppo web con Ruby on Rails
Sviluppo web con Ruby on RailsSviluppo web con Ruby on Rails
Sviluppo web con Ruby on Rails
jekil
XPath Injection
XPath InjectionXPath Injection
XPath Injection
jekil
Web Application Insecurity Uncensored
Web Application Insecurity UncensoredWeb Application Insecurity Uncensored
Web Application Insecurity Uncensored
jekil
Web Application Insecurity L D2007
Web Application Insecurity  L D2007Web Application Insecurity  L D2007
Web Application Insecurity L D2007
jekil
Anonimato In Rete Summer Of Linux2007
Anonimato In Rete Summer Of Linux2007Anonimato In Rete Summer Of Linux2007
Anonimato In Rete Summer Of Linux2007
jekil
Linux Nelle Aziende Summer Of Linux 2007
Linux Nelle Aziende Summer Of Linux 2007Linux Nelle Aziende Summer Of Linux 2007
Linux Nelle Aziende Summer Of Linux 2007
jekil
Linux Nelle Aziende Installfest2007
Linux Nelle Aziende Installfest2007Linux Nelle Aziende Installfest2007
Linux Nelle Aziende Installfest2007
jekil
Sicurezza Informatica Nelle Aziende Installfest2007
Sicurezza Informatica Nelle Aziende Installfest2007Sicurezza Informatica Nelle Aziende Installfest2007
Sicurezza Informatica Nelle Aziende Installfest2007
jekil
Introduzione all'analisi forense
Introduzione all'analisi forenseIntroduzione all'analisi forense
Introduzione all'analisi forense
jekil
MySQL
MySQLMySQL
MySQL
jekil
MySQL 5
MySQL 5MySQL 5
MySQL 5
jekil
Intrusion Detection Systems
Intrusion Detection SystemsIntrusion Detection Systems
Intrusion Detection Systems
jekil
La sicurezza informatica nello studio legale
La sicurezza informatica nello studio legaleLa sicurezza informatica nello studio legale
La sicurezza informatica nello studio legale
jekil

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

  • 1. Alessandro Tanasi -Alessandro Tanasi - http://www.tanasi.ithttp://www.tanasi.it - alessandro@tanasi.it- alessandro@tanasi.it AndroidAndroid Introduzione allarchitettura, allaIntroduzione allarchitettura, alla programmazione e alla sicurezzaprogrammazione e alla sicurezza
  • 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. LUG油TriesteAlessandro Tanasi - alessandro@tanasi.it Devices
  • 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. 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. 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. 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. 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. 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. 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. 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. 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
  • 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. 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. 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. 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. LUG油TriesteAlessandro Tanasi - alessandro@tanasi.it Esempio
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. LUG油TriesteAlessandro Tanasi - alessandro@tanasi.it Life cycle in dettaglio http://code.google.com/android/reference/android/app/Activity.html#ActivityLifecycle
  • 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
  • 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. 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. 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
  • 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. 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