Hallo NativeNetwork!
Wir würden euch heute gerne ein kleines Projekt vorstellen, das die letzten Tage hier entstanden ist.
Hintergrund
Vor ein paar Tagen bin ich hier auf NN über einen Thread gestolpert, in dem ein User zwecks Hilferuf seine Apache Logs hochgeladen hat.
Diese Logs haben nicht nur IP's und Hostnamen seiner User enthalten sondern u.U. auch weitere sensible Informationen seiner Anwendung.
Nach kurzer Konversation mit pentoxide wurden die Logs zwar gelöscht, aber doch ist das für mich immer noch ein kritischer Punkt.
Da hier viele Leute neu mit Hosting in Kontakt kommen, können sie unter Umständen noch nicht beurteilen wie gefährlich es ist, dies und das zu teilen.
Im genannten Fall, hat der User zum Beispiel auch aktiv gegen den Datenschutz verstoßen. Zudem mag nicht jedem auf Anhieb bekannt sein, ob ein Log File sensible Daten wie Passwörter enthält oder nicht.
Da wir natürlich trotzdem neuen Leuten auf Foren wie NativeNetwork helfen wollen, muss eine einfache Lösung her. Von der möchte ich euch hier erzählen.
PlayNet Fscrub - github.com/playnet-public/fscrub
Wie schon gesagt habe ich mich mal mit den Admins hier unterhalten und der beste Ansatz der sich sofort gezeigt hat, ist ein Tool welches zum einen vorhandene Attachments auf dem Forum Server scannt sowie auf neue Uploads reagiert.
Diese müssen dann durch das Tool "bereinigt" werden. Sprich, einmal auf Viren checken, sensible Informationen finden, ersetzen und bei Bedarf ein Backup anlegen.
Doch dieses Tool muss erst einmal gebaut werden, womit ich mich die letzten zwei Tage mal beschäftigt habe.
Der aktuelle Stand ist, wie der Titel schon sagt noch WIP aber es geht gut voran.
Sprache
Gebaut wird das ganze (wer hätte es gedacht) in Golang.
Warum Go? Ganz einfach, es läuft überall, ist eine super Sprache und genau für sowas gedacht.
An sich ist das ganze Teil kein Hexenwerk, doch die Entwicklung geht sehr gewissenhaft voran. Hier kann man live mal verfolgen wie penibel wir auch an anderen Dingen wie unserer API arbeiten, welche dem selben Standard folgt.
Uns ist bei der Umsetzung sehr wichtig auf Qualität zu achten, sauber zu testen und eine solide sowie flexible Lösung zu liefern der jeder vertrauen kann.
Jede Zeile ist sowohl manuell als auch automatisch getestet und wird nach gängigen Standards entwickelt.
Darum geht es nicht immer so schnell wie "mal schnell was scripten" ist dafür aber eine Lösung, der man auch in Zukunft vertrauen kann.
Warum dieser seltsame Name?
Auch das lässt sich recht einfach beantworten.
Der Prozess Daten von gewissen Dingen zu bereinigen ist gemeinhin als "Data Scrubbing" bekannt.
Wir hängen uns nun mit Fscrub an das Dateisystem (Filesystem) und warten auf Events die für uns eine Aufgabe darstellen.
Somit sind wir bei FScrub. Inspiriert unter anderem durch ein externes Paket, welches wir nutzen (fsnotify/fsnotify), folgen auch diverse interne Pakete diesem Muster (fshandle, fscrawl, fslog, fscrub).
Vielleicht nicht kreativ, aber passend.
Status
Nun, wie bereits erwähnt ist das Ganze noch nicht mal annähernd fertig.
Es gibt bisher die grundlegende Programmstruktur basierend auf playnet-public/gocmd-template sowie die ersten Packages um Ordner zu durchlaufen und auf einzelne Dateien zu reagieren.
Das Scrubbing ist soweit in groben Zügen fertig.
Man kann Patterns festlegen die ersetzt werden sollen sowie direkt spezifische Strings ersetzen. Dadurch können gewisse Regeln festgelegt werden und jede gefunden Datei wird nach diesen Zeile für Zeile durchsucht und die relevanten Stellen werden ersetzt.
Was noch aussteht und eigentlich ein für uns wichtiger Punkt ist: "intelligentes Ersetzen".
Aktuell kann zwar jede IP durch 0.0.0.0 ersetzt werden, das ist aber nicht immer brauchbar. Das Ziel ist es, für gewisse Dinge mehr Intelligenz unterzubringen, so sollen alle gefundenen IP's durchnummeriert werden (0.0.0.1, 0.0.0.2) damit der Wert des Log Files erhalten bleibt.
Das ist aber eher was für die nächsten Wochen.
Einen genauen Status kann man vermutlich nur auf GitHub erhalten, da sich täglich etwas ändert. Aber mal knapp hier:
- Projekt Setup - Struktur, Logging, CI/CD, Setup (done)
- Einmaliges Durchlaufen eines oder mehrer Ordner (done)
- Beobachten von FileSystem-Events (wip)
- Data Scrubbing mit Default Werten (done)
- Data Scrubbing mit dynamischen Patterns wie RegExp (done)
- Data Scrubbing mit Scripting (todo)
- Viren Check (todo)
- Ignorieren von Dateien auf Basis eines Headers (done)
- Backups (todo)
- Metriken (todo)
- Performance Messungen (todo)
Das Ganze kann bisher als Binary (Linux oder Windows executable), Debian Package (einfach Installation auf Linux) oder als Docker Image ausgeliefert werden.
Entwickelt wird hauptsächlich auf Linux/Mac, aber auch auf Windows (dort aber auch im Linux Subsystem). Mit ein Grund aus dem es uns interessiert, wo und wie eure Foren laufen.
Warum nun dieser Post obwohl es noch nix für euch gibt?
Ganz einfach: Wir testen das gerade mit konstruierten Daten, sprich eine Hand voll Dateien die von uns erzeugt wurden um die Funktionalität zu testen. Was wir aber wirklich brauchen sind live Daten.
Wir suchen daher Foren Admins die uns mitteilen wie ihr System aufgebaut ist und vielleicht sogar einen Auszug ihrer Attachments zur Verfügung stellen.
Im Gegenzug gibt es natürlich eine Erwähnung in den Contributors.
Wieder mal ist alles was wir hier tun OpenSource und wir machen das aus Lust, Laune und um der Community zu helfen. Sicherheit für Spieler ist uns ein sehr starkes Anliegen, doch wir machen das noch immer Freiwillig. Darum brauchen wir euch!
Ihr wollt uns beim Testen unterstützen? Ihr wollt am Code beitragen oder vielleicht sogar Golang lernen?
Auf geht’s!
Vor allem für Neulinge ist das ein super Projekt um einen Einstieg in die spannende Welt von Go und Open Source Arbeit zu erhalten.
Wer einen Blick darauf werfen will, hier geht's lang: https://github.com/playnet-public/fscrub
Kontakt
Zu erreichen sind wir wie immer über mich hier auf NativeNetwork oder auf unserem bevorzugten Kanal: https://discord.gg/WmpvNQh
Noch einen guten Rutsch wünscht euch,
das PlayNet Team.
Oh, und hier gibt es noch eine kleine Vorschau: