강화 - 운영 체제 권장 사항
일반적인 강화 지침은 주요 강화 문서에 요약되어 있습니다.
기본 운영 체제를 구성하여 전반적인 보안을 향상시킬 수 있습니다. 자체 관리 GitLab 인스턴스와 같은 통제된 환경에서는 추가 단계가 필요하며, 사실 특정 배포에 대해 종종 필요합니다. FedRAMP는 그러한 배포의 예입니다.
SSH 구성
SSH 클라이언트 구성
클라이언트 액세스를 위해 (GitLab 인스턴스 또는 기본 운영 체제에 접근할 때), SSH 키 생성을 위한 몇 가지 권장 사항이 있습니다. 첫 번째는 일반적인 SSH 키입니다:
ssh-keygen -a 64 -t ed25519 -f ~/.ssh/id_ed25519 -C "ED25519 Key"
FIPS 준수 SSH 키의 경우 다음을 사용하십시오:
ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa -C "RSA FIPS-compliant Key"
SSH 서버 구성
운영 체제 수준에서 SSH 액세스를 허용할 경우 (일반적으로 OpenSSH를 통해), sshd_config
파일의 구성 옵션 예시는 다음과 같습니다 (정확한 위치는 운영 체제에 따라 다를 수 있지만 일반적으로는 /etc/ssh/sshd_config
에 있습니다):
#
# 예시 sshd 구성 파일. 이것은 공개 키 인증을 지원하며,
# 몇 가지 잠재적 보안 위험 영역을 끕니다.
#
PubkeyAuthentication yes
PasswordAuthentication yes
UsePAM yes
UseDNS no
AllowTcpForwarding no
X11Forwarding no
PrintMotd no
PermitTunnel no
PermitRootLogin no
# 클라이언트가 로케일 환경 변수를 전달할 수 있도록 허용
AcceptEnv LANG LC_*
# 기본값 120초를 60초로 변경
LoginGraceTime 60
# 서브시스템의 기본값 없음 재정의
Subsystem sftp /usr/lib/openssh/sftp-server
# 프로토콜 조정, FIPS 또는
# FedRAMP 배포에서 필요/추천되며, 오직 강력하고 입증된 알고리즘 선택을 사용합니다.
Protocol 2
Ciphers aes128-ctr,aes192-ctr,aes256-ctr
HostKeyAlgorithms ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521
KexAlgorithms ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521
Macs hmac-sha2-256,hmac-sha2-512
방화벽 규칙
방화벽 규칙의 경우, 기본 사용을 위해 TCP 포트 80
과 443
만 열어야 합니다. 기본적으로 5050
은 컨테이너 레지스트리에 대한 원격 액세스를 위해 열려 있지만, 강화된 환경에서는 대개 다른 호스트에 존재하며, 어떤 환경에서는 전혀 열리지 않을 수 있습니다. 따라서 권장 사항은 포트 80
과 443
만이며, 포트 80
은 443
으로 리디렉션하는 데만 사용해야 합니다.
FedRAMP와 같은 실제로 강화되거나 격리된 환경에서는 방화벽 규칙을 조정하여 액세스를 제한해야 합니다. 예를 들어, IP 주소가 192.168.1.2
이고 모든 권한이 있는 클라이언트가 192.168.1.0/24
에 있는 경우, 액세스를 안전 제한으로 192.168.1.0/24
의 포트 80
과 443
에만 제한하십시오, 다른 방화벽에서 액세스가 제한되더라도 말입니다.
자체 관리 인스턴스를 설치하는 경우, 설치가 시작되기 전에 방화벽 규칙을 구현하고 액세스를 관리자인 설치자에게만 제한해야 하며, 인스턴스가 설치되고 적절하게 강화된 후 사용자에 대한 추가 IP 범위를 추가해야 합니다.
iptables
또는 ufw
를 사용하는 것은 각 호스트에서 포트 80
및 443
접근을 구현하고 강제하는 데 허용되며, 그렇지 않으면 GCP Google Compute 또는 AWS Security Groups를 통한 클라우드 기반 방화벽 규칙을 사용하여 이를 시행해야 합니다. 모든 다른 포트는 차단되거나, 최소한 특정 범위로 제한되어야 합니다. 포트에 대한 자세한 내용은 패키지 기본값을 참조하십시오.
방화벽 추가 사항
다양한 서비스가 활성화되어 외부 접근이 필요할 수 있으며
(예: Sidekiq) 네트워크 접근을 열어야 할 필요가 있습니다.
이러한 유형의 서비스를 특정 IP 주소 또는 특정 Class C로 제한하세요.
층별 및 추가 예방 조치로서, 가능한 경우 이러한 추가 서비스를 GitLab의 특정 노드 또는 서브 네트워크로 제한하세요.
커널 조정
커널 조정은 /etc/sysctl.conf
또는 /etc/sysctl.d/
의 파일 중 하나를 편집하여 수행할 수 있습니다.
커널 조정은 공격의 위협을 완전히 제거하지는 않지만, 추가적인 보안 계층을 추가합니다.
다음의 노트에서는 이러한 조정의 장점을 설명합니다.
## sysctl.conf를 위한 커널 조정 ##
##
## 아래 내용은 범위를 벗어나는 버그, 널 포인터 역참조, 힙 및
## 버퍼 오버플로우 버그, 사용 후 해제 등으로 인한
## 악용을 완화하는 데 도움을 줍니다. 100% 문제를 해결하지는 않지만,
## 악용을 심각하게 방해합니다.
##
# 기본값은 65536, 4096은 악용에 사용되는 메모리 문제를 완화하는데 도움을 줍니다.
vm.mmap_min_addr=4096
# 기본값은 0, 메모리 내 가상 주소 공간을 무작위화하여 취약점 악용을
# 더 어렵게 만듭니다.
kernel.randomize_va_space=2
# 커널 포인터 접근 제한 (예: cat /proc/kallsyms)
# 악용 지원을 위해
kernel.kptr_restrict=2
# dmesg에서 자세한 커널 오류 제한
kernel.dmesg_restrict=1
# eBPF 제한
kernel.unprivileged_bpf_disabled=1
net.core.bpf_jit_harden=2
# 일반적인 사용 후 해제 악용 방지
vm.unprivileged_userfaultfd=0
# CVE-2024-1086 완화, 비특권 사용자가 네임스페이스를 생성하지 못하도록 방지
kernel.unprivileged_userns_clone=0
## 네트워킹 조정 ##
##
## IP 스택 계층에서 일반적인 공격 방지
##
# SYNFLOOD 서비스 거부 공격 방지
net.ipv4.tcp_syncookies=1
# 시간 대기 암살 공격 방지
net.ipv4.tcp_rfc1337=1
# IP 스푸핑/소스 라우팅 보호
net.ipv4.conf.all.rp_filter=1
net.ipv4.conf.default.rp_filter=1
net.ipv6.conf.all.accept_ra=0
net.ipv6.conf.default.accept_ra=0
net.ipv4.conf.all.accept_source_route=0
net.ipv4.conf.default.accept_source_route=0
net.ipv6.conf.all.accept_source_route=0
net.ipv6.conf.default.accept_source_route=0
# IP 리다이렉션 보호
net.ipv4.conf.all.accept_redirects=0
net.ipv4.conf.default.accept_redirects=0
net.ipv4.conf.all.secure_redirects=0
net.ipv4.conf.default.secure_redirects=0
net.ipv6.conf.all.accept_redirects=0
net.ipv6.conf.default.accept_redirects=0
net.ipv4.conf.all.send_redirects=0
net.ipv4.conf.default.send_redirects=0