10 ポイント 投稿者 GN⁺ 2025-02-23 | 1件のコメント | WhatsAppで共有

OpenBSDプロジェクトは、さまざまなソフトウェアやアイデアを開発・保守している。おおまかな導入順に整理したもの。

概念 (Concepts)

  • IPSec(4): OpenBSDは、IPSecスタックを提供した最初のフリーなオペレーティングシステムだった。1997年2月20日に導入
  • INET6(4): OpenBSD 2.7でIPv6を完全統合。1999年1月6日から開発開始、同年6月6日の最初のハッカソンでほぼ完全に動作する状態に到達
  • 権限分離 (Privilege Separation): 2002年3月、OpenSSHで初めて実装。その後、bgpd(8)、dhclient(8)、smtpd(8)、tmux(1)など多くのプログラムに適用
  • 権限剥奪 (Privilege Revocation): 特定のリソースを維持しつつ権限を下げる方式を適用。例: ping(8), traceroute(8)
  • スタックプロテクタ (Stack Protector): 2001年から開発された "propolice" ベース。OpenBSD 3.3でデフォルト有効化
  • W^X (Write XOR Execute): OpenBSD 3.3で初めて適用。OpenBSD 6.0からデフォルトで厳格に強制
  • GOTおよびPLT保護: OpenBSD 3.3でGOT(グローバルオフセットテーブル)およびPLT(プロシージャリンクテーブル)を保護するようld.soを改善
  • ASLR (Address Space Layout Randomization): OpenBSD 3.4が初めてデフォルト有効化
  • gcc-local(1) の解析および検査: OpenBSD 3.4で初導入
  • malloc(3) のセキュリティ強化: メモリ割り当て時のランダム化と遅延解放を適用。OpenBSD 4.4で再実装
  • 位置独立実行ファイル (PIE): OpenBSD 5.3で初めてデフォルト有効化。7つのハードウェアプラットフォーム
  • 乱数ベースのメモリ初期化: OpenBSD 5.3でELF .openbsd.randomdataセクションを追加
  • 共有オブジェクトごとのスタックプロテクタ: OpenBSD 5.3で各共有オブジェクトに個別のスタックプロテクタCookieを適用
  • Static-PIE: /bin、/sbinおよびRAMディスクで位置独立な静的バイナリをサポート。OpenBSD 5.7で導入
  • SROP攻撃緩和: OpenBSD 6.0でデフォルト有効化
  • ライブラリ読み込み順序のランダム化: OpenBSD 6.0および6.2でデフォルト有効化
  • マルチスレッド環境でのW^X安全性のためのlazy-binding改善: OpenBSD 5.9で導入
  • メモリレイアウト強化: OpenBSD 6.1で全プログラムとライブラリに適用
  • fork+exec方式の使用: 権限分離されたプログラムでアドレス空間保護を強化
  • trapsleds: ROP(リターン指向プログラミング)攻撃緩和を目的としたNOP変換手法を適用
  • カーネルのブート時再リンク: 起動のたびにカーネル内部レイアウトをランダム化
  • i386/amd64命令シーケンスのセキュリティ強化: ROP攻撃を困難にするための改善
  • MAP_STACKオプション追加: ROP攻撃でスタック以外のメモリを悪用することを防止
  • RETGUARD: 従来のスタックプロテクタより強力な保護メカニズムとしてOpenBSD 6.4から導入
  • MAP_CONCEALオプション追加: 機密情報がコアダンプから漏えいしないよう防止
  • PROT_WRITEメモリでのシステムコール遮断: OpenBSD 6.5で導入
  • システムコール位置の固定: 特定の位置でのみシステムコールを可能にするよう制限
  • アドレス空間保護の強化: mmap(2)、mprotect(2) などによるメモリ変更を制限
  • sshdのブート時再リンク: OpenBSD 7.2で導入
  • 非可読コード (xonly) サポート: 実行可能メモリを読み取れないように制限
  • pinsyscalls(2) システムコール保護: システムコール位置を事前登録して保護
  • 間接分岐ターゲット保護 (BTI, IBT): ハードウェアベースのセキュリティ機能を適用
  • -fret-clean機能追加: 戻り値がスタックに残るのを防いで情報漏えいを遮断。現在はamd64のみ適用

