seccomp简介

一、概述

seccomp 是 secure computing 的缩写,其是 Linux kernel 从2.6.23版本引入的一种简洁的 sandboxing 机制。在 Linux 系统里,大量的系统调用(system call)直接暴露给用户态程序。但是,并不是所有的系统调用都被需要,而且不安全的代码滥用系统调用会对系统造成安全威胁。seccomp安全机制能使一个进程进入到一种“安全”运行模式,该模式下的进程只能调用4种系统调用(system call),即 read(), write(), exit() 和 sigreturn(),否则进程便会被终止。

本文主要简单介绍下 seccomp 在 android 中的应用。

二、seccomp加载

不同进程加载 seccomp 的方式不一样。

2.1 native 进程

seccomp 简单来说就是一个白名单,每个进程进行系统调用(system call)时,kernal 都会检查对应的白名单以确认该进程是否有权限使用这个系统调用。这个白名单是用 berkeley package filter(BPF)格式书写的,BPF格式不那么直观,所以出现一些 wrapper 使其更具可编辑性。

android中用 minijail 来间接访问 seccomp 库加载。minijail(minijail 代码 在external/minijail)是一个帮助库,被用来解析 policy 文件并传递给 kernel,并启动 seccomp 功能。

使用minijail

如上图所示,先创建了一个 minijail 对象,解析 policy 文件(转化成BPF格式),最后minijail_enter 启动 seccomp 功能。

传入的参数就是 seccomp policy 文件路径,如:

service启动时候加载 seccomp policy

seccomp policy内容如下:

seccomp policy内容

增加一个系统调用按这中格式加入一行即可,比如recvfrom: 1

2.2 Android应用进程

Android 应用进程使用系统默认的 policy,所以直接调用 seccomp 库接口加载 seccomp 功能即可。

zygoteinit


setpolicy

如上可知其也受限于selinux开关。

默认seccomp policy允许以下系统调用:

1、bionic暴露出来的系统调用,定义在bionic/libc/SYSCALLS.TXT

2、Android启动必要的系统调用

3、一些流行App使用的系统调用,由Google full app CTS决定

禁止对安全敏感的系统调用,如 swapon/swapoff,和一些 Application 不会用到的 key control 系统调用。总的说来,arm64架构上系统调用一共271个,禁止了17个;arm架构上系统调用一共364个,禁止了70个。

三、案例

1、如log中有如下信息:

01-01 00:04:04.936 3215 3215 E /vendor/bin/hw/android.hardware.configstore@1.0-service: libminijail[3215]: blocked syscall: recvfrom

2、应用crash

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 123,128评论 15 534
  • pdf下载地址:Java面试宝典 第一章内容介绍 20 第二章JavaSE基础 21 一、Java面向对象 21 ...
    王震阳阅读 70,834评论 26 501
  • 早晨出门,跟我家先生讨论家事。先生开着车,顺口一句,你随便。嘿,我说,好好说话呢,你怎么发脾气?他回头,没有啊,我...
    和翊浛阅读 21评论 0 0
  • 细雨鱼儿出 六点,起床,出门向南,过致富路,到新街。太阳还未升起,微风正徐徐,空气还未经汽车尾气污染。一切刚好!这...
    为为道来阅读 47评论 0 1
  • 《摔跤吧!爸爸》我的推荐五颗星! 偷拍的两张图片,是不是感觉画面一点不华丽,特古朴,但电影结束到现在已经过去了50...
    白梨life阅读 106评论 0 0