美文网首页
SELinux安全杂记

SELinux安全杂记

作者: 珍惜Any | 来源:发表于2021-01-25 15:36 被阅读0次

    前言:

    今天发现很诡异的问题,之前一直是可读的,忽然发现权限被拒绝。

    LOG(ERROR) << "读取文件内容  "<<FileUtils::getFileText((char *)"/sys/class/net/eth0/address",20);
    
    std::string FileUtils::getFileText(char *path,int BuffSize) {
    
        char buffer[BuffSize];
        memset(buffer, 0, BuffSize);
        std::string str;
        //int fd = open(path, O_RDONLY );
        long fd = syscall(__NR_open, path, O_RDONLY);
        LOG(ERROR) << "open 内容  "<<fd;
        if(fd==-1){
            LOG(ERROR) << "读文件出错,错误原因 " << strerror(errno);
            return "";
        }
        //失败 -1;成功:>0 读出的字节数  =0文件读完了
        while (syscall(__NR_read,fd, buffer, 1) != 0) {
            str.append(buffer);
        }
        syscall(__NR_close,fd);
        return str;
    }
    

    之前运行一直没问题,忽然发现读取系统内核文件读不了了,之前是可以的,用文件管理器查看文件是444

    都是可读的,open函数一直返回 -1 失败。

    细看日志发现一条异样:

    type=1400 audit(0.0:127783): avc: denied { search } for name="net" dev="sysfs" ino=46905 scontext=u:r:untrusted_app:s0:c189,c258,c512,c768 tcontext=u:object_r:sysfs_net:s0 tclass=dir permissive=0
    

    在讲之前需要详细介绍一下SELinux相关的知识,防止别人采坑。

    之前也是知道一些SELinux的一些基础,但是也一直没深入研究和Liunx的区别。

    今天有时间做个记录

    什么是SELinux?

    安全增强型 Linux(Security-Enhanced Linux)简称 SELinux,它是 Linux 的一个安全子系统。SELinux 主要作用是最大限度地减小系统中服务进程可访问的资源(最小权限原则)。对资源的访问控制分为两类: DAC和MAC ,我们用的安卓底层的Linux就是这它。

    linux传统设备文件访问控制方法

    传统的 Linux设备文件访问控制机制通过设置用户权限来实现.

    • 超级用户(root),具有最高的系统权限,UID为0。
    • 系统伪用户,Linux操作系统出于系统管理的需要,但又不愿赋予超级用户的权限,需要将某些关键系统应用文件所有权赋予某些系统伪用户,其UID范围为1~ 499,系统的伪用户不能登录系统。
    • 普通用户,只具备有限的访问权限,UID 为 500 ~ 6000,可以登录系统获得shell。在Linux权限模型下,每个文件属于一个用户和一个组,由UID与GID标识其所有权。针对于文件的具体访问权限定义为可读(r)、可写(w)与可执行(x),并由三组读、写、执行组成的权限三元组来描述相关权限。
      第一组定义文件所有者(用户)的权限,第二组定义同组用户(GID相同但UID不同的用户)的权限,第三组定义其他用户的权限(GID与UID都不同的用户)。

    Linux工作模式:

    SELinux 有三种工作模式,分别为:
    enforcing: 强制模式, 执行SELinux规则, 违反的行为会被阻止
    permissive: 宽容模式, 执行SELinux规则, 违反的行不会被阻止
    disabled: 关闭SELinux

    SEAndroid app分类

    SELinux(或SEAndroid)将app划分为主要三种类型(根据user不同,也有其他的domain类型):

    1)untrusted_app 第三方app,没有Android平台签名,没有system权限

    2)platform_app 有Android平台签名,没有system权限

    3)system_app 有android平台签名和system权限

    从上面划分,权限等级,理论上:untrusted_app < platform_app < system_app

    我们看一下我们的刚刚的日志

    标志性 log: avc: denied { 操作权限 } for pid=7201 comm=“进程名” scontext=u:r:源类型:s0 tcontext=u:r:目标类型:s0 tclass=访问类型 permissive=0

    
    源类型:授予访问的类型,通常是进程的域类型
    目标类型:客体的类型,它被授权可以访问的类型
    访问类型:客体的类可
    操作权限:表示主体对客体访问时允许的操作类型(也叫做访问向量)。
    
    

    我们刚刚的错误日志是,我们分解详细看看:

    avc: denied { search } for 缺少search权限

    name="net"

    dev="sysfs"

    ino=46905

    scontext=u:r:untrusted_app:s0:c189,c258,c512,c768 未签名的App

    tcontext=u:object_r:sysfs_net:s0 哪个te文件缺少权限

    tclass=dir 什么类型的文件the object class of the target

    permissive=0 permissive (1 宽容模式) or enforcing (0 强制模式)

    没有签名的App 没有search 权限访问dir文件目录。

    我们将 SELinux 安全关掉

    setenforce 0
    

    完美解决。

    参考:

    https://blog.csdn.net/su749520/article/details/80284543

    https://www.zybuluo.com/guhuizaifeiyang/note/772144


    安卓逆向百级教程+全网最新js逆向视频+永久小蜜圈+永久售后群=1299

    视频下载网盘
    http://nas.alienhe.cn:5008/home.html
    下载视频账号密码:
    账号guest 密码world

    Js试看:
    http://oss.alienhe.cn/JS%E9%80%86%E5%90%91%E5%85%A5%E9%97%A8-%E5%B8%A6%E6%B0%B4%E5%8D%B0.mp4

    相关文章

      网友评论

          本文标题:SELinux安全杂记

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