Ver3.5 OpenBSD vs HardenedBSD: 보안 중심 운영체제의 핵심 기능 완전 비교 분석

OpenBSD vs HardenedBSD: 보안 중심 운영체제의 핵심 기능 완전 비교 분석
OpenBSD는 1995년, 캐나다의 개발자 Theo de Raadt가 NetBSD 프로젝트에서 갈라져 나와 만든 운영체제야. 처음부터 목표가 명확했음. "보안을 나중에 추가하는 게 아니라, 처음 설계부터 보안을 최우선으로 박아넣겠다"는 거지.
Theo 아저씨가 진짜 독한 사람인 게, 코드 한 줄 한 줄을 직접 감사(audit)하면서 취약점을 찾아내는 걸 프로젝트 문화로 만들어버렸어. 그래서 OpenBSD 팀이 발견한 보안 취약점들이 다른 BSD 계열이나 Linux에도 영향을 미치는 경우가 엄청 많음. 진짜 업계 전체에 기여하는 수준ㅋㅋㅋ
유명한 슬로건이 있어: "Only two remote holes in the default install, in a heck of a long time!" — 기본 설치 상태에서 원격 취약점이 역사상 딱 두 번밖에 없었다는 자랑이야. 이게 얼마나 대단한 건지는 다른 OS들 CVE 목록 보면 바로 알 수 있음 😅
HardenedBSD는 2013년, Shawn Webb과 Oliver Pinter가 시작한 프로젝트야. 얘는 처음부터 새로 만든 게 아니라 FreeBSD를 베이스로 해서, 거기에 Linux의 grsecurity/PaX 패치에서 영감을 받은 보안 기능들을 이식하는 방식으로 발전했어.
핵심 철학은 이거야: "FreeBSD의 방대한 생태계와 호환성은 유지하면서, 현대적인 익스플로잇 방어 기술을 최대한 탑재하자." 그래서 FreeBSD 포트(ports)를 그대로 쓸 수 있고, FreeBSD 사용자라면 진입장벽이 낮아.
HardenedBSD는 특히 ASLR(Address Space Layout Randomization)을 FreeBSD에 제대로 구현하는 것부터 시작해서, 지금은 CFI(Control Flow Integrity), SafeStack, RELRO 등 현대적인 메모리 보호 기술들을 두루 갖추고 있어. 진화 속도가 꽤 빠른 편이야 🚀
| 구분 | OpenBSD | HardenedBSD |
|---|---|---|
| 시작 연도 | 1995년 | 2013년 |
| 기반 | 독자적 BSD (NetBSD fork) | FreeBSD 기반 |
| 핵심 창시자 | Theo de Raadt | Shawn Webb, Oliver Pinter |
| 설계 철학 | 기본값 = 최고 보안 | FreeBSD + 현대 익스플로잇 방어 |
| 영감 출처 | 자체 코드 감사 문화 | grsecurity/PaX (Linux) |
ASLR은 프로세스가 메모리에 로드될 때 스택, 힙, 라이브러리 등의 주소를 무작위로 배치해서 공격자가 특정 메모리 주소를 예측하기 어렵게 만드는 기술이야. 버퍼 오버플로우 같은 메모리 취약점 공격을 훨씬 어렵게 만들어줌.
OpenBSD는 ASLR을 매우 초기부터 구현했고, 특히 PIE(Position Independent Executable)를 기본값으로 모든 바이너리에 적용해. 엔트로피(무작위성)도 상당히 높은 편이야. 스택, 힙, mmap 영역 전부 랜덤화됨.
HardenedBSD는 FreeBSD에 ASLR이 제대로 없던 시절부터 이걸 구현하는 게 첫 번째 목표였어. 지금은 64비트 환경에서 매우 강력한 ASLR을 제공하고, 스택, 힙, mmap, VDSO 등 다양한 영역을 랜덤화해. 32비트에서는 주소 공간 자체가 좁아서 엔트로피가 제한적이긴 한데, 이건 모든 OS의 공통 한계야.
W^X는 메모리 페이지가 동시에 쓰기 가능(Writable)이면서 실행 가능(Executable)할 수 없다는 정책이야. 즉, 쓸 수 있으면 실행 못 하고, 실행할 수 있으면 쓸 수 없어. 이게 왜 중요하냐면, 공격자가 악성 코드를 메모리에 주입하고 실행하는 전통적인 공격 방식을 원천 차단하거든.
OpenBSD는 W^X를 2003년부터 도입했어. 이게 얼마나 앞선 거냐면, Linux에서 NX bit 지원이 본격화된 게 그보다 훨씬 나중이야. OpenBSD는 이걸 커널 레벨에서 강제하고, 예외를 허용하는 경우가 극히 드물어. JIT 컴파일러처럼 런타임에 코드를 생성해야 하는 경우에도 엄격한 제어를 요구함.
HardenedBSD도 W^X를 지원하는데, PAGEEXEC와 MPROTECT 제한을 통해 구현해. 특히 hbsd-update나 시스템 설정을 통해 개별 바이너리에 대한 예외 처리가 가능해서 실용성이 높아. JVM이나 특정 게임 엔진처럼 W^X를 깨야 하는 소프트웨어들을 위한 탈출구가 있음.
이거 진짜 OpenBSD의 킬러 피처야. pledge()는 프로세스가 앞으로 사용할 시스템 콜의 범위를 미리 선언하는 메커니즘이야. 한번 pledge를 호출하면, 선언한 범위 밖의 시스템 콜을 호출하는 순간 프로세스가 즉시 종료돼.
예를 들어 DNS 리졸버 프로세스가 pledge("dns inet", NULL)을 선언하면, 이 프로세스는 DNS 조회와 네트워크 연결만 할 수 있어. 파일 시스템 접근? 안 됨. 프로세스 생성? 안 됨. 공격자가 이 프로세스를 장악해도 할 수 있는 게 극히 제한되는 거지.
pledge는 2015년에 도입됐고, 지금은 OpenBSD 기본 시스템의 거의 모든 유틸리티가 pledge를 사용해. 심지어 ls, cat 같은 기본 명령어들도 pledge로 보호되어 있어. 이게 얼마나 철저한 건지 느껴지지?ㅋㅋㅋ
/* pledge 사용 예시 */
#include <unistd.h>
int main(void) {
/* 이 프로세스는 stdio와 rpath만 허용 */
if (pledge("stdio rpath", NULL) == -1)
err(1, "pledge");
/* 이후 다른 시스템 콜 호출 시 즉시 SIGABRT */
return 0;
}
stdio, rpath, wpath, cpath, inet, dns, exec, proc, tty, unix 등 약 30여 가지가 있어.HardenedBSD는 pledge()에 해당하는 기능이 없어. 대신 Linux의 seccomp와 유사한 Capsicum(FreeBSD에서 가져온 것)을 활용할 수 있는데, Capsicum은 파일 디스크립터 기반의 capability 모델이라 pledge와는 접근 방식이 달라. pledge가 더 직관적이고 적용하기 쉽다는 평가가 많음.
unveil()은 2019년 OpenBSD 6.4에서 도입된 기능으로, 프로세스가 접근할 수 있는 파일시스템 경로를 명시적으로 제한해. pledge()의 파일시스템 버전이라고 보면 돼.
예를 들어 텍스트 에디터가 unveil("/home/user/documents", "rw")를 선언하면, 이 프로세스는 해당 디렉토리 외의 파일에는 접근 자체가 불가능해. 공격자가 에디터를 통해 /etc/passwd를 읽으려 해도 커널이 차단함.
pledge()와 unveil()의 조합은 진짜 강력해. 프로세스가 할 수 있는 시스템 콜 종류(pledge)와 접근 가능한 파일 경로(unveil)를 동시에 제한하니까, 공격 표면(attack surface)이 극적으로 줄어들어.
/* unveil 사용 예시 */
unveil("/tmp", "rwc"); /* /tmp: 읽기/쓰기/생성 허용 */
unveil("/etc/ssl/cert.pem", "r"); /* SSL 인증서: 읽기만 허용 */
unveil(NULL, NULL); /* 이후 추가 unveil 불가 */
HardenedBSD에는 unveil()이 없어. Capsicum의 cap_rights_limit()으로 비슷한 효과를 낼 수 있지만, 사용 방법이 훨씬 복잡하고 파일 디스크립터 단위로 동작해서 경로 기반 제한과는 다른 개념이야.
CFI는 프로그램의 실행 흐름이 정상적인 경로를 벗어나지 못하도록 강제하는 기술이야. ROP(Return-Oriented Programming) 같은 고급 익스플로잇 기법을 방어하는 데 핵심적인 역할을 해.
HardenedBSD는 LLVM/Clang의 CFI 구현을 적극 활용해. 특히 Cross-DSO CFI(동적 공유 라이브러리 간 CFI)를 지원하는데, 이게 구현하기 매우 어려운 기술이야. 전체 시스템을 CFI로 컴파일하는 작업을 진행 중이고, 베이스 시스템의 상당 부분이 이미 CFI로 보호되고 있어.
OpenBSD는 CFI를 직접 구현하는 대신, retguard라는 자체 기술을 사용해. retguard는 함수 반환 주소를 보호하는 메커니즘으로, 스택 기반의 ROP 공격을 방어해. LLVM CFI만큼 포괄적이지는 않지만, OpenBSD의 다른 보안 레이어들과 결합하면 충분히 강력해.
SafeStack은 LLVM에서 개발한 스택 보호 기술로, 스택을 두 개로 분리해. 하나는 일반 데이터용 "안전하지 않은 스택(unsafe stack)", 다른 하나는 반환 주소와 중요 데이터를 위한 "안전한 스택(safe stack)"이야.
공격자가 버퍼 오버플로우로 스택을 오염시켜도, 반환 주소가 있는 안전한 스택은 별도의 메모리 영역에 있어서 덮어쓸 수 없어. HardenedBSD는 SafeStack을 베이스 시스템 빌드에 적용하고 있어.
OpenBSD는 SafeStack 대신 자체적인 스택 보호 메커니즘과 함께 stack canary를 강화된 형태로 사용해. 기본 GCC/Clang의 스택 보호보다 더 강력한 버전이야.
RELRO(RELocation Read-Only)는 ELF 바이너리의 재배치 섹션을 로드 후 읽기 전용으로 만드는 기술이야. GOT(Global Offset Table) 덮어쓰기 공격을 방어해.
HardenedBSD는 Full RELRO를 기본으로 적용해. GOT가 완전히 읽기 전용이 되어서 GOT 오버라이트 공격이 불가능해져.
OpenBSD도 유사한 보호를 제공하는데, 링커 레벨에서 -z now 플래그(즉시 바인딩)와 함께 GOT 보호를 구현해. OpenBSD의 링커(lld 기반)는 보안 강화 옵션들이 기본으로 활성화되어 있어.
OpenBSD 커널은 보안을 위해 수많은 독자적인 기술들을 개발해왔어. 몇 가지 핵심만 짚어볼게.
🔹 랜덤 malloc()
OpenBSD의 malloc() 구현은 일반적인 구현과 달리, 할당된 메모리 청크 사이에 랜덤한 간격을 두고, 해제된 메모리를 즉시 0으로 초기화해. 이렇게 하면 use-after-free 취약점 악용이 훨씬 어려워져. 또한 메모리 할당 패턴을 예측하기 어렵게 만들어서 힙 스프레이 공격도 방어해.
🔹 커널 ASLR (KASLR)
커널 자체의 메모리 배치도 랜덤화해. 공격자가 커널 심볼 주소를 알아내기 어렵게 만들어서 커널 익스플로잇의 난이도를 높여.
🔹 mimmutable()
OpenBSD 7.3에서 도입된 mimmutable()은 메모리 매핑을 불변(immutable)으로 만드는 시스템 콜이야. 한번 설정하면 해당 메모리 영역의 보호 속성을 변경할 수 없어. 공격자가 W^X를 우회하려고 mprotect()를 호출해도 차단됨.
🔹 커널 메모리 분리
Meltdown 취약점 이후 OpenBSD는 커널과 유저스페이스 메모리를 완전히 분리하는 작업을 빠르게 완료했어. KPTI(Kernel Page Table Isolation)에 해당하는 구현이야.
HardenedBSD는 FreeBSD 커널을 베이스로 하면서 다양한 보안 패치를 추가해.
🔹 HBSD_ASLR 서브시스템
FreeBSD의 기본 ASLR보다 훨씬 강화된 ASLR 서브시스템을 구현했어. sysctl hardening.aslr.* 네임스페이스를 통해 세밀하게 제어 가능하고, 스택, 힙, mmap, VDSO, 실행 파일 베이스 등 다양한 영역을 개별적으로 랜덤화할 수 있어.
🔹 PTrace 제한
ptrace() 시스템 콜은 디버깅에 사용되지만, 악용되면 다른 프로세스의 메모리를 읽거나 수정할 수 있어. HardenedBSD는 hardening.ptrace_hardening sysctl을 통해 ptrace 사용을 제한해. 루트 권한이 있어도 특정 조건에서만 ptrace를 허용함.
🔹 Trusted Path Execution (TPE)
TPE는 신뢰할 수 없는 경로(예: 일반 사용자 홈 디렉토리)에 있는 바이너리의 실행을 차단하는 기능이야. 공격자가 악성 바이너리를 업로드하고 실행하는 공격을 방어해. HardenedBSD는 TPE를 지원하고 sysctl로 제어 가능해.
🔹 SEGVGUARD
세그멘테이션 폴트(SIGSEGV)가 반복적으로 발생하는 프로세스를 감지하고 차단하는 기능이야. 브루트포스 ASLR 우회 시도를 탐지하는 데 효과적이야. 일정 횟수 이상 크래시가 발생하면 해당 프로세스를 일시적으로 실행 금지시켜.
# HardenedBSD ASLR 관련 sysctl 예시
sysctl hardening.aslr.status # ASLR 전체 상태
sysctl hardening.aslr.stack_gap # 스택 랜덤 간격
sysctl hardening.aslr.pie # PIE 바이너리 랜덤화
sysctl hardening.pax.segvguard.status # SEGVGUARD 상태
sysctl hardening.ptrace_hardening # ptrace 제한
2014년 Heartbleed 취약점이 OpenSSL에서 발견됐을 때, OpenBSD 팀은 OpenSSL 코드베이스를 보고 경악했어. 코드 품질이 너무 낮고 불필요한 복잡성이 가득하다고 판단한 거지. 그래서 OpenBSD 팀이 직접 OpenSSL을 포크해서 LibreSSL을 만들었어.
LibreSSL은 OpenSSL에서 수십만 줄의 레거시 코드를 제거하고, 안전하지 않은 암호화 알고리즘들을 삭제하고, 코드 품질을 대폭 개선했어. 현재 OpenBSD의 기본 TLS 라이브러리는 LibreSSL이야.
HardenedBSD는 LibreSSL을 사용할 수 있지만, 기본적으로는 FreeBSD와 마찬가지로 OpenSSL을 사용해. 포트 시스템을 통해 LibreSSL로 전환하는 것도 가능하긴 해.
- SSLv2, SSLv3 등 구식 프로토콜 제거
- 불필요한 플랫폼 지원 코드 제거 (수십만 줄 삭제)
- 안전한 메모리 관리 함수 사용
- 코드 감사 및 버그 수정
- OpenBSD의 arc4random() 등 안전한 난수 생성기 사용
이거 모르는 사람 없겠지만ㅋㅋㅋ OpenSSH가 OpenBSD 프로젝트에서 만든 거야. 1999년에 처음 릴리즈됐고, 지금은 전 세계 서버의 SSH 연결 대부분이 OpenSSH를 사용해. 진짜 레전드 프로젝트임.
OpenBSD는 OpenSSH를 지속적으로 개발하고 보안 감사를 수행해. 새로운 암호화 알고리즘 도입(예: Ed25519, ChaCha20-Poly1305)도 OpenBSD 팀이 선도하는 경우가 많아.
HardenedBSD도 당연히 OpenSSH를 사용하는데, FreeBSD 포트 시스템을 통해 최신 버전을 쉽게 설치할 수 있어.
OpenBSD는 자체 개발한 PF(Packet Filter)를 사용해. PF는 원래 OpenBSD에서 만들어졌고, 나중에 FreeBSD, NetBSD, macOS 등에도 이식됐어. 문법이 직관적이고 강력한 기능을 제공해.
PF의 특징:
- 상태 기반(stateful) 패킷 필터링
- NAT, 로드 밸런싱 지원
- 직관적인 규칙 문법
- scrub 기능으로 패킷 정규화
- authpf를 통한 사용자 인증 기반 방화벽
HardenedBSD는 FreeBSD 기반이라 IPFW와 PF 둘 다 사용 가능해. FreeBSD에 이식된 PF 버전을 쓸 수 있어서 OpenBSD PF 문법에 익숙한 사람도 어렵지 않게 적응할 수 있어.
# OpenBSD PF 규칙 예시
# /etc/pf.conf
ext_if = "em0"
int_if = "em1"
# 기본 정책: 모두 차단
block all
# 루프백 허용
pass quick on lo0
# 외부 인터페이스: 상태 기반 허용
pass in on $ext_if proto tcp to port { 22 80 443 } keep state
pass out on $ext_if keep state
# 스크럽 (패킷 정규화)
match in all scrub (no-df random-id)
OpenBSD의 네트워크 스택은 보안을 위해 여러 강화 조치가 기본으로 적용되어 있어:
- IP 스푸핑 방지: 기본적으로 역방향 경로 필터링 활성화
- TCP SYN 쿠키: SYN 플러드 공격 방어
- ICMP 제한: 불필요한 ICMP 응답 비활성화
- IPv6 보안: RA(Router Advertisement) 가드 기본 활성화
HardenedBSD도 FreeBSD의 네트워크 스택을 기반으로 비슷한 보안 설정을 제공하고, sysctl net.inet.*을 통해 세밀하게 조정 가능해. FreeBSD의 네트워크 스택 자체가 매우 성숙하고 안정적이라는 장점이 있어.
OpenBSD는 pkg_add 명령어로 바이너리 패키지를 설치하고, ports 시스템으로 소스에서 빌드할 수 있어.
패키지 수는 약 11,000개 이상으로, Linux 배포판에 비하면 적은 편이야. 하지만 OpenBSD 팀이 직접 보안 감사를 거친 패키지들이라 신뢰도가 높아.
중요한 점은, OpenBSD에서 패키지를 설치할 때 해당 패키지가 pledge()와 unveil()을 지원하도록 패치된 경우가 많아. 예를 들어 OpenBSD의 Firefox 패키지는 pledge/unveil이 적용된 버전이야. 이게 진짜 차별점임.
단점은 최신 소프트웨어 지원이 늦거나, 아예 지원하지 않는 경우가 있어. 특히 상용 소프트웨어나 게임 관련 패키지는 거의 없다고 봐야 해. 서버 용도로는 충분하지만, 데스크탑으로 쓰기엔 좀 불편할 수 있어.
# OpenBSD 패키지 관리 예시
pkg_add nginx # nginx 설치
pkg_add -u # 모든 패키지 업데이트
pkg_info # 설치된 패키지 목록
pkg_delete nginx # 패키지 제거
HardenedBSD는 FreeBSD의 pkg 패키지 매니저와 ports 시스템을 그대로 사용해. 이게 엄청난 장점이야.
FreeBSD ports는 30,000개 이상의 패키지를 제공하고, 대부분의 오픈소스 소프트웨어가 포함되어 있어. Linux에서 쓰던 소프트웨어 대부분을 FreeBSD/HardenedBSD에서도 쓸 수 있어.
HardenedBSD는 자체 패키지 저장소(HardenedBSD pkg 저장소)를 운영하는데, 여기서 제공하는 패키지들은 HardenedBSD의 보안 기능(CFI, SafeStack 등)을 활성화한 상태로 컴파일된 버전이야. 일반 FreeBSD pkg 저장소 패키지도 쓸 수 있지만, 보안 강화 효과는 줄어들어.
실용성 면에서는 HardenedBSD가 훨씬 유리해. Docker, Kubernetes 관련 도구들, 다양한 데이터베이스, 웹 서버 등을 쉽게 설치할 수 있거든.
# HardenedBSD/FreeBSD 패키지 관리 예시
pkg install nginx # nginx 설치
pkg upgrade # 모든 패키지 업그레이드
pkg info # 설치된 패키지 목록
pkg delete nginx # 패키지 제거
pkg audit -F # 보안 취약점 감사
OpenBSD는 특정 용도에서 진짜 독보적이야. 어디서 쓰면 최고냐고?
🔹 방화벽/라우터
PF 방화벽이 기본 탑재되어 있고, 네트워크 보안이 극도로 강화되어 있어서 엣지 방화벽으로 최고야. 많은 기업들이 OpenBSD를 방화벽 전용 OS로 사용해. 특히 OpenBSD + PF + CARP(고가용성) 조합은 엔터프라이즈 방화벽 솔루션으로 손색없어.
🔹 VPN 서버
OpenBSD는 OpenIKED라는 자체 IKEv2 데몬을 개발했어. 이것도 pledge/unveil로 보호되어 있고, 코드 품질이 매우 높아. WireGuard도 지원해.
🔹 DNS 서버
Unbound(재귀 DNS)와 NSD(권한 DNS)가 기본 포함되어 있고, 둘 다 pledge로 보호되어 있어. DNSSEC 지원도 완벽해.
🔹 웹 서버 (소규모)
OpenBSD에는 httpd라는 자체 웹 서버가 내장되어 있어. 기능은 단순하지만 보안이 철저하고, Let's Encrypt 인증서 갱신을 위한 acme-client도 기본 포함이야. 소규모 정적 사이트나 API 서버로 충분해.
🔹 SSH 점프 호스트/배스천 서버
보안이 극도로 중요한 배스천 서버로 OpenBSD는 최고의 선택이야. 공격 표면이 최소화되어 있고, 기본 설치 상태에서도 매우 안전해.
🔹 범용 보안 서버
FreeBSD 생태계의 풍부한 소프트웨어를 활용하면서 강화된 보안이 필요한 경우에 최적이야. 웹 서버, 데이터베이스 서버, 애플리케이션 서버 등 다양한 역할을 수행할 수 있어.
🔹 Jail 기반 격리 환경
FreeBSD의 Jail은 컨테이너와 유사한 격리 환경을 제공해. HardenedBSD에서 Jail을 사용하면 각 서비스를 격리된 환경에서 실행하면서 ASLR, CFI 등의 보안 기능도 함께 적용돼. iocage나 bastille 같은 Jail 관리 도구와 함께 쓰면 편리해.
🔹 보안 연구/테스트 환경
HardenedBSD는 최신 익스플로잇 방어 기술들을 실험하고 테스트하는 환경으로도 좋아. CFI, SafeStack 등의 효과를 직접 검증해볼 수 있거든.
🔹 FreeBSD 마이그레이션
기존 FreeBSD 서버를 보안 강화 버전으로 업그레이드하고 싶을 때 HardenedBSD가 좋은 선택이야. 기존 FreeBSD 설정과 소프트웨어를 대부분 그대로 사용할 수 있어서 마이그레이션 비용이 낮아.
보안 강화 기능들이 성능에 미치는 영향은 실제로 있어. 근데 생각보다 크지 않은 경우가 많고, 워크로드에 따라 다르게 나타나.
ASLR 오버헤드: 거의 없음. 프로세스 시작 시 약간의 오버헤드가 있지만, 실행 중에는 영향 없어.
CFI 오버헤드: 간접 호출이 많은 코드에서 1~5% 정도의 성능 저하가 있을 수 있어. 하지만 대부분의 서버 워크로드에서는 무시할 수 있는 수준이야.
SafeStack 오버헤드: 스택 접근 패턴에 따라 다르지만, 일반적으로 1~3% 수준이야.
pledge/unveil 오버헤드: 시스템 콜 진입 시 약간의 검사 비용이 있지만, 실제 측정해보면 거의 무시할 수 있는 수준이야.
전반적으로 OpenBSD는 보안 기능들이 잘 최적화되어 있어서 성능 오버헤드가 적어. 다만 네트워크 처리량은 Linux나 FreeBSD보다 낮은 경우가 있어. 이건 보안 기능 때문이 아니라 네트워크 스택 설계 차이 때문이야.
HardenedBSD는 FreeBSD의 성능을 기반으로 하면서 보안 기능을 추가한 거라, 순수 성능 면에서는 FreeBSD와 비슷해. CFI, SafeStack 등의 오버헤드가 있지만, 고성능 서버 워크로드에서도 충분히 사용 가능한 수준이야.
OpenBSD는 6개월마다 새 버전을 릴리즈해. 현재 지원되는 버전은 최신 버전과 그 이전 버전, 총 두 개야. 즉, 한 버전의 지원 기간이 약 1년이야.
보안 패치는 syspatch 명령어로 적용할 수 있어. 커널과 기본 시스템에 대한 바이너리 패치를 제공해서, 소스에서 다시 빌드하지 않아도 돼.
릴리즈 사이클이 짧아서 항상 최신 보안 기능을 사용할 수 있다는 장점이 있지만, 업그레이드를 자주 해야 한다는 부담도 있어. 특히 장기 지원(LTS) 버전이 없어서, 엔터프라이즈 환경에서는 이 점이 단점으로 작용할 수 있어.
# OpenBSD 시스템 업데이트
syspatch # 보안 패치 적용
pkg_add -u # 패키지 업데이트
sysupgrade # 다음 버전으로 업그레이드
HardenedBSD는 FreeBSD의 릴리즈 사이클을 따라가면서 자체 보안 패치를 추가해. FreeBSD는 CURRENT(개발 브랜치), STABLE(안정 브랜치), RELEASE(릴리즈 버전) 세 가지 트랙이 있어.
HardenedBSD는 FreeBSD의 각 브랜치에 대응하는 버전을 제공하고, hbsd-update 명령어로 시스템을 업데이트할 수 있어. FreeBSD의 보안 어드바이저리(SA)가 나오면 HardenedBSD도 빠르게 패치를 제공하는 편이야.
FreeBSD는 5년간의 보안 지원을 제공하는 버전이 있어서, 장기 운영이 필요한 서버에 더 적합할 수 있어. HardenedBSD도 이 사이클을 따라가기 때문에 비슷한 장기 지원을 기대할 수 있어.
# HardenedBSD 시스템 업데이트
hbsd-update # HardenedBSD 시스템 업데이트
pkg upgrade # 패키지 업그레이드
freebsd-update fetch # FreeBSD 베이스 업데이트 확인
freebsd-update install # 업데이트 적용
이 부분이 실제 도입 결정에 꽤 중요한 요소야.
OpenBSD는 다양한 아키텍처를 지원해: amd64, i386, arm64, armv7, mips64, powerpc, powerpc64, riscv64, sparc64 등. 근데 최신 하드웨어 드라이버 지원이 Linux보다 느린 경우가 많아. 특히 최신 GPU, 무선 랜 카드 등은 드라이버가 없거나 기능이 제한적일 수 있어.
서버 환경에서는 일반적으로 문제없어. Intel/AMD x86-64 서버 하드웨어는 대부분 잘 지원되고, 네트워크 카드도 주요 제조사 제품은 드라이버가 있어.
HardenedBSD는 FreeBSD의 하드웨어 지원을 그대로 물려받아. FreeBSD는 Linux 다음으로 하드웨어 지원이 넓은 OS 중 하나야. 특히 서버 환경에서는 거의 모든 주요 하드웨어를 지원해. Intel, AMD, ARM 서버 플랫폼 모두 잘 지원되고, 네트워크 카드, 스토리지 컨트롤러 등의 드라이버도 풍부해.
클라우드 환경에서는 둘 다 AWS, GCP, Azure 등 주요 클라우드 플랫폼에서 사용 가능한 이미지가 있어. 다만 공식 지원 수준은 Linux에 비해 낮은 편이야.
| 항목 | OpenBSD | HardenedBSD |
|---|---|---|
| 지원 아키텍처 | 13개+ (amd64, arm64 등) | FreeBSD 지원 아키텍처 (amd64, arm64, i386 등) |
| 최신 하드웨어 드라이버 | 보통 (Linux보다 느림) | 양호 (FreeBSD 수준) |
| 서버 하드웨어 지원 | 양호 | 우수 |
| 클라우드 지원 | 제한적 | 보통 |
| 가상화 게스트 | VMware, KVM, Xen, bhyve | VMware, KVM, Xen, bhyve |
OpenBSD의 가장 독특한 점 중 하나가 바로 지속적인 수동 코드 감사야. 개발자들이 코드를 한 줄 한 줄 직접 읽으면서 취약점을 찾아내는 거야. 이게 자동화 도구로는 찾기 어려운 논리적 취약점이나 설계 결함을 발견하는 데 효과적이야.
OpenBSD 팀이 코드 감사를 통해 발견한 취약점들이 다른 OS에도 영향을 미치는 경우가 많아. 예를 들어 OpenSSH, OpenSSL(LibreSSL 포크 전), 각종 네트워크 데몬들에서 발견된 취약점들이 OpenBSD 감사를 통해 먼저 발견되고 수정된 사례가 많아.
CVE 대응 속도도 빠른 편이야. 중요한 취약점이 발견되면 패치가 매우 빠르게 나오고, syspatch를 통해 쉽게 적용할 수 있어.
HardenedBSD는 FreeBSD의 보안 팀(FreeBSD Security Team)이 발표하는 보안 어드바이저리를 기반으로 패치를 제공해. FreeBSD 자체의 코드 감사 수준도 상당히 높은 편이야.
HardenedBSD만의 추가적인 보안 기능들(ASLR, CFI 등)에 대한 취약점 대응은 HardenedBSD 팀이 직접 담당해. 팀 규모가 OpenBSD보다 작아서 대응 속도가 다소 느릴 수 있지만, 커뮤니티가 활발하게 기여하고 있어.
중요한 점은, HardenedBSD의 보안 강화 기능들이 취약점 자체를 막는 게 아니라 취약점 악용을 어렵게 만드는 방어 계층이라는 거야. 즉, 취약점이 있어도 실제 공격으로 이어지기 어렵게 만드는 거지. 이게 Defense in Depth(심층 방어) 전략이야.
OpenBSD = 취약점 자체를 줄이는 전략 (코드 감사 + 최소 기능)
HardenedBSD = 취약점이 있어도 악용하기 어렵게 만드는 전략 (ASLR + CFI + SafeStack)
두 접근 방식은 상호 보완적이야!
솔직히 말하면 OpenBSD는 진입장벽이 꽤 높아. Linux에서 넘어오는 경우 특히 그래.
어려운 점들:
- 패키지 수가 적어서 원하는 소프트웨어가 없을 수 있어
- pledge/unveil 같은 독자적인 보안 API를 이해해야 해
- 일부 Linux 명령어나 동작 방식이 달라
- 문서가 영어 위주이고, 한국어 자료가 매우 적어
- 커뮤니티 규모가 작아서 질문에 대한 답변을 찾기 어려울 수 있어
좋은 점들:
- man 페이지가 매우 잘 작성되어 있어. OpenBSD man 페이지는 업계 최고 수준이야
- FAQ 문서가 체계적으로 정리되어 있어
- 공식 문서만 잘 읽어도 대부분의 문제를 해결할 수 있어
- 메일링 리스트가 활발하고, 개발자들이 직접 답변하는 경우도 있어
HardenedBSD는 FreeBSD 사용자라면 진입장벽이 낮아. FreeBSD를 모른다면 FreeBSD를 먼저 배우는 게 순서야.
FreeBSD 경험자라면:
- 대부분의 명령어와 설정이 동일해
- 추가로 배워야 할 건 HardenedBSD 특유의 sysctl 설정들 정도야
- 기존 FreeBSD 문서와 자료를 그대로 활용할 수 있어
처음 시작하는 경우:
- FreeBSD Handbook이 매우 잘 작성되어 있어서 이걸 먼저 공부하는 게 좋아
- HardenedBSD Wiki에 추가 보안 설정 관련 문서가 있어
- 커뮤니티는 OpenBSD보다 작지만, FreeBSD 커뮤니티 자원을 활용할 수 있어
재능넷 같은 플랫폼에서 FreeBSD/HardenedBSD 전문가를 찾아 멘토링을 받는 것도 좋은 방법이야. 혼자 삽질하는 것보다 훨씬 빠르게 배울 수 있거든ㅋㅋㅋ
OpenBSD는 기본 설치만으로도 이미 매우 안전하지만, 추가로 할 수 있는 설정들이 있어:
# /etc/sysctl.conf - 커널 파라미터 설정
# 코어 덤프 비활성화 (민감한 정보 노출 방지)
kern.nosuidcoredump=2
# 보안 레벨 설정 (1=보안, 2=고보안)
kern.securelevel=1
# dmesg 접근 제한
kern.allowkmem=0
# 네트워크 보안
net.inet.ip.forwarding=0 # IP 포워딩 비활성화
net.inet.tcp.blackhole=2 # 닫힌 포트 응답 없음
net.inet.udp.blackhole=1 # UDP 닫힌 포트 응답 없음
net.inet.icmp.bmcastecho=0 # 브로드캐스트 ICMP 비활성화
# /etc/login.conf - 로그인 보안 설정
default:\
:path=/usr/bin /bin /usr/sbin /sbin /usr/X11R6/bin /usr/local/bin:\
:umask=022:\
:datasize-max=1536M:\
:maxproc-max=256:\
:openfiles-max=1024:\
:stacksize-cur=4M:\
:localcipher=blowfish,8:\
:tc=auth-defaults:\
:tc=auth-ftp-defaults:
HardenedBSD는 sysctl을 통해 다양한 보안 기능을 제어할 수 있어:
# /etc/sysctl.conf - HardenedBSD 보안 설정
# ASLR 설정
hardening.aslr.status=3 # ASLR 완전 활성화
hardening.aslr.pie=1 # PIE 바이너리 랜덤화
hardening.aslr.stack_gap=1 # 스택 간격 랜덤화
hardening.aslr.mmap_len=1 # mmap 길이 랜덤화
# SEGVGUARD 설정
hardening.pax.segvguard.status=2 # SEGVGUARD 활성화
hardening.pax.segvguard.expiry=120 # 차단 만료 시간(초)
hardening.pax.segvguard.suspension=30 # 차단 시간(초)
hardening.pax.segvguard.maxcrashes=5 # 최대 크래시 허용 횟수
# ptrace 제한
hardening.ptrace_hardening=1 # ptrace 제한 활성화
# 네트워크 보안 (FreeBSD 공통)
net.inet.ip.forwarding=0
net.inet.tcp.blackhole=2
net.inet.udp.blackhole=1
security.bsd.see_other_uids=0 # 다른 사용자 프로세스 숨김
security.bsd.see_other_gids=0
security.bsd.unprivileged_read_msgbuf=0
# Jail 설정 예시 (/etc/jail.conf)
# HardenedBSD에서 Jail로 서비스 격리
www {
host.hostname = "www.example.com";
path = "/jails/www";
interface = "em0";
ip4.addr = 192.168.1.100;
# 보안 설정
allow.raw_sockets = 0;
allow.sysvipc = 0;
allow.mount = 0;
exec.start = "/bin/sh /etc/rc";
exec.stop = "/bin/sh /etc/rc.shutdown";
}
자, 이제 정리해보자. 둘 다 진심으로 보안에 진심인 OS들이야. 근데 접근 방식이 달라.
OpenBSD는 "처음부터 취약점이 없게 만들자"는 철학이야. 코드 감사, 최소 기능, pledge/unveil 같은 독자적인 보안 API로 공격 표면 자체를 줄여. 보안이 절대적으로 최우선인 환경, 특히 방화벽이나 배스천 서버 같은 특수 목적 서버에 최고야.
HardenedBSD는 "취약점이 있어도 악용하기 어렵게 만들자"는 철학이야. ASLR, CFI, SafeStack 같은 현대적인 익스플로잇 방어 기술로 공격 성공 확률을 낮춰. FreeBSD의 풍부한 생태계를 유지하면서 보안을 강화하고 싶을 때 좋아.
어느 게 더 낫냐고? 그건 사용 목적에 따라 달라. 방화벽이나 VPN 서버라면 OpenBSD, 다양한 서비스를 돌려야 하는 범용 서버라면 HardenedBSD가 더 실용적일 수 있어. 둘 다 Linux 기반 서버보다 훨씬 강화된 보안을 제공한다는 건 확실해 🔒
OpenBSD 공식 자료:
- OpenBSD 공식 사이트: openbsd.org
- OpenBSD FAQ: openbsd.org/faq/
- man 페이지: man.openbsd.org
- pledge(2) man 페이지: 시스템 콜 상세 설명
- unveil(2) man 페이지: 파일시스템 제한 상세 설명
HardenedBSD 공식 자료:
- HardenedBSD 공식 사이트: hardenedbsd.org
- HardenedBSD Wiki: wiki.hardenedbsd.org
- HardenedBSD GitHub: github.com/HardenedBSD
- FreeBSD Handbook: docs.freebsd.org/en/books/handbook/
관련 논문/발표:
- "Exploit Mitigation Techniques" - HardenedBSD 팀 발표 자료
- "pledge(2): A new mitigation mechanism" - OpenBSD 관련 발표
- "Capsicum: practical capabilities for UNIX" - Cambridge 대학 논문
커뮤니티:
- misc@openbsd.org 메일링 리스트
- HardenedBSD Discord 서버
- FreeBSD Forums (HardenedBSD 관련 내용도 다뤄)
보안은 한 번 설정하고 끝나는 게 아니라 지속적인 관심과 업데이트가 필요한 영역이야. 이 글이 보안 중심 OS를 이해하는 데 도움이 됐으면 좋겠어! 궁금한 점이 있으면 재능넷 지식인의 숲에서 전문가들에게 물어봐도 좋아 😊
댓글 0
지식인의 숲 - 지적 재산권 보호 고지
지적 재산권 보호 고지
- 저작권 및 소유권: 본 컨텐츠는 재능넷의 독점 AI 기술로 생성되었으며, 대한민국 저작권법 및 국제 저작권 협약에 의해 보호됩니다.
- AI 생성 컨텐츠의 법적 지위: 본 AI 생성 컨텐츠는 재능넷의 지적 창작물로 인정되며, 관련 법규에 따라 저작권 보호를 받습니다.
- 사용 제한: 재능넷의 명시적 서면 동의 없이 본 컨텐츠를 복제, 수정, 배포, 또는 상업적으로 활용하는 행위는 엄격히 금지됩니다.
- 데이터 수집 금지: 본 컨텐츠에 대한 무단 스크래핑, 크롤링, 및 자동화된 데이터 수집은 법적 제재의 대상이 됩니다.
- AI 학습 제한: 재능넷의 AI 생성 컨텐츠를 타 AI 모델 학습에 무단 사용하는 행위는 금지되며, 이는 지적 재산권 침해로 간주됩니다.

댓글 작성
이 글에 대한 여러분의 생각을 들려주세요
로그인이 필요합니다
댓글을 작성하려면 먼저 로그인해주세요.