learning, analyzing and protecting android with tomoyo linux (jls2009)

48
Japan Linux Symposium 2009 2009.10.23 Daisuke Numaguchi Tetsuo Handa Giuseppe La Tona NTT DATA CORPORATION

Upload: toshiharu-harada-phd

Post on 12-May-2015

5.015 views

Category:

Technology


0 download

DESCRIPTION

TOMOYO Linux is a MAC (Mandatory Access Control) implementation which gives support to protect Linux systems as well as to learn, understand and analyze system behavior. Being lightweight, it results suitable for embedded systems too. This tutorial aims to show in a practical way how to make the best use of TOMOYO Linux potentials in order to study and protect embedded Linux systems, taking Android as a specific study case. Though Android is amazingly expanding its target to various kinds of devices, it was designed mainly for mobile phones. Then, unlike other embedded operating systems, it presents some peculiar characteristics which require a particular attention to apply MAC effectively. The session is directed to those who want to learn how to use TOMOYO Linux, to managers or developers interested in security concerning embedded Linux and Android, and even to anyone just wishing to take a closer glance at Android internals.

TRANSCRIPT

Page 1: Learning, Analyzing and Protecting Android with TOMOYO Linux (JLS2009)

Japan Linux Symposium 20092009.10.23

Daisuke NumaguchiTetsuo Handa

Giuseppe La TonaNTT DATA CORPORATION

Page 2: Learning, Analyzing and Protecting Android with TOMOYO Linux (JLS2009)

1. INTRODUCTIONS

Copyright (C) 2009 NTT Data Corporation 22009/10/23

Page 3: Learning, Analyzing and Protecting Android with TOMOYO Linux (JLS2009)

TOMOYO overviewMAC implementation for Linux

Behavior oriented system analyzer and protector

Pathname-based MAC toolsIt consists of:

a kernel patch (ccspatch)a set of utilities (ccstools) for managing access control settings (a.k.a. policy)

Copyright (C) 2009 NTT Data Corporation 32009/10/23

Page 4: Learning, Analyzing and Protecting Android with TOMOYO Linux (JLS2009)

MAC(Mandatory Access Control)Restrict access according to policy.

No exception, no bypass Performed inside kernel space

SELinux, Smack, TOMOYO, AppArmor, LIDS, grsecurity, etc.

2009/10/23 Copyright (C) 2009 NTT Data Corporation 4

Page 5: Learning, Analyzing and Protecting Android with TOMOYO Linux (JLS2009)

How to use TOMOYO?Protect

System administrator's operations

LearningKnow system behaviors

AnalyzeDebug

Copyright (C) 2009 NTT Data Corporation 52009/10/23

Page 6: Learning, Analyzing and Protecting Android with TOMOYO Linux (JLS2009)

Android overview

Copyright (C) 2009 NTT Data Corporation 62009/10/23

Page 7: Learning, Analyzing and Protecting Android with TOMOYO Linux (JLS2009)

Android KernelLinux Kernel 2.6 with some changes

Reduced set of standard Linux utilities -> toolbox

No support glibc -> Bionic librariesNo standard IPC -> Binder , specific

IPC driverNo native windowing systemOptimized Power ManagementLow memory killer, Alarm etc.

Copyright (C) 2009 NTT Data Corporation 72009/10/23

Page 8: Learning, Analyzing and Protecting Android with TOMOYO Linux (JLS2009)

Dalvik and ZygoteRuntime is made by Java programs running in

Dalvik: Virtual Machine for mobile devicesslow CPU, small RAM, no swap space, batteryNot a JVM, no JIT: only interpreter of DEX

(optimized bytecode obtained from Java .class)Multiple VM instances can run efficiently.

Zygote process:first instance of Dalvik VM, partially initialized load preload classes and resources is kept always alive in idle stateWhen an application execution request occurs:zygote fork()s to a new process…

…which loads the requested package(Biology concept of “zygote”: duplicate, specialize and differentiate)

Copyright (C) 2009 NTT Data Corporation 82009/10/23

Page 9: Learning, Analyzing and Protecting Android with TOMOYO Linux (JLS2009)

Dalvik and ZygoteRuntime is made by Java programs running in

Dalvik: Virtual Machine for mobile devicesslow CPU, small RAM, no swap space, batteryNot a JVM, no JIT: only interpreter of DEX

(optimized bytecode obtained from Java .class)Multiple VM instances can run efficiently.

