의심 프로세스를 종료했는데 같은 이름이 다시 보인다고 하자. 취약한 요청이 다시 들어왔을 수도 있고, 관리자가 종료를 감지해 재시작했을 수도 있다. 이름만 같다면 다른 호스트의 실행을 같은 프로세스로 보았을 가능성도 있다.
출발점이 된 개발 환경에서는 외부 개발자가 이상 징후를 공유한 뒤 프로세스 종료와 재등장이 관측됐다. 이후 Next.js 취약점을 유입 원인 후보로 분석하고 버전을 업데이트한 뒤 로그 점검과 모니터링을 이어갔다. 확보한 관측은 프로세스의 재등장과 버전 업데이트까지다. 재등장 원인과 침해 범위를 확정하려면 당시 버전과 요청·프로세스 기록을 연결해야 한다.
조사의 중심 질문은 무엇을 종료할지가 아니라 누가 무엇을 다시 실행했는가다.
같은 이름보다 생성 관계를 먼저 본다
| 가설 | 함께 비교할 기록 |
|---|---|
| 취약 요청의 재유입 | 요청 시각, 웹 런타임 부모 관계, 새 파일 |
| 재시작 관리자 | 서비스·컨테이너 재시작 이벤트, 시작 명령 |
| 부팅·예약 실행 | 서비스 유닛·예약 작업과 생성 주기 |
| 다른 실행의 오인 | 호스트·컨테이너 ID, PID namespace, 시작 시각 |
정상 복구 정책도 변조된 명령을 실행할 수 있으므로 “누가 재시작했는가”와 “무엇을 실행했는가”를 함께 확인한다. 프로세스 이름 하나로 백도어 지속성을 확정하지 않는다.
도식의 세 경로에 들어가기 전에 호스트와 실행 대상이 동일한지도 확인한다. 재감염 가설을 시험하려고 의심 파일을 실행하거나 운영 서버에 공격 요청을 다시 보내는 방식은 기존 증거를 바꿀 수 있다.
종료 후 사라질 기록을 보존한다
아래는 Linux에서 확인할 수 있는 읽기 중심 명령 예시다. PID와 서비스명·기간은 조사 대상에 맞게 바꾼다.
ps -eo pid,ppid,lstart,user,args --forest
readlink -f /proc/<pid>/exe
cat /proc/<pid>/cgroup
systemctl status <service>
systemctl show <service> -p ExecStart -p Restart
journalctl -u <service> --since "2026-01-01 00:00:00"
부모·생성 시각·실행 파일·관리 설정을 같은 수집 시각과 호스트 식별자로 연결한다. 컨테이너 소속, 열린 연결, 파일 해시, 배포 이미지 digest, lockfile와 설치 패키지 버전도 필요한 증거가 될 수 있다. 명령행·환경·로그에는 비밀값이 있을 수 있으므로 접근 통제된 위치에 보존한다.
추가 대응을 설계할 때는 피해 위험과 증거 보존을 함께 고려해 격리 수준을 정한다. 트래픽에서 제외할지, 외부 통신을 제한할지는 노출 범위와 서비스 영향에 따라 선택한다.
요청·프로세스·관리 이벤트를 한 시간축에 둔다
특정 요청 직후 웹 런타임의 자식이 생성되면 재유입 가설을 검토한다. 요청과 관계없이 서비스 재시작 때 나타나면 시작 명령과 산출물을 조사한다. 일정 주기라면 예약 실행 기록을 비교한다. 어느 경우에도 시각의 가까움만으로 인과를 확정하지 않고 실행 경로와 파일 흔적을 추가로 연결한다.
설치된 Next.js·React 패키지와 라우터 구성은 공식 영향 범위와 대조한다. Next.js CVE-2025-66478 공지는 영향을 받는 구성의 패치 업그레이드와 재배포를 안내한다. React RSC 보안 공지는 후속 취약점 대응으로 업데이트돼 있다. 특정 과거 버전 목록을 현재의 완전한 패치 기준으로 고정하지 않는다.
영향 버전이 설치됐다는 사실은 후보를 좁히지만 특정 요청이 침해를 만들었다는 증거와는 다르다. 앞선 개발 환경에서도 해당 CVE와 요청·프로세스 기록의 인과를 확인해야 원인으로 연결할 수 있다.
패치와 신뢰 복구의 완료 조건을 나눈다
패키지를 업데이트하면 알려진 진입점을 줄일 수 있다. 그러나 이미 변경됐을 수 있는 파일과 자격증명을 그대로 신뢰할 수 있는지는 별도 문제다. 일반 복구 모델에서는 증거와 영향 범위를 보존한 뒤 신뢰할 소스·lockfile·이미지에서 새 산출물을 만들고, 새 환경의 기능·프로세스·통신을 확인한 뒤 트래픽을 복원한다.
노출 가능성이 있는 비밀값은 소비 서비스와 폐기 조건을 정해 교체한다. Next.js 공지는 패치와 재배포 이후 비밀값 회전을 권고한다. 새 값을 취약한 환경에 다시 넣지 않도록 순서를 설계하고 이전 값이 실제로 거절되는지도 확인한다. 재구축과 키 회전까지 대응 범위를 넓힌다면 각각의 적용 기록과 검증 결과를 남긴다.
NIST SP 800-61 Rev.3은 탐지·대응·복구를 위험관리와 연결한다. 정상 기능 확인 외에도 예상하지 못한 프로세스·파일·연결, 재시작 경로 변경, 이전 자격증명 사용을 관측할 기간과 종료 기준을 정한다.
재등장이 잠시 멈춘 것과 원인을 제거한 것은 같은 결과가 아니다. 다음에는 생성 주체를 설명할 증거와 새 환경을 신뢰할 기준을 각각 남겨 종료 반복이 조사·복구를 대신하지 않게 한다.
