Security Testing mit Virtual Environment leicht gemacht

Security Testing mit Virtual Environment leicht gemacht

Andrea Covello
von Andrea Covello
Lesezeit: 13 Minuten

Endlich! Meine Configuration Files, nach denen ich schon vor Wochen gefragt habe, sind hier. Ich freue mich riesig. Aber die Freude über die Dateien hält nur gerade ein paar Minuten an. Höchstens ein paar Minuten. Weil die Engineers behaupten jetzt auf einmal, dass die Einstellungen der Config Files den Sicherheitsanforderungen genügen und der PMO macht Druck. Ich soll die Sache schnellstmöglich validieren und dann noch schneller die ganze Sache als ISEC Compliant abhaken.

Nach einem ersten Blick auf die Files bin ich aber nicht amüsiert… Okay, ja, sieht so aus, als ob die minimalen ISEC-Anforderungen erfüllt sind. Aber eben: Sieht nur so aus. Etwas fällt mir ins Auge. Ich erkenne das Konstrukt, klar. Aber die Sache hat einen Haken: Sie läuft auf einer anderen Linux Distro als die, die ich bevorzuge. Ich mag ja Debian, aber das hier ist RHE. Und überhaupt: In meinem Job ist “sieht so aus” schlicht nicht gut genug. Ich muss – und wenn ich ehrlich bin, dann will ich das auch – so genau wie möglich sein können, wenn ich eine Sache als ISEC compliant deklariere.

Demnach ist es für mich von grösster Wichtigkeit, dass ich die Konfiguration auf einem laufenden System testen kann. Das ist der Moment, an dem es mir auffällt. Das Gesicht des Managers. Die Nachricht über meinen Plan des Tests auf einem laufenden System erfreut ihn gar nicht. Mir kommt auf Anhieb gerade keine Situation in den Sinn, in der er noch weniger erfreut war.

Versteht mich jetzt bitte nicht falsch. Ich weiss genau, was er meint. Ich verstehe sein Problem. Er hat eine Deadline. Ich habe eine Deadline. Das Projekt muss so schnell wie möglich fertig werden, damit wir uns anderen Projekten widmen können.

Daher ist Erfindungsgeist gefragt. Die Situation: Ich bin beim Kunden vor Ort. Ich habe nur grade mein heiss geliebtes MacBook bei mir, das zwar eine Virtualisierungsarchitektur bereit hält, aber sonst nichts. Alles in allem könnte ich schlechter auf den Test vorbereitet sein. Doch mein Hauptproblem ist immer noch da: Der Manager, der wirklich nichts von wegen “Ich brauche einen Tag, um das zu testen” hören will. Weil, wenn ich das sage, dann seufzt er, fragt, ob ich das nicht schneller machen könne, dann muss ich ihm sagen, dass Qualität halt nun mal seine Zeit braucht und dass man sowas nicht abkürzen sollte. Blöde Situation, das.

Moment Mal! Ich kann das abkürzen. Ich erkläre später, was ich tue. Aber, lieber Leser, vertrau mir schnell.

Mein eigenes Bisschen Magie

1.
Linxs-iMac:~ andrea$ mkdir _SANDBOX
Linxs-iMac:~ andrea$ cd _SANDBOX/
Linxs-iMac:_SANDBOX andrea$ mkdir tmp-rh-65-instance-01
Linxs-iMac:_SANDBOX andrea$ cd tmp-rh-65-instance-01/

2. Linxs-iMac:tmp-rh-65-instance-01 andrea$ vagrant init chef/centos-6.5 A `Vagrantfile` has been placed in this directory. You are now ready to `vagrant up` your first virtual environment! Please read the comments in the Vagrantfile as well as documentation on `vagrantup.com` for more information on using Vagrant. Linxs-iMac:tmp-rh-65-instance-01 andrea$

