bpflock:基于eBPF实现的Linux设备安全审计工具

news2024/11/18 18:45:28

关于bpflock

bpflock是一款基于
eBPF驱动的Linux设备安全审计工具,该工具使用了eBPF来帮助广大研究人员增强Linux设备的安全性。通过限制对各种Linux功能的访问,bpflock能够减少攻击面并阻止一些众所周知的攻击技术。

bpflock只允许类似容器管理器、systemd和其他以[ 主机PID或网络命名空间](https://man7.org/linux/man-
pages/man7/namespaces.7.html)运行的容器/程序访问完整的Linux功能,并限制那些以自己命名空间运行的容器或程序。如果bpflock在受限配置文件下运行,则所有程序/容器(包括特权程序/容器)都将被拒绝访问。

除此之外,bpflock还可以通过各种安全功能来保护Linux设备安全,比如说
Linux安全模块+BPF等等。

功能介绍

1、内存保护:内核镜像锁定、内核模块保护、BPF保护;

2、进程保护:无文件内存执行、命名空间保护;

3、硬件攻击测试:USB保护;

4、系统和应用程序跟踪:跟踪应用程序执行、跟踪特权系统操作;

5、文件系统保护:只读Root文件系统保护、sysfs保护;

6、网络保护;

工具开发

依赖组件

bpflock需要使用下列组件:

1、Linux内核版本 >= 5.13,相关配置如下:

CONFIG_BPF_SYSCALL=y

CONFIG_DEBUG_INFO=y

CONFIG_DEBUG_INFO_BTF=y

CONFIG_KPROBES=y

CONFIG_LSM="...,bpf"

CONFIG_BPF_LSM=y

2、一个启用了BTF的内核

启用BPF LSM支持

1、使用高级权限打开/etc/default/grub文件;

2、将下列内容添加到GRUB_CMDLINE_LINUX变量并保存:

"lsm=lockdown,capability,yama,apparmor,bpf"

GRUB_CMDLINE_LINUX="lsm=lockdown,capability,yama,apparmor,bpf"

3、更新grub配置:

sudo update-grub2

4、重启设备

Docker使用

下列命令可以使用默认的配置文件运行工具:

docker run --name bpflock -it --rm --cgroupns=host \

  --pid=host --privileged \

  -v /sys/kernel/:/sys/kernel/ \

  -v /sys/fs/bpf:/sys/fs/bpf linuxlock/bpflock

无文件代码执行

docker run --name bpflock -it --rm --cgroupns=host --pid=host --privileged \

  -e "BPFLOCK_FILELESSLOCK_PROFILE=restricted" \

  -v /sys/kernel/:/sys/kernel/ \

  -v /sys/fs/bpf:/sys/fs/bpf linuxlock/bpflock

内核模块执行

docker run --name bpflock -it --rm --cgroupns=host --pid=host --privileged \

  -e "BPFLOCK_KMODLOCK_PROFILE=restricted" \

  -v /sys/kernel/:/sys/kernel/ \

  -v /sys/fs/bpf:/sys/fs/bpf linuxlock/bpflock

使用样例:

$ sudo unshare -p -n -f

# modprobe xfs

modprobe: ERROR: could not insert 'xfs': Operation not permitted

输出结果:

time="2022-02-07T06:50:25+01:00" level=info msg="event=syscall_execve tgid=52323 pid=52323 ppid=52288 uid=0 cgroupid=7014 comm=modprobe pcomm=bash filename=/usr/sbin/modprobe retval=0" bpfprog=execsnoop subsys=bpf

 

time="2022-02-07T06:50:25+01:00" level=info msg="event=lsm_kernel_read_file operation=loading module tgid=52323 pid=52323 ppid=52288 uid=0 cgroupid=7014 comm=modprobe pcomm=bash filename=xfs.ko retval=-1 reason=denied (restricted)" bpfprog=kmodlock subsys=bpf

内核镜像锁定

docker run --name bpflock -it --rm --cgroupns=host --pid=host --privileged \

  -e "BPFLOCK_KIMGLOCK_PROFILE=baseline" \

  -v /sys/kernel/:/sys/kernel/ \

  -v /sys/fs/bpf:/sys/fs/bpf linuxlock/bpflock

使用样例:

$ sudo unshare -f -p -n bash

# head -c 1 /dev/mem

head: cannot open '/dev/mem' for reading: Operation not permitted

输出结果:

time="2022-02-07T06:57:22+01:00" level=info msg="event=syscall_execve tgid=52428 pid=52428 ppid=52288 uid=0 cgroupid=7014 comm=head pcomm=bash filename=/usr/bin/head retval=0" bpfprog=execsnoop subsys=bpf

 

