mirror of
https://github.com/zeek/zeek.git
synced 2025-10-15 13:08:20 +00:00
Merge remote-tracking branch 'origin/topic/jsiwek/gtp'
* origin/topic/jsiwek/gtp: Change binpac exceptions in AYIYA/GTP analyzers to do protocol_violation Add GTP tunnel analyzer memory leak unit test. Add GPRS Tunnelling Protocol (GTPv1) decapsulation. Closes #690.
This commit is contained in:
commit
b867333c2e
57 changed files with 716 additions and 4 deletions
|
@ -88,7 +88,10 @@ redef dpd_config += { [ANALYZER_AYIYA] = [$ports = ayiya_ports] };
|
|||
const teredo_ports = { 3544/udp };
|
||||
redef dpd_config += { [ANALYZER_TEREDO] = [$ports = teredo_ports] };
|
||||
|
||||
redef likely_server_ports += { ayiya_ports, teredo_ports };
|
||||
const gtpv1u_ports = { 2152/udp };
|
||||
redef dpd_config += { [ANALYZER_GTPV1] = [$ports = gtpv1u_ports] };
|
||||
|
||||
redef likely_server_ports += { ayiya_ports, teredo_ports, gtpv1u_ports };
|
||||
|
||||
event bro_init() &priority=5
|
||||
{
|
||||
|
|
|
@ -1450,6 +1450,44 @@ type teredo_hdr: record {
|
|||
hdr: pkt_hdr; ##< IPv6 and transport protocol headers.
|
||||
};
|
||||
|
||||
## A GTPv1 (GPRS Tunneling Protocol) header.
|
||||
type gtpv1_hdr: record {
|
||||
## The 3-bit version field, which for GTPv1 should be 1.
|
||||
version: count;
|
||||
## Protocol Type value differentiates GTP (value 1) from GTP' (value 0).
|
||||
pt_flag: bool;
|
||||
## Reserved field, should be 0.
|
||||
rsv: bool;
|
||||
## Extension Header flag. When 0, the *next_type* field may or may not
|
||||
## be present, but shouldn't be meaningful. When 1, *next_type* is
|
||||
## present and meaningful.
|
||||
e_flag: bool;
|
||||
## Sequence Number flag. When 0, the *seq* field may or may not
|
||||
## be present, but shouldn't be meaningful. When 1, *seq* is
|
||||
## present and meaningful.
|
||||
s_flag: bool;
|
||||
## N-PDU flag. When 0, the *n_pdu* field may or may not
|
||||
## be present, but shouldn't be meaningful. When 1, *n_pdu* is
|
||||
## present and meaningful.
|
||||
pn_flag: bool;
|
||||
## Message Type. A value of 255 indicates user-plane data is encapsulated.
|
||||
msg_type: count;
|
||||
## Length of the GTP packet payload (the rest of the packet following the
|
||||
## mandatory 8-byte GTP header).
|
||||
length: count;
|
||||
## Tunnel Endpoint Identifier. Unambiguously identifies a tunnel endpoint
|
||||
## in receiving GTP-U or GTP-C protocol entity.
|
||||
teid: count;
|
||||
## Sequence Number. Set if any *e_flag*, *s_flag*, or *pn_flag* field is
|
||||
## set.
|
||||
seq: count &optional;
|
||||
## N-PDU Number. Set if any *e_flag*, *s_flag*, or *pn_flag* field is set.
|
||||
n_pdu: count &optional;
|
||||
## Next Extension Header Type. Set if any *e_flag*, *s_flag*, or *pn_flag*
|
||||
## field is set.
|
||||
next_type: count &optional;
|
||||
};
|
||||
|
||||
## Definition of "secondary filters". A secondary filter is a BPF filter given as
|
||||
## index in this table. For each such filter, the corresponding event is raised for
|
||||
## all matching packets.
|
||||
|
@ -2786,6 +2824,9 @@ export {
|
|||
## Toggle whether to do IPv6-in-Teredo decapsulation.
|
||||
const enable_teredo = T &redef;
|
||||
|
||||
## Toggle whether to do GTPv1 decapsulation.
|
||||
const enable_gtpv1 = T &redef;
|
||||
|
||||
## With this option set, the Teredo analysis will first check to see if
|
||||
## other protocol analyzers have confirmed that they think they're
|
||||
## parsing the right protocol and only continue with Teredo tunnel
|
||||
|
@ -2802,6 +2843,15 @@ export {
|
|||
## :bro:see:`Tunnel::yielding_teredo_decapsulation`.
|
||||
const delay_teredo_confirmation = T &redef;
|
||||
|
||||
## With this set, the GTP analyzer waits until the most-recent upflow
|
||||
## and downflow packets are a valid GTPv1 encapsulation before
|
||||
## issuing :bro:see:`protocol_confirmation`. If it's false, the
|
||||
## first occurence of a packet with valid GTPv1 encapsulation causes
|
||||
## confirmation. Since the same inner connection can be carried
|
||||
## differing outer upflow/downflow connections, setting to false
|
||||
## may work better.
|
||||
const delay_gtp_confirmation = F &redef;
|
||||
|
||||
## How often to cleanup internal state for inactive IP tunnels.
|
||||
const ip_tunnel_timeout = 24hrs &redef;
|
||||
} # end export
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue