Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- ##########################################################################################################################
- XKeyScore Source Code Review
- The recent revelations from Jake Applebaum, et all today, highlight some not-to-be-understated revelations.
- Tor users are directly targeted
- TAILS users are directly targeted
- People searching for privacy tools are targeted
- While the conclusion by some may have been “well of course the NSA is doing that” the revelation and the insight it provides is direct, specific evidence that people worried about their privacy are being attacked. More-over, this provides further evidence that the NSA’s goal is to collect it all.
- The Revelations
- To summarize, the source code to the NSA program, XKeyscore (known since the early days of the Snowden disclosures) has been leaked. It sounds like the program’s entire source code is in the hands of another party and it shows what the code does, how it works and who it’s targeting. We now know that privacy-conscious bystanders are targeted: Tor users, people that visit the Tor website, people that use TAILS, or try to view hidden services. Each of these are considered suspicious activities and flagged as the IP’s of suspects by NSA’s network monitoring machine. This is further a reminder that if you look like you are privacy conscious, you are going to be a targeted as an “extremist” in the eyes of the United States and it’s allies.
- Tracking Bridge Users
- XKeyscore is tracking the IP addresses that are sending emails to the Tor bridge automated account. When a user is in a country that blocks Tor, they have an option to use an unlisted Tor entry node called bridges. To get an unlisted bridge IP, one of the options is to email a Tor Project email address which auto-replies with an address of a bridge. The Five Eyes have been documenting each IP that makes a request to that email address.
- Tracking Tor Directory Authorities
- Another facet disclosed was that the NSA are targeting a specific Tor directory server run by Sebastian Hahn. I believe that this is the case only because the source of the XKeycode leak was by a node in Germany. Looking at nodes in other countries, would point to a corresponding directory authority in that region.
- Until relatively recently, the Tor Network consisted of only 9 directory servers of which all clients would first make a connection to prior to joining the Tor network. These 9 directory servers are still in place, but an additional feature lets Tor nodes act as a directory server cache. With this feature, you weren’t automatically required to connect to one of the directory authorities during each bootup. This helps mitigate this risk.
- Tracking Tor Entry Nodes
- Even if your connection to the directory authorities were not caught by the program, your connections to the Tor entry nodes were. So while directory authorities were only used during boot, the connections to Tor entry nodes were used repeatedly as your client will build a circuit.
- There’s not much you can do to defend against this one. Using a bridge would ensure that XKeyScore won’t know which IP’s to track, but the requests for bridges are caught as well. One may consider running their own unlisted Tor entry node, which is possible, but it severely degrades your anonymity. Users concerned with this may consider using a VPN service and then connecting over Tor. This would not fix it, but it would make it more difficult to identify the originating request to connect to Tor.
- Tracking Torproject.org Visits
- One of the more useless network iterations that are logged is that of users visiting www.torproject.org. The document shows what they are calling “microplugins” that highlight specific pieces of information that are caught in transit. Your visit to the Tor Project’s website logged and you are now flagged as suspicious.
- XKeyScore Code
- The most interesting part is the code released showing how XKeyScore works. Many have already highlighted that the NSA programs are merely malicious implementations of existing technology (as opposed to custom software built from the ground up). We can see that XKeyScore’s database uses a MapReduce model. One very common with NoSQL databases like Hadoop. This is hinted in the “mapper” and “reducer” functions that searches for onion addresses:
- ##########################################################################################################################
- */
- // START_DEFINITION
- /**
- * Fingerprint Tor authoritative directories enacting the directory protocol.
- */
- fingerprint('anonymizer/tor/node/authority') = $tor_authority
- and ($tor_directory or preappid(/anonymizer\/tor\/directory/));
- // END_DEFINITION
- // START_DEFINITION
- /*
- Global Variable for Tor foreign directory servers. Searching for potential Tor
- clients connecting to the Tor foreign directory servers on ports 80 and 443.
- */
- $tor_foreign_directory_ip = ip('193.23.244.244' or '194.109.206.212' or
- '86.59.21.38' or '213.115.239.118' or '212.112.245.170') and port ('80' or
- '443');
- // END_DEFINITION
- // START_DEFINITION
- /*
- this variable contains the 3 Tor directory servers hosted in FVEY countries.
- Please do not update this variable with non-FVEY IPs. These are held in a
- separate variable called $tor_foreign_directory_ip. Goal is to find potential
- Tor clients connecting to the Tor directory servers.
- */
- $tor_fvey_directory_ip = ip('128.31.0.39' or '216.224.124.114' or
- '208.83.223.34') and port ('80' or '443');
- // END_DEFINITION
- // START_DEFINITION
- requires grammar version 5
- /**
- * Identify clients accessing Tor bridge information.
- */
- fingerprint('anonymizer/tor/bridge/tls') =
- ssl_x509_subject('bridges.torproject.org') or
- ssl_dns_name('bridges.torproject.org');
- /**
- * Database Tor bridge information extracted from confirmation emails.
- */
- fingerprint('anonymizer/tor/bridge/email') =
- email_address('bridges@torproject.org')
- and email_body('https://bridges.torproject.org/' : c++
- extractors: {{
- bridges[] = /bridge\s([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}):?([0-9]{2,4}?[^0-9])/;
- }}
- init: {{
- xks::undefine_name("anonymizer/tor/torbridges/emailconfirmation");
- }}
- main: {{
- static const std::string SCHEMA_OLD = "tor_bridges";
- static const std::string SCHEMA_NEW = "tor_routers";
- static const std::string FLAGS = "Bridge";
- if (bridges) {
- for (size_t i=0; i < bridges.size(); ++i) {
- std::string address = bridges[i][0] + ":" + bridges[i][1];
- DB[SCHEMA_OLD]["tor_bridge"] = address;
- DB.apply();
- DB[SCHEMA_NEW]["tor_ip"] = bridges[i][0];
- DB[SCHEMA_NEW]["tor_port_or"] = bridges[i][1];
- DB[SCHEMA_NEW]["tor_flags"] = FLAGS;
- DB.apply();
- }
- xks::fire_fingerprint("anonymizer/tor/directory/bridge");
- }
- return true;
- }});
- // END_DEFINITION
- // START_DEFINITION
- /*
- The fingerprint identifies sessions visiting the Tor Project website from
- non-fvey countries.
- */
- fingerprint('anonymizer/tor/torpoject_visit')=http_host('www.torproject.org')
- and not(xff_cc('US' OR 'GB' OR 'CA' OR 'AU' OR 'NZ'));
- // END_DEFINITION
- // START_DEFINITION
- /*
- These variables define terms and websites relating to the TAILs (The Amnesic
- Incognito Live System) software program, a comsec mechanism advocated by
- extremists on extremist forums.
- */
- $TAILS_terms=word('tails' or 'Amnesiac Incognito Live System') and word('linux'
- or ' USB ' or ' CD ' or 'secure desktop' or ' IRC ' or 'truecrypt' or ' tor ');
- $TAILS_websites=('tails.boum.org/') or ('linuxjournal.com/content/linux*');
- // END_DEFINITION
- // START_DEFINITION
- /*
- This fingerprint identifies users searching for the TAILs (The Amnesic
- Incognito Live System) software program, viewing documents relating to TAILs,
- or viewing websites that detail TAILs.
- */
- fingerprint('ct_mo/TAILS')=
- fingerprint('documents/comsec/tails_doc') or web_search($TAILS_terms) or
- url($TAILS_websites) or html_title($TAILS_websites);
- // END_DEFINITION
- // START_DEFINITION
- requires grammar version 5
- /**
- * Aggregate Tor hidden service addresses seen in raw traffic.
- */
- mapreduce::plugin('anonymizer/tor/plugin/onion') =
- immediate_keyword(/(?:([a-z]+):\/\/){0,1}([a-z2-7]{16})\.onion(?::(\d+)){0,1}/c : c++
- includes: {{
- #include <boost/lexical_cast.hpp>
- }}
- proto: {{
- message onion_t {
- required string address = 1;
- optional string scheme = 2;
- optional string port = 3;
- }
- }}
- mapper<onion_t>: {{
- static const std::string prefix = "anonymizer/tor/hiddenservice/address/";
- onion_t onion;
- size_t matches = cur_args()->matches.size();
- for (size_t pos=0; pos < matches; ++pos) {
- const std::string &value = match(pos);
- if (value.size() == 16)
- onion.set_address(value);
- else if(!onion.has_scheme())
- onion.set_scheme(value);
- else
- onion.set_port(value);
- }
- if (!onion.has_address())
- return false;
- MAPPER.map(onion.address(), onion);
- xks::fire_fingerprint(prefix + onion.address());
- return true;
- }}
- reducer<onion_t>: {{
- for (values_t::const_iterator iter = VALUES.begin();
- iter != VALUES.end();
- ++iter) {
- DB["tor_onion_survey"]["onion_address"] = iter->address() + ".onion";
- if (iter->has_scheme())
- DB["tor_onion_survey"]["onion_scheme"] = iter->scheme();
- if (iter->has_port())
- DB["tor_onion_survey"]["onion_port"] = iter->port();
- DB["tor_onion_survey"]["onion_count"] = boost::lexical_cast<std::string>(TOTAL_VALUE_COUNT);
- DB.apply();
- DB.clear();
- }
- return true;
- }});
- /**
- * Placeholder fingerprint for Tor hidden service addresses.
- * Real fingerpritns will be fired by the plugins
- * 'anonymizer/tor/plugin/onion/*'
- */
- fingerprint('anonymizer/tor/hiddenservice/address') = nil;
- // END_DEFINITION
- // START_DEFINITION
- appid('anonymizer/mailer/mixminion', 3.0, viewer=$ascii_viewer) =
- http_host('mixminion') or
- ip('128.31.0.34');
- // END_DEFINITION
- /*
- Source: http://www.b3rn3d.com/blog/2014/07/04/xkeyscore-source-code-review/
- http://www.b3rn3d.com/assets/xkeyscorerules100.txt
- MORE INFO HERE: https://www.techdirt.com/articles/20140703/02494927769/nsas-xkeyscore-source-code-leaked-shows-tor-users-classified-as-extremists.shtml
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement