HTTP 네트워크 현황분석

이전 포스트에 이어서 작성하였습니다.

[시스템 보안 및 실무/시스템 운영·구축 실무] - HTTP 로그분석(현황분석/이상징후)

 

HTTP 로그분석(현황분석/이상징후)

HTTP Log 환경구성 zeek이 http 로그를 수집하고, 그 로그를 중앙관제서버에 전송합니다. 중앙관제서버는 그 로그들을 로딩해서 저장소도 만들고, source type도 만드는 등의 작업해야합니다. 1. Index 만

psjin230.tistory.com


HTTP 네트워크 현황 분석

● 내부 인트라넷 서비스/인터넷 기반 서비스도 대부분 HTTP로 동작

● HTTP를 분석 시 목적지가 인터넷인지 인트라넷인지 구분 필요

● 공격자가 내부망에 침투했다면 중요 데이터의 외부유출을 시도

=> 목적지가 인터넷으로 향하는 HTTP 인지 기업내부망으로 향하는지가 중요한 기준이 됨

 

1. Top 10 접속 도메인, 국가별 접속

2. Top 10 클라이언트 오류

3. Top 10 서버 오류

4. HTTP 상태 코드

5. HTTP 메소드


1. Top 10 접속 도메인, 국가별 접속

● 사용자들이 가장 많이 접속하는 도메인을 추출해서 접속현황 분석

● 특정 도메인과 국가로 많은 데이터가 전송되거나 낯선 국가명 등을 모니터링

● 접속 국가 정보를 이상징후의 주요 항목으로 사용

index=httplog sourcetype=httplog domain!="(empty)" 
| iplocation dst 
| where NOT cidrmatch("0.0.0.0/0", domain) 
| stats sum(request_body_len) as "Outbound", sum(response_body_len) as "Inbound" by domain, Country 
| eval Outbound=round(Outbound/(1024*1024),2) 
| eval Inbound=round(Inbound/(1024*1024),2) 
| sort Outbound desc 
| head 10

=> httlog의 httplog 필드와 일치하는 로그들만 검색 그리고 domain이 (empty)가 아닌 것들만 검색)

    domain이 (empty)라는 것은 정상적인 로그가 아님

=> iplocation 명령어를 통해 ip를 보고 나라를 추출

=> domain에는 문자주소가 들어있음. 근데 domain이 0.0.0.0/0 대역에 포함이 되면 domain에 숫자가 들어있다는 의미이므로 이런 domain은 검색에서 제외

=> domain.Country별로 요청길이의 총합을 Outbound, 응답길이의 총합을 Inbound로 표시

** request_body_len < response_body_len : 정상

** request_body_len > response_body_len : (점검대상이 될 수 있음) 단, PUT의 경우, 데이터를 포함하기 때문에 요청 길이가 더 클 수도 있음.

=> Outbound, Inbound를 소수점 아래 2자리까지 표시, MB로 표시(원래는 byte로 값이 나옴)

=> Outbound 기준 내림차순

=> 상위 10개 표시

=> 도메인명을 통해 어느 나라 사이트인지도 확인 가능


2. Top 10 클라이언트 오류

● HTTP 상태코드는 클라이언트가 요청한 내용을 서버에서 처리한 결과

index=httplog sourcetype=httplog uri!="-" uri!="/" (status_code >=400 AND status_code < 500)
| top domain, status_code limit=10 showperc=f

=> uri != "/" : index.html을 제외(메인페이지 접속 제외)

    홈페이지 자체가 안들어가지는 건 정상운영 사이트가 아니기 때문에 이런 로그는 제외

=> 400번대는 포함하고 500번대는 제외하겠다.(즉, 클라이언트 오류만 보겠다)

=> 사이트에 접속해서 그다음에 하는 작업하는 중간에 발생하는 오류에 대해서 검색

=> iopen.kakaocdn.net를 이벤트 보기로 보면 계속해서 없는 자원 /p/f-1.jpg를 요청하고 있음

=> 404 : 존재하지 않는 리소스를 요청할 때 발생하는 에러


3. Top 10 서버 오류

index=httplog sourcetype=httplog uri!="-" status_code >= 500
| top domain, status_code limit=10 showperc=f

=> 500번대 오류를 보겠다.(즉 서버 측 오류만 보겠다)

=> 502 : bad gateway, 다이렉트로 서버를 접속하는 것이 아니라 건너 건너 프록시를 사용하여 접속하려고 할 때 발생하는 오류로, 중계역할을 하는 프록시에 문제가 발생했을 때 나타나는 오류

=> 503 : 하드웨어상 오류

 

4. HTTP 상태 코드

index=httplog sourcetype=httplog domain!="(empty)" status_code!="-" 
| top limit=10 showperc=f status_code

=> 상태코드가 "-"인 것은 제외하고 검색(상태코드가 없는 것 제외)

 

5. HTTP 메소드

● 클라이언트가 서버에 GET 또는 POST를 이용하여 자원을 요청하는 방식

● HTTP 표준에서는 많은 메소드를 지원하지만 사용자가 많이 사용하지 않는 메소드는 공격자의 정보 수집 행위 등 정상적인 사용 범위가 아닐 수 있음

index=httplog sourcetype=httplog uri!="-"
| top method limit=10 showperc=f

=> uri가 "-"인 것은 검색에서 제외(uri 필드 부분이 '-'라는 것은 uri 주소가 비어있다는 의미 )

=> 비율X, 상위 10개 표시

통계
시각화

=> GET 메소드가 가장 많이 잡힘을 확인