当前位置:   article > 正文

一文带你实现android获取检测Selinux_怎么用电脑进入手机的selinux

怎么用电脑进入手机的selinux

1.Selinux简介

SELinux(Security-Enhanced Linux) 是美国国家安全局(NSA)对于强制访问控制的实现,是 Linux历史上最杰出的新安全子系统。 SELinux的软件设计架构是参照Flask,Flask是一种灵活的操作系统安全架构,并且在Fluke research operating system中得到了实现。Flask的主要特点是把安全策略执行代码和安全策略决策代码,划分成了两个组件。安全策略决策代码在Flask架构中称作Security Server。除了这两个组件以外,另外一个组件Vector Cache(AVC), 主要提供策略决策结果的缓存,以此提高Security Server的性能。

SELinux 运行有三个运行状态,分别是disabled, permissive 和 enforcing

  • Disable: 禁用SELinux,不会给任何新资源打Label,如果重新启用的话,将会给资源重新打上Lable,过程会比较缓慢。* Permissive:如果违反安全策略,并不会真正的执行拒绝操作,替代的方式是记录一条log信息。\* Enforcing: 默认模式,SELinux的正常状态,会实际禁用违反策略的操作2.设置和获取selinux的标志

 static char *g_pszSelinuxFileSystemString=NULL;
static char **g_pSelinuxFileSystemStringPointer = &g_pszSelinuxFileSystemString;
//用户设置selinux的标志
int setSelinuxFlag(int value) {
    int fd=0, length=0;
    char fileContentBuffer[20]={0};
    char filePath[1024]={0};
    
​
    if (*g_pSelinuxFileSystemStringPointer == NULL) {
        errno = 2;
        return -1;
    }
​
    snprintf(filePath, 1024, "%s/enforce", *g_pSelinuxFileSystemStringPointer);
    fd = open(filePath, 2);
    if (fd < 0)
        return -1;
​
    snprintf(fileContentBuffer, 20, "%d", value);
    length = strlen(fileContentBuffer);
    
    length = write(fd, fileContentBuffer, len);
​
    close(fd);
​
    return length >> 31;
} 
//用于获取selinux的标志
int getSelinuxFlag() {
    int fd=0, readLength=0, value=0;
    char fileContentBuffer[20]={0};
    char filePath[1024]={0};
    
    if (*g_pSelinuxFileSystemStringPointer == NULL) {
        errno = 2;
        return -1;
    }
​
    snprintf(filePath, 1024, "%s/enforce", *g_pSelinuxFileSystemStringPointer);
    fd = open(filePath, 0);
    if (fd < 0)
        return -1;
​
    memset(fileContentBuffer, 0, 20);
    readLength = read(fd, fileContentBuffer, 19);
    close(fd);
​
    if (readLength < 0)
        return -1;
​
    readLength = sscanf(fileContentBuffer, "%d", &value);
    if (readLength != 1)
        return -1;
​
    return value;
} 

3.检测selinux实现

//检测selinux
 void checkSelinux() {
    if (*g_pSelinuxFileSystemStringPointer == NULL) {
        int ret=0;
        FILE *pFilesystems=NULL;
        char fileLineBuffer[1024]={0};
        struct statfs statfsBuffer={0};
​
​
        while ((ret = statfs("/sys/fs/selinux", &statfsBuffer)) < 0) {
            if (errno == EINTR)
                continue;
            
            LOGE("statfs error:%s\n", strerror(errno));
            
            return ;
        }
​
        if (ret == 0 && statfsBuffer.f_type == 0xF97CFF8C ) {
            *g_pSelinuxFileSystemStringPointer = strdup("/sys/fs/selinux");
​
            return;
        }
​
        pFilesystems = fopen("/proc/filesystems", "r");
        if (pFilesystems == NULL)
            return ;
​
        do {
            if (fgets(fileLineBuffer, 1024, pFilesystems) == NULL) {
                fclose(pFilesystems);
                return ;
            }
​
            if (strstr(fileLineBuffer, "selinuxfs")) {
                break;
            }
        } while (1);
​
        fclose(pFilesystems);
​
        pFilesystems = fopen("/proc/mounts", "r");
        if (pFilesystems == NULL)
            return ;
​
        do {
            char *spacePosition;
            char *fileSystemName;
            
            if (fgets(fileLineBuffer, 1024, pFilesystems) == NULL) {
                fclose(pFilesystems);
                return ;
            }
​
            spacePosition = strchr(fileLineBuffer, ' ');
            if (spacePosition == NULL) {
                fclose(pFilesystems);
                return ;
            }
​
            spacePosition++;
            fileSystemName = spacePosition;
            spacePosition = strchr(fileSystemName, ' ');
            if (spacePosition == NULL) {
                fclose(pFilesystems);
                return ;
            }
​
            spacePosition++;
​
            if (strncmp(spacePosition, "selinuxfs ", 10) != 0)
                continue;
​
            *(spacePosition -1) = 0;
            *g_pSelinuxFileSystemStringPointer = strdup(fileSystemName);
            break;
        } while (1);
​
        fclose(pFilesystems);
    }
} 

