当前位置:首页 > 科技 > 正文

每个 IT 人员都需要了解的有关 OpenBSD 的信息

更多互联网精彩资讯、工作效率提升关注【飞鱼在浪屿】(日更新)


openbsd 仍然是开源领域的一个关键但很大程度上未被承认的参与者。本文旨在强调该项目的具有标志性的安全功能和开发实践——对正确和安全代码的敏锐关注以及持续的代码审计——以及该项目作为安全实践创新源和众多“上游”源的作用广泛使用的组件,如 OpenSSH、PF、LibreSSL 等。

如果用几分钟的内容概括下,那就是是:

  • OpenBSD 已经存在超过 25 年(从 1995 年 10 月开始)
  • OpenBSD 是主动安全的,这些年来默认安装版本中只有 2 个远程漏洞
  • OpenBSD 率先使用强密码术,这是第一个附带 IPSec 的免费系统(在此过程中卷入了美国的出口法规)
  • OpenBSD 在代码审计方面处于领先地位并且仍然处于领先地位,在发现时修复树范围内的类似错误
  • OpenBSD 默认启用所有安全增强功能,并且很难禁用
  • OpenBSD 是开源、免费软件,该项目积极鼓励对代码质量和安全性进行独立验证。
  • 今天,OpenBSD 很多被用作以网络为中心的角色,但是它是一个通用操作系统,特别强调安全性。
  • OpenBSD 具有基于实际代码质量和实际使用中经过验证的性能的高品质二进制
  • OpenBSD 是一些广泛使用的软件的上游(起源),例如 OpenSSH、OpenBgpd、PF、OpenSMTPd、LibreSSL、iked、mandoc 和许多其他软件。如需完整列表,请参阅OpenBSD 网站上的 OpenBSD创新页面。https://www.openbsd.org/innovations.html
  • 自 1995 年以来,OpenBSD 一直“在公共场合成长”,代码通常可通过匿名 CVS访问 - 透明的过程,公共 tech@ 邮件列表上的开发讨论。https://www.openbsd.org/anoncvs.html
  • 开发人员最好研究高质量C 源代码以及该项目6 个月的发布周期

现在,让我们回到一切开始的地方。


OPENBSD:这一切是如何开始的

OpenBSD 的历史在很大程度上就是 Internet 本身的历史。您可能听说过 1980 年代,ibm 和 Digital 之类的公司在企业 IT 领域全力以赴,美国国防部为分布式、设备独立网络的实验付费。
就在那时,由加州大学伯克利分校的研究人员在一定程度上协调的一个松散组织的黑客团体因“BSD Unix”而声名鹊起,通过一系列令人愉快的事故,它成为 TCP/IP 互联网协议参考实现。

到 1990 年代初,互联网开始商业化,协调形式工作的伯克利计算机科学研究小组 (CSRG) 即将解散。除了网络本身,伯克利的主要看得见的产品是伯克利软件发行版 (BSD),它通常通过磁盘分发,但也可以在网络本身上获得,它最初是作为 AT&T 软件的集合Unix 但经过多年的扩展成为一个功能齐全的 Unix 操作系统。

即使 CSRG 没有,几个不同的团体也希望 BSD 继续下去,并且有几件事情接二连三地发生了:

  • Lynne 和 Bill Jolitz 将 BSD 移植到 Intel x86(实际上是 80386sx),创建了 386BSD。这被记录在多布斯博士杂志的一系列文章中
  • https://en.wikipedia.org/wiki/Dr._Dobb%27s_Journal
  • 接下来,黑客们开始将 386BSD 代码的改进分享为“补丁包”,两个独立的小组进一步开展工作以形成他们的项目:FreeBSD小组将致力于将最好的 BSD 引入 PC体系的硬件,而NetBSD该小组的目标是让 BSD 在他们可以使用的任何硬件上运行。
  • 一群前 CSRG 员工成立了BSDi Inc.并销售他们的产品 BSD/386,联系电话号码“1-800-ITS-UNIX”。公司的活动反过来引发了 UNIX 商标所有者对代码版权的诉讼。
    诉讼最终得到解决——源码树中只有数千个文件“可能受到阻碍”并且必须被替换,这让 NetBSD 和 FreeBSD 都急于替换代码,其中部分是虚拟内存子系统的核心。几年后,OpenBSD从 1995 年 10 月的 NetBSD 代码库的一个分支中诞生,并于 1996 年 7 月首次发布。
    从一开始,OpenBSD 项目就一直在对整个树进行代码审计,重点关注代码的正确性和安全性。构成一个可用的系统,具有合理的默认值和完整可读的文档。希望该代码在免费许可下可用,并且一旦它致力于项目的版本控制,就可以真正向全世界提供。
    OpenBSD 项目的早期成就之一是匿名 CVS,它使互联网上的任何人都可以近乎实时地获取经过更改的代码。这是与当时大多数项目的正常做法的重大突破,通常在私人邮件列表上相对隔离地工作,并以准随机间隔在某处 FTP 服务器上发布 tarball形式 的版本。

