我读维基百科关于 Unix 安全性的文章以及“服务”下的第一句话以前说应删除未使用的软件。我想不出原因,你能帮我吗?
答案1
任何软件都可能包含漏洞或可能对攻击有用。因此,任何软件都需要在其有用性和所带来的风险(攻击面)之间取得平衡。如果不使用软件,那么它只是一种风险(即使风险很小)。
在服务方面,还有其他考虑因素。服务通常会暴露一些东西,例如一个网络端口;如果可以从外部访问,则它可以构成进入系统的途径。最重要的是,服务通常以特定权限运行(即使不是以 root 身份运行),因此它们可以访问普通用户可能无权访问的文件,因此在多阶段攻击中非常有用。
另一个考虑因素是未使用的软件不太可能得到维护。如果是接收安全更新的分发包,则不必担心这一点。然而,本地安装的软件可能会被遗忘。这也适用于配置:即使是发行版维护的包也可能被不安全地配置,如果它们未被使用,则更有可能被忽视。
答案2
所谓的软件services
是指在本地系统上打开端口的软件,其目的是侦听来自 LAN(本地网络)或 WAN(互联网)的传入连接
此类软件的一个示例是 Web 服务器、邮件服务器或任何其他服务,供用户连接到您的系统,然后提供特定的信息"services"
从普通用户(例如您自己)的角度来看,您可能会运行 torrent 客户端,例如qbittorrent
,这也是此类软件的一个示例,因为它在本地打开一个端口,让互联网上的其他用户连接到您的系统以共享文件。
安全风险是此类软件可能包含漏洞,潜在攻击者可能会利用这些漏洞来获取超出软件用途的系统访问权限。
攻击者要做的第一步是使用诸如nmap
扫描系统上的开放端口之类的工具,并使用相同工具的方法来了解正在使用的软件版本和操作系统。
然后,攻击者将检查软件源代码以了解是否存在漏洞,如果存在漏洞,他就可以编写代码来利用它。
当然,端口扫描不是直接针对系统,而是针对您的NAT
路由器,路由器必须打开一个端口以便侦听软件可以访问。
这就是为什么必须更新此类软件才能减少攻击面并减少漏洞。
现在,如果不需要此类软件(例如,未使用它),那么最好将其卸载,因为这样就不会出现漏洞,并且潜在的攻击者也无法利用它。
但是需要一些服务(软件),在这种情况下,除了确保软件更新之外,您还需要配置防火墙来检测和防止端口扫描。
如果您想查看系统上是否有此类打开端口的软件,请运行以下命令:
sudo ss -tunlp
nftables
下面的链接是我的答案,显示了用于检测和停止TCP
端口扫描的 示例防火墙设置:https://unix.stackexchange.com/a/774404/599939
答案3
考虑安全原则。引自计算机安全:艺术与科学作者:Matt Bishop(大胆的我的):
原理最小特权指出主体应该只被赋予完成其任务所需的特权。
如果一个主体不需要访问权,那么该主体就不应该拥有该权利。
根据这一原则,合法用户在执行允许的任务时不需要的任何软件都不应可供该用户使用。这包括 root 用户。根据定义,此类软件只能用于执行未经许可的任务,因此它不应该存在。
原理机制经济指出安全机制应该尽可能简单。
如果设计和实现都很简单,那么出现错误的可能性就会更少。检查和测试过程不太复杂,因为需要测试的组件和案例较少。复杂的机制通常会对它们运行的系统和环境做出假设。如果这些假设不正确,可能会导致安全问题。
所有这些都适用于计算机上安装的软件数量。软件越少意味着该软件中存在漏洞或配置该软件时出错的机会就越少;减少工作量,减少出错的机会测试机器的安全性;并且机器安全需要依赖的假设更少。
换句话说,删除未使用的软件是减少您的工作量的一种方法。攻击面。即使未使用的软件只能由特权用户访问,删除它也有助于纵深防御。
答案4
攻击面可能被破坏的另一种方式是当旨在自动删除过时的、临时修改的或废弃的代码修订的功能不起作用时。
就我而言,当将数字移植到数据库的代码的临时修改版本加载错误并作为默认值运行几天时,数据库被损坏。幸运的是,这并没有导致攻击,但它确实激怒了数十名依赖这些数字的工程师。
这种情况下的修复是为了防止临时代码修订能够覆盖原始代码。