这是 OpenBSD 项目开发或维护的软件和理念列表,按大致引入顺序排序,部分在研究论文中有详细解释:
概念方面:
- ipsec(4):1997 年 2 月引入,OpenBSD 是首个提供 IPSec 栈的免费操作系统。
- inet6(4):1999 年 1 月 6 日开始首次完整集成和采用 IPv6,1999 年 6 月 6 日在首次 OpenBSD 黑客马拉松期间几乎完全可运行,OpenBSD 2.7 版本。
- 特权分离:2002 年 3 月由 Niels Provos 和 Markus Friedl 在 OpenSSH 中实现,随 OpenBSD 3.2 发布,现已用于许多 OpenBSD 程序。
- 特权撤销:与特权分离工作相关,一些程序在持有棘手资源时会放弃特权,如原始套接字等。
- 堆栈保护器:2001 年由 Hiroaki Etoh 开发为“propolice”,经 Federico G. Schwindt 等人整合并为其他硬件平台实现,OpenBSD 3.3 首次在系统范围内默认启用。
- W^X:OpenBSD 3.3 中首次用于 sparc 等架构,OpenBSD 6.0 起严格默认执行。
- GOT 和 PLT 保护:作为 W^X 工作的一部分在 OpenBSD 3.3 中由 Dale Rahn 和 Theo de Raadt 完成,OpenBSD 3.4 扩展到.init/.fini 部分。
- ASLR:OpenBSD 3.4 首次在默认情况下提供。
- gcc-local(1):2003 年 6 月 26 日由 Anil Madhavapeddy 开始,2003 年由 Nicholas Marriott 移植到 GCC 4,随 OpenBSD 3.4 首次发布。
- malloc(3)随机化:Thierry Deval 实现,Ted Unangst 增加守卫页和随机化释放,Otto Moerbeek 为 OpenBSD 4.4 重新实现。
- 位置独立可执行文件(PIE):OpenBSD 5.3 首次在七个硬件平台上全局默认启用,2008 年 11 月由 Kurt Miller 实现,2012 年 8 月由 Pascal Stumpf 启用。
- 随机数据内存:OpenBSD 5.3 由 Matthew Dempsky 实现。
- 每个共享对象的堆栈保护器:OpenBSD 5.3 由 Matthew Dempsky 利用随机数据内存功能实现。
- 静态 PIE:OpenBSD 5.7 由 Kurt Miller 和 Mark Kettenis 实现。
- SROP 缓解:2014 年由 Eric Bosman 和 Herbert Bos 研究,2016 年 5 月由 Theo de Raadt 实现,OpenBSD 6.0 起默认启用。
- 库顺序随机化:2016 年 5 月由 Theo de Raadt 和 Robert Peichaer 实现,OpenBSD 6.0 和 6.2 起默认启用。
- 内核辅助的多线程程序中的延迟绑定以实现 W^X 安全:2015 年 7 月由 Philip Guenther 为 OpenBSD 5.9 实现。
- 收紧内存中的进程布局:通过结合 GNU 项目的 RELRO 设计、OpenBSD 3.3 的原始 ASLR 工作和 OpenBSD 5.9 的严格延迟绑定工作,应用于所有程序和库,2016 年 8 月由 Philip Guenther 为 OpenBSD 6.1 实现。
- 在特权分离程序中使用 fork+exec:多位开发者实现,如 2004 年的 Damien Miller 等。
- trapsleds:2017 年 6 月由 Todd Mortimer 和 Theo de Raadt 实现,用于减少潜在的 ROP 攻击方法的利用。
- 内核启动时的重新链接:2017 年 6 月由 Theo de Raadt 实现,每次重启前在随机顺序下重新链接内核的.o 文件。
- 重新排列 clang 的 i386/amd64 寄存器分配器顺序:2017 年 11 月 20 日由 Todd Mortimer 实现。
- 重新编码 i386/amd64 指令序列以避免嵌入的多态 RET 指令:2018 年 4 月 28 日起由 Todd Mortimer 增强。
- 添加 MAP_STACK 到 mmap(2):2018 年 4 月 12 日由 Theo de Raadt 实现,用于机会性验证堆栈寄存器指向堆栈内存。
- RETGUARD:2018 年起在不同架构上实现,如 amd64 和 arm64 等,用于一致性检查堆栈上的返回地址。
- 添加 MAP_CONCEAL 到 mmap(2):2019 年 2 月 2 日由 Theo de Raadt 等人实现,禁止将内存页面写入核心转储。
- 系统调用只能从选定的代码区域执行:2019 年 11 月 28 日由 Theo de Raadt 实现,后因更优工作而移除相关机制。
- 使地址空间区域的权限不可变:2022 年 12 月 4 日由 Theo de Raadt 实现,大部分程序静态地址空间自动不可变。
- sshd 启动时的随机重新链接:2023 年 1 月 18 日由 Theo de Raadt 实现。
- 一些架构的非可读代码(xonly):2022 年 12 月起在多个架构上实现,防止用户空间和内核读取特定内存。
- 在缺乏 xonly 硬件强制的架构上防止系统调用读取特定内存:2023 年 1 月起在一些架构上实现。
- ld.so 和 crt0 注册 libc syscall 存根位置:2023 年 2 月由 Theo de Raadt 实现,后被 pinsyscalls(2)取代。
- 强制间接分支目标(BTI 和 IBT):除非请求不强制,否则默认启用。
- 内核和 ld.so 注册系统调用的精确入口位置:2024 年 1 月由 Theo de Raadt 实现,使 pininsyscall(SYS_execve)接口冗余。
- -fret-clean 扩展:仅在 amd64 上使用,返回函数时清理返回值堆栈。
函数方面:
- issetugid(2):1996 年 8 月 25 日由 Theo de Raadt 实现,OpenBSD 2.0 版本。
- arc4random(3):1996 年 12 月 28 日由 David Mazieres 实现,OpenBSD 2.1 版本。
- bcrypt(3):1997 年 2 月 13 日由 Niels Provos 和 David Mazieres 实现,随 OpenBSD 2.1 首次发布。
- strlcpy(3)、strlcat(3):1998 年 7 月 1 日由 Todd Miller 和 Theo de Raadt 实现,OpenBSD 2.4 版本。
- strtonum(3):2004 年 5 月 3 日由 Ted Unangst 等人实现,OpenBSD 3.6 版本。
- imsg:2010 年 5 月 26 日由 Henning Brauer 编写,在 libutil 中,多个守护进程使用。
- timingsafe_bcmp(3):2010 年 7 月 13 日由 Damien Miller 实现,OpenBSD 4.9 版本。
- explicit_bzero(3):2014 年 1 月 22 日由 Ted Unangst 和 Matthew Dempsky 实现,OpenBSD 5.5 版本。
- ohash:2014 年 5 月 12 日由 Marc Espie 编写和维护,在 libutil 中,用于 make(1)和 m4(1)等之前。
- asr:2012 年 4 月 14 日引入,2014 年 3 月 26 日激活,OpenBSD 5.6 版本。
- reallocarray(3):2014 年 4 月 22 日由 Theo de Raadt 和 Ted Unangst 实现,OpenBSD 5.6 版本。
- getentropy(2):2014 年 6 月 13 日由 Matthew Dempsky 和 Theo de Raadt 实现,OpenBSD 5.6 版本。
- sendsyslog(2):2014 年 7 月 10 日由 Theo de Raadt 实现,OpenBSD 5.6 版本。
- timingsafe_memcmp(3):2014 年 7 月 13 日由 Matthew Dempsky 实现,OpenBSD 5.6 版本。
- pledge(2):2015 年 7 月 19 日由 Theo de Raadt 实现,OpenBSD 5.9 版本。
- getpwnam_shadow(3)、getpwuid_shadow(3):2015 年 11 月 18 日由 Ted Unangst 和 Theo de Raadt 实现,OpenBSD 5.9 版本。
- recallocarray(3):2017 年 3 月 6 日由 Otto Moerbeek 等人实现,OpenBSD 6.1 版本。
- freezero(3):2017 年 4 月 10 日由 Otto Moerbeek 实现,OpenBSD 6.2 版本。
- unveil(2):2018 年 7 月 13 日由 Theo de Raadt 和 Bob Beck 实现,OpenBSD 6.4 版本。
- malloc_conceal(3)、calloc_conceal(3):2019 年 5 月 10 日由 Otto Moerbeek 实现,OpenBSD 6.5 版本。
- ober:2006/07 年开始编写,2019 年 5 月 11 日移至 libutil,OpenBSD 6.6 版本。
程序和子系统方面:
- ypbind(8)等和 libc 支持:1993 年由 Theo de Raadt 开始,NetBSD 0.9 首次发布。
- ypserv(8):1994 年由 Mats O. Jansson 开始,OpenBSD 2.0 首次发布。
- mopd(8):1993 年由 Mats O. Jansson 开始,OpenBSD 2.0 首次发布。
- AnonCVS:1995 年由 Chuck Cranor 和 Theo de Raadt 设计和实现。
- aucat(1):1997 年由 Kenneth Stailey 开始,OpenBSD 2.1 首次发布,现由 Alexandre Ratchov 维护。
- OpenSSH 相关程序:1999 年由 Aaron Campbell 等人开始,OpenBSD 2.6 首次发布,现由多位开发者维护。
- mg(1):1986 年 11 月由 Dave Conroy 开始,OpenBSD 2.7 首次发布,现由 Mark Lumsden 维护。
- m4(1):由 Ozan Yigit 和 Richard A. O'Keefe 为 4.3BSD-Reno 实现,1999 年起由 Marc Espie 扩展和维护。
- pf 相关程序:2001 年由 Daniel Hartmeier 开始,OpenBSD 3.0 首次发布,现由 Henning Brauer 维护。
- systrace(4)、systrace(1):2002 年由 Niels Provos 开始,OpenBSD 3.2 首次发布,OpenBSD 5.9 后删除。
- spamd(8):2002 年由 Bob Beck 开始,OpenBSD 3.3 首次发布。
- dc(1)、bc(1)、sensorsd(8):分别由 Otto Moerbeek、Otto Moerbeek、Henning Brauer 开始,OpenBSD 3.5 首次发布,后有不同维护者。
- pkg_add(1):2003 年由 Marc Espie 开始,OpenBSD 3.5 首次发布。
- carp(4)等:2003 年由多人开始,OpenBSD 3.5 首次发布,现由不同开发者维护。
- OpenBGPD 相关程序:2003 年由 Henning Brauer 和 Claudio Jeker 开始,OpenBSD 3.5 首次发布。
- dhclient(8)、dhcpd(8):分别由 Ted Lemon 等人开始,OpenBSD 3.5 首次发布,现由 Kenneth Westerback 维护。
- hotplugd(8):2004 年由 Alexander Yurchenko 开始,OpenBSD 3.6 首次发布。
- OpenNTPD 相关程序:2004 年由 Henning Brauer 开始,OpenBSD 3.6 首次发布,便携式版本由 Brent Cook 维护。
- dpb(1):2004 年由 Nikolay Sturm 开始,OpenBSD 3.6 首次发布,后由 Marc Espie 重写和维护。
- ospfd(8)、ospfctl(8):2005 年由 Esben Norby 和 Claudio Jeker 开始,OpenBSD 3.7 首次发布。
- ifstated(8)、bioctl(8):分别由 Marco Pfatschbacher 等人开始,OpenBSD 3.8 首次发布。
- hostapd(8):2005 年由 Reyk Flöter 开始,OpenBSD 3.8 首次发布。
- watchdogd(8):2005 年由 Marc Balmer 开始,OpenBSD 3.8 首次发布。
- sdiff(1):2005 年由 Ray Lai 开始,OpenBSD 3.9 首次发布。
- dvmrpd(8)、dvmrpctl(8):2006 年由 Esben Norby 开始,OpenBSD 4.0 首次发布。
- ripd(8)、ripctl(8):2006 年由 Michele Marchetto 开始,OpenBSD 4.1 首次发布。
- pkg-config(1):2006 年由 Chris Kuethe 和 Marc Espie 开始,OpenBSD 4.1 首次发布,现由 Jasper Lievisse Adriaanse 维护。
- relayd(8)、relayctl(8):2006 年由 Pierre-Yves Ritschard 和 Reyk Flöter 开始,OpenBSD 4.1 首次发布,现由 Sebastian Benoit 维护。
- cwm(1):2004 年由 Marius Aamodt Eriksen 开始,OpenBSD 4.2 首次发布,现由不同开发者维护。
- ospf6d(8)、ospf6ctl(8):2007 年由 Esben Norby 和 Claudio Jeker 开始,OpenBSD 4.2 首次发布。
- libtool(1):2007 年由 Steven Mestdagh 和 Marc Espie 开始,OpenBSD 4.3 首次发布,现由多人维护。
- snmpd(8):2007 年由 Reyk Flöter 开始,OpenBSD 4.3 首次发布,现由 Martijn van Duren 维护。
- sysmerge(8):2008 年由 Antoine Jacoutot 开始,OpenBSD 4.4 首次发布。
- ypldap(8):2008 年由 Pierre-Yves Ritschard 开始,OpenBSD 4.4 首次发布。
- OpenSMTPD 相关程序:2008 年由 Gilles Chehade 开始,OpenBSD 4.6 首次发布,现由多人维护。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。