time="2022-02-07T06:57:22+01:00" level=info msg="event=lsm_locked_down operation=/dev/mem,kmem,port tgid=52428 pid=52428 ppid=52288 uid=0 cgroupid=7014 comm=head pcomm=bash retval=-1 reason=denied (baseline)" bpfprog=kimglock subsys=bpf

BPF保护

docker run --name bpflock -it --rm --cgroupns=host --pid=host --privileged \

  -e "BPFLOCK_BPFRESTRICT_PROFILE=baseline" \

  -v /sys/kernel/:/sys/kernel/ \

  -v /sys/fs/bpf:/sys/fs/bpf linuxlock/bpflock

使用样例:

$ sudo unshare -f -p -n bash

# bpftool prog

Error: can't get next program: Operation not permitted

输出结果:

time="2022-02-04T15:40:56Z" level=info msg="event=lsm_bpf tgid=2378 pid=2378 ppid=2364 uid=0 cgroupid=9458 comm=bpftool pcomm=bash filename= retval=-1 reason=baseline" bpfprog=bpfrestrict subsys=bpf

 

time="2022-02-04T15:40:56Z" level=info msg="event=lsm_bpf tgid=2378 pid=2378 ppid=2364 uid=0 cgroupid=9458 comm=bpftool pcomm=bash filename= retval=-1 reason=baseline" bpfprog=bpfrestrict subsys=bpf

工具配置&环境配置

假设你项目的bpflock目录中已经包含了 bpflock.yaml和bpf.d这两个配置文件了,接下来运行下列命令:

ls bpflock/

  bpf.d  bpflock.d  bpflock.yaml

docker run --name bpflock -it --rm --cgroupns=host --pid=host --privileged \

  -v $(pwd)/bpflock/:/etc/bpflock \

  -v /sys/kernel/:/sys/kernel/ \

  -v /sys/fs/bpf:/sys/fs/bpf linuxlock/bpflock

我们也可以使用“–env-file”命令来传递环境变量:

docker run --name bpflock -it --rm --cgroupns=host --pid=host --privileged \

  --env-file bpflock.env.list \

  -v /sys/kernel/:/sys/kernel/ \

  -v /sys/fs/bpf:/sys/fs/bpf linuxlock/bpflock

最后

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

同时每个成长路线对应的板块都有配套的视频提供:


当然除了有配套的视频,同时也为大家整理了各种文档和书籍资料&工具,并且已经帮大家分好类了。

因篇幅有限,仅展示部分资料,有需要的小伙伴,可以【扫下方二维码】免费领取:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/185725.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

区间一维dp史上最细总结(听了绝对会了,还不会的一定要进来)

目录 那年初夏(三) 引入 1.动态规划是什么? 2.什么是区间动态规划问题? 定义 性质 3.为何总是要问这种问题? 区间动态规划基本 思考 步骤(划重点) 例题精讲 1.最长上升子序列 题目描…

8个 数据库性能优化方案,你知道几个?(建议收藏)

毫不夸张的说咱们后端工程师,无论在哪家公司,呆在哪个团队,做哪个系统,遇到的第一个让人头疼的问题绝对是数据库性能问题。如果我们有一套成熟的方法论,能让大家快速、准确的去选择出合适的优化方案,我相信…

IB数学AA/AI应该如何选择?

IB数学怎么选课?AA,AI,SL,HL适合哪些学生?如何学习?IB数学:AA与AI,到底应该怎么选?IB数学AA有多难?要不要学数学AA HL?适合学生 IB数学AA AA HL偏…

【SpringCloud复习巩固】Feign

目录 一.HTTP客户端Feign 1.1RestTemplate方式调用存在的问题 1.2Feign的介绍 1.3Feign的使用 1.4自定义Feign的配置 1.4.1配置Feign日志的两种方式 1.5Feign性能优化 1.5.1Feign的性能优化-连接池配置 1.6Feign的最佳实践 一.HTTP客户端Feign 1.1RestTemplate方式调用…

自学软件测试,现在年薪30w,我骄傲了吗?

从小老一辈的人就经常说,小时候不好好读书,长大了只能去工地搬砖。我是从小都不爱读书的人,但在上学时期我一直有一种优越感,认为自己读书很有天赋,读书就是比别人厉害,但事实证明也确实如此,高…

[Android Studio]Android Studio Logcat日志样式设置

🟧🟨🟩🟦🟪 Android Debug🟧🟨🟩🟦🟪 Topic 发布安卓学习过程中遇到问题解决过程,希望我的解决方案可以对小伙伴们有帮助。 📋笔记目…

c++IO流!!!开工了!!!

1.什么是IO流 流是若干个字节组成的字节序列,简单来说指的是就是数据从一端到另一端 键盘到程序——>标准输入流程序到屏幕——>标准输出流程序到文件——>文件流 流类体系:一些体系管理输入和输出的流的操作 输入流输出流文件流 ios类 istream…

【DockerCE】使用docker配置和运行HertzBeat

HertzBeat是一款免Agent的监控平台,拥有强大自定义监控能力,可以对应用服务、中间件、数据库、操作系统、云原生等进行监控,配置监控告警阈值,以及告警通知(邮件、微信、钉钉、飞书)。关于这个软件的介绍,我这里就不做…

困扰多年的Docker和iptables的恩怨,今天解决了

先介绍下我的使用环境: 操作系统:CentOS7.9 Docker版本:20.10.21 事情是这样的,安装完Docker的时候,容器镜像都跑起来了,端口也放行了,就是无法控制系统防火墙friewalld,查看firewalld状态报错 …

【微信小游戏开发笔记】第一节:微信小游戏Cocos开发环境配置

微信小游戏开发环境配置 微信小游戏开发前,首先要做一些准备: 注册 微信公众平台 账号,获取小游戏AppID(小程序ID)。安装 微信开发者工具,用于编译小游戏。安装 Visual Studio Code,用于编写游戏逻辑代码。安装并配置…

Linux命令:wget(下载文件)、ssh(登录及免密登录)、scp(远程文件传输)、sh(脚本)

wget 概述 wget是一个下载文件的工具,用在命令行下,下载一些软件或从远程服务器恢复备份到本地服务器 wget支持HTTP,HTTPS和FTP协议,可以使用HTTP代理 支持自动下载 wget可以在用户退出系统的之后在后台执行。意味着你可以登…

C语言选择排序和快速排序(图解过程)+思路清晰

选择排序和快排选择排序时间复杂度和空间复杂度快排(三种方式)1.hoar时间复杂度和空间复杂度优化--三数取中优化--小区间优化2.挖坑法3.双指针(推荐)选择排序 本篇文章的重点在快排。因为选择排序无论是在思想上面还是&#xff0…

提供数百万岗位和丰厚利润,苹果却转移产业链,中国制造怎么办?

新年刚过,就传出消息指苹果直接代中国供应链企业向印度提出建厂申请,其中有14家获得了许可,而3家被否决,这凸显出苹果坚定向印度转移生产线,如此做对中国制造将产生深远影响。一、苹果对中国制造的影响巨大苹果为中国提…

新的一年,这份高级测试人的职业素养请收好~

软件测试工程师需要的专业技能计算机领域的专业技能是测试工程师应该必备的一项素质,是做好测试工作的前提条件。尽管没有任何IT背景的人也可以从事测试工作,但是一名要想获得更大发展空间或者持久竞争力的测试工程师,则计算机专业技能是必不…

5G R16+C-V2X赋能下一代智能T-Box,助力智能驾驶时代加速到来

█ 5G技术助力C-V2X持续进化,智能网联新生态逐步建立 汽车行业正面临百年未有之变局,智能汽车已经成为全球汽车产业发展的战略方向。发改委、工信部、交通部等11部委联合印发的《智能汽车创新发展战略》中指出:汽车产业与相关产业全面融合&a…

(二十四)深入理解蓝牙BLE之“H5协议”

前言:蓝牙产品在实际落地中,很多时候采用hostcontroller的通信模型,其中host负责实现协议栈profile是运行在主控cpu上的。controller为另外一颗单独的蓝牙芯片,负责蓝牙link layer的处理,两个芯片通过hci消息来交互数据…

SD卡提示格式化后怎么办?可尝试这种数据恢复方法快速找回!

生活中,虽然我们更习惯用手机、U盘来存储数据,但是对于摄影爱好者,SD卡还是非常刚需。 在使用SD卡存储文件时,经常遇到SD卡无法读取,要求我们格式化后才可以使用。此时,该如何备份里面的数据,或…

IB课程为何号称全球最难国际课程?

在读国际学校的同学们,一定对大名鼎鼎的IB课程不陌生,可是他为什么被称作是它号称最难的国际课程呢?今天就来给大家全面解析一下IB课程~ IB课程最开始是IBO为外交官子女开设全球统一标准的课程。IB课程为全球学生开设从幼儿园到大…

【论文速递】TMM2023 - FECANet:用特征增强的上下文感知网络增强小样本语义分割

【论文速递】TMM2023 - FECANet:用特征增强的上下文感知网络增强小样本语义分割 【论文原文】:FECANet: Boosting Few-Shot Semantic Segmentation with Feature-Enhanced Context-Aware Network 获取地址:https://ieeexplore.ieee.org/stamp/stamp.js…

这款小巧精致的 Keychron K7 满足了我对键盘的所有想象

🔽 前言 博主是一个“练习”时长两年半的前端码农,在练习期间打交道最多的就是键盘,敲得多了懂得也就多了对键盘的要求也变多了。 之前认为,不就一块键盘嘛,能打字就行。 现在认为,键盘必须要有好的手感&a…