您已经是 OpenBSD 用户了!

即使您不知道,您现在也更有可能使用具有 OpenBSD 来源的代码。您的 apple 产品,无论是 ipadiphonemac,您的 android 设备,您的 Cisco 路由器、Solaris、Linux 或其他 Unix,甚至您的 microsoft 产品都包含一些或大量源自 OpenBSD 的代码。稍后会返回一些细节。


OPENBSD:代码审计和安全演进

关于代码审计。大致是这样运行的:

阅读代码,了解它的作用。寻找不安全的行为,假设一个敌对的环境。当你发现一个错误并修复它时,在树的其他地方寻找类似的代码并在所有地方修复。你会惊讶于有多少不同的程序员有相同的想法并犯同样的错误。清洗,冲洗,重复。这听起来可能有些乏味,但仔细研究代码在现实生活中的实际表现会导致多年来的许多创新,强烈倾向于主动安全,使错误更难以真正造成损害:

  • W^X -- 内存可以是可写的 XOR 可执行文件
  • 地址空间随机化 (ASLR),因此每次执行的跳转目标和间隙都会有所不同
  • 插入堆栈中的随机大小的间隙,再次捕获固定大小的返回
  • malloc()ed 块末尾的不可读、不可写的保护页以捕获溢出
  • 特权分离——守护进程以非特权用户身份运行他们的大部分代码,更有可能在无壳的 chroot 中运行,再加上特权撤销,这意味着守护进程尽快放弃特权
  • 用于声明配置文件以将程序行为限制为仅指定操作和资源的系统调用
  • 用于将文件系统访问限制为仅对指定路径和权限的 unlock(2) 系统调用
  • 当 OpenBSD 6.2 引入内核地址随机链接或 KARL 时,出现了一个相当用户可见的变化,它负责确保内核在每次启动时重新链接到一个新的随机布局。再一次,在以前没有的地方引入随机性被视为一种基于可预测地址的代码加载来减轻可能的漏洞利用的方法。
    所有这些功能都已集成到 OpenBSD 源代码树中,并告诫开发人员遵守规则
“在可能发现损坏的地方,努力寻找失败案例”。"where it is possible to spot damage, fail hard".

-这意味着写得不好的软件在 OpenBSD 上比在其他地方更频繁地崩溃。这本身应该使该平台对开发人员具有吸引力。将您的代码暴露在敌对环境中并查看其执行或失败可能会非常有趣和具有启发性。


可用、便携和安全

记住 OpenBSD 总共运行在 14 个平台上。所有平台都是自托管的。交叉编译仅用于移植到新平台的早期阶段。
当然,除了纯粹维护现有代码以在不同平台上运行之外,用户和开发人员还有现实世界的需求,这些需求通过开发新软件、扩展现有程序的功能、添加新功能甚至替换程序或整个子系统来解决。
安全是一个多方面的话题。早期,OpenBSD 作为在基础系统中包含真正加密的系统脱颖而出,在某种程度上,根据当时该国的出口限制,从美国出口 OpenBSD 源代码在技术上是非法的。

幸运的是,该项目总是由居住在加拿大的无可争议的项目负责人 Theo de Raadt 从加拿大协调。美国的开发人员会在加拿大和黑客比赛,使用干净的设备安装 OpenBSD 来参加,在系统上工作,然后合法地将结果带回。

