DevOps im Startup

In agilen Umgebungen wie Startups sind starre Trennungen von Softwareentwicklung und IT Operations eher selten anzutreffen. Doch auch viele große Unternehmen wechseln immer öfter auf agile Prozesse und einem dazu passenden IT Umfeld. DevOps ermöglicht die Vernetzung der klassischen Silos. Durch die Einführung intelligenter und automatisierter Prozesse lässt sich die Auslieferung der Software und dessen Qualität erheblich steigern.

Die gängigen DevOps Prozesse und Tools decken die Bereiche Planung, Entwicklung, Build, Test, Release, Deployment, Operations und Monitoring ab. Welche Prozesse dabei automatisiert werden sollen und zu welchem Zeitpunkt hängt maßgeblich vom Reifegrad des Unternehmens und der verfügbaren Zeit ab. Dabei muss die DevOps Umgebung am Anfang nicht so perfekt optimiert sein wie bei Netflix deren Automatiserungsgrad einzigartig ist. Für die Einführung der Tools und Prozesse muss Zeit aufgewendet werden welche dann in der Entwicklung fehlt. Gerade bei Startups die noch ihr MVP (Minimum Viable Product) am Markt erproben wäre eine vollständige Automatisierung noch verfrüht. Dennoch hilft eine frühzeitige Einführung auch hier die Produktivität und Qualität zu erhöhen. Exemplarisch möchte ich die Umsetzung meines letzten Stacks für ein schnell wachsendes Startup Unternehmen beschreiben.

Ausgangslage und Anforderungen

Das MVP ist am Markt erprobt und das Team hat bereits einige Entwickler an Board. Die primären Anforderungen sind somit die Qualität der Software erhöhen, idealerweise durch Testautomatisierung und Code-Quality-Standards. Neue Features müssen jederzeit und von jedem Mitarbeiter getestet werden können bevor diese in die Produktionsumgebung kommen. Somit müssen mehrere Testumgebungen verfügbar sein. Im Hinblick auf weitere neue Entwickler sollen diese schnell produktiv sein. Außerdem müssen alle Umgebungen zur Nachstellung von Problemen gleichartig aufgesetzt und konfiguriert sein.

A fool with a tool is still a fool.

Ein weiteres wichtiges Kriterium ist eine einfache Wartbarkeit und Administration. Probleme und Anforderungen sollen nicht mit einem Zoo aus tausend Tools erschlagen werden. Dabei ist eine wichtige Frage welche Programme selber gehostet werden sollen und wo ein Zukauf bzw. ein SaaS Modell sinnvoll ist. Natürlich gilt es den Datenschutz bei letzterem zu wahren. Selber administrierte Tools müssen immer auf dem aktuellsten Softwarestand und mit sicheren Konfigurationen bestückt sein.

Tools

Ansible

Eines der zwei zentralen Tools ist hier Ansible geworden. In den sogenannten Playbooks und den Konfigurationsdateien lässt sich die gesamte Umgebung definieren. Ansible verfolgt dabei den Ansatz, dass der Endzustand beschrieben wird. Die Definition für den Applikationsserver sieht dann also beispielsweise wie folgt aus.

  • [AppServer]
    • Server1
    • Server2
  • [AppServer Installation]
    • nginx: installiert
    • PM2: gestartet
    • DatendankVerbindung: DbServerCluster

Ich nutze Ansible sogar um die Server direkt bei dem Cloud Anbieter aufzusetzen. Somit gibt es zwei Ansible Projekte. Ein Projekt um die gesamte Serverumgebung inkl. Datenbankservern, VPNs, Firewall Regeln, SSH-Keys und Object Storages zu verwalten und ein zweites Projekt welches dann für jeden Server die Software und deren Konfiguration beschreibt. Durch die einfache Konfiguration können somit innerhalb weniger Minuten beliebig viele gleichartige Integrations-/Testumgebungen aufgebaut werden. Alle Umgebungen werden außerdem automatisch in die Monitoring- (Icinga/Nagios) und Loggingumgebung (Graylog 2) eingebunden. Ich habe mich bewusst gegen Datadog und ähnliche SaaS Dienste entschieden weil die Administration und Konfiguration von Tools wie Graylog, Icinga, Elasticsearch und vielen mehr mit Ansible ein Kinderspiel ist. Wichtig sind hier nur zuverlässige und sichere Konfigurationsdefinitionen und sauber abgetrennte Netzwerkbereiche und Firewall Regeln.