3. Linxs-iMac:tmp-rh-65-instance-01 andrea$ vagrant up Bringing machine ‘default’ up with ‘virtualbox’ provider… > default: Box 'chef/centos-6.5' could not be found. Attempting to find and install... default: Box Provider: virtualbox default: Box Version: >= 0 > default: Loading metadata for box ‘chef/centos-6.5’ default: URL: https://vagrantcloud.com/chef/centos-6.5 > default: Adding box 'chef/centos-6.5' (v1.0.0) for provider: virtualbox default: Downloading: https://vagrantcloud.com/chef/centos-6.5/version/1/provider/virtualbox.box default: Progress: 7% (Rate: 3932k/s, Estimated time remaining: 0:02:12) … > default: Successfully added box ‘chef/centos-6.5’ (v1.0.0) for ‘virtualbox’! > default: Importing base box 'chef/centos-6.5'... > default: Matching MAC address for NAT networking… > default: Checking if box 'chef/centos-6.5' is up to date... > default: Setting the name of the VM: tmp-rh-65-instance-01_default_1401974732146_96537 > default: Clearing any previously set network interfaces... > default: Preparing network interfaces based on configuration… default: Adapter 1: nat > default: Forwarding ports... default: 22 => 2222 (adapter 1) > default: Booting VM… > default: Waiting for machine to boot. This may take a few minutes... default: SSH address: 127.0.0.1:2222 default: SSH username: vagrant default: SSH auth method: private key default: Warning: Connection timeout. Retrying... > default: Machine booted and ready! > default: Checking for guest additions in VM... > default: Mounting shared folders… default: /vagrant => /Users/andrea/_SANDBOX/tmp-rh-65-instance-01 Linxs-iMac:tmp-rh-65-instance-01 andrea$

4. Linxs-iMac:tmp-rh-65-instance-01 andrea$ vagrant ssh Last login: Fri Mar 7 16:57:20 2014 from 10.0.2.2 [vagrant@localhost ~]$

5. [vagrant@localhost ~]$ yum search snmp … ============================ N/S Matched: snmp ============================ cluster-snmp.x86_64 : Red Hat Enterprise Linux Cluster Suite – SNMP agent libvirt-snmp.x86_64 : SNMP functionality for libvirt net-snmp.x86_64 : A collection of SNMP protocol tools and libraries net-snmp-devel.i686 : The development environment for the NET-SNMP project net-snmp-devel.x86_64 : The development environment for the NET-SNMP project net-snmp-libs.i686 : The NET-SNMP runtime libraries net-snmp-libs.x86_64 : The NET-SNMP runtime libraries net-snmp-perl.x86_64 : The perl NET-SNMP module and the mib2c tool net-snmp-python.x86_64 : The Python ‘netsnmp’ module for the NET-SNMP net-snmp-utils.x86_64 : Network management utilities using SNMP, from the NET-SNMP project perl-SNMP_Session.noarch : SNMP support for Perl 5 php-snmp.x86_64 : A module for PHP applications that query SNMP-managed devices rsyslog-snmp.x86_64 : SNMP protocol support for rsyslog foghorn.x86_64 : Foghorn DBUS/SNMP service openhpi-subagent.x86_64 : NetSNMP subagent for OpenHPI [vagrant@localhost ~]$ [vagrant@localhost ~]$ yum install net-snmp.x86_64 Loaded plugins: fastestmirror You need to be root to perform this command. [vagrant@localhost ~]$ sudo yum install net-snmp.x86_64 Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * base: ftp-stud.fht-esslingen.de * extras: ftp.plusline.de * updates: ftp.fau.de Setting up Install Process Resolving Dependencies —> Running transaction check —-> Package net-snmp.x86_64 1:5.5-49.el6_5.1 will be installed —> Processing Dependency: net-snmp-libs = 1:5.5-49.el6_5.1 for package: 1:net-snmp-5.5-49.el6_5.1.x86_64 —> Processing Dependency: perl(Term::ReadLine) for package: 1:net-snmp-5.5-49.el6_5.1.x86_64 …

Dependencies Resolved … Install 9 Package(s)

