🔒 서버 취약점 조치 가이드
1. U-13 SUID, SGID 설정 파일점검
취약 내용
| 구분 | 파일 경로 | 현재 상태 |
|---|---|---|
| 취약1 | /sbin/unix_chkpwd |
퍼미션 중 4000 (SUID) 설정됨 |
| 취약2 | /usr/bin/newgrp |
퍼미션 중 4000 (SUID) 설정됨 |
조치 방법
SUID 비트를 제거하여 권한을 755로 변경합니다.
sudo chmod 755 /sbin/unix_chkpwd sudo chmod 755 /usr/bin/newgrp
2. U-51 계정이 존재하지 않는 GID 금지
취약 내용
취약: /etc/group에 소유자가 존재하지 않는 그룹 22개 존재
취약 그룹 목록 (22개)
| 그룹명 | GID | 용도 |
|---|---|---|
| mem | 8 | 메모리 접근 |
| kmem | 9 | 커널 메모리 |
| cdrom | 11 | CD-ROM 장치 |
| man | 15 | man 페이지 |
| dialout | 18 | 시리얼 포트 |
| floppy | 19 | 플로피 드라이브 |
| games | 20 | 게임 |
| tape | 33 | 테이프 장치 |
| video | 39 | 비디오 장치 |
| lock | 54 | 잠금 파일 |
| audio | 63 | 오디오 장치 |
| utmp | 22 | 로그인 기록 |
| utempter | 35 | utmp 헬퍼 |
| input | 999 | 입력 장치 |
| kvm | 36 | 가상화 |
| render | 998 | GPU 렌더링 |
| systemd-journal | 190 | 저널 로그 |
| printadmin | 994 | 프린터 관리 |
| ssh_keys | 101 | SSH 키 |
| sgx | 987 | Intel SGX |
| brlapi | 985 | 점자 디스플레이 |
| slocate | 21 | 파일 검색 |
조치 방법
취약 대상 그룹의 멤버 필드에 현존하는 사용자 계정(cloud)을 부여합니다.
사전 작업: 백업
sudo cp /etc/group /etc/group.bak
조치 명령어 (복사하여 실행)
sudo usermod -aG mem cloud sudo usermod -aG kmem cloud sudo usermod -aG cdrom cloud sudo usermod -aG man cloud sudo usermod -aG dialout cloud sudo usermod -aG floppy cloud sudo usermod -aG games cloud sudo usermod -aG tape cloud sudo usermod -aG video cloud sudo usermod -aG lock cloud sudo usermod -aG audio cloud sudo usermod -aG utmp cloud sudo usermod -aG utempter cloud sudo usermod -aG input cloud sudo usermod -aG kvm cloud sudo usermod -aG render cloud sudo usermod -aG systemd-journal cloud sudo usermod -aG printadmin cloud sudo usermod -aG ssh_keys cloud sudo usermod -aG sgx cloud sudo usermod -aG brlapi cloud sudo usermod -aG slocate cloud
결과 확인
grep -E "^(mem|kmem|cdrom|man|dialout|floppy|games|tape|video|lock|audio|utmp|utempter|input|kvm|render|systemd-journal|printadmin|ssh_keys|sgx|brlapi|slocate):" /etc/group
3. /etc/hosts 파일 권한 설정 (600)
취약 내용
취약: /etc/hosts 파일 권한이 644로 설정되어 일반 사용자가 읽기 가능
문제점
⚠️ 단순 chmod 600 적용 시 문제 발생
systemd-resolved가 root가 아닌 권한으로 동작하므로, 단순히 600으로 변경하면 DNS name resolution이 실패할 수 있습니다.
systemd-resolved가 root가 아닌 권한으로 동작하므로, 단순히 600으로 변경하면 DNS name resolution이 실패할 수 있습니다.
조치 방법: dnsmasq 로컬 DNS 서버 활용
/etc/hosts는 600으로 정책 준수하고, 실제 호스트 해석은 dnsmasq를 통해 처리합니다.
1) dnsmasq 설치 확인
# 설치 확인 rpm -qa | grep dnsmasq # 없으면 설치 sudo yum install dnsmasq -y
2) dnsmasq 설정
sudo vi /etc/dnsmasq.conf
# /etc/hosts 안 읽음 no-hosts # 별도 hosts 파일 지정 (644 권한) addn-hosts=/etc/dnsmasq.hosts # 로컬에서만 동작 listen-address=127.0.0.1 bind-interfaces # 상위 DNS server=8.8.8.8 server=168.126.63.1
3) 별도 hosts 파일 생성
sudo vi /etc/dnsmasq.hosts
127.0.0.1 localhost 172.30.142.245 myserver.example.com
sudo chmod 644 /etc/dnsmasq.hosts
4) resolv.conf 수정
sudo vi /etc/resolv.conf
nameserver 127.0.0.1
5) dnsmasq 시작
sudo systemctl enable dnsmasq sudo systemctl start dnsmasq
6) /etc/hosts 권한 변경
sudo chmod 600 /etc/hosts
동작 원리
애플리케이션 (JEUS 등)
↓ DNS 질의 (gethostbyname)
/etc/resolv.conf → nameserver 127.0.0.1
↓
dnsmasq (root로 실행)
↓
/etc/dnsmasq.hosts 읽어서 응답
↓ DNS 질의 (gethostbyname)
/etc/resolv.conf → nameserver 127.0.0.1
↓
dnsmasq (root로 실행)
↓
/etc/dnsmasq.hosts 읽어서 응답
조치 결과
| 항목 | 상태 | 비고 |
|---|---|---|
/etc/hosts |
600 | 정책 준수 |
/etc/dnsmasq.hosts |
644 | 서비스용 hosts 파일 |
| 시스템 DNS 해석 | 정상 | dnsmasq 경유 |
4. 주의사항
⚠️ ssh_keys 그룹 주의
ssh_keys 그룹은 보안에 민감할 수 있습니다. 필요시 별도의 서비스 계정(예: sshd)으로 지정하는 것을 권장합니다.
ssh_keys 그룹은 보안에 민감할 수 있습니다. 필요시 별도의 서비스 계정(예: sshd)으로 지정하는 것을 권장합니다.
sudo usermod -aG ssh_keys sshd
- 조치 전 반드시
/etc/group파일을 백업하세요. - 조치 후 재점검을 통해 취약점 해소 여부를 확인하세요.
- 서버 용도에 따라 불필요한 그룹은 삭제를 검토할 수 있습니다.