📚 네트워크 · 패킷 분석 › 05. 네트워크 스캔 징후 분석 — 230편
이전 글: 229. 외부망 정찰 · 다음 글: 231. Directory Scan

1. 개념

Web Scan(웹 스캔) 은 웹 서비스를 대상으로 알려진 취약 경로, 설정 오류, 취약점 반응을 자동으로 확인하는 정찰입니다. 포트 스캔이 "80·443이 열려 있다"에서 끝난다면, 웹 스캔은 그 안의 애플리케이션이 어떤 소프트웨어이고 어디가 약한지를 조사합니다.

웹 스캔은 네트워크 계층에서는 정상 HTTP 요청이므로 방화벽 로그만으로는 구분하기 어렵고, 웹 서버 접근 로그와 WAF 로그가 주 분석 대상입니다. 숨겨진 디렉터리·파일 목록 대입은 231. Directory Scan에서 따로 다룹니다. HTTP 상태 코드 분석은 145. HTTP 메서드와 상태코드로 보는 이상징후을 참고합니다.

웹 스캔이 확인하는 것요청 예로그에서 보이는 것
서버·프레임워크 정보기본 페이지, 오류 유발 요청다양한 경로의 4xx·5xx
알려진 민감 파일/.env, /.git/config, 백업 파일존재하지 않는 경로 404 다수
관리 페이지/admin/, /phpmyadmin/여러 제품의 관리 경로 연속 시도
취약점 반응파라미터에 공격 패턴 삽입특수문자·인코딩이 많은 쿼리
허용 메서드OPTIONS, TRACE, PROPFIND평소 없는 메서드

2. 동작 원리

포트 스캔으로 웹 포트 확인 (80, 443, 8080 ...)
      ↓
기본 정보 수집: 응답 헤더, 기본 페이지, 오류 페이지 형식
      ↓
사전 목록 기반 요청: 수천 개의 알려진 경로·파일·관리 페이지
      ↓
파라미터 시험: 입력값에 공격 패턴 삽입 → 응답 차이 비교
      ↓
결과: 존재하는 경로, 의심 취약점 목록
      ↓
방어 측 흔적: 한 출발지의 짧은 시간 대량 요청 / 404 비율 급증 /
             요청 경로 다양성 / 스캐너 특징 User-Agent / WAF·IDS 웹 공격 Alert

일부 웹 스캐너는 기본 설정에서 자신의 이름이 들어간 User-Agent를 사용합니다(예: Nikto, sqlmap). 다만 User-Agent는 쉽게 바꿀 수 있으므로, 없다고 해서 스캔이 아니라고 판단하면 안 됩니다. 판단의 중심은 요청의 양, 실패 비율, 경로 다양성입니다.


3. 주요 특징

  • 높은 404 비율: 존재 여부를 모르는 경로를 대량으로 요청하므로 응답의 대부분이 404입니다.
  • 경로 다양성: 정상 사용자는 페이지 링크를 따라 이동하므로 요청 경로가 사이트 구조 안에 있고, 스캐너는 사이트에 없는 제품의 경로(다른 CMS 관리 페이지 등)까지 요청합니다.
  • 정적 리소스 요청 없음: 브라우저는 HTML과 함께 CSS·JS·이미지를 요청하지만, 스캐너는 대상 경로만 요청하는 경우가 많습니다.
  • 짧은 시간 대량 요청: 사람의 클릭 속도로는 불가능한 초당 여러 건의 요청이 이어집니다.
기준정상 사용자검색 엔진 크롤러웹 스캔
404 비율낮음낮음~중간(깨진 링크)매우 높음
요청 경로사이트 구조 안링크·사이트맵 기반사이트에 없는 경로 다수
정적 리소스함께 요청선택적거의 없음
robots.txt무관먼저 확인하고 따름무시하거나 금지 경로를 오히려 확인
출처 확인—역방향 DNS로 검증 가능검증 불가

4. 예시

실습 예시 — 본인 소유 실습 웹 서버의 접근 로그(combined 형식)에서 출발지별 요청 수, 404 비율, 서로 다른 경로 수를 계산하는 방어 측 명령입니다. Rocky는 /var/log/httpd/access_log, Ubuntu는 /var/log/apache2/access.log이며, 값은 환경마다 다릅니다.