Zygote process:first instance of Dalvik VM, partially initialized load preload classes and resources is kept always alive in idle stateWhen an application execution request occurs:zygote fork()s to a new process…

…which loads the requested package(Biology concept of “zygote”: duplicate, specialize and differentiate)

Copyright (C) 2009 NTT Data Corporation 9

fork()

applicationapplication

zygotezygote

Dalvik VMDalvik VM

2009/10/23

Page 10: Learning, Analyzing and Protecting Android with TOMOYO Linux (JLS2009)

systemservesystemserverr

service service managermanagerservice service

managermanagerSystem System ServicesServices

Dalvik VMDalvik VM

fork()

Dalvik VMDalvik VMDalvik VMDalvik VMDalvik VMDalvik VM

GUI

service service managermanagerservice service

managermanagerApplicationsApplications

HomeHome

RuntimeRuntime

Android boot sequence

10

KernelKernel

initinitinitinitDaemonsDaemons

initinit

initinitinitinitNative Native ServersServers

adbdvold (mount)rild (radio)debuggerdinstalld… Binder

servicemanaservicemanagerger

reg

istr

ati

on

mediaservmediaserverer

zygotezygote

exec()

fork()

DalvikspecializationCopyright (C) 2009 NTT Data Corporation2009/10/23

Page 11: Learning, Analyzing and Protecting Android with TOMOYO Linux (JLS2009)

Android security model (1/2)Each application runs in its own

processRuntime in separate instances of

Dalvik virtual machine

Copyright (C) 2009 NTT Data Corporation 11

Dalvik VMDalvik VM

Application 1Application 1

ZygoteZygote

Dalvik VMDalvik VM

Application 2Application 2

Dalvik VMDalvik VM

Application 3Application 3

Dalvik VMDalvik VM

Application 4Application 4

2009/10/23

Page 12: Learning, Analyzing and Protecting Android with TOMOYO Linux (JLS2009)

Android security model (2/2)Each process is a “secure sandbox”

Linux Discretionary Access Control (DAC) for file access: all applications are assigned a unique UID (constant) UID for system services are hard-coded UID for user packages are progressively assigned at

install-time, starting from uid 10000 (and mapped to app_0, app_1, …); they are saved in a file and are maintained constant during the life of the package on the device.

Application specific files are saved in /data/data in separate folders owned by specific UID users

Copyright (C) 2009 NTT Data Corporation 122009/10/23

Page 13: Learning, Analyzing and Protecting Android with TOMOYO Linux (JLS2009)

2. TOMOYO ON ANDROID

Copyright (C) 2009 NTT Data Corporation 132009/10/23

Page 14: Learning, Analyzing and Protecting Android with TOMOYO Linux (JLS2009)

TOMOYO Linux versionsThere are 2 development lines:

Fully equipped version (1.x series)provides full functionalities of pathname-based

MAC (MAC for files, network, capabilities…)

Mainlined version (2.x series)uses Linux Security Modules (LSM)subset of MAC functionalities (only for files, so far)

missing functionalities will be added in the future

supports only kernels 2.6.30 and laterCopyright (C) 2009 NTT Data Corporation 142009/10/23

Page 15: Learning, Analyzing and Protecting Android with TOMOYO Linux (JLS2009)

Android kernelAndroid SDK 1.6 ("donut") comes with kernel 2.6.29 .

Copyright (C) 2009 NTT Data Corporation 152009/10/23

Page 16: Learning, Analyzing and Protecting Android with TOMOYO Linux (JLS2009)

Android kernelAndroid SDK 1.6 ("donut") comes with kernel 2.6.29 .

TOMOYO 2.x is available since kernel 2.6.30

TOMOYO 2.2 function is only file access control

Copyright (C) 2009 NTT Data Corporation 162009/10/23

Page 17: Learning, Analyzing and Protecting Android with TOMOYO Linux (JLS2009)

Android kernelAndroid SDK 1.6 ("donut") comes with kernel 2.6.29 .

TOMOYO 2.x is available since kernel 2.6.30

TOMOYO 2.2 function is only file access control

So, choose TOMOYO 1.x !!

Copyright (C) 2009 NTT Data Corporation 172009/10/23

Page 18: Learning, Analyzing and Protecting Android with TOMOYO Linux (JLS2009)

Porting TOMOYO to AndroidPatching Android Kernel with TOMOYO patch

