- You are vulnerable mainly to your peers.
- So your opennet peers, as well as your friends, can do correlation attacks and probably find out what you are doing.
- Therefore an attacker could connect to all opennet nodes and surveil all traffic fairly effectively.
- But even if they don't have that (admittedly relatively low) level of resources, there are powerful attacks involving waiting for a known insert and then slowly moving towards its originator based on the keys being inserted, which require much less resources.
- Plus, blocking opennet is fairly easy: All you have to do in the first instance is block the seednodes. If that's not enough, Node harvesting harvesting and blocking all opennet nodes is probably feasible, likely much cheaper than connecting to all nodes depending on your blocking hardware's capabilities. Denial of service attacks against the opennet bootstrapping mechanism ("announcement") are probably possible too.
Copied from old wiki: http://wiki.freenetproject.org/OpennetAttacks
First off, you can Node harvesting harvest opennet. This means you can block the entire network at a national firewall, or find all the nodes currently in your jurisdiction and go bust their owners. This alone is enough to make opennet unsuitable for hostile environments.
- None! All you can do is live in a country where Freenet isn't illegal / attacked by ISPs.
Mobile attacker source tracing
Another interesting attack is a global key-based search (Mobile attacker source search attack). Basically you assume that routing works (it does most of the time, or Freenet won't scale), and use that to calculate the set of nodes that could have made the request. Slowly you narrow down the possible areas of the network, and connect to nodes closer and closer to your target, until you have found it.
- Premix routing or rendezvous tunnels should help a lot.
Connect to everyone
If you have enough bandwidth you can connect to all nodes at once and watch the traffic between them with near 100% accuracy. However, you would need a lot of bandwidth to do this. What you would do more likely is harvest the network, then connect to a bunch of nodes at a time, and surveil them comprehensively: you don't need to connect to every node at once.
- Global IP-based connection limiting has been suggested, but it will be difficult to get right, as many users may be behind NATs, and the cost of IP addresses is likely to be fairly low.
The above of course relies on the fact that you can do correlation attacks on your peers. Tunneling may avoid this, but it is not clear that tunneling will work well on opennet, as it is too easy to take over both local connections and the keyspace as a whole.
Routing table takeover
Much of the risk comes from Sybil attacks (pretending to be a large number of separate nodes when you're really only one node). For instance, routing table takeover: You connect to an opennet node, and send a series of requests for content which you know to be in that node's datastore. When the request succeeds, you can path fold with that node using an alternate identity. If the path folding request comes from a different node than the one you want to connect to, you simply don't connect to it. If the node is NATed then it won't even cost you any bandwidth. If it isn't NATed you can send it a bogus IP address and then connect directly if it's the node you're after - but fortunately for the network you don't know whether it is or not in advance.
Given the current connection heuristics, the node will only dump a connected node every 10 successful requests, so as you grab more and more connections, you will have to make some requests which the node can't locally answer. Because your requests are almost always successful, you will do more path folding with the node than the other nodes trying to connect to it, whose requests are mostly unsuccessful, so you will eventually be able to take over all of its connections.
- The rate at which path folding occurs with other nodes must be greater than the rate at which path folding occurs with the attacker. Increasing the chance of a request from another node succeeding will help (but how to do this????), as will increasing the number of other peers.
- Allowing nodes to reconnect after downtime might help to get out of such situations, but only if they can displace connected nodes - which is probably a bad idea.
Other attacks may be easier, for example, DoSing the network through a large number of requests - if you can get connections easily (by announcement, by reconnecting to nodes you've been dropped from, and by path folding from your other nodes), you can exploit any initial trust which the load limiting algorithm gives you as a new connection.
- Don't give new connections much initial trust.
Most of the above attacks can be solved by changes in the rest of the node. However the basic vulnerability of harvesting cannot be solved, because by definition opennet is open.