aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/lib/ndpi_main.c39
-rw-r--r--tests/cfgs/default/result/icmp-tunnel.pcap.out2
-rw-r--r--tests/cfgs/default/result/malformed_icmp.pcap.out2
3 files changed, 32 insertions, 11 deletions
diff --git a/src/lib/ndpi_main.c b/src/lib/ndpi_main.c
index 4239f3064..c82fdb10b 100644
--- a/src/lib/ndpi_main.c
+++ b/src/lib/ndpi_main.c
@@ -4379,16 +4379,26 @@ static u_int16_t guess_protocol_id(struct ndpi_detection_module_struct *ndpi_str
/* Run some basic consistency tests */
if(packet->payload_packet_len < sizeof(struct ndpi_icmphdr)) {
- ndpi_set_risk(flow, NDPI_MALFORMED_PACKET, NULL);
+ char buf[64];
+
+ snprintf(buf, sizeof(buf), "Packet too short (%d vs %u)",
+ packet->payload_packet_len, (unsigned int)sizeof(struct ndpi_icmphdr));
+ ndpi_set_risk(flow, NDPI_MALFORMED_PACKET, buf);
} else {
u_int8_t icmp_type = (u_int8_t)packet->payload[0];
u_int8_t icmp_code = (u_int8_t)packet->payload[1];
/* https://www.iana.org/assignments/icmp-parameters/icmp-parameters.xhtml */
if(((icmp_type >= 44) && (icmp_type <= 252))
- || (icmp_code > 15))
- ndpi_set_risk(flow, NDPI_MALFORMED_PACKET, NULL);
+ || (icmp_code > 15)) {
+ char buf[64];
+
+ snprintf(buf, sizeof(buf), "Invalid type (%u)/code(%u)",
+ icmp_type, icmp_code);
+ ndpi_set_risk(flow, NDPI_MALFORMED_PACKET, buf);
+ }
+
if(packet->payload_packet_len > sizeof(struct ndpi_icmphdr)) {
if(ndpi_str->cfg.compute_entropy && (flow->skip_entropy_check == 0)) {
flow->entropy = ndpi_entropy(packet->payload + sizeof(struct ndpi_icmphdr),
@@ -4399,7 +4409,7 @@ static u_int16_t guess_protocol_id(struct ndpi_detection_module_struct *ndpi_str
u_int16_t chksm = icmp4_checksum(packet->payload, packet->payload_packet_len);
if(chksm) {
- ndpi_set_risk(flow, NDPI_MALFORMED_PACKET, NULL);
+ ndpi_set_risk(flow, NDPI_MALFORMED_PACKET, "Invalid ICMP checksum");
}
}
}
@@ -4419,16 +4429,27 @@ static u_int16_t guess_protocol_id(struct ndpi_detection_module_struct *ndpi_str
if(flow) {
/* Run some basic consistency tests */
- if(packet->payload_packet_len < sizeof(struct ndpi_icmp6hdr))
- ndpi_set_risk(flow, NDPI_MALFORMED_PACKET, NULL);
- else {
+ if(packet->payload_packet_len < sizeof(struct ndpi_icmp6hdr)) {
+ char buf[64];
+
+ snprintf(buf, sizeof(buf), "Packet too short (%d vs %u)",
+ packet->payload_packet_len, (unsigned int)sizeof(struct ndpi_icmp6hdr));
+
+ ndpi_set_risk(flow, NDPI_MALFORMED_PACKET, buf);
+ } else {
u_int8_t icmp6_type = (u_int8_t)packet->payload[0];
u_int8_t icmp6_code = (u_int8_t)packet->payload[1];
/* https://en.wikipedia.org/wiki/Internet_Control_Message_Protocol_for_IPv6 */
if(((icmp6_type >= 5) && (icmp6_type <= 127))
- || ((icmp6_code >= 156) && (icmp6_type != 255)))
- ndpi_set_risk(flow, NDPI_MALFORMED_PACKET, NULL);
+ || ((icmp6_code >= 156) && (icmp6_type != 255))) {
+ char buf[64];
+
+ snprintf(buf, sizeof(buf), "Invalid type (%u)/code(%u)",
+ icmp6_type, icmp6_code);
+
+ ndpi_set_risk(flow, NDPI_MALFORMED_PACKET, buf);
+ }
}
}
return(NDPI_PROTOCOL_IP_ICMPV6);
diff --git a/tests/cfgs/default/result/icmp-tunnel.pcap.out b/tests/cfgs/default/result/icmp-tunnel.pcap.out
index c78009553..377630456 100644
--- a/tests/cfgs/default/result/icmp-tunnel.pcap.out
+++ b/tests/cfgs/default/result/icmp-tunnel.pcap.out
@@ -24,4 +24,4 @@ ICMP 863 190810 1
Acceptable 863 190810 1
- 1 ICMP 192.168.154.131:0 <-> 192.168.154.132:0 [proto: 81/ICMP][IP: 0/Unknown][ClearText][Confidence: DPI][FPC: 81/ICMP, Confidence: DPI][DPI packets: 1][cat: Network/14][448 pkts/98566 bytes <-> 415 pkts/92244 bytes][Goodput ratio: 81/81][1122.51 sec][bytes ratio: 0.033 (Mixed)][IAT c2s/s2c min/avg/max/stddev: 0/0 2578/2731 145505/145505 9091/9494][Pkt Len c2s/s2c min/avg/max/stddev: 74/74 220/222 1075/1070 245/245][Risk: ** Malformed Packet **** Susp Entropy **][Risk Score: 20][Risk Info: No server to client traffic / Entropy: 5.703 (Executable?)][PLAIN TEXT (OpenSSH5)][Plen Bins: 0,32,24,24,7,3,3,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
+ 1 ICMP 192.168.154.131:0 <-> 192.168.154.132:0 [proto: 81/ICMP][IP: 0/Unknown][ClearText][Confidence: DPI][FPC: 81/ICMP, Confidence: DPI][DPI packets: 1][cat: Network/14][448 pkts/98566 bytes <-> 415 pkts/92244 bytes][Goodput ratio: 81/81][1122.51 sec][bytes ratio: 0.033 (Mixed)][IAT c2s/s2c min/avg/max/stddev: 0/0 2578/2731 145505/145505 9091/9494][Pkt Len c2s/s2c min/avg/max/stddev: 74/74 220/222 1075/1070 245/245][Risk: ** Malformed Packet **** Susp Entropy **][Risk Score: 20][Risk Info: No server to client traffic / Entropy: 5.703 (Executable?) / Invalid ICMP checksum][PLAIN TEXT (OpenSSH5)][Plen Bins: 0,32,24,24,7,3,3,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
diff --git a/tests/cfgs/default/result/malformed_icmp.pcap.out b/tests/cfgs/default/result/malformed_icmp.pcap.out
index 3ddcb2c6b..e5b43c847 100644
--- a/tests/cfgs/default/result/malformed_icmp.pcap.out
+++ b/tests/cfgs/default/result/malformed_icmp.pcap.out
@@ -24,4 +24,4 @@ ICMP 1 42 1
Acceptable 1 42 1
- 1 ICMP 218.152.179.213:0 -> 218.152.179.54:0 [proto: 81/ICMP][IP: 0/Unknown][ClearText][Confidence: DPI][FPC: 81/ICMP, Confidence: DPI][DPI packets: 1][cat: Network/14][1 pkts/42 bytes -> 0 pkts/0 bytes][Goodput ratio: 0/0][< 1 sec][Risk: ** Malformed Packet **** Unidirectional Traffic **][Risk Score: 20][Risk Info: No server to client traffic][Plen Bins: 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
+ 1 ICMP 218.152.179.213:0 -> 218.152.179.54:0 [proto: 81/ICMP][IP: 0/Unknown][ClearText][Confidence: DPI][FPC: 81/ICMP, Confidence: DPI][DPI packets: 1][cat: Network/14][1 pkts/42 bytes -> 0 pkts/0 bytes][Goodput ratio: 0/0][< 1 sec][Risk: ** Malformed Packet **** Unidirectional Traffic **][Risk Score: 20][Risk Info: No server to client traffic / Invalid type (165)/code(0)][Plen Bins: 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]