linefilt

페이로드 길이를 탐지하는 방법 본문

etc

페이로드 길이를 탐지하는 방법

mong.goose 2019. 4. 12. 21:28

dsize

  • dsize는 일반적으로 IP, 및 TCP, UDP 패킷의 페이로드를 매치하는데 사용할 수 있다.

isdataat

  • isdataat은 보통 페이로드 존재에 대한 유효성을 검사하는데 사용한다. 스트림 탐지에서 isdataat은 누적 길이를 기반하여 판단한다.

Payload Header

  • 대부분의 프로토콜들은 각각 자신들의 메시지에 대한 정보를 담고 있다. 이 정보를 탐지하여 길이를 유추할 수 있다.
    상황에 따라 각 옵션들을 적절히 사용하는 것이 중요하다.

dsize는 가급적 원래의 메시지 자체가 300이하와 같이 작은 메시지에 대해서 사용하는 것이 적절하다. 클라이언트는 각각의 MTU 사이즈를 직접 조정할 수 있기에 큰 값을 매치하는 것은 우회 가능성을 높인다. 서버 접속에서 너무 작은 MTU에 대한 제한이 없다면 탐지는 더욱 어려워진다. dsize는 다른 방법과 달리 암호화 스트림에서 유용하게 사용할 수 있다. 암호화 스트림은 메시지의 내용을 확인할 수 없기 때문에 Traffic Flow 패턴을 탐지함에 있어서 적절하게 사용할 수 있다. 물론 이 상황에서도 원래의 메시지 자체가 작은 패킷을 탐지하여야 한다.

isdataat은 단순 길이 매치보다는 relatvie와 negated 옵션을 사용한 정확한 매치가 많이 사용된다. relative 옵션을 사용해서 두 개 이상의 content간의 페이로드 유효성을 검증할 수 있는데, 주의해야할 점은 유효성을 검증하는 범위는 각 재-조합 윈도우 또는 버퍼 사이즈를 고려해야한다는 점이다. negated가 사용된 isdataat은 www.foobar.com과 www.foobar.com.com과 같이 DNS 쿼리와 같이 도메인을 식별하는 데 사용할할 수 있다. YARA에서 비슷한 옵션으로는 fullword를 고려할 수 있다.


Payload Header는 단일 패킷 또는 스트림 메시지에 상관없이 메시지 길이를 식별할 수 있는 방법을 제공한다. Header의 값을 byte_extract를 통해서 변수로 저장하고 이 변수를 isdataat에서 사용하여 메시지의 유효성을 검증할 수 있다. 하지만 isdataat의 정수 범위는 65535까지이기 때문에 전반적인 매치로는 적절하지 않다. 그렇기 때문에 Payload Header는 길이를 매치하는 방법이기도 하지만, 해당 메시지가 얼마만큼의 길이를 가지고 있는지 식별하는데 사용한다.

isdataat과 Payload Header 식별에서는 프로토콜과 메시지의 길이를 식별하기 위해 재-조합이 필요할 수 있다. 예를 들어, TLS 메시지는 처음에 Hex Value 16 03 0?이 나오며 Client Random 및및 Session ID 이후에 메시지의 길이를 식별하는게 가능하다. 큰 길이의 gap은 아니지만 인위적인 분할 공격이 발생할 수 있기 때문에 재-조합을 사용해야 한다.

Comments