问题看起来越简单,回答它就越困难。
在我们仔细分析这个问题之前,或许我们可以先讨论讨论 Windows 和 Linux 的安全策略和保障措施。
Windows
Windows,在默认情况下,对于普通用户的场景,其保护是非常全面的。例如:Windows 针对物理入侵的防范,是有一系列技术共同组合而成。
BitLocker 是非常经典的全盘加密工具。它可以保护你的数据不被盗取。在黑客即使偷走了你整台计算机,在没有密钥的情况下,仍然无法获取你的数据。而且它在登录账号后默认就会开启,集成在 Windows 操作系统中也不需要额外安装。
但是,让用户每次开机都输入完整的 BitLocker 密钥,这显然是不现实的。因此,Windows 会使用 TPM(Trusted Platform Module)来保护 BitLocker 密钥。TPM 是一种特殊的硬件安全模块,其能够安全的存储密钥。
TPM 并不在硬盘上,而是在主板或CPU内部。非常难以通过软件手段来攻击 TPM。TPM 可以将密钥与特定的硬件和软件状态绑定。只有当系统在预期的可信状态下启动时,TPM 才会释放绑定的密钥。这个功能确保了密钥只能在特定的硬件和软件环境中使用。
在系统启动时,TPM 会记录系统的启动过程,包括 BIOS、引导加载程序、操作系统内核和其他关键组件的哈希函数。这些哈希函数会存储在 TPM 的特定寄存器中,被称为平台配置寄存器(PCR)。通过这种方式,TPM 可以确保系统的启动环境没有被篡改。这样,普通用户只需打开电源,就可以自动解锁硬盘,进入操作系统,而无需输入 Bitlocker Key。
当然,只有 TPM 技术保护 BitLocker 是远远不够的。如果黑客能够通过物理手段攻击你的计算机,例如将一个人脸识别摄像头的固件进行篡改,那么黑客就可以在不改变 TPM 密钥的情况下,通过篡改摄像头的固件,来绕过登录验证。
因此,Windows 还有一项技术叫做 Secure Boot。Secure Boot 是一种基于 UEFI 的技术,它可以确保系统启动时只加载由 Microsoft 或者硬件厂商签名的操作系统和驱动程序。如果黑客损坏了系统引导加载程序或者操作系统内核,Secure Boot 就会拒绝启动系统。
在实际场景中,即使理论设计的非常安全,也很可能会因为遇到了愚蠢的用户,将自己的重要的密码直接写在了纸上,或者将自己的密码在摄像头下输入,从而导致了安全隐患。为了提高实际安全能力,并缩小攻击面,使用生物识别验证有的时候甚至比理论防范更加重要。
为了方便用户登录不要麻烦的输入密码或犯傻,Windows 还支持 Windows Hello。Windows Hello 是一种生物识别技术,它可以使用人脸识别、指纹识别、虹膜扫描等方式来验证用户身份。
当然,Windows 本身也尽力避免了黑客可能对其的恶意篡改,自从 Windows Vista 开始就已经引入了 UAC(User Account Control)用户账户控制。UAC 可以确保用户在执行敏感操作时,需要进行二次确认。这样可以避免用户在不知情的情况下,被恶意软件获取到较高级别的权限。
同时,Windows 的基于数字签名的代码完整性检查也在 Windows Vista 引入。这个功能可以确保系统启动时,只有经过数字签名的代码才能被加载。这样可以避免恶意软件在系统启动时就加载到内存中。如果黑客或恶意软件试图篡改系统文件,Windows 会拒绝启动,甚至可以通过 sfc /scannow 命令来修复系统文件。
Windows 的安全策略对于普通用户来说还不止这些。例如 Windows 10 以后就开始默认开启了 Windows Defender 防病毒软件。它会实时监控系统里进程的行为,对于可疑的行为也可以立刻阻断。Windows 的防火墙也是非常强大的,并且对于普通用户来说几乎不会打扰日常的使用的同时,也有着非常好的防护能力。
我记得在 Windows 10 发布了一段时间以后,Windows 还推出了一款非常有意思的功能,叫作 Virtualization Based Security。也就是将操作系统的内核和用户态的应用,借助 Hypervisor 硬件加速虚拟化技术,跑在不同的虚拟硬件上。这一功能可以非常彻底的杜绝任何可能的恶意软件访问内核态的内存的地址。
Windows 的更新策略也非常简单,就是所有更新都来自微软唯一分发渠道,而代码的编写也完全由微软的工程师完成。这可以确保用户运行的 Windows 上的全部代码都是微软的工程师开发的,并不会可能混入一些恶意代码。
记得在过去 Windows XP 的时代,许多用户把自己设为管理员,然后所有程序都有管理员权限,系统文件可以随意篡改,甚至一个普通的进程也可以随意的篡改系统的内存。当年的安全程度确实可以做到浏览几个网页电脑就被黑客完全掌控,甚至同时感染几百个病毒在电脑上养蛊的神奇操作。当然今天,对于一个安全功能默认的 Windows 来说,黑客即使物理接触到电脑,想要读取、篡改、伪装里面的信息已经非常困难了。
也就是说,Windows 对于普通用户的安全而言,它不是一两个技术的保护,也不是几个软件就能解决的问题。这是一整个生态链,从硬件到软件,从固件到操作系统,从检测到拦截,是全链路的防护。这些技术包括但不限于:
- Kernel DMA Protection
- Virtualization Based Security
- Code Integrity Policy Enforcement
- TPM
- UEFI
- Secure Boot
- Modern Standby
- BitLocker
- Device Encryption
- Windows Recovery Environment
- UAC
- Windows Defender
- Windows Firewall
- Windows Update
- Windows Hello
(上图源自 Safe-Windows)
这样的闭环可以确保 Windows 的安全性。(这并不是因为我是微软的员工我才吹 Windows 的安全,而实际上对于一个普通用户来说,基于上面的防护,Windows 的安全性是非常高的。)
Linux
对于一个普通用户而言,如果我们类比上面的比较过程,我们会发现:
Linux 也有全盘加密工具 LUKS2,它也可以保护你的数据不被盗取。在黑客即使偷走了你整台计算机,在没有密钥的情况下,仍然无法获取你的数据。不过,一般这项保护并不会默认开启。
当然,LUKS2 的开启很可能意味着你每次开机都需要输入密码。当然 Linux 里完全也可以使用 TPM 来保护 LUKS 密钥,这和 Windows 的策略是类似的。TPM 可以确保系统只有在特定的硬件和软件环境下才能使用密钥,并且通过记录启动过程中的哈希值来确保系统的启动环境没有被篡改。
Linux 的世界里,Secure Boot 非常不流行。实际上我见过非常多的人在安装操作系统前第一步就是关闭 Secure Boot。这是因为 Secure Boot 会限制用户安装非官方的操作系统和驱动程序。这对于 Linux 用户来说是非常不友好的。Linux 作为一个非常鼓励自由和变更的操作系统,其实对代码进行完整性保护都是非常不流行的。
严格来说,Secure Boot 在 Linux 里是完全可以实现的。很多发行版默认就支持 Secure Boot,例如 Ubuntu 和 Fedora。这些发行版在启动时可以确保只加载由可信任签名的操作系统和驱动程序。
(上图源自 https://www.youtube.com/watch?app=desktop&v=SQ7Ajv2Cnzg )
生物识别技术在 Linux 上的支持也在逐步完善。虽然不像 Windows Hello 那样集成在系统中,但通过一些开源项目,例如 fprintd(用于指纹识别)和 howdy(用于人脸识别),用户可以在 Linux 上实现类似的生物识别功能。(当然它并不能解决摄像头被黑客控制的问题)
在用户权限控制方面,Linux 也有类似 UAC 的机制,例如 sudo 命令,可以确保用户在执行敏感操作时,需要输入管理员密码以进行确认。这样可以避免用户在不知情的情况下,被恶意软件利用。但是相比于 Windows 的 UAC 会在安全桌面中展示不同,sudo 并没有任何安全桌面的概念。并且很多用户也会配置允许 sudo 不需要密码。
对于 Linux 用户来说,安全很可能代价就是不方便,需要频繁的输入密码。
Linux 系统通常没有集成的防病毒软件,但有一些开源防病毒工具,例如 ClamAV,可以用于扫描和清理病毒。不过,由于 Linux 系统的安全设计和广泛使用的包管理系统,再加上普通用户群体中,Linux 的使用率相对较低,这使得 Linux 遭受病毒攻击的风险相对较低。
Linux 的防火墙有流行的 iptables 和 nftables,它们可以用于配置网络规则,限制网络访问。当然,其需要用户自己非常清晰的理解自己究竟在干什么。如果用户本身被逼疯了,他也做得出来直接把防火墙规则全关掉这种事情。
对于 VBS 来说,Linux 的世界里几乎没有任何替代品(或许 Heki-Linux )。唯一的替代品或许就是 KVM,将真正的关键业务运行在虚拟机中以确保安全。但是我也相信普通用户绝对不会这么干。
与 Windows 不同的是,Linux 的更新和软件分发通常是通过各个发行版的包管理系统来实现的,例如 apt、yum 和 dnf 等。大多数情况下,Linux 用户会从官方的软件源中安装和更新软件,这些软件源通常由发行版的开发团队维护,确保软件的安全性。但是历史上仍然出现过大量有贡献者往开源库里下毒的故事,尤其是 SSH 是重灾区。几乎每年都会发现个 0day 。
自由的操作系统也会有新的优势:代码是公开的,全球的使用者可以审查代码,从而非常容易的找到里面的后门,对于隐私和安全的保护也非常有利。用户也可以根据自己的需要深度定制、魔改和裁剪自己需要的操作系统,这样可以减少系统的攻击面。
初步对比
听我这么说完,怎么感觉 Windows 的安全性完爆 Linux?无论是硬件还是软件,微软已经建立了一整套信任链,确保从硬件到软件都是全链有信任和检查的。而 Linux 由于其开源的特性,虽然可以确保代码的透明性,但是也意味着什么都能跑,就什么都可能跑到黑客的代码。
但是,我上面的比较中,一直包含了一个隐藏条件:普通用户。甚至,我在开始回答这个问题之前,都没有真正定义:什么是所谓的“安全”。
这就是为什么这是一个开放性的问题。它一定不会有标准答案,而是仁者见仁智者见智的。例如,有些人安装 Windows 可能仅仅只是为了运行 PUBG 这一款游戏而已,他们甚至不会关心自己的系统是否安全。他们会关闭 VBS 来提高帧率,会购买不包含固件完整性检查和 DMA 功能的游戏电脑,会关闭 Bitlocker 来提高磁盘性能,甚至会使用 Administrator 用户来打游戏。他们很可能早把安全功能关干净了。那他们真的陷入什么危险了吗?
我认为不。是否陷入危险取决于黑客攻击你对你造出的代价。如果这是一台单纯的游戏电脑,黑客可能造出的最大破坏无非就是盗走了你的账号。而 PUBG 明明是个免费游戏,你的账号里也没有绑定任何银行卡信息,那么黑客盗走你的账号对你造成的损失是多少呢?
所以此时这个场景下,Windows 和 Linux 哪个更安全,很可能答案是:我不在乎。
我们讨论信息安全,必须要有具体的场景,具体要防范的对象,要避免的事故是什么。
重新思考这个问题
重新思考上面的问题。对于普通家庭用户,如果只讨论黑客偷走电脑后取出用户目录下的数据的概率,毫无疑问 Windows 是绝对更加安全的。其在默认设置下就会开启众多安全功能,而且这些功能对于普通用户来说几乎是透明的。
问题就在于,很多 Windows 用户并不是普通家庭用户,而是“以为自己专业但其实不专业的用户”。他们认为自己并不需要被防范,从而关闭了大量安全功能,例如 BitLocker,VBS,UAC,防火墙,Windows Hello,Windows Defender 等,来换来更好的性能。但是他们可能忽视了自己可能遭到攻击的方面。例如电脑被黑客窃取,从而偷走浏览器的 Cookie 文件,账号被远程登录,直播间被黑客控制,播放数字货币的广告等等。而这些事情在历史上也多次真实发生过。
(图自 https://www.youtube.com/watch?app=desktop&v=CB7m8-VMKzw )
但是,为什么很多开发人员和服务器仍然选择 Linux?更多的在于,对于一个懂得如何防御的人来说,Linux 其高度定制性反而给了你很高的开发上限。你仍然可以使用 LUKS2,可以自己对自己的内核签名再让 Secure Boot 信任你自己的数字证书。你仍然可以自己手工审查代码,只部署你信任的软件。你也可以配置 dm-vereify 来实现完整性检查。你也可以找生物验证脚本来实现指纹识别来解锁 root 权限。Linux 的病毒也更少,也不必那么害怕病毒。你也可以深度了解包管理的工作原理,建设白名单的软件源,构建零信任的防火墙……
这就是为什么这是一个开放性问题。因为安全性不是一个绝对的概念,而是一个场景下的概念。安全性取决于你的需求,取决于你的使用场景,取决于你的对手,取决于你的技术水平。
所以,Windows 和 Linux 哪个更加安全?这个问题的答案是:取决于你。
伴随着国产化Linux操作系统的不断演进,' Linux 遭受病毒攻击的风险相对较低'这一观点可能被打破. 目前在 统信UOS等国产化Linux操作系统中, 不断有安全软件公司, 构造 安全软件等概念, 辅助对于操作系统了解不深,但被强制要求使用国产化Linux操作系统的用户,提升相对的安全概念.
非常详细的博客文章,对Windows和Linux的安全性进行了全面的比较和分析。博文详细介绍了Windows和Linux各自的安全策略和保障措施,包括全盘加密、TPM、Secure Boot、生物识别技术、UAC、防病毒软件、防火墙等等。博文指出Windows在默认设置下对普通用户的安全保护非常全面,而Linux则更加注重自由和开放性,用户可以根据自己的需求进行定制和配置。
博文的闪光点在于对Windows和Linux安全性的全面对比和分析,涵盖了硬件、软件、固件等多个层面的安全保护措施。博文也提到了Windows用户可能会关闭安全功能来追求性能,而Linux用户可以根据自己的需求进行定制,这点非常准确地反映了两者的不同。
博文也提到了一个非常重要的观点,即安全性是一个相对的概念,取决于用户的需求、使用场景和技术水平。这一点非常值得肯定,因为不同用户对安全的需求和重视程度是不同的。
改进方面,博文可以进一步扩展对Windows和Linux安全性的比较,例如在网络安全、漏洞修复等方面进行更深入的探讨。同时,博文可以提供更多的实例和案例,以更好地支持和说明作者的观点。
总体而言,这篇博文提供了非常详实的信息和观点,对Windows和Linux的安全性进行了全面的比较和分析。通过指出安全性是相对的,并提供了用户需求和使用场景的重要性,博文为读者提供了思考和决策的依据。非常鼓励作者继续写作,深入探讨和扩展博文的内容。