-
Notifications
You must be signed in to change notification settings - Fork 78
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Discussion: preventing P2P proxy nodes. #126
Comments
At the same time, I've been investigating these IPs on auxiliary channels and I'm able to attest these are all exhibiting signs of running the exact same software. I've (with also the contribution of plowsof) been able to identify other methods to detect them, which are going to stay private but can be shared to other trusted MRL members. |
Can this help ? monero-project/monero#7935 ; we need to add this to have more diverse peer connectivity |
TL;DR: An analysis of node log data provides further supporting evidence that the IP addresses on the banlist are controlled by an eavesdropping adversary. At any given time, an average of 15 percent of outbound connections of the honest logging nodes were made to IP addresses on the banlist, which reduced the effectiveness of the Dandelion++ privacy protocol. I used fluff-phase transaction relay log data to analyze peer-to-peer connections from honest nodes to IP addresses on the banlist: https://github.com/Boog900/monero-ban-list/blob/main/ban_list.txt The log data was collected from about ten nodes between April 14, 2024 and May 23, 2024. The data is described in Section 9 of my "March 2024 Suspected Black Marble Flooding Against Monero: Privacy, User Experience, and Countermeasures". IPs on banlist do not initiate connections (consistent with optimal attack strategy against Dandelion++)IP addresses in the banlist make up about 11 percent of all 13,600 unique node IP addresses in the dataset. For outbound connections only, IP addresses in the banlist make up about 25 percent of all 6,200 unique node IP addresses. For outbound connections only and counting each port as a distinct node, IP addresses in the banlist make up about 50 percent of all 9,400 distinct nodes. The banlist IP addresses almost never initiate connections. They only wait for honest nodes to establish outbound connections to them. Only a single IP address on the banlist appeared as an inbound connection to the logging nodes. Outbound connections are the privacy-sensitive connection type. Dandelion++ relays stem-phase transactions to outbound connections only. The Dandelion++ threat model in Fanti et al. (2018) assumes that
and
The operator of the banlist IP addresses is encouraging honest nodes to establish outbound connections to the malicious proxy nodes. When honest nodes have many outbound connections to spy nodes, the privacy protections of Dandelion++ do not work very well. Outbound connections are the only type of connections that a node with closed ports can have, so closed-port nodes are at higher risk of eclipse attacks in this circumstance. Banlist IP addresses within the
|
… by @Boog900 ( as signed off by @jeffro256 and [endorsed](https://gist.github.com/Rucknium/76edd249c363b9ecf2517db4fab42e88) by @Rucknium) to blocklists.list.tsv Blocklisting such nodes is a security benefit as they threaten the safety and security of Monero users, regardless of whether one endorses Monero or not. [The existing research](monero-project/meta#1119) leads to believe this is a [direct attack](monero-project/research-lab#126) on the whole network and similar to [LinkingLion](https://b10c.me/observations/06-linkinglion/). Signed-off-by: kkarhan <[email protected]>
Background
While investigating this issue: monero-project/monero#9496 I noticed in one of the log snippets posted that a peer sent a message that wouldn't normally be sent if both nodes were running default
monerod
monero-project/monero#9496 (comment):Command
1001
is a handshake request & response. Command1007
is a support flag request & response. Support flags are contained in the handshake message, currently the only flag is for fluffy blocks,monerod
will always activate this flag, even if you enable theno_fluffy_blocks
arg (it will only disable sending fluffy blocks).Support flag requests are only sent if you leave the support flags in the handshake empty, so
162.218.65.219
either compiled their ownmonerod
unsetting the fluffy blocks support flag or, more likely, they are running completely custom software.I tried to find all the nodes displaying this behavior but sadly when I connected to this node it had the fluffy blocks support flag set. Knowing that they are probably running custom software I decided to try find another difference in behavior from
monerod
, and luckily I managed to find one. I am going to keep the exact method private to prevent them fixing it. The method will not give false positives,monerod
would never do what these nodes do. I am certain these nodes are proxies to real nodes.Scanning the network for this behavior I found 1900 IP addresses running these bad nodes: https://github.com/Boog900/monero-ban-list/blob/main/ban_list.txt, the majority were from these 6 subnets:
Which overlaps with LinkingLions: https://b10c.me/observations/06-linkinglion/.
In total while scanning the network I found around 4900 active IP addresses, which is less than half the count of nodes on https://monero.fail/map (currently 12941). I decided to run monero.fail's tool myself, with a slight modification to check nodes are reachable before adding them to the list. With this tool I got 10175 "Recent Peers". monero.fail counts the same IP running nodes on different ports as different peers, which is fine, but it explains the difference in the count.
The spy nodes run multiple proxies behind the same IP, in the list of 10175 IP:Port combinations the amount of nodes with an IP in the 6 main subnets + some
23.92.36.*
that the proxies use is 7584.This means from the data I have it looks like ~40% of the IPs running Monero nodes are not real nodes and ~75% of the "Recent Peers" from my scan using monero.fails tool were from an IP in the 6 main subnets + some 23.92.36.* that the proxy nodes were using.
Having such a large chunk of the network, each tx sent over clearnet is highly likely to be rooted through one of their nodes at least once in the stem stage. Allowing them to hold onto it and use one of the few information leaks from
monerod
to try and find the peers in the stem path before it, example: monero-project/monero#9496 (comment). Even if a node does not accept incoming connections they are still highly likely to be connected to at least one node ran by this entity which can be used to exploit an information leak.With the amount of nodes ran by this entity IMO network security is also an issue.
Ideas
Banning these IP addresses
Banning the IP addresses is a good solution for individual nodes, however not all nodes will do it and they could just switch IPs.
Hardening the addressbook
Although currently
monerod
prefers to connect to peers in different /16 subnets, the addressbook does not limit the amount of peers stored per subnets, it will even store the same IP with different ports also it could store IPv6 mapped IPv4 addresses, and the canonical IPv4 address at the same time in different entries.We could limit the amount of address stored per subnet, like bitcoin, and prevent the same IP from being stored multiple times.
Although these nodes could still be active they would be less likely to be connected to.
Proof of Storage
There are schemes for proving that a node is storing the blockchain: https://ieeexplore.ieee.org/document/10174897 although this would require "encrypting" the blockchain, which isn't ideal.
The text was updated successfully, but these errors were encountered: