Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 

Repository files navigation

시나리오 : 大기업 서버 관리자 이현정의 고민

👨‍👨‍👦‍👦 팀원 소개

김민성 구민지 박재희 이현정

1. 배경

이현정 사원은 한 대기업의 IT 관리자다. 이 회사는 고객 데이터를 저장하는 내부 서버를 운영 중이며, 사내 직원들이 원격으로 접속할 수 있도록 SSH (Secure Shell)를 사용하고 있다.최근 들어 서버 로그를 확인하던 이현정 사원은 이상한 점을 발견했다.

Mar 17 02:05:21 server sshd[4582]: Failed password for root from 203.0.113.45 port 54721 ssh2
Mar 17 02:05:33 server sshd[4621]: Failed password for root from 203.0.113.45 port 54758 ssh2
Mar 17 02:05:47 server sshd[4681]: Failed password for root from 203.0.113.45 port 54794 ssh2

❗ 새벽 시간대에 알 수 없는 IP에서 반복적으로 로그인 시도를 하고 있었다.
더욱 놀라운 것은, 이런 공격이 하루에 수천 번씩 발생하고 있었다는 점이다. 이 공격이 성공하면 해커는 서버에 불법적으로 침입하여 데이터를 유출하거나 시스템을 마비시킬 수 있다.


해결책: 자동화된 SSH 로그인 감지 및 알림 시스템


SSH 로그인 로그를 자동으로 수집하고, 일정 횟수 이상 로그인 실패가 발생한 IP를 자동으로 슬랙에 알림을 보내주는 시스템을 구축하기로 했다.

(1) 자동 로그 수집

  • cron을 이용해 SSH 로그인 실패 기록을 자동으로 저장
  • 이상 징후를 분석하여 추후 보안 정책을 강화할 데이터로 활용

(2) 자동 알림 수신

  • 로그인 실패가 3회 이상 발생한 IP를 슬랙 알림으로 수신

구현

1. SSH 로그인 로그 수집

sudo cat /var/log/auth.log | grep "sshd"

2. 자동 로그 수집 스크립트 작성

(1) ssh_log_collector.sh 스크립트 작성

#!/bin/bash

# 설정
SLACK_WEBHOOK_URL="_"  # Slack Webhook URL
LOG_FILE="/home/admin1/test.log"
FAILURE_TRACK_FILE="/home/admin1/.login_failure_tracker"  # 실패 여부를 기록할 파일

# 로그인 실패 횟수 확인 (최근 1시간 이내의 실패 횟수)
FAILURE_COUNT=$(grep "Failed password" /var/log/auth.log | wc -l)

# 이전에 알림을 보냈는지 확인
if [[ -f $FAILURE_TRACK_FILE ]]; then
    LAST_FAILURE_COUNT=$(cat $FAILURE_TRACK_FILE)
else
    LAST_FAILURE_COUNT=0
fi

# 로그인 실패 3회 이상이고, 이전에 알림을 보지 않았다면
if [ $FAILURE_COUNT -ge 3 ] && [ $FAILURE_COUNT -ne $LAST_FAILURE_COUNT ]; then
    # 알림을 Slack으로 전송
    curl -X POST -H 'Content-type: application/json' --data '{"text":"3회 이상 로그인에 실패했습니다"}' $SLACK_WEBHOOK_URL

    # 로그 파일에 기록
    echo "$(date) - 3회 이상 로그인에 실패했습니다." >> $LOG_FILE

    # 실패 횟수를 기록 (다시 실패 이력 확인을 위한 파일)
    echo $FAILURE_COUNT > $FAILURE_TRACK_FILE
else
    echo "$(date) - 로그인 실패가 3회 미만이거나 이전에 알림을 보냈습니다." >> /home/admin1/check_login_failures.log
fi

👉 이 스크립트는 auth.log에서 SSH 로그인 실패 기록을 가져와서 3회 미만이라면 /var/log/check_login_failures.log에 저장하고 3회 이상이라면 /home/admin1/test.log 에 저장.

(2) 실행 권한 부여

chmod +x /home/admin1/check_login_failures.sh

(3) 실행 테스트

cat check_login_failures.log

image

cat test.log

image

3. 자동 실행

* * * * * /bin/bash /home/admin1/check_login_failures.sh > /home/admin1/check_login_fail>

4. 알림 연동 스크립트 추가

slack api 주소 발급받아 로그인 3회 실패 알림 전송

 # 알림을 Slack으로 전송
    curl -X POST -H 'Content-type: application/json' --data '{"text":"3회 이상 로그인에 실패했습니다"}' $SLACK_WEBHOOK_URL

5. 결과

image

기대효과

✅ 서버 보안 강화: 자동으로 공격을 탐지하고 차단하여 해킹 위험 감소 

✅ 관리 효율성 증가: IT 관리자가 24시간 로그를 확인하지 않아도 됨

✅ 데이터 보호: 고객 정보 및 중요 시스템을 안전하게 유지

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors