컴퓨터뽀개버리기

[네트워크] 패킷 구조 (HTTP-TCP-IP-MAC 헤더 길이 자르기) 본문

꾸준히 보자/네트워크

[네트워크] 패킷 구조 (HTTP-TCP-IP-MAC 헤더 길이 자르기)

그순간을기억해 2024. 4. 15. 23:49
반응형

최근에 네트워크 보안 장비(IPS) 로그를 분석하는 프로젝트를 진행 중이다.

다양한 분석로직을 적용하다보니 문제가 발생했다.

발생한 문제

  1. HEX로 인코딩된 HTTP 패킷을 통으로 디코딩하면 문자가 아닌 값들이 섞임
  2. 그 값들로 인해 문자열로 비교하는 분석 로직에 오탐이 발생함
    • 문자가 아닌 값이 강제로 아스키코드 변환되어서 생긴 문제

환경설명

  • IPS 에서 발생한 이벤트를 Splunk에서 수집&저장
  • Splunk Decrypt , Urldecode 함수를 이용해서 HEX 패킷을 문자로 디코딩하여 분석에 활용

패킷 구조 뜯어보기

IPS장비에서 Network Layer (3계층)에서 패킷을 탐지하고 있다고 알고 있는데,

OSI 7계층에서 2계층 MAC헤더까지 보이고있었다. (IPS 장비마다 다를지 원래 IPS가 2계층까지 보는지는 확인이 좀 필요하다.) #encapsulation #캡슐화

 

 

 

그럼 실제로 분석할 패킷을 봐보자. wireshark 로 열어보면 아래와 같다.

우측에 문자열로 표현되어있는 그 값이 보이는데 GET전에 문자로 표현되지 않는 값들이 있다.

그 값들이 각 캡슐화 단계에서 각 계층의 헤더가 붙은 정보이며, 문자가 아닌 플래그값들이 아스키코드로 변환된 것임을 알 수 있다.

HTTP 패킷

나의 목표는 불필요한 헤더값을 다 자르고 패킷 body 값만 취득하면 되는 것
그래서 패킷의 길이를 좌우하는 플래그에 집중해서 본다.


Mac Header 길이(2계층)

고정 길이 : 14byte

 

Mac Header 부분에서 얻을 수 있는 정보가 있다.

MAC헤더 뒤에 VLAN헤더의 여부이다.

  • Mac Type : 8100 은 Vlan 헤더 있음
  • Mac Type : 8000 은 IPv4프로토콜로 Vlan 헤더가 없음

Vlan 헤더(2계층)

고정 길이 : 8byte

IP 헤더(3계층)

가변 길이 : 20~60바이트 (일반적으로 20바이트)

헤더의 길이는 패킷 내 플래그 값으로 확인해야 된다.

IP 헤더 구조를 보면 두번째 값이 헤더 길이임을 알 수 있다.

  • 플래그 : 5 → 20byte (길이는 4 * 플래그 값)

IP헤더 구조

 

IP헤더 길이

TCP헤더(4계층)

TCP헤더에도 구조를 보면 중간쯤에 길이를 나타내는 플래그가 있다.

 

 

TCP헤더 구조

위 구조에서는 길이값이 어디에 나와있지 않은데 아래 자료를 보면 더 자세히 나와있다.

 

마찬가지로 값이 플래그 값에 4를 곱하면 TCP 패킷 길이를 구할 수 있다.

대부분의 패킷은 플래그 값이 5(5 * 4 = 20byte)으로 보였지만,

아래 샘플 패킷은 8로 헤더길이가 32byte 인 것을 확인할 수 있다.


결론

이렇게 각 헤더별로 길이를 구해서 가변적으로 헤더 값을 잘라주면 깔끔하게 원하는 HTTP 헤더 + 바디 값을 텍스트로 변활 수 있다.

최종적으로 합쳐보면


이렇게 길이를 구해서 자르면 위의 HTTP GET/POST 등 텍스트 값으로 깔끔하게 치환된다.

Splunk 쿼리는 다음에 업로드해야겠다.

(참고 : https://ns2.elhacker.net/cheat-sheet/ip-tcp-header-ipv4-subnetting-cheat-sheet.pdf)
(참고 : 정보통신기술해설)

반응형