mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-12-06 19:41:15 +01:00
Netflow record collapsing defense.
This defense will cause Cisco, Juniper, Fortinet, and other routers operating in the default configuration to collapse netflow records that would normally be split due to the 15 second flow idle timeout. Collapsing these records should greatly reduce the utility of default netflow data for correlation attacks, since all client-side records should become 30 minute chunks of total bytes sent/received, rather than creating multiple separate records for every webpage load/ssh command interaction/XMPP chat/whatever else happens to be inactive for more than 15 seconds. The defense adds consensus parameters to govern the range of timeout values for sending padding packets, as well as for keeping connections open. The defense only sends padding when connections are otherwise inactive, and it does not pad connections used solely for directory traffic at all. By default it also doesn't pad inter-relay connections. Statistics on the total padding in the last 24 hours are exported to the extra-info descriptors.
This commit is contained in:
committed by
Nick Mathewson
parent
515e1f663a
commit
b0e92634d8
+18
-4
@@ -328,8 +328,16 @@ command_process_create_cell(cell_t *cell, channel_t *chan)
|
||||
|
||||
if (create_cell->handshake_type != ONION_HANDSHAKE_TYPE_FAST) {
|
||||
/* hand it off to the cpuworkers, and then return. */
|
||||
if (connection_or_digest_is_known_relay(chan->identity_digest))
|
||||
if (connection_or_digest_is_known_relay(chan->identity_digest)) {
|
||||
rep_hist_note_circuit_handshake_requested(create_cell->handshake_type);
|
||||
// Needed for chutney: Sometimes relays aren't in the consensus yet, and
|
||||
// get marked as clients. This resets their channels once they appear.
|
||||
// Probably useful for normal operation wrt relay flapping, too.
|
||||
chan->is_client = 0;
|
||||
} else {
|
||||
channel_mark_client(chan);
|
||||
}
|
||||
|
||||
if (assign_onionskin_to_cpuworker(circ, create_cell) < 0) {
|
||||
log_debug(LD_GENERAL,"Failed to hand off onionskin. Closing.");
|
||||
circuit_mark_for_close(TO_CIRCUIT(circ), END_CIRC_REASON_RESOURCELIMIT);
|
||||
@@ -344,9 +352,15 @@ command_process_create_cell(cell_t *cell, channel_t *chan)
|
||||
int len;
|
||||
created_cell_t created_cell;
|
||||
|
||||
/* Make sure we never try to use the OR connection on which we
|
||||
* received this cell to satisfy an EXTEND request, */
|
||||
channel_mark_client(chan);
|
||||
/* If this is a create_fast, this might be a client. Let's check. */
|
||||
if (connection_or_digest_is_known_relay(chan->identity_digest)) {
|
||||
// Needed for chutney: Sometimes relays aren't in the consensus yet, and
|
||||
// get marked as clients. This resets their channels once they appear.
|
||||
// Probably useful for normal operation wrt relay flapping, too.
|
||||
chan->is_client = 0;
|
||||
} else {
|
||||
channel_mark_client(chan);
|
||||
}
|
||||
|
||||
memset(&created_cell, 0, sizeof(created_cell));
|
||||
len = onion_skin_server_handshake(ONION_HANDSHAKE_TYPE_FAST,
|
||||
|
||||
Reference in New Issue
Block a user