SlideShare a Scribd company logo
1 of 39
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
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

GWT Development for Handheld Devices
GWT Development for Handheld DevicesGWT Development for Handheld Devices
GWT Development for Handheld DevicesGWTcon
 
Data Analysis & Machine Learning
Data Analysis & Machine LearningData Analysis & Machine Learning
Data Analysis & Machine LearningCaffeina
 
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 peformanceDiego La Monica
 
Introduzione alla programmazione Android - Android@tulug
Introduzione alla programmazione Android - Android@tulugIntroduzione alla programmazione Android - Android@tulug
Introduzione alla programmazione Android - Android@tulugIvan 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 2023AndreaStagi3
 
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 successoDiego La Monica
 
Smart Plant P&amp;Id Mobile
Smart Plant P&amp;Id MobileSmart Plant P&amp;Id Mobile
Smart Plant P&amp;Id Mobilegmanca
 
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 HTMLSinergia 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 2016Miriade 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 2MongoDB
 
Android, panoramica e sviluppo
Android, panoramica e sviluppoAndroid, panoramica e sviluppo
Android, panoramica e sviluppoLorenzo Braghetto
 
[Ditedi]monitoring
[Ditedi]monitoring[Ditedi]monitoring
[Ditedi]monitoringDario Tion
 
Applicazioni mobili: dall'ideazione alla pubblicazione
Applicazioni mobili: dall'ideazione alla pubblicazioneApplicazioni mobili: dall'ideazione alla pubblicazione
Applicazioni mobili: dall'ideazione alla pubblicazioneDiego 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 Appdotnetcode
 
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 ItalyPaolo Dadda
 

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
 
GWT Development for Handheld Devices
GWT Development for Handheld DevicesGWT Development for Handheld Devices
GWT Development for Handheld Devices
 
Data Analysis & Machine Learning
Data Analysis & Machine LearningData Analysis & Machine Learning
Data Analysis & Machine Learning
 
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!
 
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
 
Microsoft Fast - Overview
Microsoft Fast - OverviewMicrosoft Fast - Overview
Microsoft Fast - Overview
 
Introduzione alla programmazione Android - Android@tulug
Introduzione alla programmazione Android - Android@tulugIntroduzione alla programmazione Android - Android@tulug
Introduzione alla programmazione Android - Android@tulug
 
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
 
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
 
Android vs iOS
Android vs iOSAndroid vs iOS
Android vs iOS
 
Smart Plant P&amp;Id Mobile
Smart Plant P&amp;Id MobileSmart Plant P&amp;Id Mobile
Smart Plant P&amp;Id Mobile
 
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
 
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
 
Semantic ArDroid
Semantic ArDroidSemantic ArDroid
Semantic ArDroid
 
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
 
Android, panoramica e sviluppo
Android, panoramica e sviluppoAndroid, panoramica e sviluppo
Android, panoramica e sviluppo
 
[Ditedi]monitoring
[Ditedi]monitoring[Ditedi]monitoring
[Ditedi]monitoring
 
Applicazioni mobili: dall'ideazione alla pubblicazione
Applicazioni mobili: dall'ideazione alla pubblicazioneApplicazioni mobili: dall'ideazione alla pubblicazione
Applicazioni mobili: dall'ideazione alla pubblicazione
 
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
 
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
 

More from jekil

Names and virtual host discovery
Names and virtual host discoveryNames and virtual host discovery
Names and virtual host discoveryjekil
 
Cuckoo Sandbox: Automated malware analysis
Cuckoo Sandbox: Automated malware analysisCuckoo Sandbox: Automated malware analysis
Cuckoo Sandbox: Automated malware analysisjekil
 
Client Side Security Settordici Lugts
Client Side Security Settordici LugtsClient Side Security Settordici Lugts
Client Side Security Settordici Lugtsjekil
 
Security by example
Security by exampleSecurity by example
Security by examplejekil
 
Sviluppo web con Ruby on Rails
Sviluppo web con Ruby on RailsSviluppo web con Ruby on Rails
Sviluppo web con Ruby on Railsjekil
 
XPath Injection
XPath InjectionXPath Injection
XPath Injectionjekil
 
Web Application Insecurity Uncensored
Web Application Insecurity UncensoredWeb Application Insecurity Uncensored
Web Application Insecurity Uncensoredjekil
 
Web Application Insecurity L D2007
Web Application Insecurity  L D2007Web Application Insecurity  L D2007
Web Application Insecurity L D2007jekil
 
Anonimato In Rete Summer Of Linux2007
Anonimato In Rete Summer Of Linux2007Anonimato In Rete Summer Of Linux2007
Anonimato In Rete Summer Of Linux2007jekil
 
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 2007jekil
 
Linux Nelle Aziende Installfest2007
Linux Nelle Aziende Installfest2007Linux Nelle Aziende Installfest2007
Linux Nelle Aziende Installfest2007jekil
 
Sicurezza Informatica Nelle Aziende Installfest2007
Sicurezza Informatica Nelle Aziende Installfest2007Sicurezza Informatica Nelle Aziende Installfest2007
Sicurezza Informatica Nelle Aziende Installfest2007jekil
 
Introduzione all'analisi forense
Introduzione all'analisi forenseIntroduzione all'analisi forense
Introduzione all'analisi forensejekil
 
MySQL
MySQLMySQL
MySQLjekil
 
MySQL 5
MySQL 5MySQL 5
MySQL 5jekil
 
Intrusion Detection Systems
Intrusion Detection SystemsIntrusion Detection Systems
Intrusion Detection Systemsjekil
 
La sicurezza informatica nello studio legale
La sicurezza informatica nello studio legaleLa sicurezza informatica nello studio legale
La sicurezza informatica nello studio legalejekil
 

More from jekil (17)

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

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 all’architettura, allaIntroduzione all’architettura, 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