Jenkins

Die zweite Zentrale Software ist Jenkins. Dieser löst Deploybot ab um mehr Kontrolle über den gesamten Release Prozess zu haben. Jenkins kümmert sich um mehrere Teile. Zum einen prüft er sämtliche Check-Ins die auf GitHub getätigt werden. Dies umfasst die Prüfung der Code Qualität (Linting, SonarQube, …). Zum anderen führt Jenkins Unit Tests durch, startet die API Tests mit postman bzw. newman und führt die User Acceptance Tests von Selenium aus. Abhängig von den gewählten Branches automatisiert Jenkins auch das Deployment. Sämtliche commits auf den develop branch führen zu einem Deployment auf die Integrationsumgebung. Alle master commits müssen von mindestens zwei Entwicklern und Jenkins selber geprüft werden und führen dann zu einem Deployment auf die Produktionsumegbung.

Jeder Entwickler hat darüber hinaus jederzeit die Möglichkeit beliebige Branches auf Testumgebungen zu deployen. Dabei kann außerdem festgelegt werden welche Testdaten initial in den Datenbankservern zur Verfügung gestellt werden. Die Testumgebungen werden darüber hinaus in gesonderten virtuellen Netzwerken aufgebaut.

Produktion als lokale Entwicklunsumgebung

Ansible funktioniert auch mit Vagrant. Sämtliche Konfigurationen die für die Serverumgebungen definiert sind funktionieren somit auch lokal. Jeder Entwickler hat daher eine Umgebung deren Softwarestände und Konfiguration 1:1 mit der Produktion übereinstimmen. Lediglich die Datenbank ist in den Entwicklungsumgebung lokal anstelle von dedizierten Servern. Die lokalen Umgebungen können jederzeit auf Knopfdruck neu erstellt werden und erhalten direkt Testdaten. Neue Mitarbeiter lassen sich somit innerhalb von ca. 30 Minuten arbeitsfähig einbinden!

Zusammenfassung

Durch die Automatisierung des Aufbaus der lokalen Entwicklungsumgebung bis hin zur vollständigen Serverumgebung und der Automatisierung der Deployments findet jeder Entwickler jederzeit gleichartige Umgebungen vor. Fehler können lokal nachgestellt werden und notwenige Konfigurationsänderungen werden versioniert und auditiert zentral verwaltet. Jeder Entwickler kann jederzeit Änderungen von Code und Infrastruktur nachvollziehen und überprüfen.

 

Bildquelle: pixabay.com

Parrot AR Drone 2.0 mit Raspberry Pi steuern

Die Parrot AR.Drone 2.0 Power Edition ist schon etwas älter, aufgrund der hervorragenden Entwicklungsumgebungen eignet sich der Quadrocopter jedoch sehr gut für ein Projekt mit dem Raspberry Pi. Im Folgenden soll die Steuerung mit Hilfe von, auf Node.js aufbauenden, Skripten erfolgen. Für das Fliegen über den Minicomputer sind keine Vorerfahrungen notwendig. Der Copter stabilisiert sich eigenständig in der Luft und die Kommunikation erfolgt direkt über WLAN. Das Linux Betriebssystem des Quadrocopter ist in Teilen konfigurierbar. Außerdem verfügt das Gerät über zwei Kameras welche sich zur Gesichtserkennung oder für Videoaufnahmen eignen.

