OpenBSD 보안 기능
OpenBSD security features오픈비SD operating system은, 시큐러티와 시큐러티 [1][2]: xxvii [3]기능의 개발에 중점을 두고 있습니다.저자인 Michael W. Lucas에 따르면 OpenBSD는 "어느 라이센스 [2]: xxix 조건에서도 사용 가능한 운영 체제 중 가장 안전한 것으로 널리 알려져 있습니다.
API 및 빌드 변경
버그나 시큐러티 결함은, 프로그래머의 에러에 의해서 발생하는 경우가 많습니다.일반적인 오류 원인은 의 오용입니다.strcpy
그리고.strcat
문자열은 C 프로그래밍 언어로 기능합니다.두 가지 일반적인 대안이 있습니다.strncpy
그리고.strncat
하지만 이해하기 어렵고 [4][5]오용하기 쉬우므로 OpenBSD는 Todd C를 개발합니다. Miller와 Theo de Raadt가 설계한 것은strlcpy
그리고.strlcat
기능하고 있습니다.[6]이러한 함수는 프로그래머가 실수로 버퍼를 종료하지 않거나 버퍼가 [7]오버플로우하는 것을 어렵게 하기 위한 것입니다.NetBSD 및 FreeB에 의해 채택되었습니다.GNU C [8]라이브러리가 아닌 SD 프로젝트.
OpenBSD에서는 안전하지 않은 문자열 조작이 기능할 때 다음과 같이 경고를 발행하도록 링커가 변경되었습니다.strcpy
,strcat
, 또는sprintf
, 가 검출되었습니다.OpenB에서 발생하는 모든 기능SD 소스 트리는 [citation needed]교환 완료.또한 정적 경계 검사기는 컴파일 [9]시 다른 일반적인 프로그래밍 오류를 찾기 위해 OpenBSD에 포함되어 있습니다.OpenBSD 프로젝트에서 개발된 기타 보안 관련 API는 다음과 같습니다.issetugid
[10] 그리고arc4random
를 클릭합니다.[11]
커널 랜덤화
Theo de Raadt는 2017년 6월 이메일에서 안정적인 시스템의 문제는 동시에 수개월 동안 가동될 수 있다는 것이라고 밝혔습니다.커널 내에는 상당한 랜덤화가 존재하지만 일부 키 주소는 그대로 유지됩니다.진행 중인 프로젝트는 모든 부팅 시 커널과 다른 모든 랜덤화가 다시 연결되도록 링커를 수정합니다.이는 커널 ASLR과는 다릅니다.이메일에서 그는 "결과적으로 모든 새로운 커널은 고유합니다.함수와 데이터 간의 상대적 오프셋은 고유합니다...[현재] 변경은 재부팅 시마다 새로 링크된 커널을 부팅하여 새로운 랜덤 커널을 서로 링크할 수 있도록 하는 발판입니다.고속 기계에서는 1초도 걸리지 않습니다.재부팅하면 새 커널이 실행되지만 다음 부팅을 위해 다른 커널이 구축됩니다.커널 내의 함수들 사이의 내부 델타들은 공격자가 예상하는 위치에 있지 않기 때문에 더 나은 정보 유출이 필요합니다."[12]
메모리 보호
OpenBSD는 버퍼 오버플로나 정수 오버플로 등의 공격으로부터 운영체제를 보호하기 위해 몇 가지 기술을 통합합니다.
Hiroaki Etoh가 개발한 ProPolice는 스택스매싱 [13]공격으로부터 애플리케이션을 보호하기 위해 설계된 GCC 확장입니다.이는 다수의 조작을 통해 이루어집니다.로컬 스택 변수는 포인터 뒤에 버퍼를 배치하여 버퍼 오버플로우 발생 시 버퍼 파손으로부터 보호됩니다.function 인수로부터의 포인터도 로컬버퍼 앞에 배치됩니다.또한 함수가 종료되면 로컬버퍼 뒤에 canari 값이 배치됩니다.버퍼 오버플로우를 검출합니다.ProPolice는 버퍼가 얼마나 취약한지를 판단하는 자동 휴리스틱스를 기반으로 버퍼를 보호할 것인지 여부를 선택하고 보호의 성능 [vague]오버헤드를 줄입니다.OpenB에 통합되었습니다.SD 버전 GCC는 2002년 12월에 OpenBSD 3.[14]3에서 처음 제공되었으며, 릴리즈 3.[15]4에서 커널에 적용되었습니다.확장 기능은 OpenBSD에서 지원되는 모든 CPU 아키텍처에서 작동하며 기본적으로 활성화되어 있기 때문에 컴파일된 C 코드는 사용자의 개입 [16]없이 보호됩니다.
2004년 5월 SPARC 플랫폼의 OpenBSD는 StackGhost의 형태로 스택 보호를 강화했습니다.이를 통해 SPARC 아키텍처의 기능을 사용하여 버퍼 [17]오버플로우의 부정 이용을 방지합니다.SPARC64 지원이 추가되었습니다.2005년 3월 현재.
OpenBSD 3.4에서는 W^X가 도입되었습니다.W^X는 메모리가 쓰기 가능하거나 실행 가능하지만 둘 다 사용할 수 없도록 하는 메모리 관리 스킴입니다.이 스킴은 버퍼 오버플로에 대한 또 다른 보호 레이어를 제공합니다.NX 비트를 하드웨어로 지원하는 x86-64와 같은 플랫폼에서는 비교적 쉽게 구현할 수 있지만 OpenB는SD는 일반적인 i386 [18]플랫폼에서 이를 지원하는 몇 안 되는 OS 중 하나입니다.이 플랫폼에는 페이지 단위의 실행 제어 기능이 내장되어 있지 않습니다.
3.8 릴리스의 개발 사이클 중에,malloc
메모리 관리 기능기존 Unix 운영체제에서는malloc
는 Unix 데이터 세그먼트를 확장함으로써 메모리를 더 많이 할당합니다.이 때문에 보안 [vague]문제에 대한 강력한 보호를 구현하기가 어려워졌습니다.그malloc
현재 OpenBSD에 구현되어 있습니다.mmap
시스템 콜: 랜덤메모리 주소를 반환하고 서로 다른 영역이 매핑되지 않도록 변경되었습니다.또한 공유 영역의 소규모 블록 할당이 랜덤화되고free
커널을 프로세스에 매핑된 상태로 두지 않고 커널로 즉시 메모리를 반환하도록 함수가 변경되었습니다.개발에 [citation needed]도움이 되도록 옵션 체크도 다수 추가되었다.이러한 기능에 의해, 프로그램의 버그를 검출하기 쉬워져 악용하기 어려워집니다.메모리가 파손되거나, 무효인 액세스가 무시되는 대신, 세그멘테이션의 장해가 발생해 프로세스가 중단되는 경우가 많습니다.이로 인해 OpenBSD 3.8에서 실행되고 있는 소프트웨어, 특히 버퍼의 시작 또는 끝을 넘어 읽히는 프로그램(이전에는 직접 검출되지 않았지만 현재는 [citation needed]에러를 일으킬 수 있는 버그)에 관한 몇 가지 문제가 밝혀졌습니다.이러한 기능을 구현하는 데 3년 이상이 걸렸지만 상당한 성능 손실은 없었습니다.
암호화 및 랜덤화
OpenBSD 프로젝트의 목표 중 하나는 강력한 암호화를 위한 시설과 소프트웨어를 핵심 운영 체제에 통합하는 것입니다.이를 위해 강력한 의사 난수 [19]소스, 내장된 암호화 해시 함수 및 변환, 암호화 하드웨어(OpenBSD Cryptographic Framework) 지원 등 다양한 하위 수준의 기능이 제공됩니다.이러한 기능은 CPU 집약적인 Blowfish 키 일정을 활용하여 bcrypt 암호 해싱 알고리즘을[20] 비롯한 OpenBSD 전체에서 사용됩니다.
패스워드와 같은 중요한 정보가 디스크에 유출되지 않도록 하기 위해 OpenBSD는 스왑 파티션 암호화를 지원합니다.스왑 공간은 여러 작은 영역으로 분할되어 있으며, 각 영역에는 자체 암호화 키가 할당되어 있습니다.지역 내의 데이터가 불필요해지면 OpenB가 즉시 실행됩니다.SD는 암호화 [21]키를 폐기함으로써 안전하게 삭제합니다.이 기능은 OpenBSD 3.8 이후에서는 디폴트로 유효하게 되어 있습니다.
또한 네트워크 스택은 랜덤화를 많이 사용하여 보안을 강화하고 TCP 초기 시퀀스 번호 및 타임스탬프, 에페메랄 송신원 포트 [22]등 공격자가 사용할 수 있는 다양한 값의 예측 가능성을 낮춥니다.ICMP 문제 대책 및 용장성 소프트웨어(CARP 및 pfsync 등) 등 네트워크의 복원력과 가용성을 높이는 기능도 다수 포함되어 있습니다.이 프로젝트는 [23]1999년에 암호화된 SSH 데몬을 위해 플레인텍스트 Telnet 데몬을 최초로 비활성화한 것으로 IPSec 등의 기타 통합 암호화 소프트웨어를 갖추고 있습니다.Telnet 데몬은 OpenBSD 버전 3.8이 출시되기 전인 2005년에[24] OpenBSD에서 완전히 삭제되었습니다.
OpenBSD 프로젝트는 암호화 서명 및 파일 검증을 위한 자체 유틸리티를 개발했습니다.signify
OpenPGP 및 GnuPG 등의 기존 표준 및 소프트웨어를 사용하는 대신,[25]의 작성자signify
유틸리티인 Ted Unangst는 2015년에 OpenPGP와 GnuPG에 대해 다음과 같이 썼다. "기존 툴을 사용할 때 우려했던 것은 복잡성, 품질 및 [25]복잡성이었다."이는 복잡함을 줄이고 소프트웨어에 존재하는 취약성의 가능성을 줄여 사용자가 소프트웨어를 더 잘 이해하고 보안 교육을 받은 의사결정을 내릴 수 있도록 지원하는 프로젝트의 오랜 경향과 일치합니다. signify
는 기본 운영체제에 통합되어 OpenBSD 5.5 [26][27]이후의 모든 릴리스, 패치 및 패키지를 검증하는 데 사용됩니다.이와는 대조적으로 다른 자유 소프트웨어 운영 체제와 보안에 중점을 둔 소프트웨어는 릴리스 검증에 OpenPGP를 사용하는 경향이 있으며 2022년 현재 다음과 같은 작업을 계속하고 있습니다.Debian은 침투 테스트, 보안 조사,[28] 디지털 포렌식 및 리버스 [29]엔지니어링을 위한 특수 운영 체제인 Ubuntu; Kali Linux를 비롯한 다른 운영 체제의 기반으로도 사용됩니다.보안에 중점을 둔 운영 [30]체제인 Qubes OSTor Browser, 익명 웹 [31]브라우저언론인과 내부고발자가 인터넷을 [32]통해 안전하고 익명으로 정보를 교환하기 위한 소프트웨어 패키지인 SecureDrop과 VeraCrypt는 즉석 암호화 및 전체 디스크 암호화를 [33]위한 소프트웨어 프로그램입니다.
X11
OpenBSD의 X11에서는 일반적으로 X서버와 X클라이언트 모두 에스컬레이션된 다이렉트 메모리 또는 하드웨어 권한을 가지고 있지 않습니다.인텔(4) 드라이버 또는 Radeon(4) 드라이버로 X를 구동하는 경우, 이러한 드라이버는 보통 Direct Rendering Management(4) 커널 인터페이스를 통해서만 기본 하드웨어와 상호 작용하기 때문에 낮은 수준의 메모리/하드웨어 액세스는 커널만으로 처리됩니다.WSFB 등의 다른 드라이버도 같은 패턴을 따릅니다.이 때문에 OpenBSD의 X11에서는 다른 시스템에서처럼 사용자/루트 프로그램에 대한 낮은 수준의 메모리 또는 하드웨어 액세스는 열리지 않습니다.이러한 접근은 과거에 행해졌던 것처럼 사용자가 machdep을 에스컬레이션할 필요가 있었습니다.allowaperture 설정을 기본 0 설정에서 안전하지 않은 [citation needed]설정으로 변경합니다.
OpenBSD 버전의 X Window System(Xenocara)에는 몇 가지 보안 변경이 있습니다.서버 및 일부 기본 애플리케이션은 권한 분리를 이용하기 위해 패치 적용되며 OpenBSD는 X의 [34]메모리 액세스를 제한하는 "어퍼처" 드라이버를 제공합니다.그러나 Locc Duflot의 X 보안 결함 연구 후 Theo de Raadt는 이 조리개 드라이버는 "우리가 할 수 있는 최선의 것"일 뿐이며 X는 "대학 [35]수업에서 듣게 될 모든 보안 모델을 위반한다"고 말했다.그는 X개발자들이 "10년 된 문제를 천천히 해결하고 있다"고 비난했다.2006년 11월 29일, VESA 커널 드라이버가 개발되어 X가 애퍼처 [36]드라이버를 사용하지 않고도 더 느리지만 실행할 수 있게 되었습니다.
2014년 2월 15일 루트 권한 없이 실행할 [37][38]수 있도록 X가 추가로 수정되었습니다.
X에서 [39]보안 취약성이 발견된 후 OpenBSD는 루트 사용자로서의 X 실행을 지원하지 않으며 전용 디스플레이 매니저를 통한 X 실행만 지원합니다._x11
사용자입니다.
기타 기능
라이브러리의 권한 분리,[40] 권한 취소, 초루팅 및 랜덤 로딩도 시스템의 보안을 강화하는 데 한몫합니다.이들 대부분은 tcpdump 및 Apache와 같은 일반적인 프로그램의 OpenBSD 버전 및 BSD 인증 시스템에 적용되어 있습니다.
OpenBSD는 OpenB에 의해 검출된 각종 버그 및 보안 침해와 관련하여 사용자에게 완전한 공개를 제공한 전력이 있습니다.SD팀[41]이는 프로젝트의 슬로건인 "디폴트 설치의 리모트 홀은 2개뿐입니다.오랜만에!"에서 알 수 있습니다.
OpenBSD 5.3에서는 풀 디스크 암호화 지원이 [42]도입되었습니다.
OpenBSD 5.9에는 당시 최신 모델에 대한 지원이 포함되어 있습니다.pledge
시스템 콜(OpenBSD 5.8에서 도입)tame
5.9에서 로 이름이 변경되었습니다.pledge
프로세스 기능을 올바른 [43]동작에 필요한 최소한의 서브셋으로 제한합니다.프로세스가 손상되어 의도하지 않은 동작을 실행하려고 하면 커널에 의해 프로세스가 종료됩니다.도입 이후 애플리케이션 및 포트는 다음과 같은 기능을 지원하도록 변경되었습니다.pledge
(Cromium Web 브라우저 포함)
OpenBSD 6.4는unveil
파일 시스템 가시성을 최소 [44]수준으로 제한하기 위한 시스템 호출입니다.
레퍼런스
- ^ Korff, Yanek; Hope, Paco; Potter, Bruce (2005). Mastering FreeBSD and OpenBSD security. Sebastopol, California, USA: O'Reilly. ISBN 0-596-00626-8.
- ^ a b Lucas, Michael W. (2013). Absolute OpenBSD: Unix for the practical paranoid (2nd ed.). San Francisco: No Starch Press. ISBN 978-1-59327-476-4.
- ^ Palmer, Brandon; Nazario, Jose (2004). Secure Architectures with OpenBSD. Boston: Addison-Wesley. ISBN 0-321-19366-0.
- ^ "strncpy – copy part of a string to another". OpenBSD manual pages. Retrieved May 14, 2021.
- ^ "strncat – concatenate a string with part of another". OpenBSD manual pages. Retrieved May 14, 2021.
- ^ "strlcpy, strlcat – size-bounded string copying and concatenation". OpenBSD manual pages. Retrieved May 14, 2021.
- ^ Miller, Todd C.; de Raadt, Theo (June 6, 1999). strlcpy and strlcat - Consistent, Safe, String Copy and Concatenation. USENIX Annual Technical Conference. Monterey, California. Retrieved May 26, 2016.
- ^ Drepper, Ulrich (August 8, 2000). "Re: PATCH: safe string copy and concatenation". libc-alpha@sources.redhat.com (Mailing list). Retrieved May 26, 2016.
- ^ Madhavapeddy, Anil (June 26, 2003). "CVS: cvs.openbsd.org: src". openbsd-cvs (Mailing list). Retrieved March 31, 2013.
- ^ "issetugid – is current executable running setuid or setgid". OpenBSD manual pages. Retrieved May 14, 2021.
- ^ "arc4random, arc4random_buf, arc4random_uniform – random number generator". OpenBSD manual pages. Retrieved May 14, 2021.
- ^ 2017-06-13 이메일
- ^ "GCC extension for protecting applications from stack-smashing attacks". IBM Research. Archived from the original on June 4, 2014. Retrieved May 26, 2016.
- ^ "OpenBSD 3.3". OpenBSD. Retrieved May 28, 2016.
Integration of the ProPolice stack protection technology [...] into the system compiler.
- ^ "OpenBSD 3.4". OpenBSD. Retrieved May 28, 2016.
ProPolice stack protection has been enabled in the kernel as well.
- ^ "gcc-local – local modifications to gcc". OpenBSD manual pages. Retrieved May 28, 2016.
gcc comes with the 'ProPolice' stack protection extension, which is enabled by default.
- ^ Frantzen, Mike; Shuey, Mike (August 13, 2001). StackGhost: Hardware Facilitated Stack Protection. 10th USENIX Security Symposium. Washington, D.C. Retrieved May 26, 2016.
- ^ "OpenBSD 5.8". OpenBSD. Retrieved May 28, 2016.
Support for the NX (No-eXecute) bit on i386, resulting in much better W^X enforcement in userland for hardware that has this feature.
- ^ de Raadt, Theo; Hallqvist, Niklas; Grabowski, Artur; Keromytis, Angelos D.; Provos, Niels (June 6, 1999). Cryptography in OpenBSD: An Overview. USENIX Annual Technical Conference. Monterey, California. Retrieved January 30, 2005.
- ^ Provos, Niels; Mazières, David (June 6, 1999). A Future-Adaptable Password Scheme. USENIX Annual Technical Conference. Monterey, California. Retrieved May 26, 2016.
- ^ Provos, Niels (August 14, 2000). Encrypting Virtual Memory. 9th USENIX Security Symposium. Denver, Colorado. Retrieved April 9, 2006.
- ^ Biancuzzi, Federico (October 12, 2005). "OpenBSD's network stack". SecurityFocus. Retrieved December 10, 2005.
- ^ de Raadt, Theo (April 10, 1999). "disable telnet/ftp/login by default, for now". OpenBSD.
- ^ de Raadt, Theo (May 25, 2005). "CVS: cvs.openbsd.org: src". OpenBSD-CVS mailing list.
Removed files: libexec/telnetd
- ^ a b Unangst, Ted. "signify: Securing OpenBSD From Us To You". www.openbsd.org. BSDCan 2015 (June), Ottawa, Canada. Retrieved July 12, 2022.
- ^ "OpenBSD 5.5". www.openbsd.org. Retrieved July 12, 2022.
- ^ "OpenBSD: Innovations". www.openbsd.org.
- ^ "Verifying authenticity of Debian images". www.debian.org. Retrieved July 12, 2022.
- ^ "Download Kali Linux Images Securely Kali Linux Documentation". Kali Linux. Retrieved July 12, 2022.
- ^ "Verifying signatures". Qubes OS. Retrieved July 12, 2022.
- ^ "How can I verify Tor Browser's signature? Tor Project Support". support.torproject.org. Retrieved July 12, 2022.
- ^ "Share and accept documents securely". SecureDrop. Freedom of the Press Foundation. Retrieved July 12, 2022.
- ^ "VeraCrypt - Free Open source disk encryption with strong security for the Paranoid". veracrypt.fr. IDRIX. Retrieved July 12, 2022.
- ^ "xf86 – X Window System aperture driver". OpenBSD manual pages. Retrieved May 14, 2021.
- ^ de Raadt, Theo (May 11, 2006). "Re: security bug in x86 hardware (thanks to X WIndows)". openbsd-misc (Mailing list). Retrieved May 26, 2016.
- ^ Herrb, Matthieu (November 29, 2006). "CVS: cvs.openbsd.org: XF4". openbsd-cvs (Mailing list). Retrieved May 26, 2016.
- ^ Kettenis, Mark (February 15, 2014). "CVS: cvs.openbsd.org: xenocara". openbsd-cvs (Mailing list). Retrieved May 26, 2016.
- ^ "Xorg can now run without privilege on OpenBSD". OpenBSD Journal. February 22, 2014. Retrieved May 26, 2016.
- ^ "OpenBSD 6.4 Errata". www.openbsd.org. Retrieved May 23, 2019.
- ^ Provos, Niels; Friedl, Markus; Honeyman, Peter (August 4, 2003). Preventing Privilege Escalation. 12th USENIX Security Symposium. Washington, D.C. Retrieved May 26, 2016.
- ^ Miller, Robin (December 11, 2000). "Theo de Raadt Responds". Slashdot. Archived from the original on July 28, 2011. Retrieved May 16, 2014.
- ^ "OpenBSD 5.3". OpenBSD. Retrieved May 26, 2016.
- ^ "pledge() - a new mitigation mechanism". OpenBSD. Retrieved May 19, 2018.
- ^ "unveil — unveil parts of a restricted filesystem view". OpenBSD manual pages. Retrieved May 15, 2020.
외부 링크
- 10년 후의 갱신 정보 이용 경감 방법
- 안전한 프로그래밍에 관한 Theo de Raadt의 이메일:업계별 strlcpy/strlcat 수용 문제에 대하여