Added modified DREAD rating support to threat model
TODO: The ratings are all currently set to low, and MUST be discussed and set properly before site launch.
This commit is contained in:
@@ -2,6 +2,45 @@
|
||||
{% block title %}{% trans %}I2P's Threat Model{% endtrans %}{% endblock %}
|
||||
{% block lastupdated %}{% trans %}November 2010{% endtrans %}{% endblock %}
|
||||
{% block accuratefor %}0.8.1{% endblock %}
|
||||
|
||||
{% macro get_level(num) %}
|
||||
{%- if num == 1 %}{{ _('low') }}
|
||||
{%- elif num == 2 %}{{ _('medium') }}
|
||||
{%- elif num == 3 %}{{ _('high') }}
|
||||
{%- else %}ERR_INVALID
|
||||
{%- endif %}
|
||||
{%- endmacro %}
|
||||
|
||||
{% macro calculate_severity(Da, R, A) %}
|
||||
{%- if R + A > 4 %}{{ caller(Da + 2) }}
|
||||
{%- elif R + A > 3 %}{{ caller(Da + 1) }}
|
||||
{%- else %}{{ caller(Da) }}
|
||||
{%- endif %}
|
||||
{%- endmacro %}
|
||||
|
||||
{% macro calculate_priority(Da, R, E, A, Di) %}
|
||||
{%- call(severity) calculate_severity(Da, R, A) %}
|
||||
{%- if E == 3 and Di == 3 %}{{ severity + 4 }}
|
||||
{%- elif (E == 3 and Di == 2) or ( E == 2 and Di == 3) %}{{ severity + 3}}
|
||||
{%- elif (E == 3 and Di == 1) or ( E == 1 and Di == 3) %}{{ severity + 2}}
|
||||
{%- elif E == 2 and Di == 2 %}{{ severity + 1}}
|
||||
{%- else %}{{ severity }}
|
||||
{%- endif %}
|
||||
{%- endcall %}
|
||||
{%- endmacro %}
|
||||
|
||||
{% macro DREAD_score(Da, R, E, A, Di) %}
|
||||
<ul class="DREAD" >
|
||||
<li><strong>{{ _('Damage Potential') }}</strong>: <em>{{ get_level(Da) }}</em></li>
|
||||
<li><strong>{{ _('Reliability') }}</strong>: <em>{{ get_level(R) }}</em></li>
|
||||
<li><strong>{{ _('Exploitability') }}</strong>: <em>{{ get_level(E) }}</em></li>
|
||||
<li><strong>{{ _('Affected Users') }}</strong>: <em>{{ get_level(A) }}</em></li>
|
||||
<li><strong>{{ _('Discoverability') }}</strong>: <em>{{ get_level(Di) }}</em></li>
|
||||
<li><strong>{{ _('Severity') }}</strong>: <em>{% call(S) calculate_severity(Da, R, A) %}{{ S }}{% endcall %}/5</em></li>
|
||||
<li><strong>{{ _('Priority') }}</strong>: <em>{{ calculate_priority(Da, R, E, A, Di) }}/10</em></li>
|
||||
</ul>
|
||||
{% endmacro %}
|
||||
|
||||
{% block content %}
|
||||
<h2>{% trans %}What do we mean by "anonymous"?{% endtrans %}</h2>
|
||||
|
||||
@@ -75,7 +114,7 @@ the current implementation does not.
|
||||
{%- endtrans %}</p>
|
||||
|
||||
|
||||
<h2>{% trans %}The Threat Model (Attacks){% endtrans %}</h2>
|
||||
<h2>{% trans %}The Threat Model{% endtrans %}</h2>
|
||||
<p>{% trans -%}
|
||||
I2P design started in 2003, not long after the advent of
|
||||
<a href="http://www.onion-router.net">[Onion Routing]</a>,
|
||||
@@ -118,7 +157,25 @@ The
|
||||
to review.
|
||||
{%- endtrans %}</p>
|
||||
|
||||
<h3 id="index">{% trans %}Index{% endtrans %}</h3>
|
||||
<p>{% trans DREAD='https://blogs.msdn.com/b/david_leblanc/archive/2007/08/13/dreadful.aspx' -%}
|
||||
Attacks are judged using the <a href="{{ DREAD }}">modified <strong>DREAD</strong> model</a>:
|
||||
{%- endtrans %}</p>
|
||||
|
||||
<ul>
|
||||
<li><strong>{{ _('Damage Potential') }}</strong>: {% trans %}If a threat exploit occurs, how much damage will be caused?{% endtrans %}</li>
|
||||
<li><strong>{{ _('Reliability') }}</strong>: {% trans %}How reliable is the attack?{% endtrans %}</li>
|
||||
<li><strong>{{ _('Exploitability') }}</strong>: {% trans %}What is needed to exploit this threat?{% endtrans %}</li>
|
||||
<li><strong>{{ _('Affected Users') }}</strong>: {% trans %}How many users will be affected?{% endtrans %}</li>
|
||||
<li><strong>{{ _('Discoverability') }}</strong>: {% trans %}How easy is it to discover this threat?{% endtrans %}</li>
|
||||
</ul>
|
||||
|
||||
<p>{% trans DREAD='https://blogs.msdn.com/b/david_leblanc/archive/2007/08/13/dreadful.aspx' -%}
|
||||
Each category is given a rating of low, medium or high. The severity
|
||||
and priority scores are calculated using the equations outlined
|
||||
<a href="{{ DREAD }}">here</a>.
|
||||
{%- endtrans %}</p>
|
||||
|
||||
<h3 id="index">{% trans %}Index of Attacks{% endtrans %}</h3>
|
||||
<ul>
|
||||
<li><a href="#bruteforce">{% trans %}Brute force attacks{% endtrans %}</a></li>
|
||||
<li><a href="#timing">{% trans %}Timing attacks{% endtrans %}</a></li>
|
||||
@@ -142,6 +199,8 @@ to review.
|
||||
|
||||
<h3 id="bruteforce">{% trans %}Brute force attacks{% endtrans %}</h3>
|
||||
|
||||
{{ DREAD_score(1, 1, 1, 1, 3) }}
|
||||
|
||||
<p>{% trans -%}
|
||||
A brute force attack can be mounted by a global passive or active adversary,
|
||||
watching all the messages pass between all of the nodes and attempting to correlate
|
||||
@@ -184,6 +243,8 @@ are discussed on the
|
||||
|
||||
<h3 id="timing">{% trans %}Timing attacks{% endtrans %}</h3>
|
||||
|
||||
{{ DREAD_score(1, 1, 1, 1, 1) }}
|
||||
|
||||
<p>{% trans -%}
|
||||
I2P's messages are unidirectional and do not necessarily imply that a reply
|
||||
will be sent. However, applications on top of I2P will most likely have
|
||||
@@ -219,6 +280,8 @@ References: <a href="{{ pdf }}">Low-Resource Routing Attacks Against Anonymous S
|
||||
|
||||
<h3 id="intersection">{% trans %}Intersection attacks{% endtrans %}</h3>
|
||||
|
||||
{{ DREAD_score(1, 1, 1, 1, 1) }}
|
||||
|
||||
<p>{% trans -%}
|
||||
Intersection attacks against low latency systems are extremely powerful -
|
||||
periodically make contact with the target and keep track of what peers are on
|
||||
@@ -301,12 +364,13 @@ Reference: <a href="{{ oce }}">One Cell Enough</a>
|
||||
There are a whole slew of denial of service attacks available against I2P,
|
||||
each with different costs and consequences:
|
||||
{%- endtrans %}</p>
|
||||
<ul>
|
||||
<li>{% trans -%}
|
||||
|
||||
{{ DREAD_score(1, 1, 1, 1, 1) }}
|
||||
<p>{% trans -%}
|
||||
<b>Greedy user attack:</b> This is simply
|
||||
people trying to consume significantly more resources than they are
|
||||
willing to contribute. The defense against this is:
|
||||
{%- endtrans %}
|
||||
{%- endtrans %}</p>
|
||||
<ul>
|
||||
<li>{% trans comparisons=site_url('comparison') -%}
|
||||
Set defaults so that most users provide resources to the network.
|
||||
@@ -323,8 +387,10 @@ metrics such as "share ratio" so that users may see what they are contributing.
|
||||
Maintain a strong community with blogs, forums, IRC, and other means of communication.
|
||||
{%- endtrans %}</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>{% trans peerselection=site_url('docs/how/peer-selection') -%}
|
||||
<div style="clear:both"></div>
|
||||
|
||||
{{ DREAD_score(1, 1, 1, 1, 1) }}
|
||||
<p>{% trans peerselection=site_url('docs/how/peer-selection') -%}
|
||||
<b>Starvation attack:</b> A hostile user may attempt to harm the network by
|
||||
creating a significant number of peers in the network who are not identified as
|
||||
being under control of the same entity (as with Sybil). These nodes then
|
||||
@@ -340,8 +406,11 @@ them, or using them rarely.
|
||||
We have significantly enhanced the
|
||||
ability to recognize and avoid troublesome peers; however there are still
|
||||
significant efforts required in this area.
|
||||
{%- endtrans %}</li>
|
||||
<li>{% trans todo=site_url('get-involved/todo') -%}
|
||||
{%- endtrans %}</p>
|
||||
<div style="clear:both"></div>
|
||||
|
||||
{{ DREAD_score(1, 1, 1, 1, 1) }}
|
||||
<p>{% trans todo=site_url('get-involved/todo') -%}
|
||||
<b>Flooding attack:</b> A hostile user may attempt to flood the network,
|
||||
a peer, a destination, or a tunnel. Network and peer flooding is possible,
|
||||
and I2P does nothing to prevent standard IP layer flooding. The flooding of
|
||||
@@ -356,8 +425,11 @@ larger load. If, on the other hand, the load is more than the client can
|
||||
deal with, they can instruct the tunnels to throttle the number of messages or
|
||||
bytes they should pass on (once the <a href="{{ todo }}#batching">advanced tunnel
|
||||
operation</a> is implemented).
|
||||
{%- endtrans %}</li>
|
||||
<li>{% trans -%}
|
||||
{%- endtrans %}</p>
|
||||
<div style="clear:both"></div>
|
||||
|
||||
{{ DREAD_score(1, 1, 1, 1, 1) }}
|
||||
<p>{% trans -%}
|
||||
<b>CPU load attack:</b> There are currently some methods for people to
|
||||
remotely request that a peer perform some cryptographically expensive
|
||||
operation, and a hostile attacker could use these to flood that peer with
|
||||
@@ -366,8 +438,11 @@ engineering practices and potentially requiring nontrivial certificates
|
||||
(e.g. HashCash) to be attached to these expensive requests should mitigate
|
||||
the issue, though there may be room for an attacker to exploit various
|
||||
bugs in the implementation.
|
||||
{%- endtrans %}</li>
|
||||
<li id="ffdos">{% trans peerselection=site_url('docs/how/peer-selection'),
|
||||
{%- endtrans %}</p>
|
||||
<div style="clear:both"></div>
|
||||
|
||||
{{ DREAD_score(1, 1, 1, 1, 1) }}
|
||||
<p id="ffdos">{% trans peerselection=site_url('docs/how/peer-selection'),
|
||||
netdb=site_url('docs/how/network-database') -%}
|
||||
<b>Floodfill DOS attack:</b> A hostile user may attempt to harm the network by
|
||||
becoming a floodfill router. The current defenses against unreliable,
|
||||
@@ -379,10 +454,13 @@ Some defenses and
|
||||
however there is much more to do.
|
||||
For more information see the
|
||||
<a href="{{ netdb }}#threat">network database page</a>.
|
||||
{%- endtrans %}</li>
|
||||
</ul>
|
||||
{%- endtrans %}</p>
|
||||
<div style="clear:both"></div>
|
||||
|
||||
<h3 id="tagging">{% trans %}Tagging attacks{% endtrans %}</h3>
|
||||
|
||||
{{ DREAD_score(1, 1, 1, 1, 1) }}
|
||||
|
||||
<p>{% trans todo=site_url('get-involved/todo') -%}
|
||||
Tagging attacks - modifying a message so that it can later be identified
|
||||
further along the path - are by themselves impossible in I2P, as messages
|
||||
@@ -399,6 +477,8 @@ as the links are encrypted and messages signed.
|
||||
|
||||
<h3 id="partitioning">{% trans %}Partitioning attacks{% endtrans %}</h3>
|
||||
|
||||
{{ DREAD_score(1, 1, 1, 1, 1) }}
|
||||
|
||||
<p>{% trans -%}
|
||||
Partitioning attacks - finding ways to segregate (technically or analytically)
|
||||
the peers in a network - are important to keep in mind when dealing with a
|
||||
@@ -437,6 +517,8 @@ Also discussed on the <a href="{{ netdb }}#threat">network database page</a> (bo
|
||||
|
||||
<h3 id="predecessor">{% trans %}Predecessor attacks{% endtrans %}</h3>
|
||||
|
||||
{{ DREAD_score(1, 1, 1, 1, 1) }}
|
||||
|
||||
<p>{% trans -%}
|
||||
The predecessor attack is passively gathering statistics in an attempt to see
|
||||
what peers are 'close' to the destination by participating in their tunnels and
|
||||
@@ -479,6 +561,9 @@ which is an update to the 2004 predecessor attack paper
|
||||
|
||||
|
||||
<h3 id="harvesting">{% trans %}Harvesting attacks{% endtrans %}</h3>
|
||||
|
||||
{{ DREAD_score(1, 1, 1, 1, 1) }}
|
||||
|
||||
<p>{% trans -%}
|
||||
"Harvesting" means compiling a list of users running I2P.
|
||||
It can be used for legal attacks and to help
|
||||
@@ -523,6 +608,9 @@ enact other restricted route methods.
|
||||
|
||||
|
||||
<h3 id="traffic">{% trans %}Identification Through Traffic Analysis{% endtrans %}</h3>
|
||||
|
||||
{{ DREAD_score(1, 1, 1, 1, 1) }}
|
||||
|
||||
<p>{% trans transport=site_url('docs/transport') -%}
|
||||
By inspecting the traffic into and out of a router, a malicious ISP
|
||||
or state-level firewall could identify that a computer is running I2P.
|
||||
@@ -581,6 +669,8 @@ Reference: <a href="{{ pdf }}">Breaking and Improving Protocol Obfuscation</a>
|
||||
|
||||
<h3 id="sybil">{% trans %}Sybil attacks{% endtrans %}</h3>
|
||||
|
||||
{{ DREAD_score(1, 1, 1, 1, 1) }}
|
||||
|
||||
<p>{% trans -%}
|
||||
Sybil describes a category of attacks where the adversary creates arbitrarily
|
||||
large numbers of colluding nodes and uses the increased numbers to help
|
||||
@@ -627,6 +717,9 @@ for more Sybil discussion.
|
||||
|
||||
|
||||
<h3 id="buddy">{% trans %}Buddy Exhaustion attacks{% endtrans %}</h3>
|
||||
|
||||
{{ DREAD_score(1, 1, 1, 1, 1) }}
|
||||
|
||||
<p>{% trans pdf='http://www.eecs.berkeley.edu/~pmittal/publications/nisan-torsk-ccs10.pdf' -%}
|
||||
(Reference: <a href="{{ pdf }}">In Search of an Anonymouns and Secure Lookup</a> Section 5.2)
|
||||
{%- endtrans %}</p>
|
||||
@@ -650,6 +743,8 @@ Further research and defenses may be necessary.
|
||||
|
||||
<h3 id="crypto">{% trans %}Cryptographic attacks{% endtrans %}</h3>
|
||||
|
||||
{{ DREAD_score(1, 1, 1, 1, 1) }}
|
||||
|
||||
<p>{% trans cryptography=site_url('docs/how/cryptography') -%}
|
||||
We use strong cryptography with long keys, and
|
||||
we assume the security of the industry-standard cryptographic primitives used in I2P, as documented
|
||||
@@ -689,6 +784,9 @@ end to end messages include simple random padding.
|
||||
|
||||
|
||||
<h3 id="floodfill">{% trans %}Floodfill Anonymity attacks{% endtrans %}</h3>
|
||||
|
||||
{{ DREAD_score(1, 1, 1, 1, 1) }}
|
||||
|
||||
<p>{% trans netdb=site_url('docs/how/network-database') -%}
|
||||
In addition to the floodfill DOS attacks described
|
||||
<a href="#ffdos">above</a>, floodfill routers are uniquely positioned
|
||||
@@ -716,6 +814,9 @@ Several scenarios are discussed on the
|
||||
|
||||
|
||||
<h3 id="central">{% trans %}Central Resource Attacks{% endtrans %}</h3>
|
||||
|
||||
{{ DREAD_score(1, 1, 1, 1, 1) }}
|
||||
|
||||
<p>{% trans -%}
|
||||
There are a few centralized or limited resources (some inside I2P, some not)
|
||||
that could be attacked or used as a vector for attacks.
|
||||
@@ -769,6 +870,8 @@ and would shrink the network (in the short-to-medium term), just as the loss of
|
||||
|
||||
<h3 id="dev">{% trans %}Development attacks{% endtrans %}</h3>
|
||||
|
||||
{{ DREAD_score(1, 1, 1, 1, 1) }}
|
||||
|
||||
<p>{% trans -%}
|
||||
These attacks aren't directly on the network, but instead go after its development team
|
||||
by either introducing legal hurdles on anyone contributing to the development
|
||||
@@ -807,6 +910,9 @@ should any defense be necessary.
|
||||
{%- endtrans %}</p>
|
||||
|
||||
<h3 id="impl">{% trans %}Implementation attacks (bugs){% endtrans %}</h3>
|
||||
|
||||
{{ DREAD_score(1, 1, 1, 1, 1) }}
|
||||
|
||||
<p>{% trans -%}
|
||||
Try as we might, most nontrivial applications include errors in the design or
|
||||
implementation, and I2P is no exception. There may be bugs that could be exploited to
|
||||
|
@@ -175,6 +175,7 @@ div#content .inner h1, div#content .inner h2, div#content .inner h3, div#content
|
||||
margin:1em 0 .5em;
|
||||
border-bottom:1px solid white;
|
||||
padding-bottom:.2em;
|
||||
clear:both;
|
||||
}
|
||||
|
||||
div#content .inner h1 {
|
||||
@@ -247,6 +248,18 @@ div#content .inner td.blue {
|
||||
padding: 5px;
|
||||
}
|
||||
|
||||
/*
|
||||
* Threat model
|
||||
*/
|
||||
|
||||
div#content .inner ul.DREAD {
|
||||
border: 2px solid red;
|
||||
float: left;
|
||||
list-style: none;
|
||||
margin: 1em 1.5em 1em 0;
|
||||
padding: 0.5em;
|
||||
}
|
||||
|
||||
/*
|
||||
* Additions to syntax.css
|
||||
*/
|
||||
|
Reference in New Issue
Block a user