Linux系统是开放的,有很多安全机制和工具。 不同的场景有不同的安全目标和不同的工具。 下面从个人角度列举了一些模仿ATT&CK的常见安全机制和技术。
Linux系统分层
从逻辑上可以分为三层:硬件层、内核层和应用层。 每一层都有一个攻击面和相应的安全技术。 各层安全技术相互配合,形成系统防御。
红色代表攻击面,绿色代表安全机制。
硬件
硬件是计算的基础,也是安全的基石。 硬件大致由主板、各种总线、CPU、内存、硬盘、外设等组成。 根据这些组件分析攻击面和安全技术。
母板
主板是其他硬件组件的物理基础。 物理安全不容忽视。 历史上曾出现过黑客直接更换存储设备的案例。 特定频率的电磁波也会导致某些硬件故障。
主板上有CMOS,CMOS中的代码和配置是一个攻击面。 其配置决定了机器的功能和安全特性。 例如是否启用Boot、SGX等安全配置。 要管理BIOS,需要设置管理密码,要启动计算机,需要设置使用密码。
BMC(BMC),一般存在于服务器上,监视机器、控制机器启动、CMOS更新等,可以看作是一个单一的系统。 加强保护,如弱密码等。
硬盘
至于硬盘,我们先来说说硬盘和自加密盘的使用。
自加密磁盘 (SED),通常是固态驱动器。 存储的内容是加密的,由负责加解密,其作用是防止数据的物理泄露。 开启计算机时,必须输入正确的密码才能使用。
中央处理器
CPU的安全性分为两个方面: 1.CPU本身的安全性,比如\等缺陷。 2. CPU提供的安全功能。
仅在软件层面做安全有其缺点,如保护功能有限、性能不足等。 现代 CPU 上也提供了一些安全机制和功能。 以Intel第12代CPU为例(ARM也有类似的安全特性,从发展的角度来看,笔者更看好ARM的CCA安全系统)。
TXT(可信执行技术):是Intel提供的在CPU中实现可信计算平台的技术。 可信计算是一套安全理论,涉及 CPU、TPM、主板、内核、开发库、应用程序以及英特尔的一些未公开的源微代码。 它的使用还涉及到产品厂商、基础设施和运维、开发等,已经发展了很多年,但基本上没有系统地使用,而且它的一些基础功能也比较过时,不符合当前的安全发展。 大家接触TPM比较多。
说到TXT,可能会与SGX进行比较。 TXT是一个系统化、平台化、面向公司的基础设施。 它还拥有直接面向运维和开发人员的TSS软件栈和TPM工具。 严格来说,SGX是可信计算中的一个隔离执行功能。 它的使用仅依赖CPU特性+内核支持+SDK。 对于开发者来说,比较好用(但不太好用,在12代CPU SGX功能中已经被废弃)。
AES-NI:CPU上的AES加密和解密指令,以提高AES的性能。 使用的是这个通用的加解密库。
:无进位乘法指令提高加密和解密性能。
SHA:sha1,哈希算法的硬件加速指令。
关键:CPU 上的随机数生成指令。 (生成随机数种子),。 CPU 的种子指令在内核中并不完全受信任,而只是熵源的一部分。
NX:非执行位。 将页面标记为禁止执行。 如果违反,将会产生异常。
Boot Guard:启动保护技术,属于安全启动,其目的是保护启动过程(信任链的传输)的完整性,防止未经验证的启动代码运行等。
*** EP 和 *** AP:防止 CPU 在特权级别执行用户模式代码。 当寄存器中的 AC 标志被清除时,将阻止以特权级别访问用户模式内存。
UMIP:某些指令只能在特权模式下执行。 如SGDT、SIDT、SLDT、 *** SW、STR。
MKTME:多密钥全内存加密,对应AMD的 *** E。 这个笔者比较关心的是,内存安全又向前迈进了一大步。
CET:控制流增强技术。 两类: 1.硬件影子堆栈,保护函数返回地址,如缓冲区溢出黑客利用。 2.添加了新的(32位和64位)指令以防止ROP/JOP/COP利用。 gcc编译时函数的之一条指令是,运行时CPU根据这条指令保存/检查相应的状态,以判断是否被恶意利用。
:添加了一个新命令来包装密钥并返回一个。 您可以使用它来进行后续的加密和解密。 加解密的原理与使用TPM类似。
Devil's Gate Rock:BIOS保护技术。 更新BIOS时,会使用签名、权限检查等一系列技术来保护BIOS。
MKTME、CET、Devil's Gate Rock,这些技术只能用在较新的主板、CPU、核心上。
第 12 代 CPU 中放弃的安全技术:MPX 和 SGX。
外围设备
每个外围设备都是一个攻击面。 例如:WIFI、蓝牙、USB 设备。
WIFI:各种移动设备、汽车、路由器、家用设备。 如果这些设备的驱动程序或应用程序存在漏洞以及访问控制策略不当,则可能会导致损坏和信息泄露。 如果你拿着手机站在马路上,就可以看到车内的各种WIFI热点。 如果您有耐心走到汽车附近,可以轻松扫描行车记录仪上二维码中的密码。
蓝牙:这个危害和WIFI一样。 例如,蓝牙鼠标和键盘。 如果连接到系统的鼠标被盗,盲目点击可能会造成严重破坏。
USB设备:这是对未连接互联网的系统造成损害的重要渠道。 例如,U盘中的恶意文件。
应尽可能减少这些外围设备。 那些可以物理切断的就应该切断。 不能切断的应予以密封。 无法密封的应禁止相应司机装载。 如果使用,请保持软件更新并实施适当的访问控制策略。
各种巴士
USB总线、、PCI等总线。
PCI总线可以传输和更改SED密码,可以直接读取物理内存,而USB则更加通用,更容易访问各种恶意物理设备。
安全物理设备
H *** 和 TPM 是用于安全目的的芯片。 TPM 是大多数计算机中都有的可信计算组件,并且相对易于使用。 还有利用 TPM 的功能。
Ukey:使用系统时使用外部设备进行身份验证。 比如登录、登录网银、玩游戏时都有相应的身份认证设备。
核心
内核大致由以下五部分组成:基础组件(进程调度与管理、内存管理、进程间通信,缩容时一般保留)、文件系统和块IO系统、网络子系统、各种基础库、驱动和固件。 还有安全子系统。 重点关注内核中的安全机制和技术。
自主访问控制和 ACL
对象的所有者决定其他用户的权限。 例如:ACL中配置的策略。 Linux系统的用户/组/其他+ACL构成了基本的访问控制。 ROOT作为管理身份,执行基本访问控制以外的功能。
//
这是基本访问控制之外的特殊情况。 比如mount,各种沙箱程序,尽量减少这样的程序就可以了。 顺便说一句, / 和 都是合法的特权升级。 在执行某些程序时,为了防止这些提权方式被滥用,可以使用prctl设置。
ROOT权限太大,所以ROOT需要去中心化。 v5.15分为41种具体权限,如、、等。对需要权限的可执行程序设置具体权限,执行时不需要ROOT账户,如bpf操作。 应用层开发库比以前好用多了,但用的人不多。
苹果
强制访问控制,与自主访问控制相反。 简单来说,就是制定统一的规则,为主体和客体分配相应的标记,并根据规则确定是否允许某个动作。 访问控制模型包括BRAC(基于角色的访问控制,目前常用)、BLP、BIBA。 BLP主要注重保密性,其控制规则是“上面不可读,下面不可写”。 BIBA主要注重完整性,其控制规则是“上面不可写,下面不可读”。
内核中多级访问控制的实现结合了多种访问控制模型,是和上默认的强制访问控制机制。
:是基于路径的MAC实现,其配置比较容易理解。 但是,仅对已配置的程序执行访问控制。
Smack:简单的访问控制。 Smack 用于 Tizen OS(电视和物联网中使用的操作系统)。 其主要特点是实现了CIPSO协议。
:日本实行强制访问控制。 Smack 且相对很少使用。
L ***
Linux安全模型是一组框架,本质上是分布在内核代码中多个地方的钩子。 它们本身并不实现安全控制功能(目前IMA也已经在L *** 框架中插入了钩子)。 V5.15中有239个挂钩点。 以上就是实现不同的hook点来实现不同的访问控制实现。
关于L *** 是否可以同时使用多种访问控制实现,历史上曾多次发生过事件。 起初可以,后来不行,现在又可以了。
YAMA:用于控制 prctl 使用的机制。 比如是否允许调试和注入so库可以通过设置yama来实现,比较简单实用。 现在也是通过L *** 来实现的。
IMA:完整性测量基础设施,“计算”系统运行过程中文件、文件属性和进程的完整性。 系统运行过程中为所有进程(以及内核)计算一个哈希值,并将其存储在TPM的寄存器17中,用于向对方证明时使用。 IMA占用内存很大,基本没有被使用。
:创建一个功能有限的环境,主要用于沙箱。 从目前的代码来看,实现还比较粗糙。 但通过合作,或许可以实现一个功能不错的沙箱。
:Linux系统安全增强功能。 它在早期版本中被调用,早期是通过应用层脚本实现的。 比如是否允许加载ko、是否允许访问/dev/mem等,这些原本允许但非常危险的操作都可以被限制。 锁定系统,提高系统安全级别,比以前更安全。 安全级别只能提高火线指令数据包,不能降低。 如果要降级,必须重新启动系统。 一般用于物联网设备。
:保证进入内核地址空间的代码来自同一个文件系统,可以设置ro属性。 防止黑客引入KO攻击系统。
内核自我保护技术:内核作为一个软件,本身也是一个攻击目标。 例如:
1. 减少攻击面。 以前导出的函数不再导出,旧的系统调用被放弃,并且添加了过滤系统调用的机制。 一些关键信息不再导出到用户空间,或者需要权限才能查看,例如/proc/中符号的地址。 当内核空间数据复制到用户空间时,首先初始化为0; 当系统调用返回时,堆栈被清空; 当堆内存释放时,堆被清空等。
2、执行代码的内存不能同时具有执行和写入权限。
3. 部分数据设置为只读属性。
4. 内核模块、固件和UEFI代码验证签名。
5、加强地址随机化。 堆栈缓冲区保护。 在运行时检查计数器、整数溢出等。 借鉴了pax项目的一些内存安全保护技术。
6. 使用安全编译选项编译内核。
&:是一种资源隔离技术。 v5.15隔离了8种类型的资源(pid、net、uts、user、、ipc、mnt、time)。 它是一种资源控制技术,比如cpu使用率、内存使用率等,它们是实现容器的基础技术。 其他资源控制技术如。
文件系统安全:文件系统加密机制、dm-crypt、加密。 文件系统挂载时只读、文件使用限制配额、文件属性位等
:新版本内核中添加的私有内存机制。 在一个进程中申请的Mem不能在其他进程中访问。
网络安全:
1. :可以在此基础上设置防火墙规则。
2.:在ip数据包的中添加 tag,实现数据包的访问控制
3. IPsec 用于安全通信。
4、KTLS:TLS协议中,数据包的加解密是在内核中进行的,提高了TLS的性能。
5.&BPF高效抓包。 XDP可以实现抗D。
6、负载均衡; 重新实现TCP握手机制,增强对SYN Flood攻击的抵抗能力等。
内核HOOK机制:&&&bpf。 您可以使用它们来实现自己的安全功能并观察内核和进程事件。 热补丁修复内核漏洞。
内核审计机制:Audit、kmsg、acct等
以上大致就是已经进入内核主线的安全技术,还有一些没有进入主线的比如grsec、tpe、lkrg、dpdk等。比如有些发行版也会有选择地引入其中的一些安全技术技术。
应用层
不同的场景需要不同的工具。 我们来谈谈基于强化操作系统基本原理的常用工具。
简单(KISS原理)
简单的设计,易于使用...
减少攻击面
自定义基线时,请使操作系统尽可能小,并包含尽可能少的软件包。 例如,gcc、nc等不常见的软件不应该安装在生产系统上。 禁止从生产系统中加载或删除未使用的内核 ko。
有些系统可以修剪内核以保持内核功能的精简。 使用替换包中的基本工具、使用自定义的 bash 等。
最小特权原则
账户数量最少,账户数量最少,权限最小。 需要删除/etc/中未使用的帐户,并控制是否允许登录。 使用 sudo 来控制帐户执行的命令。 如果允许网络登录,则使用pam中的插件控件。 sshd配置应该尽可能严格,比如禁止root登录。
设置不同类型的帐户,例如管理帐户和审核帐户。 每种类型的帐户都有足够的权限。
持续更新
软件保持更新,软件漏洞可以修复。 更新政策以应用新的变更。 例如,某些密码需要定期更新。
事件审计
重要事件都会被记录和监控。 例如登录事件、服务重启事件、配置更新事件。 Linux上有各种日志功能,通常在/var/log下。 许多安全工具都会读取此目录中的文件。
执行基本加固和监控
适当的分区和权限设置、适当的防火墙规则、适当的加解密措施、防止密码破解的措施、2FA登录认证等。
对于Linux系统的安全性有不同的看法。 上面列出的基于系统层的Linux安全机制和技术是静态的。 从事件活动的角度来看,这些安全技术可以有机地结合起来,形成防御功能。 安全架构师就像厨师一样,了解每种技术的优缺点,不迷信某项特定技术。 他可以根据具体场景设计合适的安全架构,并结合和利用(或开发)各种技术,做出满足需求的美味佳肴。
最近有很多朋友向我索要一些程序员必备的资料,所以我挖出了盒底的宝藏,免费分享给大家!
扫描海报二维码即可免费获取。
未经允许不得转载! 作者:admin,转载或复制请以超链接形式并注明出处天心神途传奇手游发布网。
原文地址:《Linux系统安全机制及技术概述》发布于:2024-03-17
还没有评论,来说两句吧...