Know What You Are Logging
Last Updated: 2019-02-18 07:44:06 UTC
by Didier Stevens (Version: 1)
I helped out someone who was seeing entries in his log file he could not make sense of.
He has an Arduino, running a custom program listening on a TCP port. His router is configured with port forwarding: the Arduino accepts TCP connections from the Internet. It expects HTTP queries, and will also log all non-HTTP requests.
It's in this log that single-byte entries started to appear: just byte 0x03 would be logged, nothing more.
My explanation is the following: on the Internet, you have RDP-scanners accessing random ports looking for open RDP servers. The Remote Desktop protocol relies on the TPKT protocol. The header of the TPKT protocol starts with a single-byte version number, that is equal to 3. Followed by another byte, a reserved field that is 0. Then there is a length field, followed by encapsulated protocol data.
Because the custom program, written in the Arduino language (derived from C), writes entries to the log with the print function, the TCP payload is being truncated at byte 0. For each RDP scan, only the TPKT version number would be logged (byte value 3), because byte value 0 is the string terminator.
This logger was truncating the TCP payload data: only data up to the first NULL byte (0x00) would be logged.
Having truncated logs in itself is not an issue. It could help prevent storage overflows, for example. But you have to be aware exactly what is being logged and how. Because if you don't, you might interpret mundane data as an exceptional case.