시스템 보안 · 취약점 › B. 계정 · 인증 보안 강화 · 38/50편 (전체 088/450)
학습 단계: 3단계 · 이상 징후
실습 표기: 이 글의 명령어·출력·로그는 로컬 VMware 테스트 VM(Rocky Linux 9 / Ubuntu 22.04) 기준의 「실습 예시」이며, IP·계정·호스트명은 가상의 값입니다.
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는 권한이 없는 계정이 상승을 시도한 것이라, 탈취된 일반 계정의 탐색 신호입니다.
user NOT in sudoers가 서비스 계정·일반 계정에서 나오면, 그 계정이 상승을 노리고 있다는 직접 증거입니다.command not allowed 반복은 sudoers 규칙의 허용 범위를 떠보는(탐색) 행위일 수 있습니다.| 실패 메시지 | 의미 |
|---|---|
N incorrect password attempts | sudo 인증 실패(비밀번호 추측·오타) |
command not allowed | 허용되지 않은 명령 시도(규칙 탐색) |
user NOT in sudoers | sudo 권한 없는 계정의 시도 |
a password is required | 비밀번호 없이 시도 |
sorry, you must have a tty | tty 없이 시도(스크립트·웹 경유) |
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
2 incorrect password attempts
$ sudo grep 'NOT in sudoers' $LOG
$
sudo 실패가 비밀번호 오타 수준(소수)뿐이고, 권한 없는 계정의 시도가 없는 상태가 정상입니다.
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 시도 → 규칙 변경 탐색(실패)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 + visudo | sudoers 규칙 변경 시도 |
user NOT in sudoers는 sudoers에 없는 계정의 시도라 관리자에게 메일로도 통보되고, 로그에 명확히 남습니다.
NOT in sudoers·민감 파일 접근 시도는 즉시 확인합니다.command not allowed 반복은 규칙 탐색으로 보고 해당 계정을 주시합니다.<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·민감 대상 조건을 상향합니다.
| 실패 유형 | 의미 |
|---|---|
| incorrect password | sudo 비밀번호 실패(추측·오타) |
| command not allowed | 규칙 밖 명령 시도(탐색) |
| NOT in sudoers | 권한 없는 계정의 상승 시도 |
| tty required | 스크립트·웹 경유 시도 |
| 면접 포인트 | "sudo 실패 유형이 공격자의 시도 의도를 드러낸다" |
다음 편 089. 계정 · 인증 보안 — su·sudo 조합 상승 경로 추적 에서는 sudo와 su를 엮는 su·sudo 조합 상승 경로 추적을 다룹니다.
이전 편: 087. 계정 · 인증 보안 — sudo 권한 상승 이상 징후
📚 시리즈 전체 보기: 시스템 보안 · 취약점