Die wunderbare Welt von Isotopp

Systemd Service and Socket Activation

Avatar of @isotopp@infosec.exchange Kristian Köhntopp - November 27, 2022

In today’s Yak Shaving session I needed to understand how to expose the docker socket of a remote machine over the network. You should not do that, it is totally insecure, but I needed to do that to test something.

Socket Activation

I discovered that dockerd is running with -H fd://.

# ps axuwww | grep docker[d]
root     1616732  0.5  0.1 2930892 52168 ?       Ssl  15:32   2:25 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

That is happening in the docker.service definition for Docker:

ETL from a Django Model

Avatar of @isotopp@infosec.exchange Kristian Köhntopp - November 20, 2022

Continued from last weeks article on data warehouses.

At work, I was tasked with building a capacity model for data center growth. The basic assumption of these things is often that the future behaves similarly to the past, so the future predicted capacity model is somehow an extension of past growth. I needed old server usage data, and was indeed able to find that in one of our systems, called ServerDB.

Of Stars and Snowflakes

Avatar of @isotopp@infosec.exchange Kristian Köhntopp - November 16, 2022

A sample system

When you have an Online Transactional Database, you have to record transactions at some point in time. That means you get a table with time dimension in your OLTP system. Consider for example a system that records Reservations. Users exist and can reserve Things to use, for a day.

You probably get a structure such as this:

In an OLTP database, a reservation is a (resid, userid, thingid, date). It references the user data by userid, and the thing data by thingid.

Databases on un-RAID-ed storage?

Avatar of @isotopp@infosec.exchange Kristian Köhntopp - November 9, 2022

Where I work, we run bare-metal databases on non-redundant local storage. That is, a database is a very cheap frontend blade server. It has 2 CPUs, with 8 cores/16 threads each. It contains 128 GB of memory, 2 or 4 TB of local NVME and it has a 10 GBit/s network interface. It costs around 120 to 150 Euro per month to run for 5 years, including purchase price and all datacenter costs.

Bandwidth, IOPS and Latency

Avatar of @isotopp@infosec.exchange Kristian Köhntopp - November 7, 2022

A harddisk from 1998.

The opening image for this post shows the stock photo of a hard disk platter. You can see a movable arm that can ride in and out of a stack of rotating platters coated with some kind of metal oxide. We sometimes call this kind of storage condescendingly “rotating rust”, when in reality it is a triumph of material science.

Moving an arm costs time, and bringing that arm into the right position and then waiting until the right segment of disk rotates underneath it so that we can write things to disk takes time. A lot of time – around 5 ms or so on a modern disk, 4x longer on the old thing in the image.

Proper O11y for MySQL

Avatar of @isotopp@infosec.exchange Kristian Köhntopp - October 25, 2022

Three years ago, I learned that due to SREcon, Charity Majors was in Amsterdam. I set up a meeting between Benjamin Tyler, Yves Orton and a few more colleagues of mine, and her. That is, because apparently in a case of co-evolution, our company internal “Events” system and Honeycombs observability tooling, modelled after experiencing Fabooks “Scuba” seemed to be doing a lot of the same things.

These days, we are using Honeycomb a lot to record events, and debug code running in distributed systems. But one type of system does not fit into this very well: Databases of all kinds. And I don’t understand why, because it would be perfect.

Software Supply Chain Issues

Avatar of @isotopp@infosec.exchange Kristian Köhntopp - October 18, 2022

The GitHub Security Lab has a long hard look at “Apache Commons Text” in March this year. That resulted in CVE-2022-42889 . The exploit goes like this:

final StringSubstitutor interpolator = StringSubstitutor.createInterpolator();
String out = interpolator.replace("${script:javascript:java.lang.Runtime.getRuntime().exec('touch /tmp/foo')}");
System.out.println(out);

Next to ${script:...} there are apparently also a ${url:...} and `${dns} as other unsuitable substitutions, and they nest.

This was fixed in October 2022, after being reminded by GHSL in May and August.

Groups and Places

Avatar of @isotopp@infosec.exchange Kristian Köhntopp - October 12, 2022

In a distributed, asynchronous environment, there is a need for distributed, asynchronous interaction. This interaction is often written, but “writing” these days is actually a media-rich process that includes much more than letters. It also needs to be able to build some structure, and some gateway to level up to more synchronous and even richer communication.

Let’s have a chat about chats, and what properties they have.

Historically, chat was lines of text, without much structure. Even today, many geeks often propose IRC when chat solutions are being discussed in a corporate context. That is a very myopic way of thinking.

Pan Narrans and Better Meetings

Avatar of @isotopp@infosec.exchange Kristian Köhntopp - October 10, 2022

When you are looking for a better Remote First culture, you are looking for better meetings. If you go for better meetings, you will also have fewer of them.

“The anthropologists got it wrong when they named our species Homo sapiens (‘wise man’). In any case it’s an arrogant and bigheaded thing to say, wisdom being one of our least evident features. In reality, we are Pan narrans, the storytelling chimpanzee.”

MySQL: Local and distributed storage

Avatar of @isotopp@infosec.exchange Kristian Köhntopp - September 27, 2022

Where I work, we are using MySQL in a scale-out configuration to handle our database needs.

That means, you write to a primary server, but reads generally go to a replica database further down in a replication tree.

A number of additional requirements that should not concern you as a developer make it a little bit more elaborate than a simple “primary and a number of replicas” configuration. But the gist of all that is: