시스템 보안 · 취약점 › I. 지속성 · 재침투 징후 · 15/50편 (전체 415/450)
학습 단계: 계정·인증 지속성 탐지
실습 표기: 이 글의 명령어·출력·로그는 로컬 VMware 테스트 VM(Rocky Linux 9 / Ubuntu 22.04) 기준의 「실습 예시」이며, IP·계정·호스트명은 가상의 값입니다.

선행 학습

1. 개념

공격자가 일반 계정으로 다시 들어오더라도 sudoers 규칙 하나가 있으면 곧바로 root가 됩니다. 그래서 sudoers 변경은 권한 상승이면서 동시에 재침투 이후를 위한 지속성입니다(T1548.003).

sudoers 지속성 패턴
 /etc/sudoers.d/99-sys :  webadmin ALL=(ALL) NOPASSWD: ALL
 /etc/sudoers          :  #includedir 경로 추가
 서비스 계정           :  apache ALL=(root) NOPASSWD: /usr/bin/python3
 위장                  :  기존 파일 끝에 한 줄 추가, 파일명은 정상처럼

핵심: 재침투 계정 + NOPASSWD = 비밀번호 없이 즉시 root

D영역(29~31편)에서 sudoers 규칙 변경을 권한 변경으로 다뤘다면, 여기서는 "다시 돌아왔을 때 쓰는 규칙"인지, 즉 규칙의 대상 계정이 재침투 경로와 연결되는지를 봅니다.

2. 왜 중요한가

  • sudoers 규칙은 계정 비밀번호가 바뀌어도 유지됩니다.
  • 서비스 계정에 sudo를 주면 웹셸 재침투가 곧 root 획득이 됩니다.
  • sudoers.d 파일은 메인 파일 점검만으로는 놓치기 쉽습니다.

3. 핵심 명령어 / 설정

확인명령포인트
문법·전체visudo -c포함 파일 목록
실효 권한sudo -l -U <user>NOPASSWD·ALL
신규 파일ls -la /etc/sudoers.d/미승인 파일
위험 규칙grep -rE 'NOPASSWD|ALL$' /etc/sudoers*대상 계정

4. 실습 (실습 예시)

# sudoers 지속성 점검 (분석 방법)
sudo visudo -c
sudo grep -rnE 'NOPASSWD|^[^#].*ALL *$|includedir' /etc/sudoers /etc/sudoers.d/ 2>/dev/null
# 로그인 가능 계정별 실효 sudo 권한
for u in $(getent passwd | awk -F: '$3>=1000||$1=="apache"{print $1}'); do
  sudo -l -U "$u" 2>/dev/null | grep -q NOPASSWD && echo "NOPASSWD 보유: $u"
done
sudo ausearch -k account_persist -f sudoers -i 2>/dev/null | grep -E 'auid=|exe=' | tail

5. 정상 상태

/etc/sudoers.d/ops : %ops ALL=(ALL) ALL   (비밀번호 필요, 티켓 CHG-0910)
NOPASSWD 보유: 없음

그룹 단위로 승인된 규칙만 있고, NOPASSWD나 서비스 계정 대상 규칙이 없는 상태가 정상입니다.

6. 이상 상태

/etc/sudoers.d/99-sys (02:57 생성, auid=webadmin, exe=/usr/bin/tee)
  webadmin ALL=(ALL) NOPASSWD: ALL
  apache ALL=(root) NOPASSWD: /usr/bin/python3
NOPASSWD 보유: webadmin, apache
  • 개인 계정·서비스 계정에 NOPASSWD 부여 → 재침투 후 즉시 root
  • tee로 파일 생성 → visudo를 거치지 않은 수동 작성
  • apache 대상 python3 허용 → 웹셸 재침투가 root로 직결

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

sudoers 지속성 분석 흐름입니다(가상의 예시).

[변경 감지] sudoers·sudoers.d 감시
   ↓
[규칙 해석] 대상 계정·실행 명령·NOPASSWD
   ↓
[재침투 연결] 대상 계정이 웹셸·백도어 계정·키와 연결되는가
   ↓
[사용 여부] sudo 로그에서 해당 규칙 사용 기록(COMMAND=)
규칙위험
NOPASSWD: ALL최고
서비스 계정 sudo높음
인터프리터 허용셸 탈출 가능

규칙이 추가된 뒤 실제 sudo 사용이 있었다면 그 이후 시점의 root 행위 전체가 조사 범위가 됩니다.

8. SOC 관제 포인트

  • sudoers.d 신규 파일 생성은 승인 기록과 즉시 대조합니다.
  • NOPASSWD 보유 계정 목록을 기준선으로 관리합니다.
  • 서비스 계정의 sudo 사용은 규칙 존재 여부와 관계없이 고위험 Alert입니다.

9. 탐지 규칙

<!-- 실습 예시 룰: 적용 전 wazuh-logtest 및 테스트 환경 검증 필요 -->
<group name="local,syssec_i,persistence,">
  <rule id="108140" level="13">
    <if_sid>108000</if_sid>
    <field name="audit.key">account_persist</field>
    <field name="audit.file.name" type="pcre2">^/etc/sudoers(\.d/.*)?$</field>
    <field name="audit.exe" negate="yes" type="pcre2">/visudo$</field>
    <description>visudo 외 프로그램의 sudoers 변경(sudo 지속성 규칙 의심)</description>
    <mitre><id>T1548.003</id></mitre>
  </rule>
</group>

정상 변경은 대부분 visudo나 구성관리 도구를 거치므로, 그 밖의 도구로 sudoers를 쓰는 경우를 높게 경보합니다. 구성관리 계정은 별도 예외 룰로 관리합니다.

10. 대응 방법

  1. 초기 확인 — 추가된 규칙의 대상 계정·명령·NOPASSWD 여부를 확인합니다.
  2. 범위 확인 — 대상 계정의 재침투 경로(키·웹셸)와 sudo 사용 기록을 확인합니다.
  3. 증거 확보 — sudoers 사본·auditd 기록·sudo 로그를 보존합니다.
  4. 차단/조치 — 미승인 규칙·파일을 제거하고 visudo -c로 문법을 확인합니다.
  5. 재발 방지 — NOPASSWD 기준선과 sudoers 변경 승인 절차를 운영합니다.

11. 핵심 정리

확인기준
파일sudoers.d 신규 파일
규칙NOPASSWD·ALL·인터프리터
대상서비스·재침투 계정
사용sudo COMMAND 로그
면접 포인트"sudoers 한 줄은 재침투 후의 root 예약권 — 대상 계정과 재침투 경로를 잇는다"

12. 다음 편 예고

다음 편 416. 지속성·재침투 — 자격증명 재설정·해시 교체 탐지 에서는 passwd·chpasswd·shadow 직접 편집으로 기존 계정의 비밀번호를 공격자가 아는 값으로 바꾸는 지속성을 탐지하는 방법을 다룹니다.


이전 편: 414. 지속성·재침투 — PAM 백도어 모듈 탐지
📚 시리즈 전체 보기: 시스템 보안 · 취약점

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

0개의 댓글