Petter Reinholdtsen: Where did that package go? geolocated IP traceroute
traceroute to www.stortinget.no (85.88.67.10), 30 hops max, 60 byte packets 1 uio-gw10.uio.no (129.240.202.1) 0.447 ms 0.486 ms 0.621 ms 2 uio-gw8.uio.no (129.240.24.229) 0.467 ms 0.578 ms 0.675 ms 3 oslo-gw1.uninett.no (128.39.65.17) 0.385 ms 0.373 ms 0.358 ms 4 te3-1-2.br1.fn3.as2116.net (193.156.90.3) 1.174 ms 1.172 ms 1.153 ms 5 he16-1-1.cr1.san110.as2116.net (195.0.244.234) 2.627 ms he16-1-1.cr2.oslosda310.as2116.net (195.0.244.48) 3.172 ms he16-1-1.cr1.san110.as2116.net (195.0.244.234) 2.857 ms 6 ae1.ar8.oslosda310.as2116.net (195.0.242.39) 0.662 ms 0.637 ms ae0.ar8.oslosda310.as2116.net (195.0.242.23) 0.622 ms 7 89.191.10.146 (89.191.10.146) 0.931 ms 0.917 ms 0.955 ms 8 * * * 9 * * * [...]This show the DNS names and IP addresses of (at least some of the) network equipment involved in getting the data traffic from me to the www.stortinget.no server, and how long it took in milliseconds for a package to reach the equipment and return to me. Three packages are sent, and some times the packages do not follow the same path. This is shown for hop 5, where three different IP addresses replied to the traceroute request. There are many ways to measure trace routes. Other good traceroute implementations I use are traceroute (using ICMP packages) mtr (can do both ICMP, UDP and TCP) and scapy (python library with ICMP, UDP, TCP traceroute and a lot of other capabilities). All of them are easily available in Debian. This time around, I wanted to know the geographic location of different route points, to visualize how visiting a web page spread information about the visit to a lot of servers around the globe. The background is that a web site today often will ask the browser to get from many servers the parts (for example HTML, JSON, fonts, JavaScript, CSS, video) required to display the content. This will leak information about the visit to those controlling these servers and anyone able to peek at the data traffic passing by (like your ISP, the ISPs backbone provider, FRA, GCHQ, NSA and others). Lets pick an example, the Norwegian parliament web site www.stortinget.no. It is read daily by all members of parliament and their staff, as well as political journalists, activits and many other citizens of Norway. A visit to the www.stortinget.no web site will ask your browser to contact 8 other servers: ajax.googleapis.com, insights.hotjar.com, script.hotjar.com, static.hotjar.com, stats.g.doubleclick.net, www.google-analytics.com, www.googletagmanager.com and www.netigate.se. I extracted this by asking PhantomJS to visit the Stortinget web page and tell me all the URLs PhantomJS downloaded to render the page (in HAR format using their netsniff example. I am very grateful to Gorm for showing me how to do this). My goal is to visualize network traces to all IP addresses behind these DNS names, do show where visitors personal information is spread when visiting the page.
When I had a look around for options, I could not find any good
free software tools to do this, and decided I needed my own traceroute
wrapper outputting KML based on locations looked up using GeoIP. KML
is easy to work with and easy to generate, and understood by several
of the GIS tools I have available. I got good help from by NUUG
colleague Anders Einar with this, and the result can be seen in
my
kmltraceroute git repository. Unfortunately, the quality of the
free GeoIP databases I could find (and the for-pay databases my
friends had access to) is not up to the task. The IP addresses of
central Internet infrastructure would typically be placed near the
controlling companies main office, and not where the router is really
located, as you can see from the
KML file I created using the GeoLite City dataset from MaxMind.
I also had a look at the visual traceroute graph created by
the scrapy project,
showing IP network ownership (aka AS owner) for the IP address in
question.
The
graph display a lot of useful information about the traceroute in SVG
format, and give a good indication on who control the network
equipment involved, but it do not include geolocation. This graph
make it possible to see the information is made available at least for
UNINETT, Catchcom, Stortinget, Nordunet, Google, Amazon, Telia, Level
3 Communications and NetDNA.
In the process, I came across the
web service GeoTraceroute by
Salim Gasmi. Its methology of combining guesses based on DNS names,
various location databases and finally use latecy times to rule out
candidate locations seemed to do a very good job of guessing correct
geolocation. But it could only do one trace at the time, did not have
a sensor in Norway and did not make the geolocations easily available
for postprocessing. So I contacted the developer and asked if he
would be willing to share the code (he refused until he had time to
clean it up), but he was interested in providing the geolocations in a
machine readable format, and willing to set up a sensor in Norway. So
since yesterday, it is possible to run traces from Norway in this
service thanks to a sensor node set up by
the NUUG assosiation, and get the
trace in KML format for further processing.
Here we can see a lot of trafic passes Sweden on its way to
Denmark, Germany, Holland and Ireland. Plenty of places where the
Snowden confirmations verified the traffic is read by various actors
without your best interest as their top priority.
Combining KML files is trivial using a text editor, so I could loop
over all the hosts behind the urls imported by www.stortinget.no and
ask for the KML file from GeoTraceroute, and create a combined KML
file with all the traces (unfortunately only one of the IP addresses
behind the DNS name is traced this time. To get them all, one would
have to request traces using IP number instead of DNS names from
GeoTraceroute). That might be the next step in this project.
Armed with these tools, I find it a lot easier to figure out where
the IP traffic moves and who control the boxes involved in moving it.
And every time the link crosses for example the Swedish border, we can
be sure Swedish Signal Intelligence (FRA) is listening, as GCHQ do in
Britain and NSA in USA and cables around the globe. (Hm, what should
we tell them? :) Keep that in mind if you ever send anything
unencrypted over the Internet.
PS: KML files are drawn using
the KML viewer from Ivan
Rublev, as it was less cluttered than the local Linux application
Marble. There are heaps of other options too.
As usual, if you use Bitcoin and want to show your support of my
activities, please send Bitcoin donations to my address
15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b.
Debian LTS
November marked the 20th month I contributed to
A new version, now at 0.2.0, of
I use
Finding a Libc for tiny embedded ARM systems
You'd think this problem would have been solved a long time ago. All I
wanted was a C library to use in small embedded systems -- those with
a few kB of flash and even fewer kB of RAM.
Small system requirements
A small embedded system has a different balance of needs:
Today,
So, once again I had a box that had been installed with the kind-of-wrong
Debian architecture, in this case, powerpc (32 bit, bigendian), while I
wanted ppc64 (64 bit, bigendian). So, crossgrade time.
If you want to follow this, be aware that I use sysvinit. I doubt this can
be done this way with systemd installed, because systemd has a lot more
dependencies for PID 1, and there is also a dbus daemon involved that
cannot be upgraded without a reboot.
To make this a bit more complicated, ppc64 is an unofficial port, so it is
even less synchronized across architectures than sid normally is (I would
have used jessie, but there is no jessie for ppc64).
Step 1: Be Prepared
To work around the archive synchronisation issues, I installed pbuilder and
created 32 and 64 bit base.tgz archives:
Every year since 2012, I typeset the problems and solutions for the German math event 
Idea via
Falling off the cliff is always a surprise. I know it's there; I've been
living next to it for months. I chart its outline daily. Avoiding it has
become routine, and so comfortable, and so failing to avoid it surprises.
Monday evening around 10 pm, the laptop starts draining down from 100%.
House battery, which has been steady around 11.5-10.8 volts since well
before Winter solstice, and was in the low 10's, has plummeted to 8.5 volts.
With the old batteries, the cliff used to be at 7 volts, but now, with
new batteries but fewer, it's in a surprising place, something like
10 volts, and I fell off it.
Weather forecast for the week ahead is much like the previous week:
Maybe a couple sunny afternoons, but mostly no sun at all.
Falling off the cliff is not all bad. It shakes things up. It's a good
opportunity to disconnect, to read paper books, and think long
winter thoughts. It forces some flexability.
I have an auxillary battery for these situations. With its own little
portable solar panel, it can charge the laptop and run it for around 6
hours. But it takes it several days of winter sun to charge back up.
That's enough to get me through the night. Then I take a short trip, and
glory in one sunny afternoon. But I know that won't get me out of the hole,
the batteries need a sunny week to recover. This evening, I expect to lose
power again, and probably tomorrow evening too.
Luckily, my goal for the week was to write slides for two talks, and I've
been able to do that despite being mostly offline, and sometimes
decomputered.
And, in a few days I will be jetting off to Australia! That should give
the batteries a perfect chance to recover.
Previously: