최근 Glibc 2.34의 새로운 버전 출시가 발표되었습니다. 6개월간의 개발 끝에 출시된 이번 버전에는 libpthread, libdl, libutil, libanl 라이브러리의 포함을 비롯한 여러 중요한 변경 사항과 함께, 크래시를 유발하던 버그를 포함한 다양한 버그 수정 사항이 포함되어 있습니다.
Glibc에 익숙하지 않은 분들을 위해 설명드리자면, Glibc는 GNU C 라이브러리로, 흔히 glibc라고 불리며 GNU C 언어의 표준 런타임 라이브러리입니다. 이 C 라이브러리는 시스템 호출 및 기타 기본 함수를 제공하고 정의하며, 사용되는 시스템에서는 거의 모든 프로그램에서 사용됩니다.
Glibc 2.34의 주요 새 기능
Glibc 2.34의 새로운 버전에서는 주요 라이브러리인 libpthread, libdl, libutil 및 libanl이 통합되었습니다 . 따라서 애플리케이션에서 이러한 라이브러리의 기능을 사용하려면 더 이상 -lpthread, -ldl, -lutil 및 -lanl 옵션을 사용하여 링크할 필요가 없습니다.
또한, libresolv를 libc에 통합하기 위한 준비가 진행 중이며, 이를 통해 glibc 업그레이드 프로세스가 더욱 원활해지고 런타임 구현이 간소화될 것이라고 언급되어 있습니다 . 이전 버전의 glibc를 사용하여 빌드된 애플리케이션과의 호환성을 위해 스텁 라이브러리도 제공됩니다.
Glibc 2.34에서 Linux에 초점을 맞춘 변경 사항 중 가장 주목할 만한 것은 기존에 32비트 time_t 유형을 사용하던 구성에서 64비트 time_t 유형을 사용할 수 있게 된 기능 입니다 . 이 기능은 커널 버전 5.1 이상인 시스템에서만 사용할 수 있습니다.
리눅스에 특화된 또 다른 변경 사항은 열린 파일 디스크립터에서 실행 파일을 실행할 수 있도록 하는 ` execveat` 함수의 구현 입니다 . 이 새로운 함수는 시작 시 `/proc` 의사 파일 시스템이 마운트될 필요가 없는 `fexecve` 호출 구현에도 사용됩니다.
또한, `close_range()` 함수가 추가되었으며, 이 함수는 Linux 버전 5.9 이상 에서 사용할 수 있고, 프로세스가 열려 있는 파일 디스크립터 범위를 한 번에 모두 닫을 수 있도록 합니다. 더불어, `glibc.pthread.stack_cache_size` 매개변수가 구현되어 pthread 스택 캐시의 크기를 조정할 수 있게 되었습니다.
또한, "비동기 신호 안전" 요구 사항을 충족하는 `fork` 함수를 대체하는 `_Fork` 함수가 추가되었습니다. 즉, 시그널 핸들러에서 안전하게 호출할 수 있습니다. `_Fork` 함수 실행 중에는 최소한의 환경이 조성되어, 락이나 내부 상태를 변경할 수 있는 기능은 호출하지 않고 `raise` 및 `execute`와 같은 시그널 핸들러의 함수를 호출할 수 있습니다.
Glibc 2.34에서 수정된 취약점의 일부에 대해 다음이 언급됩니다.
CVE-2021-27645: 특수하게 조작된 네트워크 그룹 요청을 처리하는 동안 free 함수를 두 번 호출하여 nscd 프로세스(네임 서버 캐싱 데몬)가 오류를 일으킵니다.
CVE-2021-33574: SIGEV_THREAD 알림 유형을 사용할 때, 대체 CPU 바인딩 마스크가 설정된 스레드 속성을 사용하는 경우 mq_notify 함수에서 use-after-free 메모리 영역에 접근할 수 있습니다. 이 문제는 크래시를 유발할 수 있지만, 다른 공격 가능성도 배제할 수 없습니다.
CVE-2021-35942: wordexp 함수에서 매개변수 크기 오버플로가 발생하면 애플리케이션이 충돌할 수 있습니다.
그 외 주목할 만한 변경 사항은 다음과 같습니다.
- ISO C2X 표준 초안에 정의된 timespec_getres 기능이 추가되었으며 timespec_get 기능이 POSIX clock_getres 기능과 유사한 기능으로 향상되었습니다.
- gconv-modules 파일에는 최소한의 기본 gconv 모듈 세트만 남았고 나머지는 gconv-modules.d 디렉토리에 있는 추가 gconv-modules-extra.conf 파일로 이동되었습니다.
- 설치 가능한 공유 객체를 Glibc 버전에 연결하기 위한 심볼릭 링크의 사용이 제거되었습니다. 이러한 개체는 이제 있는 그대로 설치됩니다(예: libc.so.6은 이제 libc-2.34.so에 대한 링크가 아니라 파일입니다).
- Linux에서 shm_open 및 sem_open과 같은 기능에는 이제 / dev / shm 마운트 지점에 마운트된 공유 메모리에 대한 파일 시스템이 필요합니다.
마지막으로, 이 새로운 버전 에 대해 더 자세히 알고 싶으시다면 다음 링크에서 자세한 내용을 확인하실 수 있습니다 .