Skip to content

Latest commit

 

History

History
227 lines (180 loc) · 8.1 KB

File metadata and controls

227 lines (180 loc) · 8.1 KB

리눅스 Root권한 실시간 모니터링 & 자동화 차단 시스템

Linux(Ubuntu) 서버에서 root 계정 및 sudo 권한 접근 로그를 감시하여 침입 탐지, Slack 보안 알림, iptables 기반 자동 차단 기능을 Crontab 설정으로 자동화한 시스템입니다.


0. Getting Started

수행 환경

  • 운영 환경: Ubuntu 24.04+
  • 필수 패키지: curl, iptables, systemd-journald
  • 외부 연동: Slack Incoming Webhook URL 1개
  • 구현 방식: Shell Programming 기반 자동화 스크립트

1. Project Overview (프로젝트 개요)

  • 프로젝트 이름: Ubuntu 기반 root 계정 & sudo 권한 탈취 모니터링 시스템
  • 프로젝트 설명:
    • root 계정에 대한 비정상 로그인 시도 탐지
    • 일반 사용자(user)의 sudo/su 사용 실패 이벤트 감지
    • Slack으로 실시간 알림 전송
    • 비인가 원격 IP 자동 차단 (iptables 기반)

2. Technology Stack (기술 스택)

2.1 OS & Tools

Ubuntu MobaXterm
image image

2.2 Cooperation

Git Notion Slack
git Notion Slack

3. Team Members (팀원 및 팀 소개)

박여명 신준수
박여명 신준수
GitHub GitHub

4. Key Features (주요 기능)

구분 기능 설명 탐지 방법 추가 동작
Root 접근 시도 허용되지 않은 IP의 root 접근 시도 탐지 및 차단 journalctl -u sshdAccepted, Failed password 패턴 분석 3회 이상 실패 시 자동 차단 / 허용 IP(화이트리스트)는 알림만 전송
Root 로그인 이벤트 root 로그인 성공/실패 이벤트 감지 journalctl -u sshd 분석 Slack 알림 전송
Sudo 사용/시도 sudo 권한 사용/시도 감지 journalctl SYSLOG_IDENTIFIER=sudo 분석 → user NOT in sudoers, authentication failure, COMMAND=... 구분 Slack 알림 전송
Su 사용/시도 su 권한 전환 감지 journalctl -t su 분석 → authentication failure, session opened 구분 Slack 알림 전송
Slack 알림 호스트명, 시간, 사용자, 명령, 원본 로그 조각 전달 JSON 이스케이프 처리 적용 안정적인 메시지 전송


5. Project Structure (프로젝트 구조)

plaintext
systemd-journald  ──┐
  (sshd/sudo/su)   │  journalctl (최근 N분)
                   ├── 패턴 필터링 (awk/grep/sed)
                   │
                   ├── Slack Webhook 알림 (curl)
                   │
                   └── 비인가 IP 자동 차단 (iptables)

6. 구성 파일

Linux_Root-Monitoring/
├── scripts/
│   ├── monitor.sh       # root 로그인 시도 감지 +  IP 차단 + Slack 알림
│   └── watch_sudo.sh    # sudo/su 사용 실패 감지 + Slack 알림
└── allow_ips.txt        # 허용(화이트리스트) IP 

7. 수동 및 자동실행 방법 (Usage)

7.1 수동 실행

bash scripts/monitor.sh
bash scripts/watch_sudo.sh

7-2 Crontab 활용한 자동화

crontab -e

아래 내용 추가:

cron
* * * * * /usr/bin/bash /home/ubuntu/Linux_Root-Monitoring/scripts/monitor.sh
* * * * * /usr/bin/bash /home/ubuntu/Linux_Root-Monitoring/scripts/watch_sudo.sh


8. Slack 알림을 통한 결과 출력

비인가 IP root 접근 알림

비인가 IP root 계정 접근 알림 출력

비인가 IP 3회 이상 접근 시 차단

비인가 IP 3회 이상 접근 시 차단

해당 IP 차단 확인

iptables DROP 규칙 확인

일반 USER sudo 명령어 감지

sudo 명령 감지

일반 USER 3회 이상 sudo 명령어 실패 시 계정 차단

sudo 3회 실패 계정 차단

9. Troubleshooting

1. root 권한 변경 적용 문제


시스템 설정 파일에서 root 권한을 부여했음에도 즉시 적용되지 않아 root 계정 접근 불가 현상이 발생.
서비스 단순 재시작만으로는 반영되지 않는 경우가 있었으며, 최종적으로 시스템 재부팅(restart)으로 변경 사항이 정상 적용됨을 확인.

👉 권한 및 보안 설정 변경 시 즉각적인 반영 여부를 반드시 점검.

2. 내 IP 차단


테스트 중 본인의 IP가 iptables에 의해 차단되어 접속 불가 상황이 발생.

확인 명령어:

sudo iptables -L INPUT -n --line-numbers

차단 해제:

sudo iptables -D INPUT <번호>
sudo netfilter-persistent save

👉 운영 시 관리자 본인 IP는 반드시 화이트리스트(allow_ips.txt)에 추가 필요.

3. Slack 알림 전송 실패


Slack Webhook URL 오류, 네트워크 차단, JSON escape 문제로 인해 알림 전송이 실패할 수 있음.
  • Webhook URL 유효성 재확인
  • curl 테스트:
curl -X POST -H 'Content-type: application/json' \
--data '{"text":"테스트 메시지"}' https://hooks.slack.com/services/XXX/YYY/ZZZ
  • 메시지 본문에 ", \ 포함 시 JSON escape 필수

4. sshd_config 변경 후 접속 불가


`sshd_config` 또는 `/etc/ssh/sshd_config.d/*.conf` 설정 오류 시 SSH 연결 차단 발생.

해결:

  • 변경 전 문법 검사:
sudo sshd -t
  • 문제 발생 시 콘솔 접속 후 설정 복구
  • 임시 조치: PermitRootLogin yes, 최소한의 AllowUsers 허용

5. cron 실행 문제


스크립트는 수동 실행 시 정상 동작하나 cron 등록 후 실행 실패 상황 발생.

원인:

  • PATH/환경변수 부족
  • journalctl 실행 시 sudo 권한 문제

해결:

  • cron에 절대 경로 지정:
* * * * * /usr/bin/bash /home/ubuntu/Linux_Root-Monitoring/scripts/monitor.sh
  • 스크립트 내 sudo 사용 시:
sudo visudo
ubuntu ALL=(ALL) NOPASSWD:ALL

6. systemd 서비스 로그 확인


systemd 서비스 등록 후 실행 실패 시 로그 확인 필요: ```bash sudo systemctl status root-monitor journalctl -u root-monitor -f ```

👉 로그를 통해 Slack 전송 실패, iptables 권한 문제 등 원인 파악 가능.