Total download size: 13 M Installed size: 42 M Is this ok [y/N]: y Downloading Packages: (1/9): lm_sensors-libs-3.1.1-17.el6.x86_64.rpm | 38 kB 00:00 (2/9): net-snmp-5.5-49.el6_5.1.x86_64.rpm | 306 kB 00:00 (3/9): net-snmp-libs-5.5-49.el6_5.1.x86_64.rpm | 1.5 MB 00:00 (4/9): perl-5.10.1-136.el6.x86_64.rpm | 10 MB 00:02 (5/9): perl-Module-Pluggable-3.90-136.el6.x86_64.rpm | 40 kB 00:00 (6/9): perl-Pod-Escapes-1.04-136.el6.x86_64.rpm | 32 kB 00:00 (7/9): perl-Pod-Simple-3.13-136.el6.x86_64.rpm | 212 kB 00:00 (8/9): perl-libs-5.10.1-136.el6.x86_64.rpm | 578 kB 00:00 (9/9): perl-version-0.77-136.el6.x86_64.rpm | 51 kB 00:00 ——————————————————————————————————————————————— Total 3.5 MB/s | 13 MB 00:03 Running rpm_check_debug Running Transaction Test Transaction Test Succeeded Running Transaction Installing : lm_sensors-libs-3.1.1-17.el6.x86_64 1/9 Installing : 1:perl-Pod-Escapes-1.04-136.el6.x86_64 2/9 Installing : 4:perl-libs-5.10.1-136.el6.x86_64 3/9 Installing : 1:perl-Pod-Simple-3.13-136.el6.x86_64 4/9 Installing : 3:perl-version-0.77-136.el6.x86_64 5/9 Installing : 1:perl-Module-Pluggable-3.90-136.el6.x86_64 6/9 Installing : 4:perl-5.10.1-136.el6.x86_64 7/9 Installing : 1:net-snmp-libs-5.5-49.el6_5.1.x86_64 8/9 … Installed: net-snmp.x86_64 1:5.5-49.el6_5.1

Dependency Installed: lm_sensors-libs.x86_64 0:3.1.1-17.el6 net-snmp-libs.x86_64 1:5.5-49.el6_5.1 perl.x86_64 4:5.10.1-136.el6 perl-Module-Pluggable.x86_64 1:3.90-136.el6 perl-Pod-Escapes.x86_64 1:1.04-136.el6 perl-Pod-Simple.x86_64 1:3.13-136.el6 perl-libs.x86_64 4:5.10.1-136.el6 perl-version.x86_64 3:0.77-136.el6

Complete!

6. Linxs-iMac:tmp-rh-65-instance-01 andrea$ ll total 56 0 drwxr-xr-x 5 andrea staff 170 5 Jun 15:56 . 0 drwxr-xr-x 3 andrea staff 102 5 Jun 15:16 .. 0 drwxr-xr-x 3 andrea staff 102 5 Jun 15:23 .vagrant 16 -rw-r—r— 1 andrea staff 4822 5 Jun 15:21 Vagrantfile 40 -rw———- 1 andrea staff 18861 5 Jun 15:55 snmpd.conf

7. [vagrant@localhost ~]$ ll /vagrant/ insgesamt 28 -rw———-. 1 vagrant vagrant 18861 5. Jun 13:55 snmpd.conf -rw-r—r—. 1 vagrant vagrant 4822 5. Jun 13:21 Vagrantfile [vagrant@localhost ~]$

8. [vagrant@localhost vagrant]$ sudo cp snmpd.conf /etc/snmp/snmpd.conf [vagrant@localhost vagrant]$ service snmpd restart Stopping snmpd: [ OK ] Starting snmpd: [FAILED]

9. [vagrant@localhost vagrant]$ sudo tail /var/log/messages Jun 5 14:07:33 localhost snmpd11160: Created directory: /var/lib/net-snmp/mib_indexes Jun 5 14:07:33 localhost snmpd11162: NET-SNMP version 5.5 Jun 5 14:08:12 localhost snmpd11162: Received TERM or STOP signal… shutting down… Jun 5 14:08:12 localhost snmpd11181: /etc/snmp/snmpd.conf: line 464 Jun 5 14:08:12 localhost snmpd11181: /etc/snmp/snmpd.conf: line 465 Jun 5 14:08:12 localhost snmpd11181: net-snmp: 2 error(s) in config file(s)

10. [vagrant@localhost vagrant]$ sudo halt

