054. 계정 · 인증 보안 — /etc/group·gshadow와 특권 그룹 점검

changseop lee·5일 전

시스템 보안 · 취약점 › B. 계정 · 인증 보안 강화 · 4/50편 (전체 054/450)
학습 단계: 1단계 · 기본 개념
실습 표기: 이 글의 명령어·출력·로그는 로컬 VMware 테스트 VM(Rocky Linux 9 / Ubuntu 22.04) 기준의 「실습 예시」이며, IP·계정·호스트명은 가상의 값입니다.

선행 학습

1. 개념

Linux 권한은 사용자뿐 아니라 그룹 소속으로도 결정됩니다. 특정 그룹에 들어가는 것만으로 root와 같은 권한이나 민감한 로그·장치 접근 권한을 얻을 수 있습니다.

/etc/group   : 그룹명:x:GID:구성원1,구성원2      (보조 그룹 구성원)
/etc/gshadow : 그룹명:그룹비밀번호:그룹관리자:구성원 (newgrp 용, 보통 ! 또는 비어 있음)
/etc/passwd  : 4번째 필드 = 기본 그룹 GID

사용자 devops 의 실제 그룹 = 기본 그룹(passwd) + 보조 그룹(group 파일의 구성원 목록)
                → id devops 로 확인

그룹 변경은 설정 파일·실행 파일을 건드리지 않고 권한을 늘리는 방법이라, 점검 범위에서 빠지기 쉽습니다.

2. 왜 중요한가

  • docker 그룹 구성원은 컨테이너에 호스트 루트 파일시스템을 마운트할 수 있어 사실상 root입니다. lxd, disk도 비슷한 수준의 위험이 있습니다.
  • adm(Ubuntu)·systemd-journal 그룹은 시스템 로그를 읽을 수 있어, 공격자가 다른 사용자의 행위·인증 정보를 엿볼 수 있습니다.
  • 그룹 구성원 변경 로그는 짧고 단순해 놓치기 쉬우므로, 특권 그룹 목록을 정의해 두고 해당 그룹 변경만 높은 우선순위로 봐야 합니다.

3. 핵심 명령어 / 설정

그룹배포판주는 권한위험도
wheel / sudoRocky / Ubuntusudo 사용(sudoers 기본 규칙)높음
docker공통(설치 시)Docker 소켓 → 호스트 root 수준매우 높음
lxdUbuntu컨테이너 → 호스트 root 수준매우 높음
disk공통블록 장치 직접 읽기/쓰기매우 높음
shadowUbuntu/etc/shadow 읽기높음
admUbuntu/var/log 대부분 읽기중간
systemd-journal공통전체 journal 읽기중간
root(GID 0)공통root 그룹 권한 파일 접근높음

4. 실습 (실습 예시)

# 1) 특권 그룹 구성원 일괄 확인
for g in wheel sudo docker lxd disk shadow adm systemd-journal root; do
  getent group "$g" >/dev/null && printf '%-16s %s\n' "$g" "$(getent group $g | cut -d: -f4)"
done

# 2) 사용자별 실제 소속 그룹
id devops
groups apache

# 3) 기본 그룹(GID)이 특권 그룹인 사용자 (passwd 4번째 필드)
for g in 0 $(getent group wheel sudo docker | cut -d: -f3); do awk -F: -v g=$g '$4==g{print $1" 기본GID="g}' /etc/passwd; done

# 4) gshadow 그룹 비밀번호 설정 여부 (! 또는 빈 값이 정상)
sudo awk -F: '$2!="" && $2!="!" && $2!="*" {print $1": 그룹 비밀번호 설정됨"}' /etc/gshadow

5. 정상 상태

wheel            admin1
docker
disk
adm              syslog
systemd-journal
root
$ id devops
uid=1002(devops) gid=1002(devops) groups=1002(devops)

특권 그룹 구성원이 관리자 명단과 일치하고, 서비스·일반 계정은 자기 그룹에만 속한 상태가 정상입니다.

6. 이상 상태

wheel            admin1,devops
docker           apache
systemd-journal  testuser
$ sudo awk -F: '$2!="" && $2!="!" && $2!="*" {print $1}' /etc/gshadow
disk
변화의미
devops → wheelsudo 사용 권한 획득
apache → docker웹 서비스 계정이 호스트 root 수준 권한 획득 → 웹 침해 시 즉시 상승 경로
testuser → systemd-journal전체 로그 열람(정찰)
disk 그룹 비밀번호newgrp disk로 비밀번호만 알면 누구나 그룹 진입 가능

