Những đổi mới của OpenBSD
(openbsd.org)Dự án OpenBSD đang phát triển và duy trì nhiều phần mềm cũng như ý tưởng khác nhau. Dưới đây là bản tổng hợp theo thứ tự ra đời tương đối
Khái niệm (Concepts)
- IPSec(4): OpenBSD là hệ điều hành Free đầu tiên cung cấp ngăn xếp IPSec. Được đưa vào ngày 20 tháng 2 năm 1997
- INET6(4): Tích hợp hoàn chỉnh IPv6 trong OpenBSD 2.7. Bắt đầu phát triển từ ngày 6 tháng 1 năm 1999, và đến hackathon đầu tiên vào ngày 6 tháng 6 cùng năm thì đã đạt trạng thái gần như hoạt động hoàn chỉnh
- Tách đặc quyền (Privilege Separation): Được triển khai lần đầu trong OpenSSH vào tháng 3 năm 2002. Sau đó được áp dụng cho nhiều chương trình như bgpd(8), dhclient(8), smtpd(8), tmux(1)
- Thu hồi đặc quyền (Privilege Revocation): Áp dụng cách giảm đặc quyền trong khi vẫn giữ các tài nguyên cụ thể. Ví dụ: ping(8), traceroute(8)
- Trình bảo vệ ngăn xếp (Stack Protector): Dựa trên "propolice" được phát triển từ năm 2001. Được bật mặc định trong OpenBSD 3.3
- W^X (Write XOR Execute): Được áp dụng lần đầu trong OpenBSD 3.3. Từ OpenBSD 6.0 được cưỡng chế nghiêm ngặt theo mặc định
- Bảo vệ GOT và PLT: Trong OpenBSD 3.3,
ld.sođược cải tiến để bảo vệ GOT (Global Offset Table) và PLT (Procedure Linkage Table) - ASLR (Address Space Layout Randomization): OpenBSD 3.4 là bản đầu tiên bật mặc định
- Phân tích và kiểm tra gcc-local(1): Được giới thiệu lần đầu trong OpenBSD 3.4
- Tăng cường bảo mật cho malloc(3): Áp dụng ngẫu nhiên hóa và giải phóng trì hoãn khi cấp phát bộ nhớ. Được triển khai lại trong OpenBSD 4.4
- Tệp thực thi độc lập vị trí (PIE): OpenBSD 5.3 là hệ đầu tiên bật mặc định. Trên 7 nền tảng phần cứng
- Khởi tạo bộ nhớ dựa trên số ngẫu nhiên: Thêm section ELF
.openbsd.randomdatatrong OpenBSD 5.3 - Trình bảo vệ ngăn xếp theo từng đối tượng chia sẻ: Trong OpenBSD 5.3, áp dụng cookie stack protector riêng cho từng shared object
- Static-PIE: Hỗ trợ binary tĩnh độc lập vị trí trong
/bin,/sbinvà RAM disk. Được giới thiệu trong OpenBSD 5.7 - Giảm thiểu tấn công SROP: Được bật mặc định trong OpenBSD 6.0
- Ngẫu nhiên hóa thứ tự nạp thư viện: Được bật mặc định trong OpenBSD 6.0 và 6.2
- Cải thiện lazy-binding để đảm bảo an toàn W^X trong môi trường đa luồng: Được giới thiệu trong OpenBSD 5.9
- Tăng cường bố cục bộ nhớ: Áp dụng cho mọi chương trình và thư viện trong OpenBSD 6.1
- Sử dụng phương thức fork+exec: Tăng cường bảo vệ không gian địa chỉ trong các chương trình tách đặc quyền
- trapsleds: Áp dụng kỹ thuật chuyển đổi NOP nhằm giảm thiểu tấn công ROP (return-oriented programming)
- Liên kết lại kernel khi khởi động: Ngẫu nhiên hóa bố cục nội bộ của kernel ở mỗi lần khởi động
- Tăng cường bảo mật chuỗi lệnh trên i386/amd64: Cải tiến để làm cho tấn công ROP khó hơn
- Thêm tùy chọn MAP_STACK: Ngăn việc lạm dụng vùng nhớ không phải stack trong tấn công ROP
- RETGUARD: Cơ chế bảo vệ mạnh hơn stack protector hiện có, được đưa vào từ OpenBSD 6.4
- Thêm tùy chọn MAP_CONCEAL: Ngăn thông tin nhạy cảm bị rò rỉ qua core dump
- Chặn system call từ bộ nhớ PROT_WRITE: Được giới thiệu trong OpenBSD 6.5
- Cố định vị trí system call: Giới hạn chỉ cho phép system call ở các vị trí cụ thể
- Tăng cường bảo vệ không gian địa chỉ: Hạn chế thay đổi bộ nhớ thông qua
mmap(2),mprotect(2)v.v. - Liên kết lại sshd khi khởi động: Được giới thiệu trong OpenBSD 7.2
- Hỗ trợ mã không đọc được (xonly): Giới hạn để bộ nhớ thực thi không thể bị đọc
- Bảo vệ system call pinsyscalls(2): Bảo vệ bằng cách đăng ký trước vị trí system call
- Bảo vệ mục tiêu nhánh gián tiếp (BTI, IBT): Áp dụng các tính năng bảo mật dựa trên phần cứng
- Thêm tính năng -fret-clean: Ngăn giá trị trả về còn sót lại trên stack để chặn rò rỉ thông tin. Hiện chỉ áp dụng trên amd64
Hàm (Functions)
- issetugid(2): Hàm được giới thiệu trong OpenBSD 2.0, cung cấp khả năng kiểm tra user ID hoặc group ID được thiết lập khi tiến trình đang chạy
- arc4random(3): Hàm sinh số ngẫu nhiên, được thêm vào trong OpenBSD 2.1
- bcrypt(3): Hàm dùng để băm mật khẩu. Được giới thiệu lần đầu trong OpenBSD 2.1
- strlcpy(3), strlcat(3): Hàm để sao chép và nối chuỗi an toàn. Được giới thiệu trong OpenBSD 2.4
- strtonum(3): Hàm chuyển chuỗi thành số đồng thời tránh lỗi. Được giới thiệu trong OpenBSD 3.6
- imsg: API truyền thông điệp, được dùng trong nhiều daemon khác nhau. Được thêm vào libutil trong OpenBSD 4.8
- timingsafe_bcmp(3): Hàm so sánh byte với thời gian thực thi hằng định. Được giới thiệu trong OpenBSD 4.9
- explicit_bzero(3): Hàm xóa bộ nhớ một cách an toàn. Được thêm vào trong OpenBSD 5.5
- ohash: Triển khai bảng băm. Được đưa vào libutil trong OpenBSD 5.6
- asr: Trình phân giải DNS thay thế. Được kích hoạt trong OpenBSD 5.6
- reallocarray(3): Hàm ngăn tràn số khi cấp phát lại bộ nhớ. Được thêm vào trong OpenBSD 5.6
- getentropy(2): Hàm cung cấp số ngẫu nhiên an toàn về mặt bảo mật. Được giới thiệu trong OpenBSD 5.6
- sendsyslog(2): Hàm gửi thông điệp syslog từ kernel. Được thêm vào trong OpenBSD 5.6
- timingsafe_memcmp(3): Hàm so sánh bộ nhớ với thời gian thực thi hằng định. Được giới thiệu trong OpenBSD 5.6
- pledge(2): Hàm tăng cường bảo mật bằng cách giới hạn system call. Được thêm vào trong OpenBSD 5.9
- getpwnam_shadow(3), getpwuid_shadow(3): Hàm truy xuất dữ liệu mật khẩu bóng để tăng cường bảo mật. Được giới thiệu trong OpenBSD 5.9
- recallocarray(3): Hàm điền 0 vào dữ liệu cũ khi thay đổi kích thước bộ nhớ. Được thêm vào trong OpenBSD 6.1
- freezero(3): Hàm giải phóng bộ nhớ đồng thời điền 0. Được giới thiệu trong OpenBSD 6.2
- unveil(2): Hàm giới hạn truy cập hệ thống tệp. Được thêm vào trong OpenBSD 6.4
- malloc_conceal(3), calloc_conceal(3): Cung cấp khả năng bảo vệ dữ liệu nhạy cảm khi cấp phát bộ nhớ. Được thêm vào trong OpenBSD 6.5
- ober: API ASN.1 Basic Encoding Rules. Được chuyển sang libutil trong OpenBSD 6.6
Chương trình và hệ thống con (Programs and Subsystems)
- Tiện ích liên quan đến YP: ypbind(8), ypset(8), ypcat(1), ypmatch(1), ypwhich(1), thêm hỗ trợ libc. Được phân phối lần đầu trong NetBSD 0.9
- ypserv(8): Máy chủ YP được giới thiệu trong OpenBSD 2.0
- mopd(8): Daemon hỗ trợ MOP(Maintenance Operations Protocol). Được thêm vào trong OpenBSD 2.0
- AnonCVS: Hệ thống được thiết kế để truy cập ẩn danh vào kho mã nguồn OpenBSD
- aucat(1): Tiện ích liên quan tới audio server. Được thêm vào trong OpenBSD 2.1
- OpenSSH: Công cụ truyền thông bảo mật dựa trên SSH. Được giới thiệu trong OpenBSD 2.6
- mg(1): Trình soạn thảo văn bản gọn nhẹ. Được đưa vào trong OpenBSD 2.7
- m4(1): Bộ xử lý macro. Được mở rộng và bảo trì từ sau OpenBSD 2.7
- pf(4), pfctl(8), pflogd(8), authpf(8), ftp-proxy(8): Tường lửa lọc gói. Được thêm vào trong OpenBSD 3.0
- systrace(4), systrace(1): Công cụ giám sát system call. Được thêm vào trong OpenBSD 3.2 nhưng sau OpenBSD 5.9 đã được thay thế bằng pledge(2)
- spamd(8): Daemon lọc spam. Được giới thiệu trong OpenBSD 3.3
- dc(1), bc(1): Tiện ích máy tính. Được thêm vào trong OpenBSD 3.5
- sensorsd(8): Công cụ giám sát cảm biến phần cứng. Được đưa vào trong OpenBSD 3.5
- pkg_add(1): Tiện ích quản lý gói. Được giới thiệu trong OpenBSD 3.5
- carp(4): Giao thức giao diện mạng cho chuyển đổi dự phòng. Được thêm vào trong OpenBSD 3.5
- OpenBGPD: Daemon định tuyến BGP. Được giới thiệu trong OpenBSD 3.5
- dhclient(8), dhcpd(8): Client và server DHCP. Được thêm vào trong OpenBSD 3.5~3.6
- hotplugd(8): Daemon xử lý sự kiện hotplug. Được thêm vào trong OpenBSD 3.6
- OpenNTPD: Daemon NTP(Network Time Protocol). Được thêm vào trong OpenBSD 3.6
- dpb(1): Hệ thống build gói phân tán. Được giới thiệu trong OpenBSD 3.6
- ospfd(8), ospfctl(8), ospf6d(8): Daemon định tuyến OSPF(Open Shortest Path First). Được giới thiệu trong OpenBSD 3.7~4.2
- ifstated(8): Công cụ quản lý trạng thái interface. Được thêm vào trong OpenBSD 3.8
- bioctl(8): Công cụ quản lý block device và RAID. Được đưa vào trong OpenBSD 3.8
- hostapd(8): Công cụ quản lý wireless access point. Được giới thiệu trong OpenBSD 3.8
- watchdogd(8): Bộ đếm thời gian giám sát để đảm bảo tính ổn định của hệ thống. Được thêm vào trong OpenBSD 3.8
- sdiff(1): Tiện ích so sánh tệp. Được giới thiệu trong OpenBSD 3.9
- dvmrpd(8), dvmrpctl(8): Hỗ trợ DVMRP(Distance Vector Multicast Routing Protocol). Được thêm vào trong OpenBSD 4.0
- ripd(8), ripctl(8): Hỗ trợ RIP(Routing Information Protocol). Được đưa vào trong OpenBSD 4.1
- pkg-config(1): Công cụ cấu hình gói. Được giới thiệu trong OpenBSD 4.1
- relayd(8), relayctl(8): Công cụ chuyển tiếp lưu lượng mạng. Được thêm vào trong OpenBSD 4.1
- cwm(1): Trình quản lý cửa sổ nhẹ. Được thêm vào trong OpenBSD 4.2
- libtool(1): Công cụ tự động hóa xây dựng thư viện. Được đưa vào trong OpenBSD 4.3
- snmpd(8): Daemon SNMP(Simple Network Management Protocol). Được thêm vào trong OpenBSD 4.3
- sysmerge(8): Công cụ hợp nhất tệp cấu hình hệ thống. Được thêm vào trong OpenBSD 4.4
- ypldap(8): Máy chủ YP dựa trên LDAP. Được đưa vào trong OpenBSD 4.4
- OpenSMTPD: Máy chủ SMTP(Simple Mail Transfer Protocol). Được giới thiệu trong OpenBSD 4.6
- tmux(1): Bộ ghép kênh terminal. Được đưa vào trong OpenBSD 4.6
- ldpd(8), ldpctl(8): Hỗ trợ Label Distribution Protocol (LDP). Được thêm vào trong OpenBSD 4.6
- mandoc(1): Công cụ tài liệu hóa trang manual. Được giới thiệu trong OpenBSD 4.8
- ldapd(8), ldapctl(8): Máy chủ LDAP(Lightweight Directory Access Protocol). Được thêm vào trong OpenBSD 4.8
- OpenIKED: Triển khai giao thức IKE(Internet Key Exchange). Được giới thiệu trong OpenBSD 4.8
- iscsid(8), iscsictl(8): Daemon iSCSI. Được đưa vào trong OpenBSD 4.9
- rc.d(8), rc.subr(8): Quản lý script khởi tạo hệ thống. Được thêm vào trong OpenBSD 4.9
- npppd(8), npppctl(8): Daemon PPP(Point-to-Point Protocol). Được thêm vào trong OpenBSD 5.3
- ldomd(8), ldomctl(8): Công cụ quản lý LDOM(Logical Domains). Được đưa vào trong OpenBSD 5.3
- sndiod(8): Audio server. Được giới thiệu trong OpenBSD 5.3
- cu(1): Tiện ích giao tiếp serial. Được thêm vào trong OpenBSD 5.4
- slowcgi(8): Công cụ xử lý các yêu cầu HTTP chậm. Được đưa vào trong OpenBSD 5.4
- signify(1): Công cụ ký và xác minh tệp. Được thêm vào trong OpenBSD 5.5
- LibreSSL: Dự án fork từ OpenSSL để tăng cường bảo mật. Ra mắt lần đầu trong OpenBSD 5.6
- httpd(8): Web server nhẹ. Được đưa vào trong OpenBSD 5.6
- rcctl(8): Tiện ích quản lý dịch vụ rc.d. Được thêm vào trong OpenBSD 5.7
- doas(1): Tiện ích leo thang đặc quyền đơn giản. Được giới thiệu trong OpenBSD 5.8
- radiusd(8): Triển khai máy chủ RADIUS. Được thêm vào trong OpenBSD 5.8
- eigrpd(8), eigrpctl(8): Hỗ trợ EIGRP(Enhanced Interior Gateway Routing Protocol). Được đưa vào trong OpenBSD 5.9
- vmm(4), vmd(8), vmctl(8): Hệ thống quản lý máy ảo. Được thêm vào trong OpenBSD 5.9
- acme-client(1): Client cấp phát chứng chỉ dùng giao thức ACME. Được giới thiệu trong OpenBSD 6.1
- syspatch(8): Công cụ quản lý bản vá bảo mật. Được thêm vào trong OpenBSD 6.1
- xenodm(1): Phiên bản fork đã được dọn dẹp của XDM. Được đưa vào trong OpenBSD 6.1
- unwind(8): Trình phân giải DNS cục bộ. Được giới thiệu trong OpenBSD 6.5
- sysupgrade(8): Công cụ tự động nâng cấp hệ thống. Được thêm vào trong OpenBSD 6.6
- rpki-client(8): Client RPKI(Route Origin Validation). Được giới thiệu trong OpenBSD 6.7
- resolvd(8): Công cụ quản lý cấu hình DNS trong môi trường mạng động. Được thêm vào trong OpenBSD 6.9
- dhcpleased(8): Client DHCP cải tiến. Được đưa vào trong OpenBSD 6.9
Các dự án do nhà phát triển OpenBSD bảo trì bên ngoài OpenBSD
- sudo: Công cụ cho phép quản trị viên hệ thống cấp quyền thực thi lệnh hạn chế cho người dùng cụ thể. Được đưa vào trong OpenBSD 2.7
- femail: Công cụ gửi thư đơn giản. Bắt đầu năm 2005 và OpenBSD port được cung cấp vào ngày 22 tháng 9 cùng năm
- midish: Công cụ xử lý và sequencer MIDI. Bắt đầu năm 2003 và OpenBSD port được cung cấp vào ngày 4 tháng 11 năm 2005
- fdm: Công cụ lọc và sắp xếp thư. Bắt đầu năm 2006 và OpenBSD port được cung cấp vào ngày 18 tháng 1 năm 2007
- toad: Công cụ triển khai phần mềm tự động cho OpenBSD. Bắt đầu năm 2013 và OpenBSD port được cung cấp vào ngày 8 tháng 10 cùng năm
- docbook2mdoc: Công cụ chuyển tài liệu DocBook sang định dạng trang manual mdoc. Bắt đầu năm 2014 và OpenBSD port được cung cấp vào ngày 3 tháng 4 cùng năm
- portroach: Công cụ theo dõi cập nhật port được phát triển bằng cách fork từ portscout của FreeBSD. Bắt đầu năm 2014 và OpenBSD port được cung cấp vào ngày 5 tháng 9 cùng năm
- cvs2gitdump: Công cụ chuyển kho CVS sang Git. Bắt đầu năm 2012 và OpenBSD port được cung cấp vào ngày 1 tháng 8 năm 2016
- Game of Trees: Hệ thống quản lý phiên bản có thể thay thế Git. Bắt đầu năm 2017 và OpenBSD port được cung cấp vào ngày 9 tháng 8 năm 2019
1 bình luận
Ý kiến trên Hacker News
Quỹ OpenBSD đã quyên góp được khoảng 380 nghìn USD
John Ioannidis đã qua đời vài tuần trước, nhưng hầu như không ai nhận ra điều đó
Ngoài thiết kế privdrop/privsep của OpenBSD và việc áp dụng pledge(2)/unveil(2), các nỗ lực giảm thiểu gần đây như mimmutable cũng không được chú ý
Bộ nhớ dữ liệu ngẫu nhiên đã được Matthew Dempsky triển khai trong OpenBSD 5.3
AmigaOS đã sử dụng tệp thực thi độc lập vị trí (PIE) và ASLR từ năm 1985
Bày tỏ sự ngạc nhiên vì pledge/unveil không được giới thiệu nổi bật hơn
Thắc mắc liệu OpenBSD đã triển khai ISO C11 _Thread_local hay chưa
Đặt câu hỏi vì sao trang OpenBSD chỉ dùng HTML cơ bản mà không dùng styling hay CSS
Cũng đề xuất một tài liệu tuyệt vời khác là <a href="https://why-openbsd.rocks/" rel="nofollow">https://why-openbsd.rocks/</a>