침입 탐지 및 방지(IDP) 서명 언어 개선 사항
IDP 서명 언어 구문을 통해 IDP는 오탐을 줄이는 데 도움이 되는 보다 효율적인 서명을 생성할 수 있습니다. 이는 규칙 기반 구문, 컨텍스트 및 일치 조건을 사용하여 공격 패턴을 정의하는 서명 언어를 사용하여 달성할 수 있습니다.
시그니처 언어 구문 이해
Junos OS의 침입 탐지 및 방지(IDP) 서명 언어 구문은 침입 탐지 및 방지(IDP) 서명 언어 내에서 사용할 수 있는 구조입니다. 이 구조는 네트워크 보안 조치의 탐지 및 방지 기능을 향상시키도록 설계되었습니다. 이 언어는 다양한 유형의 악의적인 활동과 비정상적인 트래픽 패턴을 감지할 수 있는 서명을 정의하기 위한 도구 및 기능 집합을 제공합니다. 네트워크 관리자는 효과적인 보안 시그니처를 생성할 수 있습니다. 구문에는 트래픽 패턴을 정의하고, 경고 조건을 지정하고, 탐지의 정확성과 관련성을 개선하기 위해 상황 정보를 통합하는 옵션이 포함됩니다.
IDP 엔진 코드에서 지원되는 구문은 다음과 같습니다.
-
Depth- 해당 패턴을 검색할 패킷의 깊이를 지정합니다. 깊이 값은 상대적이지 않습니다. 예를 들어, 깊이를 100으로 지정할 수 있습니다.
<Depth>100</Depth>
-
Offset- 패킷 내에서 패턴 검색을 시작할 위치를 지정할 수 있습니다. 오프셋 값은 상대적이지 않습니다. 예를 들어, offset 값을 100으로 지정할 수 있습니다.
<Offset>100</Offset>
-
Within- 패턴 일치 사이에 최대 N바이트가 있도록 보장합니다. 패턴 일치는 항상 이전 일치를 기준으로 합니다. 예를 들어, N의 값이 10인 경우.
예제와 같이 m01 일치 후 m02 일치가 10바이트 이내에 발생하여 공격 알림을 트리거합니다.<Attack> <Member>m01</Member> - - - - - - </Attack> <Attack> <Member>m02</Member> - - - - - - <Within>10</Within> - - - - - - </Attack>
-
Distance- 이전 패턴 일치를 기준으로 IDP 엔진이 지정된 패턴을 검색해야 하는 위치를 지정할 수 있습니다. 이는 항상 이전 일치 항목과 관련이 있으며 거리 값은 음수일 수 있습니다. 예를 들어, N의 값이 10인 경우 m01이 일치하면 m01 일치가 끝난 후 10바이트가 발생해야 합니다.
<Attack> <Member>m01</Member> - - - - - - </Attack> <Attack> <Member>m02</Member> - - - - - - <Distance>10</Distance> - - - - - - </Attack>
-
Ipopts—나열된 모든 ipopt는 보안 패키지에 정의된 해당 이상을 가지며 디바이스 또는 침입 탐지 및 방지(IDP) 엔진에서 구성될 때 탐지할 수 있습니다.
-
rr - 레코드 경로
-
eol - 목록의 끝
-
nop - 연산 없음
-
ts - 시간소인
-
sec - IP 보안
-
esec - IP 확장 보안
-
lsrr - 느슨한 소스 라우팅
-
ssrr - 엄격한 소스 라우팅
-
satid - 스트림 ID
-
-
Byte extract- Byte extract 키워드는 길이로 인코딩된 프로토콜에 대해 서명을 작성하는 데 도움이 되며, 패킷 페이로드를 바이트 단위로 읽고 나중에 사용할 수 있도록 변수로 저장합니다. 바이트 추출은 상대적일 수도 있고 비상대적일 수도 있습니다. 체인 공격당 사용되는 바이트 추출의 수는 제한이 없습니다.예를 들어:
<Byte_Extract> <Byte>4</Byte> <Offset>12</Offset> <Relative>True</Relative> <Endian>Big</Endian> <Bitmask>0x45</Bitmask> <Multiplier>2</Multiplier> <String>dec</String> <align>True</align> <Name>msg_len</align> </Byte_Extract>
표 1 에는 구문에 대한 필드가 나열되어 있습니다
Byte extract.표 1: 바이트 추출 출력 필드 밭
필드 설명
align바이트 맞춤을 지정합니다.
bitmask16진수 형식으로 AND 연산을 위한 비트 마스크(1-4바이트)를 지정합니다.
bytes패킷에서 추출할 바이트 수(1-10)를 지정합니다.
endiannessIDP 엔진에서 읽은 바이트를 처리하는 엔디안을 지정합니다.
multiplier읽은 바이트에 대해 곱할 값을 지정합니다.
offsetIDP 엔진이 처리를 시작해야 하는 페이로드의 오프셋 바이트 수를 지정합니다.
relative마지막 패턴 일치를 기준으로 오프셋을 사용할지 여부를 지정합니다.
string문자열 데이터를 구문 분석해야 하는 데이터 형식을 지정합니다.
var-name다른 규칙 옵션에서 참조할 변수의 이름을 지정합니다.
-
Byte test-Byte test 키워드를 사용하면 바이트 필드를 작동 값으로 테스트할 수 있습니다. 바이트 테스트는 상대적일 수도 있고 비상대적일 수도 있습니다.
> , < , =, &, ^ ,<=,>=는 지원되는 연산자이며 추출되는 최대 바이트 수는 4입니다.예를 들어:M02 <SLE_Constructs> <Within>50</Within> <Byte_Test> <Byte>4</Byte> <Operator>=</Operator> <Offset>12</Offset> <Value>12</Value> <Relative>True</Relative> <Endian>Big</Endian> <Bitmask>0x45</Bitmask> <String>dec</String> <align>True</align> </Byte_Test>
표 2 에는 구문에 대한 필드가 나열되어 있습니다
Byte test.표 2: 바이트 테스트 출력 필드 밭
필드 설명
bitmask16진수 형식으로 AND 연산을 위한 비트 마스크(1-4바이트)를 지정합니다.
bytes패킷에서 추출할 바이트 수(1-10)를 지정합니다.
endiannessIDP 엔진에서 읽은 바이트를 처리하는 엔디안을 지정합니다.
negate연산자가 참이 아닌지 확인하십시오.
offset간격띄우기 변수 이름 또는 간격띄우기 값을 언급합니다
operator추출된 값에 대해 수행할 작업을 지정합니다.
relative마지막 패턴 일치를 기준으로 오프셋을 사용할지 여부를 지정합니다.
rvalue변환된 값은 rvalue를 사용하여 테스트됩니다. .
string문자열 데이터를 구문 분석해야 하는 데이터 형식을 지정합니다.
-
Byte jump- Byte jump 키워드는 길이로 인코딩된 프로토콜에 대해 작성된 서명이 페이로드의 특정 부분을 건너뛰고 매우 특정한 위치에서 탐지를 수행하는 데 사용됩니다. 바이트 점프 값은 상대적일 수도 있고 비상대적일 수도 있습니다.예를 들어:
<Byte_jump> <Byte>2</Byte> <Offset>8</Offset> <Relative>true</Relative> <Multiplier>2</Multiplier> <From_beginning>true</From_beginning> Endianess>little</Endianess> </Byte_jump>
표 3 에는 구문에 대한 필드가 나열되어 있습니다
Byte jump.표 3: 바이트 점프 출력 필드 밭
필드 설명
alignIDP 엔진에서 읽은 바이트를 처리하는 엔디안을 지정합니다.
bitmask16진수 형식으로 AND 연산을 위한 비트 마스크(1-4바이트)를 지정합니다.
bytes패킷에서 추출할 바이트 수(1-10)를 지정합니다.
endiannessIDP 엔진에서 읽은 바이트를 처리하는 데 사용해야 하는 엔디안을 지정합니다.
from-beginning페이로드 시작부터 점프를 활성화합니다.
from-end페이로드 끝에서 점프를 활성화합니다.
multiplier읽은 바이트에 대해 곱할 값을 지정합니다.
offset사용할 오프셋 변수 이름 또는 오프셋 값을 언급합니다.
post-offset앞뒤로 건너뛸 바이트 수를 지정합니다(-65535..65535).
relative마지막 패턴 일치를 기준으로 오프셋을 사용할지 여부를 지정합니다.
string문자열 데이터를 구문 분석해야 하는 데이터 형식을 지정합니다.
-
Byte math- Byte math 키워드를 사용하면 추출된 값, 지정된 값 또는 기존 변수에 대해 수학 연산을 수행할 수 있습니다. 바이트 수학 값은 결과를 새 결과 변수에 저장합니다. 와
1) '+' | '-' | '*' | '/' | '<<' | '>>'같은 작업이 지원됩니다. 상대적일 수도 있고 비상대적일 수도 있습니다.예를 들어:<SLE_Constructs> <Byte_Math> <Byte>4</Byte> <Operator>+</Operator> <Offset>12</Offset> <rValue>12</rValue> <Relative>True</Relative> <Endian>Big</Endian> <Bitmask>0x45</Bitmask> <String>dec</String> <align>True</align> <result_var>var1</result_var> </Byte_Math> <SLE_Constructs>표 4 에는 구문에 대한 필드가 나열되어 있습니다
Byte math.표 4: 바이트 수학 출력 필드 밭
필드 설명
bitmask16진수 형식으로 AND 연산을 위한 비트 마스크(1-4바이트)를 지정합니다.
bytes패킷에서 추출할 바이트 수(1-10)를 지정합니다.
endianness읽은 바이트를 처리하는 엔디안을 지정합니다.
offset처리를 시작할 페이로드의 바이트 수를 지정합니다(0..65535).
operator추출된 값에 대해 수행할 작업을 지정합니다.
relative마지막 패턴 일치를 기준으로 오프셋을 사용할지 여부를 지정합니다.
result결과를 저장할 변수 이름을 지정합니다.
rvalue특정 수학 연산에 사용할 값을 지정합니다.
string문자열 데이터를 구문 분석해야 하는 데이터 유형을 지정합니다.
-
Is-data-at— is-data-at 키워드를 사용하면 페이로드에 지정된 위치에 필요한 데이터가 포함되어 있는지 확인할 수 있습니다. 예를 들어:
M02 <SLE_Constructs> <Isdataat> <Value>50</Value> <negate>false</negate> </Isdataat> <SLE_Constructs>표 5 에는 구문에 대한 필드가 나열되어 있습니다
Is-data-at.표 5: Isdataat 출력 필드 밭
필드 설명
negateis-data-at 테스트 결과를 무효화합니다.
offset간격띄우기 변수 이름 또는 간격띄우기 값을 언급합니다.
relative마지막 패턴 일치를 기준으로 한 오프셋을 사용할지 여부를 지정합니다
-
Detection Filter— 탐지 필터는 공격이 일치해야 하는 속도를 정의합니다. 소스 또는 대상에 대한 개수는 서명에 지정된 옵션 값에 따라 유지됩니다. 탐지 필터는 외부
<SLE_Constructs>에 있으며 공격 구성원이 아닌 공격별로 지정됩니다. 동일한 소스 IP에서 10초 간격으로 공격이 5번 탐지되면 공격으로 플래그가 지정됩니다. 예를 들어:<Detection_filter> <count>5</count> <scope>src</scope> other options dst/session <time>10</time> </Detection_filter>