Alle Befehle der Parrot AR.Drone 2.0 sind im AR.Drone Developer Guide beschrieben. Das mehrere hundert Seiten umfassende Werk bietet sich aber eher zum Nachschlagen an. Unter dem Projekt NodeCopter hacking ist eine Node.js basierende Skript Bibliothek entstanden. Diese bildet die Grundlage für die folgende Implementierung. Die Idee der Gesichtserkennung basiert dabei auf dem Artikel How to build an autonomous, voice-controlled, face-recognizing drone for $200. In dem Artikel bilden die Microsoft Azure Cognitive Services die Grundlage. Für die Spracheingabe lässt sich auch IBM Watson nutzen.

Pakete installieren mit npm

Zuerst erfolgt das Anlegen eines Verzeichnisses in dem die Daten liegen. Die Initialisierung über npm (Node Package Manager) ist hierbei Optional. Das Tool generiert eine package.json in der später die Abhängigkeiten abgelegt werden, falls der Code beispielsweise auf github veröffentlicht werden soll.

$ mkdir ardrone
$ cd ardrone
#OPTIONAL
$ npm init
This utility will walk you through creating a package.json file.
name: (ardrone)
version: (1.0.0)
description: Parrot AR.Drone 2.0 Control
entry point: (index.js)
test command:
git repository:
keywords: Drone
author: Sebastian Pech
license: (ISC)
About to write to /home/pi/ardrone/package.json

Im Anschluss daran erfolgt die Installation der ar-drone Pakete.

$ npm install ar-drone
# ODER mit -save wenn die package.json über npm init erstellt wurde
$ npm install ar-drone -save

WLAN einrichten

Die Parrot AR.Drone stellt ein öffentliches und unverschlüsseltes WLAN zur Verfügung. Zum kontrollieren des Quadrocopter muss sich der Raspberry Pi mit diesem verbinden. Danach lassen sich die Steuerbefehle übermitteln.

$ sudo iwlist wlan0 scan

Nach dem Scan sollte in der Liste ein Eintrag mit _ESSID:“ardrone2123456″ oder ähnlichem erscheinen. Zu diesem soll nun die Verbindung hergestellt werden.

$ sudo nano /etc/wpa_supplicant/wpa_supplicant.conf
network={
        ssid="ardrone2_123456"
        key_mgmt=NONE
}
# Bei mehreren WLAN Einträgen können diese priorisiert sein
network={
        ssid="ardrone2_123456"
        key_mgmt=NONE
        priority=1
}

Die korrekte Verbindung lässt sich dann wie folgt ermitteln.

$ wpa_cli status

Weitere Informationen im Fehlerfall finden sich im Setting WiFi up via the command line Artikel. Mit einem weiteren WLAN Empfänger können auch zwei Netze genutzt werden.

Drone steuern mit dem Raspberry Pi

Nun kommt der spannendste Teil des ganzen Projektes. Der Quadrocopter soll sich magisch in die Luft erheben, etwas drehen und dann wieder landen. Dazu dient der folgende Code vom Node Copter Projekt in einer Datei namens ardrone.js.

$ nano ardrone.js
# oder vi ;-)
var arDrone = require('ar-drone');
var client = arDrone.createClient();

client.takeoff();

client
  .after(5000, function() {
    this.clockwise(0.5);
  })
  .after(1000, function() {
    this.stop();
    this.land();
  });

Checkliste vor dem Ausführen:

  • Smartphone nicht verbunden (oder Pooling aktiviert)
  • Raspberry Pi mit der Drone verbunden
  • Akku voll
  • Indoor-Gehäuse angebracht
  • Kinder, Tiere, Glas, Papierblätter, … außer Reichweite gebracht
  • Keinen Mut angetrunken (Nüchtern! ;-))

Dann kann nicht mehr viel schief gehen (außer einige Crashes, usw.) … Viel Glück!

$ node ardrone.js

Sicherheit

Das WLAN der AR.Drone ist unverschlüsselt, ein Zugriff ist also jederzeit von jedem Gerät möglich! Das Anlegen eines WPA Schlüssels kann hier Abhilfe schaffen.

