Blog der Heimetli Software AG

Attacken auf www.heimetli.ch

Jeder Server im Netz wird attackiert, anscheinend aus Prinzip. Auch www.heimetli.ch bleibt nicht verschont, obwohl es hier wirklich nichts zu klauen gibt.

Als ich wieder mal über die Logfiles schaute, kam mir die Idee, das graphisch darzustellen. Es gibt ganz verschiedene Einbruchsversuche, aber viele kommen nur selten vor. Die beiden häufigsten auf diesem Server sind Versuche eine admin-Seite zu finden und POSTs auf fast beliebige Seiten.

Für die Suche nach admin gibt es mindestens zwei Gründe: den Versuch ein admin-Directory zu finden, und die Suche nach MySQL Admin. Beides gibt es übrigens auf meinem Server nicht, die Suche ist also immer erfolglos.

Bei den POST-Versuchen gibt es auch wieder solche die es mit MySQL Admin probieren, sowie URLs die zu Wordpress und Drupal gehören. Weiter gibt es auch Zugriffe auf fast beliebige Files die ich nicht zuordnen kann.

Eigentlich hatte ich vermutet dass es viele Angriffe auf Wordpress gibt und habe deshalb URLs mit wp drin gezählt. Es gibt zwar einmal eine Spitze mit ca. 100 Versuchen an einem Tag, aber sonst sind die Zahlen verschwindend gering, und deshalb tauchen sie in der Graphik nicht auf.

Attacken vom 1. April bis 30. November 2018

0 200 400 600 Apr May Jun Jul Aug Sep Oct Nov 2018 Attacken admin post

Warum eine statische Graphik und nicht eine dynamische Darstellung mit D3.js? Ganz einfach: um keine "Wettbewerbe" von Script-Kiddies zu provozieren...

POSTs im November 2018

Diese Darstellung zeigt, zu welcher Tageszeit die POST-Versuche im November stattgefunden haben. Die sind ziemlich zufällig verteilt, und es scheint keine Systematik zu geben. Die Darstellung lässt vermuten dass keine Profis am Werk waren, denn die hätten sicher nicht so viele Zugriffe in einer Minute gemacht.

Datenerfassung

Die Daten stammen aus den Logfiles auf dem Webserver. Ein awk-Script hat sie zusammengesucht und im CSV-Format abgelegt.

Das hätte man sicher auch mit R lösen können, aber awk kenne ich schon länger und habe mehr Uebung damit.

Graphiken

Die Diagramme wurden mit R erstellt und als .EMF exportiert. Danach mit mit InkScape etwas bearbeitet und als SVG exportiert. Das SVG bekam seinen letzten Schliff mit einem Text-Editor.

R

R macht es wirklich einfach eine schöne Darstellung zu erstellen. Für das Liniendiagramm ist dieser Code zuständig:

# Load the library with ggplot and other packages
library(tidyverse)

# Read the CSV
log  <- read.csv("attacks.csv")

# Convert date column
log  <- mutate( log, date=as.Date(date,"%d/%b/%Y") )

# Discard counts for word press
data <- select( log, -wp )

# Transform the frame structure
data <- gather( data, "type", "count", -date)

# Plot the data
ggplot( data, aes(x=date,y=count,color=type) ) +
  scale_x_date( breaks=function(x) seq.Date(from=as.Date("2018-04-01"),to=as.Date("2018-11-01"),by="1 month"), date_labels="%b"  ) +
  xlab( "2018" ) +
  ylab( "Attacken" ) +
  geom_line( size=1, show.legend=FALSE )

Das Datum erkannte R nicht, das musste per Anweisung konvertiert werden.

Der Bar-Chart wurde ebenfalls mit R erstellt:

# Load the library with ggplot and other packages
library( tidyverse )

# read_csv converts the time automatically
posts <- read_csv( "/Blog/time.csv" )

# Plot the data
ggplot(posts,aes(x=time,y=post)) +
  scale_x_time( labels=function(a) strftime(a,"%H:%M",tz="UTC") ) +
  xlab("Tageszeit") +
  ylab( "Anzahl" ) +
  geom_col(size=1.2,color="blue")

Praktischerweise erkennt read_csv die Zeit gleich selber und legt sie direkt in einem brauchbaren Format ab. Am meisten Zeit hat die Formatierung der Tick-Labels auf der X-Achse gekostet...