android安全机制

推荐阅读:
官方介绍:

blog:

android软件安全与逆向分析


1、android架构


2、Linux权限控制
2.1 用户文件 /etc/passwd,  uid

    1)/etc/passwd 的内容理解:    

    在/etc/passwd 中,每一行都表示的是一个用户的信息;一行有7个段位;每个段位用:号分割,比如下面是我的系统中的/etc/passwd 的两行;

    beinan:x:500:500:beinan sun:/home/beinan:/bin/bash

    linuxsir:x:505:502:linuxsir open,linuxsir office,13898667715:/home/linuxsir:/bin/bash

    beinan:x:500:500:beinan sun:/home/beinan:/bin/bash

    linuxsir:x:501:502::/home/linuxsir:/bin/bash

    第一字段:用户名(也被称为登录名);在上面的例子中,我们看到这两个用户的用户名分别是 beinan 和linuxsir;

    第二字段:口令;在例子中我们看到的是一个x,其实密码已被映射到/etc/shadow 文件中;

    第三字段:UID ;请参看本文的UID的解说;

    第四字段:GID;请参看本文的GID的解说;

    第五字段:用户名全称,这是可选的,可以不设置,在beinan这个用户中,用户的全称是beinan sun ;而linuxsir 这个用户是没有设置全称;

    第六字段:用户的家目录所在位置;beinan 这个用户是/home/beinan ,而linuxsir 这个用户是/home/linuxsir ;

    第七字段:用户所用SHELL 的类型,beinan和linuxsir 都用的是 bash ;所以设置为/bin/bash ; 


2.2 用户组文件/etc/group, gid

    /etc/group 的内容包括用户组(Group)、用户组口令、GID及该用户组所包含的用户(User),每个用户组一条记录;格式如下:

    group_name:passwd:GID:user_list

    在/etc/group 中的每条记录分四个字段:

    第一字段:用户组名称;

    第二字段:用户组密码;

    第三字段:GID

    第四字段:用户列表,每个用户之间用,号分割;本字段可以为空;如果字段为空表示用户组为GID的用户名;

    我们举个例子:

    root:x:0:root,linuxsir 注:用户组root,x是密码段,表示没有设置密码,GID是0,root用户组下包括root、linuxsir以及GID为0的其它用户(可以通过/etc/passwd查看);;


一个user可以属于多个user-group,/etc/passwd中设定的对应user的gid为主组,如果user还属于其他组,则此user包括在/etc/group对应user-group的user-list中

2.3 文件权限
[root@123455~]# ls -l
drwxr-xr-x 3 root root 4096 Jun 17 02:55 apktool
类型,此用户的权限,用户组的权限,其他组用户的权限,此处显示的group为主group


Linux用户(user)和用户组(group)的日常管理与操作教程概述:


3、android权限控制
每种权限与一个group id相对应(/system/etc/permissions/platform.xml)
/data/system/packages.xml 中记录了系统的permissions,app的代码位置、签名、权限信息。下次启动直接从此文件读取信息,有app更新时修改保存此文件
/data/system/packages.list 记录各app的pkgName, userid, debugFlag, datapath

uid/gid/gids分配:
uid: android安装应用时,会为它分配一个UID
gid:普通应用,GID等于UID,这个为主GID
gids:安装过程中如果application申请相应的permission被granted,对应permission的gid被加入到GIDS

uid/gid/gids设置:
    zygote启动一个process时,ForkAndSpecializeCommon()中设置, setgroups() to set gids, setresuid(), setresgid()

permission check for native codes:


https://groups.google.com/forum/#!topic/android-security-discuss/rd6C0ZzHAP0


permission check for interpreted codes:
ContextImpl::checkPermission() -> ActivityManagerNative.getDefault().checkPermissionWithToken()
->ActivityManagerServer.checkPermission()->AcvityManager.checkComponentPermission()
->PackageManagerService.checkUidPermission()    //query from uid-permission mapping


Android 安全機制概述 Permission


4、SELinux
Anything that is not explicitly allowed is denied.
permissive mode, in which permission denials are logged but not enforced
enforcing mode, in which denials are both logged and enforced

A rule takes the form:
<rule   variant >   <source_types>   <target_types>  :  <classes>   <permissions>;


to check policy
to check process domain
to check resource type

ps -Z
ls -Z
id

selinux 规则、命令 详解


5、Test&Tools

分析工具
IDA Pro
Androguard
droidbox
apimonitor
mobilesandbox.org
strace

安全评估工具
Drozer(Mercury)
Use steps:
install drozer_2.3.4 to C:\Program Files\drozer
adb install agent.apk  to device
start drozer agent in device
adb forward tcp:31415 tcp:31415
C:\Program Files\drozer\drozer.bat console connect
run app.package.info -a mobi.suishi.reader
case: http://wenku.baidu.com/link?url=3fx-hf2VnRTyOBNvQr2MFgPfdQ-PzCZxDYy6lja1WvrixillqVIiFtbQz0fI-UkKraGrj8lLSL_mlCqMfT5xSV_xyoIJcB1BRdfeyRU-W6C


在线审计





Secure Programming in Linux:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值