Re: Preventing Denial of Service Attack In IPC Serialization
On Jun 10, 4:15 am, jlind...@hotmail.com wrote:
Let us get specific. How would you define serialization code for a
String class?
As you wish. I have already shown you deserialization code for
std::vector. Here is totally analogous code for deserialization of
std::string .
std::string s;
packet >> count;
Buffer buffer(512);
while (s.length() < count)
{
packet >> buffer;
s += buffer.cpp_str();
}
If you think there is a DOS problem here, or with the deserialization
code of std::vector, you are welcome to point it out.
The sender needs only to keep sending until the receiver is
saturated.
But please note, as I have shown you above: the serialization code of
std::string is totally agnostic to either chunking protocols or
message size limits. Those are application specific issues.
The agnostic nature is the problem.
The serialization code for std::string would be the same code used if
the string is embedded in another object. Since the code is agnostic,
and would be used as is, it would be very easy for the sender to DoS-
attack the receiver:
A Gb/s Ethernet link can do 128MB/s or more. If 1024-byte chunks are
used (since Ethernet carries maximum payload of 1500 bytes) count is
set to be equal to 128MB x 16, that would be enough to lock up
available virtual memory on many machines on the Internet. If the DoS
attack is coming from an injected virus, the receiver would
eventually choke if the code unmodified.
So the programmer, without security, has to make a choice:
1. Use serialization and hope no one knows.
2. Avoid serialization and revert to incremental parameter checking,
and mitigate the memory allocation problem at least.
-Le Chaud Lapin-
--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]