7. 로그 분석 (분석 방법)

그룹 변경 명령별 로그입니다(가상의 예시 로그).

Oct  2 02:28:01 rocky9-web01 usermod[11501]: add 'devops' to group 'wheel'
Oct  2 02:28:01 rocky9-web01 usermod[11501]: add 'devops' to shadow group 'wheel'
Oct  2 02:28:30 rocky9-web01 gpasswd[11510]: user apache added by root to group docker
Oct  2 02:29:02 rocky9-web01 gpasswd[11520]: group disk password changed by root
type=SYSCALL msg=audit(1759339682.110:3401): syscall=82 success=yes auid=1002 uid=0 comm="gpasswd" exe="/usr/bin/gpasswd" key="identity"
필드분석
add 'devops' to group 'wheel'usermod -aG로 보조 그룹 추가
added by root to group dockergpasswd -a 사용
group disk password changedgpasswd 그룹으로 그룹 비밀번호 설정
audit auid=1002root로 실행했지만 실제 행위자는 devops

변경 후 실제 권한이 적용되려면 새 로그인 세션이 필요합니다. 따라서 그룹 추가 직후의 재로그인(Accepted ...)이나 newgrp 실행을 이어서 확인합니다.

8. SOC 관제 포인트

  • 특권 그룹 목록(위 표)을 관제 기준으로 문서화하고, 해당 그룹 변경은 단건이라도 Alert로 받습니다.
  • 그룹 추가 → 재로그인 → sudo/docker 사용으로 이어지는 3단계 연결을 확인합니다.
  • /etc/group, /etc/gshadow는 identity 키(A영역 030편)와 FIM 대상에 포함합니다.

9. 탐지 규칙

<group name="local,syssec_b,account,privilege,">
  <rule id="101030" level="12">
    <regex type="pcre2">add '\S+' to group '(wheel|sudo|docker|lxd|disk|shadow|root)'|added by \S+ to group (wheel|sudo|docker|lxd|disk|shadow|root)$</regex>
    <description>특권 그룹 구성원 추가</description>
  </rule>
  <rule id="101031" level="10">
    <match>password changed by</match>
    <regex type="pcre2">gpasswd\[\d+\]: group \S+ password changed</regex>
    <description>그룹 비밀번호 설정(newgrp 경로 생성)</description>
  </rule>
</group>

10. 대응 방법

  1. 초기 확인 — 추가된 계정·그룹·시각·행위자(auid)를 확인합니다.
  2. 범위 확인 — 그룹 추가 이후 해당 계정의 재로그인, sudo·docker 사용 이력을 확인합니다.
  3. 증거 확보 — /etc/group·gshadow 사본, 변경 로그, 이후 행위 로그를 보존합니다.
  4. 차단/조치 — 비인가 구성원을 제거(gpasswd -d)하고 그룹 비밀번호를 제거하며 세션을 재시작시킵니다.
  5. 재발 방지 — 특권 그룹 목록·구성원을 기준선에 포함하고 특권 그룹 변경 룰을 운영합니다.

11. 핵심 정리

그룹위험 요약
wheel / sudosudo 사용 권한
docker / lxd / disk사실상 root 권한
shadow / adm / systemd-journal비밀번호 해시·로그 열람
로그usermod add ... to group, gpasswd added by ... to group
면접 포인트"docker 그룹 = root — 설정 변경 없이 권한을 늘리는 경로"

12. 다음 편 예고

다음 편 055. 계정 · 인증 보안 — UID·GID 범위 정책과 login.defs 에서는 계정 생성 기본값을 결정하는 UID·GID 범위 정책과 login.defs를 점검합니다.


이전 편: 053. 계정 · 인증 보안 — /etc/shadow 해시 형식과 비밀번호 상태 판독
📚 시리즈 전체 보기: 시스템 보안 · 취약점

profile
코드에 숨겨진 위협을 읽고 AI로 보안의 미래를 설계합니다. 프론트엔드 개발 경험을 자산 삼아 더 견고하고 지능적인 보안 운영 시스템을 구축해 나가는 과정을 기록합니다

0개의 댓글