Grundsätzlich gelten alle Sicherheitsbestimmungen der Anleitung. Ich rate dazu, die Drone drinnen nur mit dem Indoor-Gehäuse zu fliegen. Die Bewegung der Quadrocopter ist dadurch etwas träger und schwammiger aber die Einrichtung wird es einem danken.

Um das Unsanfte Fallen der Drone ein bisschen zu verbessern kann ein Landegestell aus Kabelbindern helfen.

Probleme mit dem Video

Die Beispiele png-stream.js und tcp-video-stream.js setzen das veraltete FFmpeg voraus. Die Installation ist leider nicht ganz trivial. Dennoch gibt es ein paar gute Anleitungen für experimentierfreudige Bastler. How to compile ffmpeg on a Raspberry Pi und Compiling software from source code on the raspberry pi – the ffmpeg suite.

# Wenn mstorsjo-fdk-aac und faac-1.28 installiert sind:
$ git clone http://source.ffmpeg.org/git/ffmpeg.git
$ cd ffmpeg
$ ./configure --prefix=/usr/local --enable-gpl --enable-nonfree --enable-libass 
  --enable-libfdk-aac --enable-libfreetype --enable-libmp3lame --enable-libopus 
  --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxvid
$ make && sudo make install
$ ffmpeg
XServer, Xfce4 und RDP Zugriff auf dem Raspberry Pi

Diverse Windowmanager, XServer und Remote Desktop Programme (RDP) stehen für den Raspberry Pi bereit. Eine schnelle Installation der am Meisten genutzten Komponenten gibt es hier.

X.Org-Server installieren

Der X.Org-Server hat sich als das Standard X-Window-System unter Linux etabliert. Die Installation ist schnell erledigt.

$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install xserver-xorg
$ sudo apt-get install xinit

Xfce4

Ohne einen Windowmanager macht das grafische Arbeiten wenig Spaß. Hier steht auch eine Reihe von Windowmanagern zur Verfügung. Auf dem Raspberry Pi hat sich der Xfce als einer von vielen etabliert. Alternativ gibt es mit fluxbox, kde, gnome, usw. weitere Varianten.

$ sudo apt-get install Xfce4
$ sudo apt-get install xfce4-goodies

RDP

Wer von seinem Windows PC auf einen Linux XServer zugreifen möchte (warum eigentlich?), kann das mittels xrdp realisieren. Der xrdp Dienst stellt den benötigten RDP Server auf dem Linux System zur Verfügung und ermöglicht den Login.

$ sudo apt-get install xrdp

In Windows muss unter dem Punkt „Programme > Zubehör > Remote Desktop Verbindung“ der RDP Client installiert werden. Mittels Start „Remotedesktopverbindung“ oder durch das Ausführen von „mstsc.exe“ ist der Client zu öffnen. Nach der Eingabe der IP bzw. des Namens des Raspberry Pi führt das Modul „sesman-XVNC“ in die gewünschte Umgebung.

Raspberry Pi 3 und VNC

Die aktuelleren Modelle unterstützen VNC direkt. In der Konfiguration kann der Dienst aktiviert werden. Der Zugriff erfolgt beispielsweise über RealVNC Viewer.

$ sudo raspi-config
5 Interfacing Options
P3 VNC         Enable/Disable graphical remote access to your Pi using RealVNC
Kali Linux auf dem Raspberry Pi

Mit Kali Linux steht eine der beliebtesten Linux Distributionen für das Penetration Testing, Netzwerkanalyse, Sniffing, Exploiting und weitere Sicherheitsanalysen für den Raspberry Pi zur Verfügung. Dank der Größe des Einplatinencomputers kann die Installation in die Rechenzentren an unterschiedlichen Standorten oder für die Vor-Ort-Analyse von Netzwerken mitgenommen werden.

Kali Linux installieren und nutzen

Kali.org stellt unter Installation von Kali ARM auf einem Raspberry Pi einen kleinen Artikel zur Installation bereit. Dort wird jedoch auf einem bestehenden Linux System als Basis aufgesetzt. Die Installation aus Windows heraus ist jedoch ebenso einfach.