网络安全入门学习路线

其实入门网络安全要学的东西不算多,也就是网络基础+操作系统+中间件+数据库,四个流程下来就差不多了。

1.网络安全法和了解电脑基础

其中包括操作系统Windows基础和Linux基础,标记语言HTML基础和代码JS基础,以及网络基础、数据库基础和虚拟机使用等...

别被这些看上去很多的东西给吓到了,其实都是很简单的基础知识,同学们看完基本上都能掌握。计算机专业的同学都应该接触了解过,这部分可以直接略过。没学过的同学也不要慌,可以去B站搜索相关视频,你搜关键词网络安全工程师会出现很多相关的视频教程,我粗略的看了一下,排名第一的视频就讲的很详细。 当然你也可以看下面这个视频教程仅展示部分截图 学到http和https抓包后能读懂它在说什么就行。

2.网络基础和编程语言

3.入手Web安全

web是对外开放的,自然成了的重点关照对象,有事没事就来入侵一波,你说不管能行吗! 想学好Web安全,咱首先得先弄清web是怎么搭建的,知道它的构造才能精准打击。所以web前端和web后端的知识多少要了解点,然后再学点python,起码得看懂部分代码吧。

最后网站开发知识多少也要了解点,不过别紧张,只是学习基础知识。

等你用几周的时间学完这些,基本上算是具备了入门合格渗透工程师的资格,记得上述的重点要重点关注哦! 再就是,要正式进入web安全领域,得学会web渗透,OWASP TOP 10等常见Web漏洞原理与利用方式需要掌握,像SQL注入/XSS跨站脚本攻击/Webshell木马编写/命令执行等。

这个过程并不枯燥,一边打怪刷级一边成长岂不美哉,每个攻击手段都能让你玩得不亦乐乎,而且总有更猥琐的方法等着你去实践。

学完web渗透还不算完,还得掌握相关系统层面漏洞,像ms17-010永恒之蓝等各种微软ms漏洞,所以要学习后渗透。可能到这里大家已经不知所云了,不过不要紧,等你学会了web渗透再来看会发现很简单。

其实学会了这几步,你就正式从新手小白晋升为入门学员了,真的不算难,你上你也行。

4.安全体系

不过我们这个水平也就算个渗透测试工程师,也就只能做个基础的安全服务,而这个领域还有很多业务,像攻防演练、等保测评、风险评估等,我们的能力根本不够看。

所以想要成为一名合格的网络工程师,想要拿到安全公司的offer,还得再掌握更多的网络安全知识,能力再更上一层楼才行。即便以后进入企业,也需要学习很多新知识,不充实自己的技能就会被淘汰。

从时代发展的角度看,网络安全的知识是学不完的,而且以后要学的会更多,同学们要摆正心态,既然选择入门网络安全,就不能仅仅只是入门程度而已,能力越强机会才越多。

尾言

因为入门学习阶段知识点比较杂,所以我讲得比较笼统,最后联合CSDN整理了一套【282G】网络安全从入门到精通资料包,需要的小伙伴可以点击链接领取哦!

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号