088. 계정 · 인증 보안 — sudo 실패·권한 없음 로그 분석

changseop lee·6일 전

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

선행 학습

1. 개념

sudo 실패 로그는 "권한을 얻으려다 막힌" 흔적입니다. 성공(037편)만큼 중요한데, 실패 유형이 공격자가 무엇을 시도했는지를 알려주기 때문입니다.

sudo 실패 유형
 incorrect password attempts   : sudo 비밀번호를 틀림(인증 실패)
 command not allowed           : sudoers에 있지만 허용 안 된 명령 시도
 user NOT in sudoers           : sudo 권한 자체가 없는 계정의 시도 → 메일·로그 기록
 a password is required        : NOPASSWD 아닌데 비밀번호 없이 시도

특히 user NOT in sudoers는 권한이 없는 계정이 상승을 시도한 것이라, 탈취된 일반 계정의 탐색 신호입니다.

2. 왜 중요한가

  • 권한 상승 공격은 성공 전에 실패를 동반하는 경우가 많습니다(허용 명령 탐색, 비밀번호 추측). 실패 로그로 조기에 탐지할 수 있습니다.
  • user NOT in sudoers가 서비스 계정·일반 계정에서 나오면, 그 계정이 상승을 노리고 있다는 직접 증거입니다.
  • command not allowed 반복은 sudoers 규칙의 허용 범위를 떠보는(탐색) 행위일 수 있습니다.

3. 핵심 명령어 / 설정

실패 메시지의미
N incorrect password attemptssudo 인증 실패(비밀번호 추측·오타)
command not allowed허용되지 않은 명령 시도(규칙 탐색)
user NOT in sudoerssudo 권한 없는 계정의 시도
a password is required비밀번호 없이 시도
sorry, you must have a ttytty 없이 시도(스크립트·웹 경유)

4. 실습 (실습 예시)

LOG=/var/log/secure        # Ubuntu: /var/log/auth.log
# 1) sudo 실패 유형별 집계
sudo grep -E 'sudo.*(incorrect password|command not allowed|NOT in sudoers|password is required)' $LOG | \
  grep -oE 'incorrect password attempts|command not allowed|NOT in sudoers|password is required' | sort | uniq -c

# 2) 권한 없는 계정의 sudo 시도 (탐색 신호)
sudo grep 'NOT in sudoers' $LOG

# 3) 허용 안 된 명령 시도 (규칙 탐색)
sudo grep 'command not allowed' $LOG | sed -E 's/.* ([a-z_]+) : .*COMMAND=(.*)/\1 | \2/' | tail

5. 정상 상태

      2 incorrect password attempts
$ sudo grep 'NOT in sudoers' $LOG
$

sudo 실패가 비밀번호 오타 수준(소수)뿐이고, 권한 없는 계정의 시도가 없는 상태가 정상입니다.

6. 이상 상태

      8 NOT in sudoers
      5 command not allowed
$ sudo grep 'NOT in sudoers' $LOG
02:30:11 sudo: apache : user NOT in sudoers ; TTY=unknown ; COMMAND=/bin/bash
02:31:40 sudo: testuser : user NOT in sudoers ; COMMAND=/usr/bin/cat /etc/shadow
$ (command not allowed)
devops | /usr/bin/vi /etc/sudoers
  • apache·testuser가 sudo 권한 없이 상승 시도(NOT in sudoers) → 탈취 계정의 탐색
  • testuser가 /etc/shadow 읽기 시도 → 자격증명 탈취 목적
  • devops가 허용 안 된 vi /etc/sudoers 시도 → 규칙 변경 탐색(실패)
  • 실패했지만 의도가 명확히 드러남

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

sudo 실패에서 드러나는 공격 의도입니다(가상의 예시 로그).

02:30:11 sudo: apache : user NOT in sudoers ; TTY=unknown ; PWD=/var/www/html ; USER=root ; COMMAND=/bin/bash
02:31:40 sudo: testuser : user NOT in sudoers ; USER=root ; COMMAND=/usr/bin/cat /etc/shadow
02:33:02 sudo: devops : command not allowed ; USER=root ; COMMAND=/usr/bin/visudo
실패드러난 의도
apache NOT in sudoers + bash웹 계정으로 root 셸 시도
testuser + cat /etc/shadow비밀번호 해시 탈취 시도
devops + visudosudoers 규칙 변경 시도

user NOT in sudoers는 sudoers에 없는 계정의 시도라 관리자에게 메일로도 통보되고, 로그에 명확히 남습니다.

8. SOC 관제 포인트

  • sudo 실패를 유형별로 집계하고, NOT in sudoers·민감 파일 접근 시도는 즉시 확인합니다.
  • command not allowed 반복은 규칙 탐색으로 보고 해당 계정을 주시합니다.
  • 실패한 계정이 이후 권한을 얻어 성공했는지(037편)를 연결해 봅니다.

9. 탐지 규칙

<group name="local,syssec_b,privilege,">
  <rule id="101350" level="11">
    <decoded_as>sudo</decoded_as>
    <match>user NOT in sudoers</match>
    <description>sudo 권한 없는 계정의 권한 상승 시도</description>
  </rule>
  <rule id="101351" level="10">
    <decoded_as>sudo</decoded_as>
    <match>command not allowed</match>
    <regex type="pcre2">COMMAND=\S*(visudo|/etc/sudoers|/etc/shadow)</regex>
    <description>허용되지 않은 민감 명령 sudo 시도</description>
  </rule>
</group>

Wazuh 기본 룰(5honor sudo 실패 계열)이 있으므로 기본 탐지는 유지하고, NOT in sudoers·민감 대상 조건을 상향합니다.

10. 대응 방법

  1. 초기 확인 — sudo 실패 유형·계정·시도 명령으로 상승 의도를 파악합니다.
  2. 범위 확인 — 실패 계정이 이후 권한을 얻어 성공했는지, 다른 서버 시도를 확인합니다.
  3. 증거 확보 — sudo 실패 로그·audit를 보존합니다.
  4. 차단/조치 — 탐색 계정 조사·잠금, 노린 자원(sudoers·shadow) 점검을 진행합니다.
  5. 재발 방지 — NOT in sudoers·민감 명령 실패 탐지 룰을 운영합니다.

11. 핵심 정리

실패 유형의미
incorrect passwordsudo 비밀번호 실패(추측·오타)
command not allowed규칙 밖 명령 시도(탐색)
NOT in sudoers권한 없는 계정의 상승 시도
tty required스크립트·웹 경유 시도
면접 포인트"sudo 실패 유형이 공격자의 시도 의도를 드러낸다"

12. 다음 편 예고

다음 편 089. 계정 · 인증 보안 — su·sudo 조합 상승 경로 추적 에서는 sudo와 su를 엮는 su·sudo 조합 상승 경로 추적을 다룹니다.


이전 편: 087. 계정 · 인증 보안 — sudo 권한 상승 이상 징후
📚 시리즈 전체 보기: 시스템 보안 · 취약점

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

0개의 댓글