Android besitzt bereits ein Sicherheitsframework. Es beschränkt den Zugriff einzelner Apps auf bestimmte Bereiche des Telefons oder Tablets. Das Android Security Model gewährleistet auf zwei Ebenen Sicherheit: dem Application- und dem Kernel-Level. Auf der App-Ebene prüft Android den Zugriff auf Anwenderprogramm-Komponenten einerseits und den Zugriff von Apps auf Systemressourcen andererseits. Der Programmierer beschreibt in einem Manifest, worauf seine Applikation zugreifen soll; der Anwender erlaubt oder verbietet die Zugriffe dann auf seinem Gerät.
Auf dem Kernel-Level bemüht sich Android jede Applikation in einer eigenen Sandbox zu betreiben und jedes Umgehen der Application-Level-Security zu verhindern. Dabei arbeitet Android transparent und nutzt das Linux Discretionary Access Control System (DAC, benutzerbezogene Zugriffskontrolle).
Wie zahlreiche Exploits für Android zeigen, genügt dies jedoch nicht. Denn obwohl jede Applikation eine eigene Benutzer-ID verwendet, kann eine Applikation bei der Rechtevergabe schlampen und anderen Benutzern Leserechte an den eigenen sensitiven Dateien geben. Angriffe erfolgen dann durch Malware, die der Anwender aus dem Google Market installiert. Da liegt es nahe, Android mit einem funktionierenden Mandatory Access Control System auszurüsten – wie es mit SE Linux [1] für Linux bereitsteht.
Vorbereitung ist alles
Nach Vorarbeiten wie in [2] beschrieben, wurde am 6. Januar 2012 SE Android [3] vorgestellt. Die Software soll bei richtiger Konfiguration die Privilege Escalation einzelner Apps und Zugriffe auf die Daten anderer Apps (Data Leakage) verhindern. Zudem garantiert SE Android die Integrität der Apps und ihrer Daten. Auch lässt sich das Rooten des Geräts durch legitime Toolkits verhindern. Unterm Strich steigt die Sicherheit der Android-Telefone und -Tablets [4].
Einige Mutige haben die Software schon auf ihre Google-Nexus-Geräten aufgespielt. Erfolgsorientierte Telefonbesitzer sollten von SE Android aber besser die Finger lassen – die Software ist schlicht noch nicht fertig und stabil. Für erste Gehversuche im Emulator ist sie jedoch bereits zu gebrauchen – dieser Artikel erklärt die Schritte dorthin.
Ein langer Weg
Ein Anwender, der SE Android ausprobieren möchte, muss zurzeit einigen Aufwand treiben. Da SE Android noch nicht komplett in Android aufgegangen ist, muss er das Android-Betriebssystem patchen und selbst übersetzen. Er beginnt am besten damit, ein Buildsystem aufzubauen. Während andere Distributionen auch funktionieren, gelingt es Ubuntu 10.04 (64 Bit) am besten [5]. (Andere Ubuntu-Versionen erweisen sich als problematisch und benötigen Anpassungen in den Paketen und Skripten.)
Für die spätere Übersetzung ist eine Reihe von Paketen erforderlich. Der Anwender installiert diese einfach aus dem Ubuntu-Repository mit dem Befehl aus Listing 1. Das einzige Paket, welches der Anwender danach noch installieren muss, ist das originale Oracle-Sun Java JDK – Open JDK funktioniert hier nicht. Eine einfache Installationsmöglichkeit bietet das Skript »oab-java6.sh«
[6]. Es lädt selbstständig die Dateien von Oracle und erzeugt automatisch Debian-Pakete in dem Verzeichnis »/var/local/oab/deb«
, die sich anschließend mit »dpkg«
einfach installieren lassen.
Die Befehle in Listing 2 dienen dazu, das Android-Code-Repository zu erzeugen und SE Android zu erweitern. Das Synchronisieren des Repository dauert in Abhängigkeit von der Internetverbindung bis zu einigen Stunden. Grundsätzlich sollte der Anwender vorher für ausreichend Platz gesorgt haben. Nach der Übersetzung benötigt der Code insgesamt bis zu 30 GByte Speicher.
01 sudo aptitude install git-core gnupg flex bison \
02 gperf build-essential zip curl zlib1g-dev libc6-dev \
03 lib32ncurses5-dev ia32-libs x11proto-core-dev \
04 libx11-dev lib32readline5-dev lib32z-dev \
05 libgl1-mesa-dev g++-multilib mingw32 tofrodos \
06 python-markdown libxml2-utils xsltproc java-comm
01 mkdir ~/bin
02 export PATH=~/bin:$PATH
03 curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
04 chmod a+x ~/bin/repo
05 mkdir android-repo
06 cd android-repo
07 repo init -u https://android.googlesource.com/platform/manifest
08 wget http://selinuxproject.org/~seandroid/local_manifest.xml
09 mv local_manifest.xml .repo
10 repo sync
Um das Übersetzen zu beschleunigen, kann der Nutzer den Ccache Compiler einsetzen – so er ihn konfiguriert. Dazu initialisiert er den Cache mit dem »ccache«
-Kommando aus dem Repository:
export USE_CCACHE=1
prebuilt/linux-x86/ccache/ccache -M 50G
Die Vorbereitungsarbeiten sind geschafft. Mit den Kommandos
source build/envsetup.sh
lunch full-eng
make -j4 HAVE_SELINUX=true
startet nun endlich der Übersetzungsvorgang des Betriebssystems.