Adapting ccstoolsCross-compiling for AndroidAdding TOMOYO Policy Loader to Android boot

Creating policyCopyright (C) 2009 NTT Data Corporation 182009/10/23

Page 19: Learning, Analyzing and Protecting Android with TOMOYO Linux (JLS2009)

Patching Android Kernel TOMOYO 1.7.x (Fully equipped version ) Emulator (no real Android device

needed) Linux kernel version: Goldfish v2.6.29“Goldfish” is the name given to the ARM

architecture emulated by Android SDK Emulator

ccspatch 1.7.1-pre for Goldfish v2.6.29

Copyright (C) 2009 NTT Data Corporation 19

KernelKernelTOMOYO LinuxTOMOYO Linux

2009/10/23

Page 20: Learning, Analyzing and Protecting Android with TOMOYO Linux (JLS2009)

Adapting ccstoolsCcstools is for managing TOMOYO’s policy.

Ccstools was intended for use on PCCcstools has been enhanced with Network mode for embedded systems

More convenient for developing policies and debugging

Two utilities are needed for the device:ccs-init, ccs-editpolicy-agent

Copyright (C) 2009 NTT Data Corporation 202009/10/23

Page 21: Learning, Analyzing and Protecting Android with TOMOYO Linux (JLS2009)

Modifying Android boot (1/2)Put "ccs-init (program for activating

TOMOYO)" inside /sbin/the kernel will call /sbin/ccs-init before /init starts.

Copy below files needed by /sbin/ccs-init/system/bin/linker

/system/ partition is not mounted yet when /sbin/ccs-init starts.

/lib/libc.so/lib/libm.so

Environment variable LD_LIBRARY_PATH="/system/lib" is not set yet when /sbin/ccs-init starts.

Copyright (C) 2009 NTT Data Corporation 212009/10/23

Page 22: Learning, Analyzing and Protecting Android with TOMOYO Linux (JLS2009)

Modifying Android boot (2/2)Put "ccs-editpolicy-agent (program for

managing TOMOYO remotely)" inside /sbin/

Append

to /init.rcccs-editpolicy-agent will listen to tcp port 7000We can issue "adb forward tcp:10000

tcp:7000" to connect from host environment.

Copyright (C) 2009 NTT Data Corporation 22

service ccs_agent /sbin/ccs-editpolicy-agent 0.0.0.0:7000

oneshot

2009/10/23

Page 23: Learning, Analyzing and Protecting Android with TOMOYO Linux (JLS2009)

Creating policyPut access control settings (a.k.a. policy) in /etc/ccs/sbin/ccs-init will load them

Details: http://tomoyo.sourceforge.jp/1.7/android-arm.html

Copyright (C) 2009 NTT Data Corporation 232009/10/23

Page 24: Learning, Analyzing and Protecting Android with TOMOYO Linux (JLS2009)

TOMOYO on Android overview

Copyright (C) 2009 NTT Data Corporation 242009/10/23

Page 25: Learning, Analyzing and Protecting Android with TOMOYO Linux (JLS2009)

TOMOYO on Android overview

Copyright (C) 2009 NTT Data Corporation 25

TOMOYO tools

TOMOYO patch

2009/10/23

Page 26: Learning, Analyzing and Protecting Android with TOMOYO Linux (JLS2009)

EDITING POLICY (VIA AGENT)

Copyright (C) 2009 NTT Data Corporation 262009/10/23

Page 27: Learning, Analyzing and Protecting Android with TOMOYO Linux (JLS2009)

Copyright (C) 2009 NTT Data Corporation 27

Android emulator (Goldfish)

TOMOYO Linux (kernel patch)

Android runtime

Application framework

TOMOYO Agentccs-editpolicy-

agent

app

Ubuntu 8.04

app app app

LibrariesPolicy editorccs-editpolicy TCP/IP

2009/10/23

Page 28: Learning, Analyzing and Protecting Android with TOMOYO Linux (JLS2009)

Copyright (C) 2009 NTT Data Corporation 282009/10/23

Page 29: Learning, Analyzing and Protecting Android with TOMOYO Linux (JLS2009)

29

Profile number

Copyright (C) 2009 NTT Data Corporation2009/10/23

Page 30: Learning, Analyzing and Protecting Android with TOMOYO Linux (JLS2009)

Copyright (C) 2009 NTT Data Corporation 30