加密在 OpenBSD 中的一个早期应用是在 1997 年系统中包含完整的 IPSEC 堆栈时。OpenBSD 是第一个在其基本安装中默认包含 IPSec 的免费系统。
作为当时黑客幽默,一件 T 恤印有河豚 Puffy ,后来成为项目吉祥物吹捧河豚 密码散列算法在 OpenBSD 上仍然是默认选项,https://en.wikipedia.org/wiki/Blowfish_(cipher)

每个 IT 人员都需要了解的有关 OpenBSD 的信息

除了关注安全性和代码正确性之外,OpenBSD 的另一个重要特征是关注知识产权完整性,并坚持使用和修改构成系统一部分的代码和文档的措辞清晰且无歧义的许可。


那么为什么要使用 OPENBSD?它是什么样的?

那么对于用户或开发人员来说,OpenBSD 是什么样的,为什么它更好?
我想说的简短版本是它是一个真正的 Unix。不像世界上的 Linux 多年来一直在 init 系统的演进继承中陷入困境,最终或多或少地适应了不断扩展的 systemd,它似乎对一切都有触角,并且正在明确地取代我们拥有的大部分内容传统上被认为是基本系统,OpenBSD 保留并改进了传统的 BSD init,因此既可以拥有整洁的服务管理,也可以拥有一个基本系统,该系统由大部分遵循经典 Unix 哲学的程序组成,即每个程序都应该完全执行一件事,把那件事做好。
如果您是一名开发人员,您也会很高兴听到精心设计的程序的基本系统,这些程序的基本系统都具有可读且有用的手册页,已经包含基本的 Unix 开发人员工具以及 C 和 C++ 编译器——clang 支持,gcc 必要时-- 加上 perl 和许多工具。基本上,从源代码的全新检出构建基础系统所需的一切都包含在默认安装的基础系统中。


移植的软件位于/USR/LOCAL 下

一旦你在你拥有的任何硬件上安装了这个东西,记住你可以运行从相当古老的工具包到现代硬件的 14 个平台,你可能会转向从包安装移植的第三方软件,使用pkg_add(8 )它会从你安装的同一个镜像或看起来是最本地的镜像中获取的任何内容。
在更流行的平台上提供的软件比更多平台上的软件更多。
对于 OpenBSD 6.9 版本,最主流的平台 amd64 带有 11310 个预构建和可安装包,而 mips64 只有 8182 个,而 mips64el 平台被标记为(仍在构建)。
安装预先构建的包几乎总是更方便,并且在大多数情况下是推荐的,但是如果您出于某种原因或其他原因想要从端口树的 cvs 检出构建自己的包,您可以自由地这样做,代价是用你自己的时间看这个过程。
无论您选择走哪条路线,您都会看到安装软件包不会在基本系统使用的目录中放置任何文件,除了一些将其配置文件放在/etc下的子目录中并添加它们组合的启动/关闭脚本到/etc/rc.d 中的集合。其他任何内容都在/usr/local 下,您可以看到为什么默认情况下安装程序会将该文件系统设置在一个单独且相当宽敞的分区上。

注意:如果您更喜欢幻灯片而不是全文阅读,这里查看幻灯片。https://home.nuug.no/~peter/openbsd_needtoknow/#30


安装程序总是很好,变得更好

每个 IT 人员都需要了解的有关 OpenBSD 的信息

二十年前,使用 OpenBSD 的机器还是 80386/33MHz 和 8MB RAM,100MB IDE 硬盘

最初的安装相当简单,能想到的一切都有一个可读的手册页。所以我所知道的第一个让 OpenBSD 世界变得更美好的改变是决定强制执行“没有文档不提交”规则,它在项目生命周期的早期就出现了,大概与 OpenBSD 开发人员差不多通过匿名 CVS实时查看开发。几乎可以实时看到正在发生的事情。

值得一提的是,安装程序一直以非图形、纯文本着称。安装程序保持纯文本的原因是,这是一个主要优势,它使开发人员和用户能够使用相同的可移植、熟悉和紧凑的代码处理运行 OpenBSD的相当多样化的硬件平台集合。

安装程序始终是可脚本化和可扩展的,多年来,安装程序添加了自动、可重复和可脚本化的安装(称为autoinstall(8),出现在 2014年的OpenBSD 5.5中)和sysupgrade(8)扩展(首次在OpenBSD 6.6 中发现) 2019)。


现在适合您的笔记本电脑