Broadcast message from vagrant@localhost.localdomain (/dev/pts/0) at 14:19 …

The system is going down for halt NOW! [vagrant@localhost vagrant]$ Connection to 127.0.0.1 closed by remote host. Connection to 127.0.0.1 closed. Linxs-iMac:tmp-rh-65-instance-01 andrea$

11. Linxs-iMac:tmp-rh-65-instance-01 andrea$ vagrant destroy default: Are you sure you want to destroy the ‘default’ VM? [y/N] y ==> default: Destroying VM and associated drives… Linxs-iMac:tmp-rh-65-instance-01 andrea$

12. /Users/andrea/_SANDBOX/tmp-rh-65-instance-01/.vagrant/machines/default/virtualbox Linxs-iMac:virtualbox andrea$ ll total 0 0 drwxr-xr-x 2 andrea staff 68 5 Jun 16:20 . 0 drwxr-xr-x 3 andrea staff 102 5 Jun 15:23 .. Linxs-iMac:virtualbox andrea$

Meine Tricks

Die Tools, die ich verwendet habe, sind die folgenden.

  1. Vagrant
  2. VirtualBox

Ich gehe mal davon aus, dass ich VirtualBox nicht gross erklären muss. Daher schauen wir uns Vagrant genauer an.

Bei Vagrant handelt es sich um ein Tool, das nicht nur auf MacOSX sondern auch auf Windows und Linux läuft. Es ist kompatibel mit einer Vielzahl von Virtualisierungsmöglichkeiten, wie VirtualBox, VMware Fusion, VMware Workstation, Hyper-V und AWS.

Auf der Website des Herstellers gibt es eine kurze Erklärung, was Vagrant eigentlich ist.

Vagrant stellt eine einfache, reproduzierbare und portable Arbeitsumgebung zur Verfügung, die nach höchsten Industrie-Standards gebaut ist und von einem einzelnen, konsistenten Workflow kontrolliert wird. So wird die Produktivität und Flexibilität von Ihnen und Ihrem Team maximiert.

Damit Vagrant das alles kann, muss es sich auf die Schultern von Riesen stellen. Virtual Machines sind auf VirtualBox provisioniert. Oder auf VMware, AWS oder einem beliebigen anderen Provider. In der Folge können dann die Standardprovisionierungstools wie Shell Scripts, Chef oder Puppet eingesetzt werden, um Software auf der Virtual Machine zu installieren und sie zu konfigurieren.

Aber zurück zu meinem Test, der glücklicherweise keinen ganzen Tag in Anspruch nimmt: Alles, was ich dazu brauche ist Vagrant 1.6.3 und VirtualBox 4.3.12. Die sind bereits auf meinem MacBook installiert. Dazu benötige ich nur noch einen Internetanschluss, damit ich die veröffentlichte VM runterladen kann. In Vagrant werden die übrigens Boxes genannt. Und auch das hatte ich.

Die ganze Sache nahm weniger als 15 Minuten in Anspruch. Jeder, der bereits eine solche Erfahrung gemacht hat, weiss, wie lange das sonst dauert. Und wenn nicht: Im Normalfall kann das locker etwa einen halben Tag in Anspruch nehmen.

Schauen wir uns also die Schritte genau an:

  1. Erstellen wir unseren Spielplatz in einem Subordner.
  2. Der Befehl vagrant init initialisiert den VM Container und definiert, wie die Box namens chef/centos-6.5 runtergeladen wird. Es gibt eine Vielzahl von Containern, die frei in der Vagrant Cloud erhältlich sind. Und weitere gibt es hier.

Die Auswahl in der Vagrant Cloud ist beeindruckend.

Es gibt zudem die Möglichkeit, eine eigene Box zu veröffentlichen. Dies geht mittels eines kostenlosen Accounts.