関数 (Functions)

  • issetugid(2): OpenBSD 2.0で導入された関数で、プロセスが実行中に設定されたユーザーIDまたはグループIDを確認する機能を提供
  • arc4random(3): 乱数生成関数で、OpenBSD 2.1で追加
  • bcrypt(3): パスワードハッシュ化のための関数。OpenBSD 2.1で初導入
  • strlcpy(3), strlcat(3): 安全な文字列コピーおよび連結のための関数。OpenBSD 2.4で導入
  • strtonum(3): 文字列を数値に変換しつつエラーを防ぐ関数。OpenBSD 3.6で導入
  • imsg: メッセージ伝達APIで、さまざまなデーモンで使用。OpenBSD 4.8でlibutilに追加
  • timingsafe_bcmp(3): 一定の実行時間を保証するバイト比較関数。OpenBSD 4.9で導入
  • explicit_bzero(3): メモリを安全に消去する関数。OpenBSD 5.5で追加
  • ohash: ハッシュテーブル実装。OpenBSD 5.6でlibutilに含まれる
  • asr: 代替DNSリゾルバ。OpenBSD 5.6で有効化
  • reallocarray(3): メモリ再割り当て時のオーバーフローを防ぐ関数。OpenBSD 5.6で追加
  • getentropy(2): セキュアな乱数を提供する関数。OpenBSD 5.6で導入
  • sendsyslog(2): カーネルからsyslogメッセージを送る関数。OpenBSD 5.6で追加
  • timingsafe_memcmp(3): 一定の実行時間を保証するメモリ比較関数。OpenBSD 5.6で導入
  • pledge(2): システムコールを制限してセキュリティを高める関数。OpenBSD 5.9で追加
  • getpwnam_shadow(3), getpwuid_shadow(3): セキュリティ強化のためにシャドウパスワードデータを検索する関数。OpenBSD 5.9で導入
  • recallocarray(3): メモリサイズ変更時に既存データを0で埋める関数。OpenBSD 6.1で追加
  • freezero(3): メモリを解放しつつ0で埋める関数。OpenBSD 6.2で導入
  • unveil(2): ファイルシステムアクセスを制限する関数。OpenBSD 6.4で追加
  • malloc_conceal(3), calloc_conceal(3): メモリ割り当て時に機密データを保護する機能を提供。OpenBSD 6.5で追加
  • ober: ASN.1基本符号化規則API。OpenBSD 6.6でlibutilへ移動

