DOCS/troubleshooting/250826_security_attack_detection.md

6.7 KiB

보안 공격 탐지 및 대응

작성일: 2025-08-26

작성자: 서버 관리자

상태: 차단 완료 (8/26 초기, 9/10 추가)

영향: 51123 서버 대상 자동화 공격

최종 업데이트: 2025-09-10 15:20


1. 공격 탐지 내역

1.1 발견 경위

  • Frontend 컨테이너 로그에서 의심스러운 접근 시도 발견
  • PHPUnit eval-stdin.php 및 .env 파일 접근 시도

1.2 공격 유형

공격 유형 대상 파일 목적
PHPUnit RCE /vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php 원격 코드 실행
환경변수 탈취 /.env, /api/.env 비밀번호/API키 획득

2. 공격자 IP 분석

2.1 주요 공격 IP (nginx access.log 분석)

IP 주소 공격 횟수 공격 유형 최근 활동 차단 시각
185.177.72.10 142회 복합 스캔 활성 15:00
119.8.169.21 74회 자동화 스캔 활성 15:00
111.119.234.186 74회 자동화 스캔 활성 15:00
103.225.9.122 37회 PHPUnit 전용 8/25 06:17 15:00
142.93.90.55 다수 .env 스캔 8/26 12:39 15:00
8.213.41.158 12회 .env 스캔 8/25 23:00 15:00
185.177.72.29 다수 .env 스캔 8/26 10:44 15:00
221.159.119.8 2회 TP-Link RCE 8/26 20:48 20:52
34.126.97.130 2회 WordPress 8/26 22:46 23:20
67.220.94.81 1회 Symfony 8/26 17:17 23:20
147.45.211.191 다수 PHPUnit/CGI 9/10 13:15 9/10
45.156.128.0/24 다수 다중 스캔 9/10 9/10 서브넷

2.2 공격 패턴

# PHPUnit 공격 패턴 (103.225.9.122)
[25/Aug/2025:06:17:24] /workspace/drupal/vendor/phpunit/...
[25/Aug/2025:06:17:25] /panel/vendor/phpunit/...
[25/Aug/2025:06:17:26] /public/vendor/phpunit/...
[25/Aug/2025:06:17:27] /apps/vendor/phpunit/...
[25/Aug/2025:06:17:28] /app/vendor/phpunit/...

# .env 스캔 패턴 (142.93.90.55)
[26/Aug/2025:05:45:37] /.env
[26/Aug/2025:12:39:21] /.env (반복)

# WordPress 공격 패턴 (34.126.97.130)
[26/Aug/2025:22:46:33] /wp-admin/setup-config.ph%70 (URL 인코딩 우회)

# Symfony 공격 패턴 (67.220.94.81)
[26/Aug/2025:17:17:05] /app_dev.php/_profiler/open?file=app/config/parameters.yml

3. 현재 방어 상태

3.1 자동 방어 (이미 작동중)

  • 404 응답 반환 (취약 파일 없음)
  • Python/FastAPI 환경 (PHP 취약점 영향 없음)
  • Docker 컨테이너 격리

3.2 적용된 차단 조치

  • IP 차단 규칙 적용 완료 (총 10개 IP)
    • 15:00: 7개 IP (초기 차단)
    • 20:52: 1개 IP 추가 (TP-Link RCE)
    • 23:20: 2개 IP 추가 (WordPress, Symfony)
  • iptables-persistent 설치 및 규칙 영구 저장
  • ⏱️ fail2ban 설정 예정
  • ⏱️ WAF 규칙 적용 예정

4. 대응 조치 실행 결과

4.1 즉시 차단 완료 (iptables)

# 주요 공격 IP 차단
sudo iptables -A INPUT -s 185.177.72.10 -j DROP
sudo iptables -A INPUT -s 119.8.169.21 -j DROP
sudo iptables -A INPUT -s 111.119.234.186 -j DROP
sudo iptables -A INPUT -s 103.225.9.122 -j DROP
sudo iptables -A INPUT -s 142.93.90.55 -j DROP
sudo iptables -A INPUT -s 8.213.41.158 -j DROP
sudo iptables -A INPUT -s 185.177.72.29 -j DROP

# 규칙 저장 (재부팅 후에도 유지)
sudo apt-get install iptables-persistent
sudo netfilter-persistent save

4.2 fail2ban 설정

# fail2ban 설치
sudo apt-get install fail2ban

# nginx 보안 필터 생성
sudo cat > /etc/fail2ban/filter.d/nginx-security.conf << 'EOF'
[Definition]
failregex = ^<HOST> .* "(GET|POST) .*(phpunit|eval-stdin|\.env).*" .*$
ignoreregex =
EOF

# jail 설정
sudo cat > /etc/fail2ban/jail.d/nginx-security.conf << 'EOF'
[nginx-security]
enabled = true
filter = nginx-security
logpath = /var/log/nginx/access.log
maxretry = 3
bantime = 86400
findtime = 3600
action = iptables-multiport[name=nginx-security, port="http,https"]
EOF

# fail2ban 재시작
sudo systemctl restart fail2ban

4.3 nginx 보안 헤더 강화

# /etc/nginx/snippets/security.conf
location ~ \.(env|git|svn|htaccess|htpasswd)$ {
    deny all;
    return 404;
}

location ~ /(vendor|phpunit|eval-stdin)/ {
    deny all;
    return 404;
}

# 보안 헤더 추가
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;

5. 모니터링 명령어

5.1 실시간 공격 모니터링

# 실시간 공격 시도 감시
tail -f /var/log/nginx/access.log | grep -E "phpunit|eval-stdin|\.env"

# 공격 IP 통계
sudo grep -E "phpunit|\.env" /var/log/nginx/access.log.1 | \
  awk '{print $1}' | sort | uniq -c | sort -rn | head -20

# fail2ban 차단 목록
sudo fail2ban-client status nginx-security

5.2 차단 확인

# iptables 규칙 확인
sudo iptables -L -n -v | grep DROP

# 차단된 IP 연결 시도
sudo tcpdump -i any src host 185.177.72.10

6. 장기 대책

6.1 보안 강화

  1. CloudFlare/WAF 도입 검토

    • DDoS 방어
    • 자동 봇 차단
    • 지역 기반 접근 제한
  2. 로그 분석 자동화

    • ELK Stack 구축
    • 이상 패턴 자동 알림
  3. 정기 보안 점검

    • 월 1회 로그 분석
    • 분기별 보안 감사

6.2 대응 프로세스

  1. 공격 탐지 → 2. IP 분석 → 3. 즉시 차단 → 4. 패턴 분석 → 5. 규칙 업데이트

7. 참고 사항

  • 공격은 자동화 봇에 의한 대규모 스캔
  • 실제 침투 성공 사례 없음
  • Docker 환경으로 격리되어 영향 최소화
  • 정기적인 로그 검토 필요

최종 차단: 2025-09-10 15:20 (총 14개 규칙)

8. 차단 실행 결과

8.1 차단된 IP 목록

# iptables 차단 규칙 확인
sudo iptables -L INPUT -n -v | grep DROP

# 총 14개 규칙 (개별 13개 + 서브넷 1개)
185.177.72.10, 119.8.169.21, 111.119.234.186
103.225.9.122, 142.93.90.55, 8.213.41.158
185.177.72.29, 221.159.119.8, 34.126.97.130
67.220.94.81, 147.45.211.191, 45.156.128.170
45.156.128.171, 45.156.128.0/24 (네덜란드)

8.2 영구 저장 상태

  • 파일 위치: /etc/iptables/rules.v4
  • 최종 저장: 2025-09-10 15:20
  • 총 차단: 14개 규칙
  • 재부팅 후: 자동 적용 (netfilter-persistent 서비스)

8.3 차단 효과 분석 (23:20 점검)

  • PHPUnit/env 공격: 완전 차단 (15:00 이후 0건)
  • 새로운 공격 유형 탐지:
    • TP-Link RCE (20:48)
    • WordPress 설치 스캔 (22:46)
    • Symfony 프로파일러 접근 (17:17)
  • 공격 패턴 변화: 다양한 프레임워크 대상 공격으로 확산
  • 방어 상태: 정상 작동 중 (모든 공격 차단됨)