Die Artikel auf meiner Einkaufsliste sind wieder eine gute Basis für den Einkauf der Komponenten für den Raspberry Pi 3.

Die Kali Linux Images für ARM Prozessoren sind auf der Download Seite zu finden.

Mit Hilfe des Win32DiskImager kann das Image auf die SD Karte kopiert werden. Die Software muss mittels Rechtsklick auf „Als Administrator ausführen“ gestartet werden. Danach wählt man das heruntergeladene ISO Image aus, gibt den korrekten!!! Laufwerksbuchstaben der SD Karte an und klickt auf „write“.

Nach dem Schreiben des Images auf die Karte ist die „Installation“ von Kali Linux erledigt. Die SD Karte muss nur noch in den Raspberry Pi gesteckt werden. Nach dem Anbringen der Stromversorgung sollte das System booten. Mit einem SSH Tool auf die IP Adresse erscheint die Anmeldemaske. Die Zugangsdaten lauten „root / toor“.

Notwendige Änderungen

Sowohl das Passwort als auch der SSH Host Schlüssel sind standardmäßig auf allen Systemen identisch. Diese müssen daher beide geändert werden! Der erste Schritt ist bereits in dem verlinkten Artikel beschrieben.

root@kali:~ rm /etc/ssh/ssh_host_*
root@kali:~ dpkg-reconfigure openssh-server
root@kali:~ service ssh restart

Die Änderung des Passwortes erfolgt mit dem bekannten passwd (Wenn passwd nicht bekannt ist sollte die SD Karte möglicherweise gleich wieder in den Müll wandern ;-)).

Wie es weiter geht

Mit der Linux Distribution sind nun eine Reihe von Programme für Analysen, Exploits und Penetration Tests installiert. In dem Artikel Securitysoftware und Scanner sind viele der Programme vorgestellt.

 

Bildquelle: KALI LINUX ™ is a trademark of Offensive Security.

Kali Linux Meme
Kali Linux Meme
Kali Linux
Kali Linux

Securitysoftware und Portscanner

Netzwerk- und Vulnerability Scanner gehören neben Portscanner, Netzwerkanalysetool und Sniffer zum Standardrepertoire eines Administrators. Einrichtung und Aufbau der Programme erfordert oft viel Zeit. Einfacher ist hier eine Lösung die viele Tools direkt mitbringt.

Eine von vielen Lösungen ist die Linux Live Distribution Kali. Kali Linux ist der Nachfolger des eingestellten BackTrack Linux. Der große Vorteil des Systems besteht darin, dass Konfigurationen für unterschiedlichste Szenarien bereitstehen. Die Standard ISO Datei umfasst die gängigsten Tools aus den Bereichen Password Recovery Tool, Netzwerk-/Portscanner, Sniffer, Wireless Analyse, Vulnerability Scanner und einigen mehr. Mittels Forensic Modus können Dateisysteme ohne Veränderung ausgelesen werden.

Nutzung

Die Nutzung ist dabei sehr intuitiv. Nach dem herunterladen der ISO Datei, kann diese auf eine DVD oder einem USB Stick installiert werden. Im Bootmenü ist eine Auswahl des gewünschten Modus möglich. Danach begrüßt einem der Desktop, der die gängigen Tools bereits nach Kategorien sortiert zur Verfügung stellt.

Neben der i386 und amd64 Architektur steht auch eine ARM-Fassung von Kali für den Raspberry Pi zur Verfügung!

Rechtliches

Ein rechtlicher Hinweis für deutsche Anwender ist der Wikipedia zu entnehmen.

Kali Linux enthält Softwaretools, die zum Teil Sicherheitsvorkehrungen umgehen und die nach § 202c StGB, dem Ende Mai 2007 inkraftgetreten sogenannten Hackerparagrafen, in Deutschland als Computerprogramme zum Ausspähen von Daten aufgefasst werden. Aufgrund dieser Gesetzeslage kann bereits der Besitz oder Vertrieb strafbar sein, sofern die Absicht zu einer rechtswidrigen Nutzung nach § 202a StGB (Ausspähen von Daten) oder § 202b StGB (Abfangen von Daten) besteht.