Mehr Tricks.

  1. vagrant up wird Folgendes tun:
    • Download der Virtual Disk in den lokalen Speicher
    • Konfiguration der VirtualBox VM Instanz
    • Start der Virtual Machine
    • Start der VM
    • Erstellung des Users vagrant
    • Konfiguration für SSH Key Authentication mit der lokalen Maschine
    • Konfiguration von Local Port Forwarding auf TCP/2222 um mit dem
      VM SSH-Daemon zu verbinden, denn die Maschine ist hinter einer NAT-Konfiguration
    • Erstellung eines freigegebenen Ordners zwischen der neuen VM und der lokalen Maschine
  2. vagrant ssh erlaubt es uns, mit einem unprivilegierten Benutzer namens vagrant anzumelden. Wenn wir Privilegien wollen, dann müssen wir sudo verwenden.
  3. Jetzt müssen wir das System so einstellen, dass wir es zu unseren Testzwecken brauchen können. Dazu benötigen wir den SNMP-Daemon (net-snmp.x86_64)
  4. Zeit, die Konfigurationsdateien auf die Virtual Machine zu bringen. Dazu kopieren wir die erhaltene snmpd.conf in den Ordner, wo wir die Vagrant Box installiert haben (tmp-rh-65-instance-01)
  5. Der Ordner synchronisiert sich in der VM im Ordner /vagrant
  6. Überschreiben wir nun die bestehende Datei mit der synchronisierten SNMP-Konfiguration und starten den Service neu im privilegierten Modus mit sudo.

Erfolg! Ich hatte Recht. Die Konfiguration hat zwei Fehler auf den Zeilen 464 und 465. Ich kann weiterhin behaupten, dass ich keine Konfigurationsfile absegne, die ich nicht vorher getestet und auf ihre Funktionstauglichkeit geprüft habe. Zudem bin ich nicht der, der einfach so Dinge ISEC-compliant nennt.

Meine Arbeit ist erledigt und alle sind beeindruckt. Zeit, mein MacBook wieder zurückzusetzen. Weil, seien wir mal ehrlich, 256 GB SSD reicht einfach nirgends hin. Daher: sudo halt und das System stoppt.

Zurück in der MacOSX-Konsole kann ich nun die Daten einfach entfernen und zwar mit vagrant destroy. Was bleibt ist die snmpd.conf Datei und die kann ich natürlich auch löschen.

Fazit

Dieses kleine Beispiel kratzt nur an der Oberfläche des Vagrant-Frameworks. Sie können es auch für die Erstellung von komplexen Umgebungen mit mehreren Hosts und sogar für provisionierte Application Frameworks mit Puppet, CFEngine oder gar Shell Scripts nutzen.

Stellen Sie sich ein Vagrant-Framework vor, das dazu da ist, die Sicherheit von Webapplikationen zu testen. Es startet in Minuten und kann genau auf die Bedürfnisse des Testers abgestimmt werden. Und das mit minimalem Aufwand.

Zuguterletzt: Die erstellte virtuelle Umgebung kann geteilt werden. Oder Sie können es auch auf ihrem eigenen Web Server speichern oder auch nur den Vagrant Client verwenden, der sich mit einem Server verbindet, der wiederum alle Ihre Maschinen hostet und ausführt. Remotely. Viele Vagrant Boxes sind bereits öffentlich und das sollte Ihre Arbeit erleichtern… weil Zeit ist immer noch wertvoller als Gold.

Über den Autor

Andrea Covello

Andrea Covello ist seit den 1990er Jahren im Bereich der Informationssicherheit tätig. Seine Schwerpunkte liegen traditionell im Engineering, wobei er als Spezialist im Bereich Windows-Sicherheit, Firewalling und Virtualisierung gilt.

Links

Sie brauchen Unterstützung bei einem solchen Projekt?

Unsere Spezialisten kontaktieren Sie gern!

×
Crypto-Malware

Crypto-Malware

Ahmet Hrnjadovic

TIBER-EU Framework

TIBER-EU Framework

Dominik Altermatt

Vertrauen und KI

Vertrauen und KI

Marisa Tschopp

Datenverschlüsselung in der Cloud

Datenverschlüsselung in der Cloud

Tomaso Vasella

Sie wollen mehr?

Weitere Artikel im Archiv

Sie brauchen Unterstützung bei einem solchen Projekt?

Unsere Spezialisten kontaktieren Sie gern!

Sie wollen mehr?

Weitere Artikel im Archiv