Profile 0 for disabled, 1 for learning, 2 for permissive, 3 for enforcing 2009/10/23

Page 31: Learning, Analyzing and Protecting Android with TOMOYO Linux (JLS2009)

31

Profile number

Copyright (C) 2009 NTT Data Corporation2009/10/23

Page 32: Learning, Analyzing and Protecting Android with TOMOYO Linux (JLS2009)

32

initinitinitinitDaemonsDaemons

service zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server

servicemanagservicemanagerer

mediaservermediaserver

zygotezygoteCopyright (C) 2009 NTT Data Corporation2009/10/23

Page 33: Learning, Analyzing and Protecting Android with TOMOYO Linux (JLS2009)

Problem with splitting domainsThe applications are executed with different UID

(i.e.: root, system, app_#, …) and different process name, but…

33

service service managermanagerservice service

managermanagerApplicationsApplicationsSystem System ServerServer

Copyright (C) 2009 NTT Data Corporation2009/10/23

Adapting ccstools

Page 34: Learning, Analyzing and Protecting Android with TOMOYO Linux (JLS2009)

Problem with splitting domainsThe applications are executed with different UID

(i.e.: root, system, app_#, …) and different process name, but…

…they are all fork()ed from app_process!

34

service service managermanagerservice service

managermanagerApplicationsApplicationsSystem System ServerServer

zygotezygote

Dalvik VMDalvik VMDalvik VMDalvik VMDalvik VMDalvik VM

fork()

Copyright (C) 2009 NTT Data Corporation2009/10/23

Adapting ccstools

Page 35: Learning, Analyzing and Protecting Android with TOMOYO Linux (JLS2009)

Problem with splitting domainsNew and unexpected situation

for TOMOYO Linux

In TOMOYO Linux,domain transitions occur after process invocation, that is execve(), not fork()

Splitting domain

<kernel> /init /system/bin/app_process

in different domains according to each single application is impossible. . . ?

35Copyright (C) 2009 NTT Data Corporation2009/10/23

Page 36: Learning, Analyzing and Protecting Android with TOMOYO Linux (JLS2009)

Problem with splitting domains

36

<kernel> /init /system/bin/app_processCopyright (C) 2009 NTT Data Corporation2009/10/23

Page 37: Learning, Analyzing and Protecting Android with TOMOYO Linux (JLS2009)

TOMOYO’s MAC and Android DACAndroid security rule: data files of one

application should be prevented from being accessed by other applications

This is performed by using DAC permissions, as said before

TOMOYO can provide with conditional ACL a further insurance that this rule is respected, especially in cases when:DAC permissions are poorly configuredroot process (zygote) would be hijacked

37

allow_read/write @APP_DATA_FILE if task.uid=path1.uidallow_unlink @APP_DATA_FILE if task.uid=path1.uidallow_mkdir @APP_DATA_DIR if task.uid=path1.parent.uid1

allow_read/write @APP_DATA_FILE if task.uid=path1.uidallow_unlink @APP_DATA_FILE if task.uid=path1.uidallow_mkdir @APP_DATA_DIR if task.uid=path1.parent.uid1

Copyright (C) 2009 NTT Data Corporation2009/10/23

Page 38: Learning, Analyzing and Protecting Android with TOMOYO Linux (JLS2009)

TOMOYO’s MAC and Android DACDAC’s ability to restrict by UID has a low

granularity: only “owner”, “group”, “others”.

TOMOYO, on the other hand, allows minimal and customizable permissions to any group of specific UIDs.

Example: users are app_1, app_2, app_3, app_4; some files owned by app_2 (uid=10002) need to be accessed by app_1 (uid=10001) also, but not by all the “others”.

38

allow_read/write @SOME_FILES if task.uid=10001-10002allow_read/write @SOME_FILES if task.uid=10001-10002

Copyright (C) 2009 NTT Data Corporation2009/10/23

Page 39: Learning, Analyzing and Protecting Android with TOMOYO Linux (JLS2009)

An exampleWe want to allow only the Browser to connect to

Internet.

In this way any process running under “<kernel> /init /system/app/process”

domain would be allowed to open TCP connection on any IP, port 80.

least-privilege principle violated39Copyright (C) 2009 NTT Data Corporation2009/10/23

Page 40: Learning, Analyzing and Protecting Android with TOMOYO Linux (JLS2009)

SolutionTOMOYO Linux allows conditional ACLUsing task’s UID as a condition, for

access grant.

40

In this way only the process with UID in HTTP_USERS group will be able to connect Copyright (C) 2009 NTT Data Corporation2009/10/23

Page 41: Learning, Analyzing and Protecting Android with TOMOYO Linux (JLS2009)

SolutionAdd UID of browser application to

HTTP_USERS group

41

UID=10012

In this way only browser will be able to connect

Copyright (C) 2009 NTT Data Corporation2009/10/23

Page 42: Learning, Analyzing and Protecting Android with TOMOYO Linux (JLS2009)

DEMO: Make policy for Web browserWeb browser access to restrict the

location

Copyright (C) 2009 NTT Data Corporation 422009/10/23

Page 43: Learning, Analyzing and Protecting Android with TOMOYO Linux (JLS2009)

Saving access logsYou can save access logs by starting ccs-auditd (host computer) as shown below.

Copyright (C) 2009 NTT Data Corporation 43

/usr/sbin/ccs-auditd /tmp/grant_log /tmp/reject_log 127.0.0.1:10000

2009/10/23

#2009-10-19 10:07:15# profile=1 mode=learning (global-pid=36) task={ pid=36 ppid=1 uid=0 gid=0 euid=0 egid=0 suid=0 sgid=0 fsuid=0 fsgid=0 state[0]=0 state[1]=0 state[2]=0 type!=execute_handler } path1={ uid=0 gid=2000 ino=537 major=31 minor=0 perm=0755 type=file } path1.parent={ uid=0 gid=2000 ino=468 perm=0755 } exec={ realpath="/system/bin/app_process" argc=5 envc=10 argv[]={ "/system/bin/app_process" "-Xzygote" "/system/bin" "--zygote" "--start-system-server" } envp[]={ "PATH=/sbin:/system/sbin:/system/bin:/system/xbin" "LD_LIBRARY_PATH=/system/lib" "ANDROID_BOOTLOGO=1" "ANDROID_ROOT=/system" "ANDROID_ASSETS=/system/app" "ANDROID_DATA=/data" "EXTERNAL_STORAGE=/sdcard" "BOOTCLASSPATH=/system/framework/core.jar:/system/framework/ext.jar:/system/framework/framework.jar:/system/framework/android.policy.jar:/system/framework/services.jar" "ANDROID_PROPERTY_WORKSPACE=9,32768" "ANDROID_SOCKET_zygote=10" } }<kernel> /initallow_execute /system/bin/app_processYou can create advanced policy settings from

access logs.

Page 44: Learning, Analyzing and Protecting Android with TOMOYO Linux (JLS2009)

Policy error handlerSimilar to “page fault handler”

Copyright (C) 2009 NTT Data Corporation 44

Access request

Permitted by

policy?

Permitted by

handler?

YES

Access granted Access rejected

YES

NO NO

2009/10/23

Page 45: Learning, Analyzing and Protecting Android with TOMOYO Linux (JLS2009)

ConclusionsTOMOYO Linux suits well on Android

Will suits on other embedded devices as

well

MAC enforced for system services and user

applications

Whole system or targeted applications

Why not to try TOMOYO?45Copyright (C) 2009 NTT Data Corporation2009/10/23

Page 46: Learning, Analyzing and Protecting Android with TOMOYO Linux (JLS2009)

Copyright (C) 2009 NTT Data Corporation 46

Thank you for your attentionDaisuke Numaguchi <[email protected]>

Tetsuo Handa <penguin-kernel@i-

love.sakura.ne.jp>

Giuseppe La Tona <[email protected]>

2009/10/23

Page 47: Learning, Analyzing and Protecting Android with TOMOYO Linux (JLS2009)

InformationMailing list

English: [email protected]

Japanese: [email protected]

Web sitehttp://tomoyo.sourceforge.jp/

Wikihttp://elinux.org/TomoyoLinux

Copyright (C) 2009 NTT Data Corporation 472009/10/23

Page 48: Learning, Analyzing and Protecting Android with TOMOYO Linux (JLS2009)

CopyrightsLinux is a registered trademark of

Linus Torvalds in Japan and other countries

Android is a registered trademark of Google

TOMOYO is a registered trademark of NTT Data Corporation in Japan

Other names and trademarks are the property of their respective owners.

Copyright (C) 2009 NTT Data Corporation 482009/10/23