Linux 시스템 보안 기초 · 04/50편

이 글은 리눅스 시스템 기초 · 파일 · 권한 · 사용자 관리 · 서비스 · 프로세스 관리 시리즈를 선행 학습으로 두고, 동일한 개념을 보안관제(SOC) 관점에서 한 단계 확장합니다.

선행 학습

1. 들어가며

리눅스에서 '누구인가'는 이름이 아니라 숫자(UID) 로 판단됩니다. root라는 이름이 특별한 게 아니라 UID 0 이 특별합니다. 이 사실을 모르면 'UID 0을 가진 두 번째 계정'이라는 전형적인 백도어를 놓칩니다.

2. 핵심 개념

  • UID (User ID): 사용자 식별 번호. 커널은 이름이 아닌 UID로 권한을 판단합니다.
  • GID (Group ID): 그룹 식별 번호.

관례적 UID 범위(배포판마다 세부 차이):

범위용도
0root (슈퍼유저)
1–999시스템/서비스 계정
1000+일반 사용자

UID 0이면 이름이 무엇이든 root 권한입니다. backup이라는 이름이어도 UID가 0이면 root입니다.

로그인 이름 (alice)
     │  /etc/passwd 조회
     ▼
UID (1001) ── 커널은 이 숫자로만 권한 판단
     │
     ├─ UID == 0  → 모든 권한 (root)
     └─ UID != 0  → 권한 비트 검사 대상

3. 동작 원리

로그인 시 시스템은 /etc/passwd에서 이름에 대응하는 UID/GID를 찾아 프로세스에 부여합니다. 이후 모든 접근 검사는 이 숫자로 이뤄집니다. 그래서 공격자가 지속성을 확보하는 고전적 방법이 /etc/passwd에 UID 0 계정을 추가하는 것입니다. 이름은 평범하게(systemd-helper 등) 위장하되 세 번째 필드(UID)를 0으로 만들면, 그 계정으로 로그인하는 순간 root가 됩니다.

4. 명령어 실습

# UID 0 계정을 모두 나열 (root 외에 나오면 즉시 조사)
awk -F: '$3==0 {print $1}' /etc/passwd

# 로그인 가능한 일반 사용자(UID>=1000) 목록
awk -F: '$3>=1000 && $3<65534 {print $1, $3, $7}' /etc/passwd

# UID/GID 중복 탐지 (중복은 회계 추적을 무너뜨림)
awk -F: '{print $3}' /etc/passwd | sort | uniq -d

5. 실행 결과

실습 환경(test 계정 alice/bob 생성 후) 실제 실행 결과입니다. (실제 캡처)

$ awk -F: '$3==0 {print $1}' /etc/passwd
root

$ awk -F: '$3>=1000 && $3<65534 {print $1, $3, $7}' /etc/passwd
alice 1001 /bin/bash
bob 1002 /bin/bash

$3==0 결과가 root 하나뿐이면 정상입니다. 여기에 두 번째 줄이 나오면 그것이 곧 침해 지표입니다.

6. 보안 관점 — 정상 사용 vs 악용

  • 정상: UID 0은 root 단 하나. 서비스 계정은 UID<1000이며 nologin 쉘.
  • 악용 징후:
    • UID 0 계정이 2개 이상 (숨겨진 root)
    • UID/GID 중복 (책임 추적 회피)
    • 시스템 계정(UID<1000)에 로그인 가능한 쉘이 부여됨

실무에서 UID 0 중복 점검은 가장 빠르고 비용이 낮은 침해 스크리닝 중 하나입니다.

7. 탐지 방법

  • awk -F: '$3==0'로 UID 0 계정 상시 점검(주기적 스크립트/크론)
  • /etc/passwd 변경 감사: auditd -w /etc/passwd -p wa(44편)
  • 신규 계정 생성 추적: useradd 실행 로그(45편)

8. SOC 관점 — SIEM · Wazuh · IOC

SIEM에서 /etc/passwd 변경 이벤트와 UID 0 신규 등장을 Correlation Rule로 묶으면 '권한 상승 → 지속성' 단계를 조기에 잡을 수 있습니다. Wazuh는 rootcheck/SCA 모듈로 UID 0 중복·의심 계정을 정기 점검하며, 이 결과는 그대로 IOC(의심 계정명)로 활용됩니다.

9. 실습 체크리스트

[ ] UID 0 계정이 root 하나뿐인지 확인
[ ] UID>=1000 로그인 계정 목록 점검
[ ] UID/GID 중복 여부 확인
[ ] 시스템 계정의 쉘이 nologin인지 확인

10. 핵심 정리

  • 커널은 이름이 아닌 UID로 권한을 판단한다.
  • UID 0이면 이름과 무관하게 root 권한이다.
  • UID 0 중복은 대표적 백도어 지표다.
  • UID/GID 중복은 책임 추적을 무너뜨린다.
  • UID 0 점검은 가장 저비용·고효율의 침해 스크리닝이다.

11. 다음 편

다음 편에서는 05. root 계정의 위험성과 관리 를 다룹니다. 가장 강력하고 가장 위험한 계정, root의 사용 흔적을 SOC가 어떻게 보는지 다룹니다.


본 실습은 격리된 테스트 VM(Rocky Linux / Ubuntu, VMware) 및 테스트 계정 환경을 기준으로 하며, 운영 서버를 대상으로 하지 않습니다. 실행 결과는 실제 캡처와 예시 출력을 명확히 구분해 표기합니다.

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

0개의 댓글