From 6a14e64a174562dc63f96a999626a5eb4d0ab4a0 Mon Sep 17 00:00:00 2001 From: Arne Welzel Date: Fri, 31 Jan 2025 14:22:13 +0100 Subject: [PATCH] QUIC: Parse all QUIC packets in a UDP datagram A UDP datagram may contain multiple QUIC packets, but the parser so far handled only the very first packet, ignoring any subsequent packets. Fixes #4198 --- src/analyzer/protocol/quic/QUIC.spicy | 18 ++++++++++-------- .../quic.log | 2 +- .../scripts.base.protocols.quic.events/out | 3 +++ .../quic.log | 2 +- .../quic.log | 2 +- .../quic.log | 4 ++-- .../conn.log.cut | 3 +++ .../quic.log | 11 +++++++++++ .../ssl.log | 11 +++++++++++ .../quic.log | 2 +- .../quic.log | 2 +- .../quic.log | 2 +- testing/btest/Traces/README | 3 +++ .../Traces/quic/merlinc2_Zeek_example.pcapng | Bin 0 -> 59252 bytes .../scripts/base/protocols/quic/merlinc2.zeek | 8 ++++++++ 15 files changed, 57 insertions(+), 16 deletions(-) create mode 100644 testing/btest/Baseline/scripts.base.protocols.quic.merlinc2/conn.log.cut create mode 100644 testing/btest/Baseline/scripts.base.protocols.quic.merlinc2/quic.log create mode 100644 testing/btest/Baseline/scripts.base.protocols.quic.merlinc2/ssl.log create mode 100644 testing/btest/Traces/quic/merlinc2_Zeek_example.pcapng create mode 100644 testing/btest/scripts/base/protocols/quic/merlinc2.zeek diff --git a/src/analyzer/protocol/quic/QUIC.spicy b/src/analyzer/protocol/quic/QUIC.spicy index 9da60bd617..dad22ca097 100644 --- a/src/analyzer/protocol/quic/QUIC.spicy +++ b/src/analyzer/protocol/quic/QUIC.spicy @@ -417,7 +417,7 @@ type CryptoBuffer = unit() { ############## type Packet = unit(from_client: bool, context: ConnectionIDInfo&) { var decrypted_data: bytes; - var slurp_size: uint64 = 0; + var packet_size: uint64 = 0; var start: iterator; sink crypto_sink; @@ -466,11 +466,13 @@ type Packet = unit(from_client: bool, context: ConnectionIDInfo&) { : void { if (self?.long_header && can_decrypt(self.long_header, context, from_client)) - self.slurp_size = self.offset(); + # If we have parsed an initial packet that we can decrypt the payload, + # determine the size to store into a buffer. + self.packet_size = self.offset(); } - # Slurp in the whole packet if we determined we have a chance to decrypt. - slurp_data: bytes &parse-at=self.start &size=self.slurp_size if ( self.slurp_size > 0 ) { + # Buffer the whole packet if we determined we have a chance to decrypt. + packet_data: bytes &parse-at=self.start &size=self.packet_size if ( self.packet_size > 0 ) { self.crypto_buffer = new CryptoBuffer(); self.crypto_sink.connect(self.crypto_buffer); @@ -482,7 +484,7 @@ type Packet = unit(from_client: bool, context: ConnectionIDInfo&) { # All data is accessible via the `long_header` unit self.decrypted_data = decrypt_crypto_payload( self.long_header.version, - self.slurp_data, + self.packet_data, self.long_header.dest_conn_id, self.long_header.encrypted_offset, self.long_header.payload_length, @@ -501,7 +503,7 @@ type Packet = unit(from_client: bool, context: ConnectionIDInfo&) { self.decrypted_data = decrypt_crypto_payload( self.long_header.version, - self.slurp_data, + self.packet_data, context.initial_destination_conn_id, self.long_header.encrypted_offset, self.long_header.payload_length, @@ -560,10 +562,10 @@ type Packet = unit(from_client: bool, context: ConnectionIDInfo&) { ############## public type RequestFrame = unit { %context = ConnectionIDInfo; - : Packet(True, self.context()); + : Packet(True, self.context())[]; }; public type ResponseFrame = unit { %context = ConnectionIDInfo; - : Packet(False, self.context()); + : Packet(False, self.context())[]; }; diff --git a/testing/btest/Baseline/scripts.base.protocols.quic.chromium/quic.log b/testing/btest/Baseline/scripts.base.protocols.quic.chromium/quic.log index ecaaed9815..ad6abaf8cc 100644 --- a/testing/btest/Baseline/scripts.base.protocols.quic.chromium/quic.log +++ b/testing/btest/Baseline/scripts.base.protocols.quic.chromium/quic.log @@ -7,5 +7,5 @@ #open XXXX-XX-XX-XX-XX-XX #fields ts uid id.orig_h id.orig_p id.resp_h id.resp_p version client_initial_dcid client_scid server_scid server_name client_protocol history #types time string addr port addr port string string string string string string string -XXXXXXXXXX.XXXXXX CHhAvVGS1DHFjwGM9 82.239.54.117 53727 110.213.53.115 443 1 95412c47018cdfe8 (empty) d5412c47018cdfe8 api.cirrus-ci.com h3 ISisH +XXXXXXXXXX.XXXXXX CHhAvVGS1DHFjwGM9 82.239.54.117 53727 110.213.53.115 443 1 95412c47018cdfe8 (empty) d5412c47018cdfe8 api.cirrus-ci.com h3 ISishH #close XXXX-XX-XX-XX-XX-XX diff --git a/testing/btest/Baseline/scripts.base.protocols.quic.events/out b/testing/btest/Baseline/scripts.base.protocols.quic.events/out index 7b074d32a9..e377ed39d4 100644 --- a/testing/btest/Baseline/scripts.base.protocols.quic.events/out +++ b/testing/btest/Baseline/scripts.base.protocols.quic.events/out @@ -4,17 +4,20 @@ 1.0, initial_packet, C4J4Th3PJpwUYZZ6gc, T, 1, 1b036a11, 1.0, initial_packet, C4J4Th3PJpwUYZZ6gc, F, 1, , fc674735 1.0, handshake_packet, F, C4J4Th3PJpwUYZZ6gc, 1, , fc674735 +1.0, handshake_packet, F, C4J4Th3PJpwUYZZ6gc, 1, , fc674735 1.0, initial_packet, C4J4Th3PJpwUYZZ6gc, T, 1, fc674735, 1.0, handshake_packet, T, C4J4Th3PJpwUYZZ6gc, 1, ef3a4e06, zerortt.pcap 1.0, initial_packet, C4J4Th3PJpwUYZZ6gc, T, 1, b7c7841c64883e3261d840, 1.0, initial_packet, C4J4Th3PJpwUYZZ6gc, F, 1, , 8d2041ac 1.0, handshake_packet, F, C4J4Th3PJpwUYZZ6gc, 1, , 8d2041ac +1.0, handshake_packet, F, C4J4Th3PJpwUYZZ6gc, 1, , 8d2041ac 1.0, initial_packet, C4J4Th3PJpwUYZZ6gc, T, 1, 8d2041ac, 1.0, handshake_packet, T, C4J4Th3PJpwUYZZ6gc, 1, 5b7bc400, 1.0, initial_packet, CtPZjS20MLrsMUOJi2, T, 1, 15ae5e5e4962163f410b5529fc125bbc, 1.0, zero_rtt_packet, T, CtPZjS20MLrsMUOJi2, 1, 15ae5e5e4962163f410b5529fc125bbc, 1.0, initial_packet, CtPZjS20MLrsMUOJi2, F, 1, , e483a751 +1.0, handshake_packet, F, CtPZjS20MLrsMUOJi2, 1, , e483a751 1.0, zero_rtt_packet, T, CtPZjS20MLrsMUOJi2, 1, 15ae5e5e4962163f410b5529fc125bbc, 1.0, zero_rtt_packet, T, CtPZjS20MLrsMUOJi2, 1, 15ae5e5e4962163f410b5529fc125bbc, 1.0, zero_rtt_packet, T, CtPZjS20MLrsMUOJi2, 1, 15ae5e5e4962163f410b5529fc125bbc, diff --git a/testing/btest/Baseline/scripts.base.protocols.quic.interop.quic-go_quic-go.handshake/quic.log b/testing/btest/Baseline/scripts.base.protocols.quic.interop.quic-go_quic-go.handshake/quic.log index 23623d6a05..6d37e079ea 100644 --- a/testing/btest/Baseline/scripts.base.protocols.quic.interop.quic-go_quic-go.handshake/quic.log +++ b/testing/btest/Baseline/scripts.base.protocols.quic.interop.quic-go_quic-go.handshake/quic.log @@ -7,5 +7,5 @@ #open XXXX-XX-XX-XX-XX-XX #fields ts uid id.orig_h id.orig_p id.resp_h id.resp_p version client_initial_dcid client_scid server_scid server_name client_protocol history #types time string addr port addr port string string string string string string string -1.000000 C4J4Th3PJpwUYZZ6gc 193.167.0.100 40084 193.167.100.100 443 1 a771f6161a4072c0bf10 (empty) 5911deff server4:443 hq-interop ISishIH +1.000000 C4J4Th3PJpwUYZZ6gc 193.167.0.100 40084 193.167.100.100 443 1 a771f6161a4072c0bf10 (empty) 5911deff server4:443 hq-interop ISishhIH #close XXXX-XX-XX-XX-XX-XX diff --git a/testing/btest/Baseline/scripts.base.protocols.quic.interop.quic-go_quic-go.retry/quic.log b/testing/btest/Baseline/scripts.base.protocols.quic.interop.quic-go_quic-go.retry/quic.log index 74e8b2a29a..0caca791d3 100644 --- a/testing/btest/Baseline/scripts.base.protocols.quic.interop.quic-go_quic-go.retry/quic.log +++ b/testing/btest/Baseline/scripts.base.protocols.quic.interop.quic-go_quic-go.retry/quic.log @@ -8,5 +8,5 @@ #fields ts uid id.orig_h id.orig_p id.resp_h id.resp_p version client_initial_dcid client_scid server_scid server_name client_protocol history #types time string addr port addr port string string string string string string string 1.000000 C4J4Th3PJpwUYZZ6gc 193.167.0.100 42834 193.167.100.100 443 1 4a8294bf9201d6cf (empty) - server4:443 hq-interop ISr -1.000000 C4J4Th3PJpwUYZZ6gc 193.167.0.100 42834 193.167.100.100 443 1 1b036a11 (empty) fc674735 server4:443 hq-interop ISishIH +1.000000 C4J4Th3PJpwUYZZ6gc 193.167.0.100 42834 193.167.100.100 443 1 1b036a11 (empty) fc674735 server4:443 hq-interop ISishhIH #close XXXX-XX-XX-XX-XX-XX diff --git a/testing/btest/Baseline/scripts.base.protocols.quic.interop.quic-go_quic-go.zerortt/quic.log b/testing/btest/Baseline/scripts.base.protocols.quic.interop.quic-go_quic-go.zerortt/quic.log index 6884c599e4..f2f8098294 100644 --- a/testing/btest/Baseline/scripts.base.protocols.quic.interop.quic-go_quic-go.zerortt/quic.log +++ b/testing/btest/Baseline/scripts.base.protocols.quic.interop.quic-go_quic-go.zerortt/quic.log @@ -7,6 +7,6 @@ #open XXXX-XX-XX-XX-XX-XX #fields ts uid id.orig_h id.orig_p id.resp_h id.resp_p version client_initial_dcid client_scid server_scid server_name client_protocol history #types time string addr port addr port string string string string string string string -1.000000 CtPZjS20MLrsMUOJi2 193.167.0.100 49394 193.167.100.100 443 1 15ae5e5e4962163f410b5529fc125bbc (empty) e483a751 server4:443 hq-interop ISZisZZZZZZZZZZZZZZZZZZZZZZZZZZZIH -1.000000 C4J4Th3PJpwUYZZ6gc 193.167.0.100 60492 193.167.100.100 443 1 b7c7841c64883e3261d840 (empty) 8d2041ac server4:443 hq-interop ISishIH +1.000000 CtPZjS20MLrsMUOJi2 193.167.0.100 49394 193.167.100.100 443 1 15ae5e5e4962163f410b5529fc125bbc (empty) e483a751 server4:443 hq-interop ISZishZZZZZZZZZZZZZZZZZZZZZZZZZZZIH +1.000000 C4J4Th3PJpwUYZZ6gc 193.167.0.100 60492 193.167.100.100 443 1 b7c7841c64883e3261d840 (empty) 8d2041ac server4:443 hq-interop ISishhIH #close XXXX-XX-XX-XX-XX-XX diff --git a/testing/btest/Baseline/scripts.base.protocols.quic.merlinc2/conn.log.cut b/testing/btest/Baseline/scripts.base.protocols.quic.merlinc2/conn.log.cut new file mode 100644 index 0000000000..46d72b1541 --- /dev/null +++ b/testing/btest/Baseline/scripts.base.protocols.quic.merlinc2/conn.log.cut @@ -0,0 +1,3 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +ts uid history service +XXXXXXXXXX.XXXXXX CHhAvVGS1DHFjwGM9 Dd quic,ssl diff --git a/testing/btest/Baseline/scripts.base.protocols.quic.merlinc2/quic.log b/testing/btest/Baseline/scripts.base.protocols.quic.merlinc2/quic.log new file mode 100644 index 0000000000..5d580eb317 --- /dev/null +++ b/testing/btest/Baseline/scripts.base.protocols.quic.merlinc2/quic.log @@ -0,0 +1,11 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +#separator \x09 +#set_separator , +#empty_field (empty) +#unset_field - +#path quic +#open XXXX-XX-XX-XX-XX-XX +#fields ts uid id.orig_h id.orig_p id.resp_h id.resp_p version client_initial_dcid client_scid server_scid server_name client_protocol history +#types time string addr port addr port string string string string string string string +XXXXXXXXXX.XXXXXX CHhAvVGS1DHFjwGM9 10.0.0.4 53241 24.199.110.233 443 1 f21fdf87f736f235846c7f460ca017 1b3ff910 eab5f6f4 - h3 ISishhIH +#close XXXX-XX-XX-XX-XX-XX diff --git a/testing/btest/Baseline/scripts.base.protocols.quic.merlinc2/ssl.log b/testing/btest/Baseline/scripts.base.protocols.quic.merlinc2/ssl.log new file mode 100644 index 0000000000..fb2a422f10 --- /dev/null +++ b/testing/btest/Baseline/scripts.base.protocols.quic.merlinc2/ssl.log @@ -0,0 +1,11 @@ +### BTest baseline data generated by btest-diff. Do not edit. Use "btest -U/-u" to update. Requires BTest >= 0.63. +#separator \x09 +#set_separator , +#empty_field (empty) +#unset_field - +#path ssl +#open XXXX-XX-XX-XX-XX-XX +#fields ts uid id.orig_h id.orig_p id.resp_h id.resp_p version cipher curve server_name resumed last_alert next_protocol established ssl_history cert_chain_fps client_cert_chain_fps sni_matches_cert +#types time string addr port addr port string string string string bool string string bool string vector[string] vector[string] bool +XXXXXXXXXX.XXXXXX CHhAvVGS1DHFjwGM9 10.0.0.4 53241 24.199.110.233 443 TLSv13 TLS_AES_128_GCM_SHA256 x25519 - F - - F Cs - - - +#close XXXX-XX-XX-XX-XX-XX diff --git a/testing/btest/Baseline/scripts.base.protocols.quic.quicdoq/quic.log b/testing/btest/Baseline/scripts.base.protocols.quic.quicdoq/quic.log index ff45b6d535..3dfdfee132 100644 --- a/testing/btest/Baseline/scripts.base.protocols.quic.quicdoq/quic.log +++ b/testing/btest/Baseline/scripts.base.protocols.quic.quicdoq/quic.log @@ -7,5 +7,5 @@ #open XXXX-XX-XX-XX-XX-XX #fields ts uid id.orig_h id.orig_p id.resp_h id.resp_p version client_initial_dcid client_scid server_scid server_name client_protocol history #types time string addr port addr port string string string string string string string -XXXXXXXXXX.XXXXXX CHhAvVGS1DHFjwGM9 127.0.0.1 46907 127.0.0.1 853 1 fda05288ab9ff546 0fb934775f247b8e a31f4933d8727231 - doq ISishH +XXXXXXXXXX.XXXXXX CHhAvVGS1DHFjwGM9 127.0.0.1 46907 127.0.0.1 853 1 fda05288ab9ff546 0fb934775f247b8e a31f4933d8727231 - doq ISishhH #close XXXX-XX-XX-XX-XX-XX diff --git a/testing/btest/Baseline/scripts.base.protocols.quic.quicv2-echo-443/quic.log b/testing/btest/Baseline/scripts.base.protocols.quic.quicv2-echo-443/quic.log index d5dfb05bc4..a460e7fec8 100644 --- a/testing/btest/Baseline/scripts.base.protocols.quic.quicv2-echo-443/quic.log +++ b/testing/btest/Baseline/scripts.base.protocols.quic.quicv2-echo-443/quic.log @@ -7,5 +7,5 @@ #open XXXX-XX-XX-XX-XX-XX #fields ts uid id.orig_h id.orig_p id.resp_h id.resp_p version client_initial_dcid client_scid server_scid server_name client_protocol history #types time string addr port addr port string string string string string string string -XXXXXXXXXX.XXXXXX CHhAvVGS1DHFjwGM9 127.0.0.1 49320 127.0.0.1 443 quicv2 fa603212c8688817af3d3238735bc7 (empty) b168b5cc localhost quic-echo-example ISIIisIH +XXXXXXXXXX.XXXXXX CHhAvVGS1DHFjwGM9 127.0.0.1 49320 127.0.0.1 443 quicv2 fa603212c8688817af3d3238735bc7 (empty) b168b5cc localhost quic-echo-example ISIIishIH #close XXXX-XX-XX-XX-XX-XX diff --git a/testing/btest/Baseline/scripts.base.protocols.quic.quicv2-http3-443/quic.log b/testing/btest/Baseline/scripts.base.protocols.quic.quicv2-http3-443/quic.log index f7b06b5570..45411b3839 100644 --- a/testing/btest/Baseline/scripts.base.protocols.quic.quicv2-http3-443/quic.log +++ b/testing/btest/Baseline/scripts.base.protocols.quic.quicv2-http3-443/quic.log @@ -7,5 +7,5 @@ #open XXXX-XX-XX-XX-XX-XX #fields ts uid id.orig_h id.orig_p id.resp_h id.resp_p version client_initial_dcid client_scid server_scid server_name client_protocol history #types time string addr port addr port string string string string string string string -XXXXXXXXXX.XXXXXX CHhAvVGS1DHFjwGM9 127.0.0.1 50841 127.0.0.1 443 quicv2 bdf0c5b27927cc667e58d95b 71b8f3f4 cdc8b6e6 - h3 ISishIHH +XXXXXXXXXX.XXXXXX CHhAvVGS1DHFjwGM9 127.0.0.1 50841 127.0.0.1 443 quicv2 bdf0c5b27927cc667e58d95b 71b8f3f4 cdc8b6e6 - h3 ISishhIHH #close XXXX-XX-XX-XX-XX-XX diff --git a/testing/btest/Traces/README b/testing/btest/Traces/README index 53b0ea4c12..f5b1e4fb51 100644 --- a/testing/btest/Traces/README +++ b/testing/btest/Traces/README @@ -38,3 +38,6 @@ Trace Index/Sources: - http/docker-http-upgrade.pcap Provided by blightzero on #4068 https://github.com/zeek/zeek/issues/4068 +- quic/merlinc2_Zeek_example.pcapng + Provided by Faan Rossouw on #4198 + https://github.com/zeek/zeek/issues/4198 diff --git a/testing/btest/Traces/quic/merlinc2_Zeek_example.pcapng b/testing/btest/Traces/quic/merlinc2_Zeek_example.pcapng new file mode 100644 index 0000000000000000000000000000000000000000..2aba2f1afbfff7aa959e1c8e8fdfa133d75b3861 GIT binary patch literal 59252 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 Ptp5}5xBL5XJ;%QQ7e8Lb literal 0 HcmV?d00001 diff --git a/testing/btest/scripts/base/protocols/quic/merlinc2.zeek b/testing/btest/scripts/base/protocols/quic/merlinc2.zeek new file mode 100644 index 0000000000..733cf8cd25 --- /dev/null +++ b/testing/btest/scripts/base/protocols/quic/merlinc2.zeek @@ -0,0 +1,8 @@ +# @TEST-DOC: Test PCAP for Merlin C2 from issue #4198 + +# @TEST-REQUIRES: ${SCRIPTS}/have-spicy +# @TEST-EXEC: zeek -Cr $TRACES/quic/merlinc2_Zeek_example.pcapng base/protocols/quic +# @TEST-EXEC: zeek-cut -m ts uid history service < conn.log > conn.log.cut +# @TEST-EXEC: btest-diff conn.log.cut +# @TEST-EXEC: btest-diff ssl.log +# @TEST-EXEC: btest-diff quic.log