On 12/05/2013 03:39 AM, Severin Friede wrote:

Dear Mr. Craig,

thank you very much for the answer. I followed your steps but unfortunately I could install apps signed with my own key that need the permissions i am denying. Could you please verify the following steps I have done so far:

------------------------------------------

1.) mac_permissions.xml

I created a new signer tag:

  <!-- university key -->

  <signer signature="@UNIVERSITY">

    <seinfo value="university" />

    <package name="com.example.seandroid_connectinternet" >

      <deny-permission name="android.permission.INTERNET" />

      <deny-permission name="android.permission.ACCESS_NETWORK_STATE" />

      <seinfo value="university" />

    </package>

  </signer>

When checking the new mac_permissions.xml file with setool i get the message that the policy is passed, but i shouldn, the app requested permissions for INTERNET and ACCESS_NETWORK_STATE:

"MMAC policy passed for com.example.seandroid_connectinternet (/home/..../apps/signed_apk/SEAndroid-ConnectInternet_signed.apk)"


If your passing the pre-generated mac_permissions.xml file to setool then your @UNIVERSITY key will not be expanded to a X509 cert (hex value). At this time, setool has no knowledge of a keys.conf file in order to make that kind of substitution. Therefore, setool tries to interpret that signature stanza and sees @UNIVERSITY as a non valid signature and the stanza is skipped. Since you have a default stanza, that is what is eventually checked and therefore passes. Best bet is to place the cert value into the signature attribute and rerun the tool.

I assume you added this stanza to the external/sepolicy/mac_permissions.xml file? A better test might be to just build the mac_permissions.xml file with "mmm -B external/sepolicy/" after you make your change and then run setool against the generated file "out/target/product/mako/system/etc/security/mac_permissions.xml". You also might want to make sure that your @UNIVERSITY variable was properly expanded by just opening the generated mac_permissions.xml first.

You mentioned that you could install apps signed with your key against this stanza. Was this tested on a phone or just by running the tool? If you could still install the app on a phone then that suggests the cert you generated is possibly bad.

Then i put the deny-permisson tags into the default tag and i am recieving:

"MMAC policy failed for com.example.seandroid_connectinternet (/home/..../apps/signed_apk/SEAndroid-ConnectInternet_signed.apk).

null

Default policy stanza checked.

Policy blacklist rejected package com.example.seandroid_connectinternet

Denied permission android.permission.INTERNET

Set of blacklisted permissions is:

android.permission.ACCESS_NETWORK_STATE

android.permission.INTERNET"

I deleted the default tag and get the message that no policy stanza is checked. There might be something wrong with my signature. how can i debug this issue? do you have an idea what went wrong?

2.) keys.conf

i created a new signature pair and put my private key into "build/target/product/security"

# University

[@UNIVERSITY]

ALL : $DEFAULT_SYSTEM_DEV_CERTIFICATE/university.x509.pem

3.) seapp_contexts

Regarding to your information I copied the untrusted_app entry and changed some values. I thought it would be nice to have my own custom domain so I changed the untrusted_app domain to my custom university_app domain. Therefore I changed the content of te_macros file (see 4.)

user=_app seinfo=university domain=university_app type=app_data_file levelFrom=app

4.) te_macros

I copied the untrusted_app macro to create my own

#####################################

# universityapp_domain(domain, file_type)

# Allow a base set of permissions required for all university apps.

define(`university_domain', `

# The new domain is part of universityappdomain

typeattribute $1 universityappdomain;

# The new university appdomain is a part of appdomain

app_domain($1)

# Allow the allocation and use of ptys

# Used by: https://play.google.com/store/apps/details?id=jackpal.androidterm

create_pty($1)

# App sandbox file accesses.

# Possibly create a new sandbox for this app

allow $1 $2:dir create_dir_perms;

allow $1 $2:notdevfile_class_set create_file_perms;

')

5.) university.te

I created a custom domain policy file, the content is currently the same as in untrusted.te but with my custom domain

type university_app, domain;

universityapp_domain(university_app, app_data_file)

net_domain(university_app)

bluetooth_domain(university_app)

allow universityappdomain tun_device:chr_file rw_file_perms;

# ASEC

allow universityappdomain asec_apk_file:dir { getattr };

allow universityappdomain asec_apk_file:file r_file_perms;

# Create tcp/udp sockets

allow universityappdomain node_type:{ tcp_socket udp_socket } node_bind;

allow universityappdomain self:{ tcp_socket udp_socket } { create_socket_perms accept listen };

# Bind to a particular hostname/address/interface (e.g., localhost) instead of

# ANY. Normally, apps should not be listening on all interfaces.

allow universityappdomain port:{ tcp_socket udp_socket } name_bind;

------------------------------------------------------------

- Do you find any errors?


Depends what you mean by errors. For simple syntax and structural checks simply run checkpolicy against the generated sepolicy file.

- As far as my knowledge of SEAndroid goes, i have done install mac and kernel policy, because of the custom domain and university.te file, is this correct?


You modified mac_perms, seapp_contexts and sepolicy. That seems correct to me.

- Do you recommend using the untrusted app domain instead of my custom university app domain?


Depends on what your goals are. What are you trying to prevent, what are your security goals, .....

I am looking forward to your answer, thank you very much for your effort!



2013/12/2 Robert Craig <[email protected] <mailto:[email protected]>>

    You can always add a signature stanza to the mac_permissions.xml
    file.  Invoking the command "setool --build keys YourApp.apk" will
    give you the X.509 certificate needed for that stanza. You'll want
    to follow the example stanzas already in the mac_permissions.xml
    file as how to
     construct the rest of the signature stanza. Some things to note
    are, be sure to add an seinfo tag as that is what the
    seapp_contexts configuration file uses to label the app process
    and app package directory, and be sure to detail the maximal set
    of permissions that your app or group of apps will be allowed on
    installed. You'll then want to follow this with adding a new line
    to the seapp_contexts file that uses the seinfo tag you described
    with your signature stanza in the mac_permissions.xml file.


    On Thu, Nov 28, 2013 at 8:50 AM, Severin Friede
    <[email protected] <mailto:[email protected]>> wrote:

        I need your help for my next issue. When browsing through the
        "external/sepolicy" folder I found out that SEAndroid is able
        to recognize apps by the signed key and assign them in the
        appropriate domain. Is it possible to extend  this behavior
        with my own signing key? I want to assign my own apps (signed
        with my key) to a custom domain and provide different
        permissions for them.




Reply via email to