
Suricata LUA 스크립트로 CVE-2019-12255, CVE-2019-12256, CVE-2019-12258 및 CVE-2019-12260 탐지
CVE-2019-12255, CVE-2019-12256, CVE-2019-12258, CVE-2019-12260을 탐지하는 Suricata LUA 스크립트
이 스크립트는 CVE-2019-12255를 확인합니다. 검사되는 패킷은 PSH, ACK, URG 플래그가 설정되어 있어야 하며, 페이로드 크기가 1500바이트를 초과해야 합니다. 그런 다음 긴급 포인터(urgent pointer) 값이 0으로 설정되어 있는지 확인합니다. 이는 취약한 장치에서 정수 언더플로우(integer underflow)를 유발합니다.
익스플로잇은 긴급 포인터를 0으로 설정하여 언더플로우시키는 데 기반합니다. 이 결함으로 인해 대상의 recv()에 있는 길이 제약이 무시되고, TCP 윈도우에서 사용자가 제공한 버퍼로 모든 가용 데이터가 복사됩니다. 이 규칙은 페이로드가 1500바이트를 초과하는지 확인합니다.
이 스크립트는 CVE-2019-12256을 확인합니다. 검사되는 패킷은 IP 패킷에 두 개의 LSRR 또는 SSRR 옵션으로 구성됩니다. LSRR 옵션은 16진수 값 0x83으로 식별할 수 있고, SSRR 옵션은 16진수 값 0x89로 식별할 수 있습니다. 익스플로잇은 유효하지 않은 값으로 구성되며, 길이는 일반적으로 경로를 정의할 때 사용되는 길이(최소 4바이트)보다 작습니다. 이는 서버로 전송되는 패킷에 두 번 나타납니다. 다음 IP 옵션은 유효하지 않은 LSRR 옵션으로 스택 오버플로우를 유발합니다:
| 유형 LSRR | 길이 | LSRR-포인터 | 유형 LSRR | 길이 | LSRR-포인터 |
|---|---|---|---|---|---|
| \x83 | \x03 | \x27 | \x83 | \x03 | \x27 |
다음 IP 옵션은 유효하지 않은 SSRR 옵션으로 스택 오버플로우를 유발합니다:
| 유형 SSRR | 길이 | SSRR-포인터 | 유형 SSRR | 길이 | SSRR-포인터 |
|---|---|---|---|---|---|
| \x89 | \x03 | \x27 | \x89 | \x03 | \x27 |
이 스크립트는 CVE-2019-12258을 확인합니다. 관련 패킷은 PCAP에서 주석으로 표시됩니다. 첫 번째 탐지는 2개의 윈도우 스케일 옵션(1개는 유효하지 않음, 1개는 유효함)이 주어졌을 때 확인됩니다. 두 번째는 1개의 유효하지 않은 윈도우 스케일 옵션을 포함하는 비무장(unweaponized) DoS 변종입니다.
윈도우 스케일 옵션은 값 03을 가지며 이 옵션이 사용 중임을 나타내고, TCP 패킷의 오프셋 57에 설정됩니다. 익스플로잇이 트리거되려면 익스플로잇 값이 2(유효하지 않음)여야 하며, 이 값은 오프셋 58에 위치합니다. 값이 확인되며, 해당 경우에 1(일치)을 반환합니다.
이 스크립트는 CVE-2019-12260을 확인합니다. 검사되는 패킷은 변형된 SYN 패킷으로 구성되며, 이 패킷은 바이트 값이 3바이트 이하인 TCP-AO 옵션 필드를 포함합니다. TCP-AO 옵션은 16진수 값 0x29로 설정할 수 있으며, RFC: https://tools.ietf.org/html/rfc5925#page-7 에 따릅니다.
익스플로잇은 TCP-AO 옵션을 3바이트 이하로 설정하여 변형시키는 데 기반합니다. 이는 오프셋 56에 16진수 값 0x29가 옵션으로 설정되어 있는지 확인하여 검사할 수 있습니다.