summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2015-04-03 09:52:57 -0400
committerNick Mathewson <nickm@torproject.org>2015-04-03 09:52:57 -0400
commitb3f24b5de37299d0db87ad8dd2138615ded94e66 (patch)
tree8fee9070f2072a84da4f0bdab47484f0f1567398
parentdb769b640752488f1aa2c398cdfa43a5ac792670 (diff)
parent929a8f199bc236c39794f675a7bb8ad00b155257 (diff)
downloadtor-b3f24b5de37299d0db87ad8dd2138615ded94e66.tar.gz
tor-b3f24b5de37299d0db87ad8dd2138615ded94e66.zip
Merge branch 'maint-0.2.6' into release-0.2.6
-rw-r--r--changes/bug114475
-rw-r--r--changes/bug155154
-rw-r--r--src/or/or.h3
-rw-r--r--src/or/rendmid.c14
-rw-r--r--src/or/rendservice.c2
5 files changed, 27 insertions, 1 deletions
diff --git a/changes/bug11447 b/changes/bug11447
new file mode 100644
index 0000000000..8cd4f5b467
--- /dev/null
+++ b/changes/bug11447
@@ -0,0 +1,5 @@
+ o Minor features (DoS-resistance):
+ - Decrease the amount of reattempts that a hidden service is
+ willing to perform when its rendezvous circuits fail. This
+ reduces the computational cost for hidden service under heavy
+ load. Resolves ticket #11447. \ No newline at end of file
diff --git a/changes/bug15515 b/changes/bug15515
new file mode 100644
index 0000000000..dda7c2fcd8
--- /dev/null
+++ b/changes/bug15515
@@ -0,0 +1,4 @@
+ o Minor features (DoS-resistance):
+ - Make it harder for attackers to overwhelm hidden services with
+ introductions, by blocking multiple introduction requests on the
+ same circuit. Resolves ticket #15515.
diff --git a/src/or/or.h b/src/or/or.h
index 6723f93f77..0d81b54d94 100644
--- a/src/or/or.h
+++ b/src/or/or.h
@@ -3181,6 +3181,9 @@ typedef struct or_circuit_t {
* to the specification? */
unsigned int remaining_relay_early_cells : 4;
+ /* We have already received an INTRODUCE1 cell on this circuit. */
+ unsigned int already_received_introduce1 : 1;
+
/** True iff this circuit was made with a CREATE_FAST cell. */
unsigned int is_first_hop : 1;
diff --git a/src/or/rendmid.c b/src/or/rendmid.c
index 9f6ff86c47..2451acb514 100644
--- a/src/or/rendmid.c
+++ b/src/or/rendmid.c
@@ -149,6 +149,20 @@ rend_mid_introduce(or_circuit_t *circ, const uint8_t *request,
goto err;
}
+ /* We have already done an introduction on this circuit but we just
+ received a request for another one. We block it since this might
+ be an attempt to DoS a hidden service (#15515). */
+ if (circ->already_received_introduce1) {
+ log_fn(LOG_PROTOCOL_WARN, LD_REND,
+ "Blocking multiple introductions on the same circuit. "
+ "Someone might be trying to attack a hidden service through "
+ "this relay.");
+ circuit_mark_for_close(TO_CIRCUIT(circ), END_CIRC_REASON_TORPROTOCOL);
+ return -1;
+ }
+
+ circ->already_received_introduce1 = 1;
+
/* We could change this to MAX_HEX_NICKNAME_LEN now that 0.0.9.x is
* obsolete; however, there isn't much reason to do so, and we're going
* to revise this protocol anyway.
diff --git a/src/or/rendservice.c b/src/or/rendservice.c
index 6c934c8c12..4ae06dfb90 100644
--- a/src/or/rendservice.c
+++ b/src/or/rendservice.c
@@ -90,7 +90,7 @@ typedef struct rend_service_port_config_t {
#define MAX_INTRO_CIRCS_PER_PERIOD 10
/** How many times will a hidden service operator attempt to connect to
* a requested rendezvous point before giving up? */
-#define MAX_REND_FAILURES 8
+#define MAX_REND_FAILURES 1
/** How many seconds should we spend trying to connect to a requested
* rendezvous point before giving up? */
#define MAX_REND_TIMEOUT 30