Decentralization? We're still early!

OpenBSD:极致纯粹的基石性 Linux 操作系统

  • OpenBSD:极致纯粹的基石性 Linux 操作系统

    發布人 Brave 2026-02-04 12:50

    在追求绝对安全与代码整洁的极客世界里,如果说 Linux 是一座繁忙且复杂的都市,那么 OpenBSD 就是一座守卫严密、一尘不染的钢铁要塞。


    什么是 OpenBSD

    OpenBSD 是一款基于 Berkeley Software Distribution (BSD) 的类 Unix 操作系统。它由 Theo de Raadt 于 1995 年创立,至今已走过近三十年的发展历程,一直秉持着极其严苛的开发标准。它不仅仅是一个系统,更是安全领域的"黄金标准",其口号"在默认安装下,超过二十年仅出现过两个远程漏洞"足以彰显其骄傲。

    🧬 起源与创始人

    Theo de Raadt 于 1968 年 5 月 19 日出生于南非比勒陀利亚,是开源软件社区最具影响力的人物之一。1977 年,为躲避南非的强制兵役制度,他随家人移民至加拿大卡尔加里。在童年时期,他用一台 Commodore VIC-20 开启了软件开发之旅。

    de Raadt 最初是 NetBSD 的核心创始人之一——正是他建议使用"NetBSD"这个名字,并于 1993 年 3 月建立了第一个 NetBSD 源代码仓库。然而,1994 年 12 月,由于与其他团队成员在沟通方式上的分歧,他被迫离开 NetBSD 核心团队

    1995 年 10 月,de Raadt 从 NetBSD 1.0 分叉创建了 OpenBSD。首个版本 OpenBSD 1.2 于 1996 年 7 月发布,随后在同年 10 月推出了 OpenBSD 2.0。自那以后,项目一直保持着每六个月发布一个新版本的稳定节奏

    💡 历史转折点:OpenBSD 创建后不久,de Raadt 被当地安全软件公司 Secure Networks(后被 McAfee 收购)联系。该公司正在开发名为 Ballista 的网络安全审计工具。这次合作直接促使安全性成为 OpenBSD 项目的核心定位

    📊 最新版本信息

    版本发布日期里程碑意义
    OpenBSD 7.82025 年 10 月 22 日第 59 个发布版本,增强内核性能与安全特性
    OpenBSD 7.72025 年 4 月 28 日第 58 个发布版本,优化 SMP 支持与网络栈
    OpenBSD 7.62024 年 10 月第 57 个发布版本

    核心特质:安全至上

    OpenBSD 并不追求最快或功能最全,它追求的是正确性安全性

    🔒 默认安全 (Secure by Default)

    安装后的初始状态下,绝大多数服务都是关闭的。这种"最小化攻击面"的设计理念,要求用户仅在需要时才开启特定功能。与其他操作系统"开箱即用"的理念截然相反,OpenBSD 选择了"默认关闭、按需开启"的保守策略

    📌 设计哲学:大多数安全漏洞都源于运行中的服务。不运行服务,自然就没有可被攻击的入口。

    🔍 代码审计 (Proactive Auditing)

    开发团队对源代码进行极其细致的逐行审查,力求在漏洞被利用前就将其彻底根除。这种主动式安全审计不同于被动式的漏洞修补——OpenBSD 团队不等待安全研究人员发现问题,而是主动寻找并消灭潜在威胁

    审计工作的范围包括:

    • 📋 检查缓冲区溢出漏洞
    • 📋 审查内存管理问题
    • 📋 验证输入数据的边界检查
    • 📋 消除 C 语言标准库中的危险函数(如用 strlcpy 替代 strcpy,用 strlcat 替代 strcat

    🛡️ 领先的安全技术

    OpenBSD 是众多现代安全防护技术的发源地或早期实践者:

    ⚡ ASLR(地址空间布局随机化)

    2003 年,OpenBSD 成为第一个默认启用强 ASLR 的主流操作系统。通过随机化程序在内存中的加载地址,使攻击者难以预测关键代码和数据的位置。

    • 2001 年 8 月:Artur Grabowski 实现了栈地址随机偏移
    • 2002 年 2 月:该功能默认启用
    • 2008 年:完成对 PIE(位置无关可执行文件)的支持
    • 2013 年 OpenBSD 5.3:成为首个在多硬件平台上默认启用 PIE 的主流操作系统
    • OpenBSD 5.7:默认激活位置无关静态二进制文件(Static-PIE)

    ⚡ W^X(写或执行)

    OpenBSD 3.4 引入的内存管理机制:确保内存区域要么可写、要么可执行,但永远不能同时拥有两种权限。这为防御缓冲区溢出攻击提供了强大的保护层。

    技术亮点:

    • 即使在缺乏硬件 NX 位支持的 i386 平台上也能实现
    • OpenBSD 5.9(2015 年):通过 kbind(2) 系统调用使延迟绑定在多线程程序中也能保持 W^X 安全
    • GOT(全局偏移表)和 PLT(过程链接表)区域在 ld.so 外部被设为只读

    ⚡ pledge() 与 unveil() 系统调用

    这是 OpenBSD 独创的两个革命性安全机制,被认为是桌面安全领域超越甚至移动操作系统的创新

    📍 pledge()(承诺机制)

    允许程序声明自己将要执行的操作类型,违反承诺的进程会被立即终止。

    // 示例:一个简单的网络客户端只需要以下权限
    pledge("stdio inet dns", NULL);

    核心特性:

    • 🔹 功能被划分为"承诺"(promises),如:stdiorpathwpathinetdns
    • 🔹 承诺只能逐步收紧,永远无法放宽
    • 🔹 违规进程收到不可捕获的 SIGABRT 信号并生成核心转储
    • 🔹 与传统沙箱不同,pledge 工作在行为层面而非系统调用层面

    📍 unveil()(揭示机制)

    限制进程对文件系统的访问范围。

    // 示例:passwd 程序只需要访问这些路径
    unveil("/etc/passwd", "rw");
    unveil("/etc/shadow", "rw");
    unveil(NULL, NULL);  // 锁定,不能再添加路径

    核心特性:

    • 🔹 进程初始可访问整个文件系统
    • 🔹 第一次调用 unveil 后立即被限制在指定子集内
    • 🔹 最后一次调用 unveil(NULL, NULL) 后永久锁定
    • 🔹 被入侵的进程无法窃取其读取权限之外的数据

    🎯 为什么这很重要? Linux 从未真正拥有普通开发者能够理解的安全层。pledge 让安全变得易于理解和实现。目前 OpenBSD 的大部分基础用户态程序都已支持 pledge,包括 Chromium 和 Firefox 等打包软件SerenityOS 已成为第二个采用 pledge 和 unveil 机制的操作系统

    ⚡ KARL(内核地址随机化链接)

    2017 年由 Theo de Raadt 宣布的创新技术:每次安装、升级和启动时都会生成一个地址随机化的全新内核。

    KARL vs KASLR 的本质区别:

    特性KARL (OpenBSD)KASLR (Linux)
    工作原理每次启动链接生成不同的内核二进制将相同的二进制加载到随机位置
    随机化粒度每个目标文件(.o)单独随机化仅内核整体基地址随机化
    信息泄露影响泄露一个地址仅暴露单个目标文件偏移泄露一个地址可能推断整个内核布局
    离线分析防护✅ 每次启动不同,无法预分析❌ 可进行离线分析

    技术实现:

    • 基础系统包含编译目录中 .o 文件的"链接套件"
    • 新的随机内核由 rc 脚本在后台自动链接
    • 在高速机器上链接过程不到一秒
    • 新链接的内核对普通用户不可读,防止攻击者读取后等待重启

    ⚡ 其他安全创新

    OpenBSD 的安全缓解措施全景:

    技术功能描述
    StackProtector栈溢出保护,检测栈缓冲区溢出
    RETGUARD返回地址保护,防止 ROP 攻击
    fork+exec绝不复用地址空间
    Kernel W^X内核级写或执行保护
    privsep/privdrop权限分离与权限丢弃
    Library-relinking库重链接随机化
    random KERNBASE内核基地址随机化
    malloc 随机化使用 mmap 返回随机内存地址,小块分配也随机化
    immutable 内存大部分程序静态地址空间自动设为不可变

    📜 自由与纯粹

    坚持使用最宽松的 ISC 许可证,拒绝任何专有代码或带有法律陷阱的组件。这种对代码纯净性的执着追求,使得 OpenBSD 的代码可以被任何项目自由使用,包括商业闭源软件


    "仅两个远程漏洞"的传奇与争议

    OpenBSD 著名的口号经历了几次演变:

    📅 漏洞时间线

    🔴 第一个远程漏洞(2002 年 6 月)

    Internet Security Systems 的 Mark Dowd 披露了 OpenSSH 挑战-响应认证代码中的漏洞。这个漏洞允许攻击者远程获取 root 权限,不仅对 OpenBSD 影响严重,也波及了当时已广泛使用 OpenSSH 的众多其他操作系统。

    口号随即更新为:"One remote hole in the default install, in nearly 6 years!"

    🔴 第二个远程漏洞(2007 年 3 月 13 日)

    Core Security Technologies 的 Alfredo Ortega 和 Gerardo Richarte 发现 IPv6 代码中 m_dup1() 函数导致 mbuf 结构溢出。

    口号再次更新:"Only two remote holes in the default install, in a heck of a long time!"

    ⚖️ 关于这一声明的讨论

    支持方观点:

    • 超过二十年仅两个远程漏洞的记录在操作系统领域几乎无人能及
    • 体现了代码审计和安全优先设计的有效性

    批评方观点:

    • 默认安装运行的服务极少,许多使用场景需要额外服务
    • OpenBSD 团队对"安全漏洞"的定义较为狭窄,仅限于允许远程任意代码执行的漏洞
    • 如果采用更广泛的定义(包括 DoS 攻击、本地提权等),漏洞数量会更多

    💬 客观评价:无论如何定义,二十多年仅两个默认安装下的远程代码执行漏洞,在整个操作系统历史上都是极其罕见的成就。


    传奇的衍生产品

    你可能从未直接用过 OpenBSD,但你一定用过它的衍生工具。这些项目的影响力远远超出了 OpenBSD 本身,已成为全球互联网基础设施的核心组件

    🔐 OpenSSH

    几乎全球所有服务器都在使用的远程安全连接工具,是 SSH 协议的事实标准实现。

    📈 最新发展(2025 年):

    版本发布日期重要更新
    OpenSSH 10.22025 年 10 月 10 日当前最新稳定版
    OpenSSH 10.12025 年 10 月初修复 CVE-2025-61984/61985
    OpenSSH 10.02025 年 4 月 9 日里程碑版本,重大协议变更

    🔑 OpenSSH 10.0 关键更新:

    • 后量子密码学支持:默认使用混合后量子算法 mlkem768x25519-sha256 进行密钥协商,为抵御量子计算机攻击做好准备
    • 完全移除 DSA 算法:DSA 因 1024 位密钥限制和固有缺陷,已被彻底移除(2015 年起已默认禁用)
    • sshd 用户认证分离:进一步增强系统可靠性

    ⚠️ 2025 年修复的安全漏洞:

    CVE 编号影响版本问题描述
    CVE-2025-264656.8p1 - 9.9p1当启用 VerifyHostKeyDNS 时,中间人可冒充任意服务器
    CVE-2025-264669.5p1 - 9.9p1SSH2_MSG_PING 数据包导致认证前 DoS
    CVE-2025-61984< 10.1用户名中的控制字符可能导致代码执行
    CVE-2025-61985< 10.1ssh:// URI 中的空字符可能导致代码执行

    🔏 LibreSSL

    2014 年为解决 OpenSSL Heartbleed 等频发漏洞问题而创建的分叉项目,目标是现代化代码库、提升安全性并应用最佳开发实践。

    📈 最新版本(2025 年):

    版本发布日期状态
    LibreSSL 4.2.12025 年 10 月 30 日当前最新稳定版
    LibreSSL 4.2.02025 年 10 月 14 日随 OpenBSD 7.8 发布
    LibreSSL 4.1.02025 年 4 月性能优化版本

    🚀 LibreSSL 4.1/4.2 主要改进:

    • SHA 性能大幅提升:全新的 SHA-1、SHA-256、SHA-512 汇编实现
      • x86_64:利用 SHA-NI 指令集(现代 AMD/Intel CPU)
      • aarch64:利用 ARM 加密扩展(CE)
    • 后量子密码学准备:从 BoringSSL 导入 ML-KEM 768 和 1024 算法
    • 安全修复:修复 CMS 封装数据的越界读写和内存泄漏
    • RSA 增强:确保私钥中 p 和 q 满足 NIST SP 800-56B Rev 2 规定的最小距离

    🛡️ PF (Packet Filter)

    被公认为世界上最强大、最优雅的防火墙工具之一。最初是为替代因许可证争议而被移除的 IPFilter 开发的,于 2001 年 12 月随 OpenBSD 3.0 首次发布

    📚 核心功能特性:

    功能类别具体能力
    📌 状态过滤keep state(TCP/UDP/ICMP)、modulate state(生成强 ISN)、synproxy state(代理入站 TCP 连接防 SYN 洪水)
    📌 流量规范化验证数据包完整性、处理分片、清理歧义内容
    📌 带宽控制流量整形、优先级队列
    📌 NAT网络地址转换
    📌 日志记录通过 pflog 伪网络接口提供可配置的规则级日志

    🔄 2025 年新特性(FreeBSD 同步更新):

    • pfctl 重置功能:管理限制、超时和调试级别
    • 递归清除规则:包括 anchor 中的规则
    • 数据包速率匹配:如限制来自特定主机的 ICMP echo 为每秒 10 个
    • 有状态 scrubbing:如 pass … scrub ( max-mss 1300 )

    📖 预告:《The Book of PF》第四版即将出版,将涵盖 PF 生态系统的最新发展。


    OpenBSD 对全球操作系统的深远影响

    OpenBSD 的代码和理念已经深刻影响了世界上最流行的操作系统:

    🍎 Apple macOS / iOS

    • PF 防火墙:从 macOS 10.7 (Lion) 开始,PF 取代了被弃用的 IPFW
    • macOS 10.10 完全移除 IPFW,PF 成为唯一的内核级防火墙

    🪟 Microsoft Windows

    • Windows 10/11 内置 OpenSSH 客户端和服务器
    • 使用 LibreSSL 作为加密库

    🤖 Google Android

    • Bionic C 标准库:基于 OpenBSD 代码
    • 安全函数如 strlcpystrlcat 来自 OpenBSD

    🛠️ LLVM/Clang

    • 正则表达式库:使用 OpenBSD 实现

    🌐 广泛应用原因

    由于 OpenBSD 偏好的 BSD 许可证允许二进制再分发而无需公开源代码,其组件被大量重用于专有和企业软件项目中。这正是"自由与纯粹"理念的商业价值体现


    适用场景

    🏰 防火墙与网关

    得益于 PF 的强大功能,OpenBSD 是构建企业级安全网关的首选。其最大的商业用例仍然是网络安全领域,包括 SSH 网关、防火墙和弹性服务器解决方案

    典型部署架构:

    互联网 ─── [OpenBSD 防火墙/PF] ─── 内网
                      │
                DMZ 服务器

    🏢 关键任务服务器

    处理敏感邮件或核心业务的后端基础设施。对于金融、医疗、政府等对安全性要求极高的行业,OpenBSD 提供了无与伦比的可靠性保证

    📖 安全研究与学习

    其代码库被视为教学级别的范本,是学习操作系统底层和安全加固的教科书。2025 年的 EuroBSDCon 和 BSDCan 会议都设有 OpenBSD PF 工具集的网络管理专题培训

    学习 OpenBSD 的收益:

    • 🎓 理解安全优先的系统设计理念
    • 🎓 学习如何编写安全的系统级代码
    • 🎓 掌握现代安全缓解技术的原理
    • 🎓 获得顶级操作系统文档的阅读体验

    🎯 极简主义爱好者

    如果你追求一个完全透明、无杂质的纯净系统,OpenBSD 将满足你对"知道系统里每一行代码在做什么"的极致追求。


    如何开始探索?

    📚 文档资源

    OpenBSD 官方手册页 (Man Pages) 是公认的开源界最详尽、最准确的文档。与许多开源项目糟糕的文档形成鲜明对比,OpenBSD 将文档质量视为与代码质量同等重要的工程标准

    🔧 实践建议

    初学者路线:

    阶段建议活动
    1️⃣ 入门在虚拟机中安装 OpenBSD,体验安装过程
    2️⃣ 基础阅读 afterboot(8) 手册页,了解安装后配置
    3️⃣ 网络配置 PF 防火墙规则,理解状态过滤原理
    4️⃣ 安全研究 pledge/unveil 在基础系统程序中的应用
    5️⃣ 深入阅读源代码,参与邮件列表讨论

    ⚠️ 注意事项

    OpenBSD 与 Linux 的主要差异:

    • 🔹 包管理系统不同(pkg_add 而非 apt/yum)
    • 🔹 硬件驱动支持相对有限(优先保证代码质量和安全性)
    • 🔹 默认配置更保守,需要手动启用服务
    • 🔹 系统升级方式不同(sysupgrade 工具)
    • 🔹 社区文化直接坦率,强调技术准确性

    小结

    OpenBSD 代表了一种纯粹的工程哲学:正确性优先于便利性,安全性优先于功能性,代码质量优先于开发速度。它可能不是日常桌面使用的最佳选择,但作为学习安全系统设计的范本、构建关键基础设施的基石,以及理解"软件应该如何编写"的教科书,OpenBSD 无可替代。

    🐡 OpenBSD 的吉祥物是一只河鲀 (Puffy)——这种鱼在受到威胁时会膨胀成一个带刺的球体,恰如 OpenBSD 面对安全威胁时的防御姿态:平时安静低调,威胁来临时浑身是刺、无懈可击。

    Brave 回复 2 days, 13 hours ago 1 成員 · 0 回复
  • 0 回复

歡迎留言回复交流。

Log in to reply.

讨论開始
00 回复 2018 年 6 月
現在