seccomp简介

作者: 你身边的那个TA | 来源:发表于2018-04-11 18:09 被阅读1992次

一、概述

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

相关文章

网友评论

    本文标题:seccomp简介

    本文链接:https://www.haomeiwen.com/subject/vzbphftx.html