Top10 Tools

Nessus (tenable.com) Nessus ermöglicht, analog zu Nexpose, das Scannen nach bekannten Schwachstellen. Als Ergebnis listet der Scanner eine Reihe von potentiellen Sicherheitslücken auf und bietet Anleitungen zur Behebung.

Metasploit Framework (metasploit.com) Mit dem Metasploit Framework können Exploits getestet und entwickelt werden. Metasploit ermöglicht die Überprüfung von Sicherheitslücken, die Nexpose erkannt hat.

Aircrack-ng (aircrack-ng.org) Aircrack-ng umfasst die Analyse von Funknetzwerken. Mit der Software können 802.11 WEP and WPA-PSK Keys ermittelt werden.

Burp Suite (portswigger.net) Die Burp Suite stellt Tools für die Sicherheitsanalyse von Webapplikationen. WebSpider und Proxys unterstützen die Analyse.

THC-Hydra (thc.org – hydra) Mittels THC-Hydra können Zugangsdaten ermittelt werden. Die Software unterstützt sehr viele Applikationen und Protokolle.

John the Ripper (openwall.com – john) John the Ripper ist ein Tool zur Wiederehestellung von Passwörtern. Insbesondere UNIX Passwörter sind hiermit analysierbar.

Maltego (paterva.com – maltego) Die Software ermöglicht das Sammeln von Daten über Unternehmen, Personen, Webseiten und Sozialen Netzwerken und bringt diese in eine Verbindung miteinander. Damit ergibt sich ein Netzwerk aus Relationen, die grafisch aufbereitet werden.

Nmap (nmap.org) Network Mapper ist ein einfaches Analyse Tool für die Ermittlung von offenen Ports (Portscanner) und die Analyse von Betriebssystem und Serverversionen.

OWASP Zed Attack Proxy Project (owasp.org) Das Tool des Open Web Application Security Projects ist ein Schwachstellenscanner für Webapplikationen. Die intuitive Oberfläche ermöglicht schnelle Tests der eigenen Applikationen.

Wireshark (wireshark.org) Wireshark schneidet den Datenverkehr im Netzwerk mit und ermöglicht eine umfassende Analyse der Datenpakete und deren Inhalt. Mit Hilfe von umfangreichen Filtern können relevante Informationen einfach und zusammenhängend extrahiert werden.

Weitere Tools

sqlmap (sqlmap.org) sqlmap umfasst die Erkennung aus Nutzung von SQL Injections für alle gängigen Datenbanksysteme.

Social-Engineer Toolkit (SET) (trustedsec.com) SET bietet Tools rund um das Thema Social-Engineer Hacking. Beispielsweise lassen sich bestehende Webseiten klonen, um die modifizierte Version für gefälschte Anmeldemasken zu nutzen.

Ettercap (github.io – ettercap) Ettercap ermöglicht Man-in-the-middle Attacken. Mit dem Tool ist es möglich, Netzwerkpakete zu manipulieren und zu filtern.

Nemesis (sourceforge.net – nemesis) Nemesis ist ein Tool zur Manipulation von Datenpaketen. Intrusion Prevention Systeme (IPS) können hiermit geprüft werden.

Weiterführende Artikel

Schnellstart mit Kali Linux Kurze Einführung von Heise security zu Kali Linux.

Cracking Passwords Guide Ein Artikel zur Wiederherstellung von Passwörtern.

Extracting MetaData from photos using exiftool Hiermit lassen sich beispielsweise GPS Koordinaten aus Bildern extrahieren.

Hacking Tools Repository Hunderte von Sicherheitsprogrammen aufgelistet.

Bildquelle: By Offensive Security (Desktop screen shot) [GPL], via Wikimedia Commons