プログラムとサブシステム (Programs and Subsystems)

  • YP関連ユーティリティ: ypbind(8), ypset(8), ypcat(1), ypmatch(1), ypwhich(1)、libcサポートを追加。NetBSD 0.9で最初に配布
  • ypserv(8): OpenBSD 2.0で導入されたYPサーバー
  • mopd(8): MOP(Maintenance Operations Protocol)対応デーモン。OpenBSD 2.0で追加
  • AnonCVS: OpenBSDコードリポジトリへ匿名でアクセスできるよう設計されたシステム
  • aucat(1): オーディオサーバー関連ユーティリティ。OpenBSD 2.1で追加
  • OpenSSH: SSHベースのセキュア通信ツール。OpenBSD 2.6で導入
  • mg(1): 軽量テキストエディタ。OpenBSD 2.7で収録
  • m4(1): マクロプロセッサ。OpenBSD 2.7以降に拡張・保守
  • pf(4), pfctl(8), pflogd(8), authpf(8), ftp-proxy(8): パケットフィルタリングファイアウォール。OpenBSD 3.0で追加
  • systrace(4), systrace(1): システムコール監視ツール。OpenBSD 3.2で追加されたが、OpenBSD 5.9以降は pledge(2) に置き換えられた
  • spamd(8): スパムフィルタリング用デーモン。OpenBSD 3.3で導入
  • dc(1), bc(1): 電卓ユーティリティ。OpenBSD 3.5で追加
  • sensorsd(8): ハードウェアセンサー監視ツール。OpenBSD 3.5で収録
  • pkg_add(1): パッケージ管理ユーティリティ。OpenBSD 3.5で導入
  • carp(4): フェイルオーバーのためのネットワークインターフェースプロトコル。OpenBSD 3.5で追加
  • OpenBGPD: BGPルーティングデーモン。OpenBSD 3.5で導入
  • dhclient(8), dhcpd(8): DHCPクライアントおよびサーバー。OpenBSD 3.5〜3.6で追加
  • hotplugd(8): ホットプラグイベント処理デーモン。OpenBSD 3.6で追加
  • OpenNTPD: NTP(Network Time Protocol)デーモン。OpenBSD 3.6で追加
  • dpb(1): 分散パッケージビルドシステム。OpenBSD 3.6で導入
  • ospfd(8), ospfctl(8), ospf6d(8): OSPF(Open Shortest Path First)ルーティングデーモン。OpenBSD 3.7〜4.2で導入
  • ifstated(8): インターフェース状態管理ツール。OpenBSD 3.8で追加
  • bioctl(8): ブロックデバイスおよびRAID管理ツール。OpenBSD 3.8で収録
  • hostapd(8): 無線アクセスポイント管理ツール。OpenBSD 3.8で導入
  • watchdogd(8): システム安定性を確保する監視タイマー。OpenBSD 3.8で追加
  • sdiff(1): ファイル比較ユーティリティ。OpenBSD 3.9で導入
  • dvmrpd(8), dvmrpctl(8): DVMRP(Distance Vector Multicast Routing Protocol)対応。OpenBSD 4.0で追加
  • ripd(8), ripctl(8): RIP(Routing Information Protocol)対応。OpenBSD 4.1で収録
  • pkg-config(1): パッケージ設定ツール。OpenBSD 4.1で導入
  • relayd(8), relayctl(8): ネットワークトラフィック中継ツール。OpenBSD 4.1で追加
  • cwm(1): 軽量ウィンドウマネージャ。OpenBSD 4.2で追加
  • libtool(1): ライブラリ構築自動化ツール。OpenBSD 4.3で収録
  • snmpd(8): SNMP(Simple Network Management Protocol)デーモン。OpenBSD 4.3で追加
  • sysmerge(8): システム設定ファイル統合ツール。OpenBSD 4.4で追加
  • ypldap(8): LDAPベースのYPサーバー。OpenBSD 4.4で収録
  • OpenSMTPD: SMTP(Simple Mail Transfer Protocol)サーバー。OpenBSD 4.6で導入
  • tmux(1): ターミナルマルチプレクサ。OpenBSD 4.6で収録
  • ldpd(8), ldpctl(8): ラベル配布プロトコル(LDP)対応。OpenBSD 4.6で追加
  • mandoc(1): manページ文書化ツール。OpenBSD 4.8で導入
  • ldapd(8), ldapctl(8): LDAP(Lightweight Directory Access Protocol)サーバー。OpenBSD 4.8で追加
  • OpenIKED: IKE(Internet Key Exchange)プロトコル実装。OpenBSD 4.8で導入
  • iscsid(8), iscsictl(8): iSCSIデーモン。OpenBSD 4.9で収録
  • rc.d(8), rc.subr(8): システム初期化スクリプト管理。OpenBSD 4.9で追加
  • npppd(8), npppctl(8): PPP(Point-to-Point Protocol)デーモン。OpenBSD 5.3で追加
  • ldomd(8), ldomctl(8): LDOM(Logical Domains)管理ツール。OpenBSD 5.3で収録
  • sndiod(8): オーディオサーバー。OpenBSD 5.3で導入
  • cu(1): シリアル通信ユーティリティ。OpenBSD 5.4で追加
  • slowcgi(8): 遅いHTTPリクエストを処理するツール。OpenBSD 5.4で収録
  • signify(1): ファイル署名および検証ツール。OpenBSD 5.5で追加
  • LibreSSL: OpenSSLをforkしてセキュリティを強化したプロジェクト。OpenBSD 5.6で初公開
  • httpd(8): 軽量Webサーバー。OpenBSD 5.6で収録
  • rcctl(8): rc.dサービス管理ユーティリティ。OpenBSD 5.7で追加
  • doas(1): シンプルな権限昇格ユーティリティ。OpenBSD 5.8で導入
  • radiusd(8): RADIUSサーバー実装。OpenBSD 5.8で追加
  • eigrpd(8), eigrpctl(8): EIGRP(Enhanced Interior Gateway Routing Protocol)対応。OpenBSD 5.9で収録
  • vmm(4), vmd(8), vmctl(8): 仮想マシン管理システム。OpenBSD 5.9で追加
  • acme-client(1): ACMEプロトコルを使った証明書発行クライアント。OpenBSD 6.1で導入
  • syspatch(8): セキュリティパッチ管理ツール。OpenBSD 6.1で追加
  • xenodm(1): XDMの整理されたfork版。OpenBSD 6.1で収録
  • unwind(8): ローカルDNSリゾルバ。OpenBSD 6.5で導入
  • sysupgrade(8): システム自動アップグレードツール。OpenBSD 6.6で追加
  • rpki-client(8): RPKI(Route Origin Validation)クライアント。OpenBSD 6.7で導入
  • resolvd(8): 動的ネットワーク環境でDNS設定を管理するツール。OpenBSD 6.9で追加
  • dhcpleased(8): 改良版DHCPクライアント。OpenBSD 6.9で収録