快进大约二十多年,OpenBSD 开发人员和他们的大部分用户群实际上在他们的笔记本电脑上运行 OpenBSD。没有 OpenBSD 笔记本电脑的生活是不完整的。

每个 IT 人员都需要了解的有关 OpenBSD 的信息


为什么要使用 OPENBSD?IPSEC

正如之前提到的,OpenBSD 是第一个在其基本系统中附带 IPSEC(用于启用加密网络流量的工具)的免费系统。第一个带有 IPSEC 的 OpenBSD 版本是 OpenBSD 2.1,它于 1997 年发布。

早在 2001 年, Linux 和iptables 方面的经验让我渴望切换到更明智的防火墙。*

在接下来的几个月里,取代 IPF 的热潮明显,事实证明,取代之前数据包过滤器的新代码性能更好。OpenBSD 数据包过滤器,简称 PF, 于 2001 年 12 月在OpenBSD 3.0中诞生并首次亮相。

用 OpenBSD 网关替换现有的 Linux 网关。惊喜地发现它们不仅表现良好,而且还附带了完整且有据可查的工具。

每个 IT 人员都需要了解的有关 OpenBSD 的信息



SSH,开放更好

PF 是从头开始编写的,用于替换在开源环境中使用是非法的子系统。但这并不是 OpenBSD 项目第一次这样做

几年前,很明显,安全shell系统的开发人员 具有商业野心,并且该软件的许可证已朝着专有方向更改。在对如何解决这种情况进行了一些考虑之后,OpenBSD 开发人员开始寻找以可接受的许可证发布的早期代码版本。然后他们从他们发现仍然有免费许可证的最后一个版本中分叉出他们的版本。接下来是重新引入旧代码中缺失的功能的密集时期。

结果于 1999 年在OpenBSD 2.6中作为 OpenSSH 引入。在接下来的几年中,OpenSSH 发展成为一个便携式版本,开始迅速抢占市场份额。我最后一次听说 OpenSSH 的市场份额高达 90%。

有了最先进的安全 shell 子系统和各种有用的功能,终于到了在 OpenBSD 上结束未加密的 shell 登录会话的时候了。OpenBSD 的telnetd在OpenBSD 3.8中及时被移到了 CVS,OpenBSD 3.8于 2005 年 11 月发布。

关于 OpenSSH 的另一个值得注意的事情是,它是第一个正确分离权限的守护进程,这是一种模型实践,它 在 2002 年 3 月在OpenBSD 3.2中大修的 OpenSSH 中首次亮相。从那时起,所有守护进程都实施了特权分离这样做是有意义的。


LIBRESSL,伟大的反混淆

一般人们认为创建LibreSSL的原因是Heartbleed漏洞,

事实上,LibreSSL 项目是在 Heartbleed 成为普遍认识之前的几周开始的。LibreSSL 是一组 OpenBSD 开发人员采用现有 OpenSSL 代码并开始修复它的结果。

这一次不是许可证的问题。至少 10 年来,一直听到 OpenBSD 开发人员抱怨 OpenSSL 代码质量就是那么糟糕。

接下来发生的事情是,一群顽固的 OpenBSD 开发人员抓住了 OpenSSL 代码并同时开始了两项活动。一种是在 OpenSSL 请求跟踪器中查找尚未解决的错误。另一个是将 OpenSSL 代码重新格式化为类似于 OpenBSD 风格的可读和可维护的 C。

随着代码的可读性更强,发现它做了什么变得更容易了。除了一些明显的令人眼缭乱的错误之外,LibreSSL 开发人员还发现了许多奇怪的问题,包括但不限于

  • 即使代码变得无关紧要或过时,代码也从未被删除
  • OpenSSL 没有使用系统内存分配系统,而是选择了自己的从未真正释放内存的系统,而是使用 LIFO 回收,并且可以轻松地将私人信息放入日志中
  • 全部用“OpenSSL C”编写

自 2014 年OpenBSD 5.6发布以来,LibreSSL 一直是 OpenBSD 中的默认 TLS 库。LibreSSL 已基于 -portable 变体移植到其他地方。

本站文章部分来源于网友投稿或采集自互联网,如有侵权,请联系,本站将及时删除。 另也欢迎广大网友投稿发文!

相关文章:

发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。