LOG=/var/log/apache2/access.log
sudo awk '{req[$1]++; path[$1" "$7]=1; if ($9==404) nf[$1]++}
     END {for (k in path) {split(k,a," "); np[a[1]]++}
          for (s in req) printf "%d %d%% %d %s\n", req[s], nf[s]*100/req[s], np[s], s}' $LOG \
  | sort -rn | head

# User-Agent에 스캐너 이름이 드러난 요청
sudo grep -iE 'nikto|sqlmap|nmap scripting engine' $LOG | awk '{print $1}' | sort | uniq -c

결과 형식 예시(요청 수, 404 비율, 서로 다른 경로 수, 출발지 / 값은 환경마다 다름):

6412 93% 6120 203.0.113.45
 380  2%   41 192.168.10.15
 122  8%   97 198.51.100.66

접근 로그 형식 예시(값은 환경마다 다름):

203.0.113.45 - - [30/Sep/2026:14:02:11 +0900] "GET /.git/config HTTP/1.1" 404 196 "-" "Mozilla/5.00 (Nikto/2.5.0) (Evasions:None) (Test:000123)"
203.0.113.45 - - [30/Sep/2026:14:02:11 +0900] "GET /phpmyadmin/ HTTP/1.1" 404 196 "-" "Mozilla/5.00 (Nikto/2.5.0) (Evasions:None) (Test:000124)"
203.0.113.45 - - [30/Sep/2026:14:02:12 +0900] "OPTIONS / HTTP/1.1" 200 - "-" "Mozilla/5.00 (Nikto/2.5.0) (Evasions:None) (Test:000125)"
관찰해석
6,412건 중 404가 93%, 경로 6,120개사전 목록 기반 웹 스캔
사이트에 없는 phpMyAdmin 경로제품과 무관한 관리 페이지 탐색
User-Agent에 도구명기본 설정의 스캐너 (바뀐 경우도 있으므로 보조 단서)
198.51.100.66: 404 8%크롤러 가능성 → 역방향 DNS로 출처 검증

5. 보안 관점

  • 웹 스캔은 공격 직전 단계인 경우가 많습니다. 404가 아닌 응답(200, 403, 500)을 받은 경로는 상대가 "존재함"을 확인한 경로이므로 우선 검토합니다.
  • .git, .env, 백업 파일이 200으로 응답했다면 스캔 대응이 아니라 정보 유출 사고로 전환해 조사합니다.
  • WAF·IPS의 웹 스캔 차단은 유효하지만, 차단 전 이미 응답한 요청이 있는지 원본 로그로 확인합니다.

6. SOC 관점

흔적 위치확인 내용
웹 접근 로그출발지별 요청 수, 404 비율, 경로 다양성, User-Agent
WAF스캐너 탐지·웹 공격 패턴 차단 이벤트
IDS웹 스캐너 User-Agent·공격 패턴 시그니처
애플리케이션 로그파라미터 오류, 예외 발생 급증

관제자가 확인할 질문

  • 이 출발지의 요청 중 404가 아닌 응답을 받은 경로는 무엇이며, 민감 정보가 반환되었는가?
  • 파라미터에 공격 패턴이 담긴 요청이 있었는가? 서버 오류(5xx)가 동반되었는가?
  • 인가된 웹 취약점 점검 일정과 출발지가 일치하는가?

오탐 주의: 검색 엔진 크롤러, 모니터링 도구, 사이트 링크 점검 도구, 인가된 점검은 비슷한 흔적을 만듭니다. 크롤러는 역방향 DNS와 정방향 조회가 일치하는지로 검증하고, User-Agent만으로 신뢰하지 않습니다.


7. 핵심 정리

  • Web Scan은 웹 애플리케이션의 취약 경로·설정 오류·취약점 반응을 자동으로 확인하는 정찰입니다.
  • 네트워크 계층에서는 정상 HTTP이므로 웹 접근 로그와 WAF 로그가 주 분석 대상입니다.
  • 높은 404 비율, 사이트에 없는 경로, 정적 리소스 부재, 짧은 시간 대량 요청이 핵심 흔적입니다.
  • 스캐너 이름이 든 User-Agent는 보조 단서이며, 판단은 양·실패 비율·경로 다양성으로 합니다.
  • 404가 아닌 응답을 받은 경로, 특히 민감 파일의 200 응답은 사고로 전환해 조사합니다.
profile
코드에 숨겨진 위협을 읽고 AI로 보안의 미래를 설계합니다. 프론트엔드 개발 경험을 자산 삼아 더 견고하고 지능적인 보안 운영 시스템을 구축해 나가는 과정을 기록합니다

0개의 댓글