OpenBSD開発者がOpenBSD外部で保守するプロジェクト

  • sudo: システム管理者が特定ユーザーに制限付きコマンド実行権限を与えられるようにするツール。OpenBSD 2.7で収録
  • femail: シンプルなメール送信ツール。2005年に開始され、OpenBSD port は同年9月22日に提供
  • midish: MIDIシーケンサおよび処理ツール。2003年に開始され、OpenBSD port は2005年11月4日に提供
  • fdm: メールフィルタリングおよび整理ツール。2006年に開始され、OpenBSD port は2007年1月18日に提供
  • toad: OpenBSD向けソフトウェア自動配布ツール。2013年に開始され、OpenBSD port は同年10月8日に提供
  • docbook2mdoc: DocBook文書をmdocマニュアルページ形式へ変換するツール。2014年に開始され、OpenBSD port は同年4月3日に提供
  • portroach: FreeBSDのportscoutをforkして開発されたport更新追跡ツール。2014年に開始され、OpenBSD port は同年9月5日に提供
  • cvs2gitdump: CVSリポジトリをGitへ変換するツール。2012年に開始され、OpenBSD port は2016年8月1日に提供
  • Game of Trees: Gitの代替となりうるバージョン管理システム。2017年に開始され、OpenBSD port は2019年8月9日に提供

1件のコメント

 
GN⁺ 2025-02-23
Hacker Newsのコメント
  • OpenBSD財団は約38万ドルを調達した

    • OpenSSHを作り、Fortune 500企業のすべてが使っていることを考えると、毎年100万〜200万ドルは調達すべきだと思う
    • こうした企業はいまこそ貢献すべき時だ
    • ハードウェアベンダーもソースを公開すべきであり、Nvidiaが名指しされている
  • John Ioannidisが数週間前に亡くなったが、ほとんど誰にも気づかれなかった

    • 彼はMobile IP(携帯電話でIPを動作させることを可能にした)の基盤を作った人物としても知られている
  • OpenBSDのprivdrop/privsep設計とpledge(2)/unveil(2)の採用に加えて、最近のmimmutableのような緩和策も注目されていない

    • OpenBSDでは大半のプログラムの静的アドレス空間が自動的に不変になった
    • 現代のIntel/AMD、ARMマシンでは、実行専用メモリとBTI/IBTがデフォルトで有効になっている
    • より大きなソフトウェアエコシステムに備えるためのports開発作業も含まれている
  • OpenBSD 5.3ではMatthew Dempskyによってランダムデータメモリが実装された

    • この機能のユースケースの1つにRETGUARDがある
    • RETGUARDはスタックプロテクタの代わりとなり、関数ごとのランダムなクッキーを使ってスタックの戻りアドレスを一貫して検証する
  • AmigaOSは1985年に位置独立実行ファイル(PIE)とASLRを使っていた

    • AmigaにはMMUがなく、メモリも少なかったため、ロードされたすべてのものを利用可能なRAMに配置する必要があった
    • 個々のセクションを別々の位置に配置でき、コンパイラはそのために多くのセクションを生成していた
  • pledge/unveilがもっと目立つ形で紹介されていないことに驚きを示している

  • OpenBSDがISO C11 _Thread_localを実装したのか気になっている

    • これはOpenBSDへソフトウェアを移植する際の最大の不便さだった
    • OpenBSDはネイティブなスレッドローカルストレージをサポートしていない唯一の主要OSだった
  • OpenBSDのページが素のHTMLだけを使い、スタイリングやCSSを使っていない理由に疑問を呈している

    • タイポグラフィは可読性に重要で、少なくとも適切な行間と60文字程度の行長制限は必要だ
    • OpenBSDは潜在的な利用者を真剣に考えていないのではないかと疑っている
    • ユーザー体験は重要であり、ドキュメントの可読性もUXの一部だ
  • もう1つの優れた資料として <a href="https://why-openbsd.rocks/" rel="nofollow">https://why-openbsd.rocks/</a>; を勧めている