Een virtueel netwerk met VirtualBox
Misschien wil je eens kennismaken met een ander besturingssysteem, zoals een bepaalde Linux-distributie of een Windows-previewbuild. Of je wilt graag een testlab opzetten voor je experimenten met penetratietests of ethisch hacken. In beide gevallen biedt virtualisatie een uitweg. We tonen hoe je met het gratis VirtualBox niet alleen virtuele machines, maar ook heuse virtuele netwerken opzet, voor diverse scenario’s.
Code downloaden
In dit artikel worden wat voorbeelden van stukken code gegeven. Omdat overtikken van code erg foutgevoelig is, kun je die code ook downloaden en daarna bekijken of kopiëren. Zie het bestand code-virtualbox.txt, beschikbaar via
Een eenduidige definitie van virtualisatie geven is lastig, aangezien er diverse virtualisatietypen bestaan. De twee bekendste zijn applicatievirtualisatie (waarbij toepassingen worden geïsoleerd van het onderliggende besturingssysteem en van andere programma’s door ze in een zogenoemde sandbox te stoppen) en systeemvirtualisatie. Bij dit tweede type zorgt een virtuele-machinemanager (VMM), oftewel hypervisor, ervoor dat er meerdere besturingssystemen gelijktijdig op één fysieke machine kunnen draaien door voor elk besturingssysteem de nodige hardware te emuleren. Dat kan via een zogenoemde native of bare-metal-hypervisor, die rechtstreeks op de hardware draait zonder onderliggend besturingssysteem, zoals Microsoft Hyper-V en VMware vSphere/ESXi. Of je zet een hosted hypervisor in, die bovenop een conventioneel besturingssysteem draait, zoals VMware Workstation, Parallels Desktop en Oracle VM VirtualBox. Hypervisors van het eerste type zijn doorgaans stabieler en performanter, maar hypervisors van het tweede type laten zich makkelijker installeren en kunnen met meer diverse hardware overweg.
In deze masterclass focussen we ons op dit tweede type, op het gratis VirtualBox om specifiek te zijn. We leggen eerst kort uit hoe je een virtuele machine (VM) installeert, maar de nadruk ligt verder vooral op het opzetten van virtuele netwerken.
01 Virtuele schijf
Je vindt VirtualBox op www.virtualbox.org, voor diverse host-besturingssystemen. Wij gaan aan de slag met VirtualBox 6.1 voor Windows. Installeer het programma met de voorgestelde componenten en start de beheermodule op. Klik op Nieuw om een VM te maken en druk op de knop Expertmodus. Geef je VM een Naam en Machinemap (oftewel opslaglocatie) en selecteer Type en Versie voor het virtuele gast-besturingssysteem. Zie je in het uitklapmenu alleen 32bit-versies verschijnen terwijl je echt een x64-cpu en een 64bit-Windows hebt, lees dan eerst het kader ‘Check-up’. Stel een geschikte geheugengrootte in (besef wel dat de ingestelde hoeveelheid geheugen niet beschikbaar is voor je host-besturingssysteem zolang je VM draait), laat de optie Nieuwe virtuele harde schijf aanmaken geselecteerd en kies Aanmaken. Selecteer een geschikte bestandsgrootte voor de virtuele schijf. Je laat dit het best staan op Dynamisch gealloceerd, zodat de schijf tot het ingestelde plafond kan meegroeien naargelang de behoefte. Doorgaans kies je het standaardtype VDI voor je virtuele schijf. Bevestig met Aanmaken, waarna de schijf in het beheervenster opduikt.
©PXimport
Check-up
Hypervisors stellen doorgaans wel de nodige hardware-eisen, vooral wat de cpu betreft. Zo heb je meestal een 64bit-processor nodig die SLAT (Second Level Address Translation) en virtualisatie ondersteunt. Gelukkig ondersteunen de meeste moderne cpu’s van AMD en Intel die functies. Je controleert het best vooraf in je UEFI/BIOS of deze functie daadwerkelijk is ingeschakeld. Je vindt die ongetwijfeld in een menu als Advanced CPU Configuration, Northbridge of Chipset (bij items als AMD-V of Intel VT). Lukt het je toch niet om virtuele machines te starten, ga dan na of je al een bare-metal-hypervisor zoals Hyper-V hebt draaien, want die verhindert dat een hosted hypervisor zijn werk kan doen. In Windows 10 druk je hiervoor op Windows-toets+R, voer je optionalfeatures uit en kijk je bij Hyper-V.
©PXimport
02 Virtueel besturingssysteem
Geen VM zonder virtueel besturingssysteem natuurlijk en dat regel je als volgt. Selecteer de nieuw aangemaakte schijf en klik op Starten. Via het mapicoon en de knop Toevoegen verwijs je naar een (gedownload) schijfkopiebestand, bijvoorbeeld van een Linux-distributie (meestal een iso-bestand). In principe kun je ook naar een usb-stick met een live-besturingssysteem verwijzen (zie het kader ‘Usb-stick’). Selecteer het toegevoegde schijfkopiebestand, klik op Kiezen en op Start, waarna je het virtuele besturingssysteem op de gebruikelijke manier installeert.
Goed om weten, is dat VirtualBox voor veel gastsystemen extra stuurprogramma’s en systeemtoepassingen biedt. Die installeert je als volgt: start je VM op, open het menu Apparaten en kies Invoegen Guest Additions CD-image. Dit cd-image verschijnt dan als een virtueel station in je gast-besturingssysteem. Open dit en voer VBoxWindowsAdditions uit. Je kunt nu bijvoorbeeld vanuit het menu Apparaten / USB-apparaten een usb-stick aan het besturingssysteem toewijzen, en het klembord en mappen delen tussen host en gast.
©PXimport
Usb-stick
Met enige moeite (en met behulp van de opdrachtregelversie van VirtualBox) krijg je ook een live-besturingssysteem op een usb-stick in VirtualBox aan de praat. Plug de stick in je pc en open Windows Schijfbeheer (druk op Windows-toets+R en voer diskmgmt.msc uit), waar je het schijfnummer van de stick noteert (Schijf
©PXimport
Huidig besturingssysteem
Het is ook mogelijk je huidige Windows-installatie te virtualiseren om er bijvoorbeeld op hetzelfde of een ander toestel mee te experimenteren. Dat kan met behulp van de al wat oudere tool Disk2vhd. Na de installatie start je de toepassing op en plaats je een vinkje bij je Windows-volume en bij het (kleine) systeemvolume. Haal het vinkje weg bij Use Vhdx, maar laat het staan bij Use Volume Shadow Copy. Vul een geschikte locatie en naam in, en bevestig met Create. Het hele proces kan behoorlijk lang duren. Na afloop start je dan VirtualBox op, maak je een nieuwe VM, kies je bij Harde schijf de optie Bestaand virtuele harde schijf-bestand gebruiken en verwijs je naar het vhd-bestand.
©PXimport
03 NAT
Als je in de beheermodule van VirtualBox met rechts klikt op een (bij voorkeur afgesloten) VM en Instellingen / Netwerk selecteert, dan merk je dat VirtualBox één virtuele netwerkadapter heeft ingeschakeld en die heeft gekoppeld aan NAT (Network Address Translation). Klik je op Geavanceerd, dan zie je dat VirtualBox als adaptertype wellicht Intel PRO/1000 MT Desktop heeft ingesteld, omdat VirtualBox weet dat het betreffende gast-besturingssysteem de benodigde stuurprogramma’s voor die netwerkadapter heeft.
NAT is het standaardtype, omdat dit een veilige en makkelijke netwerkconfiguratie is (waarbij zo goed als niets hoeft te worden ingesteld). De NAT-modus zorg er namelijk voor dat VirtualBox als een soort router fungeert, tussen elke VM en het host-besturingssysteem. Op deze manier kunnen de VM’s elkaar niet benaderen en kunnen externe toestellen evenmin de VM’s bereiken.
In omgekeerde richting kan je VM doorgaans wel het externe netwerk en internet op. Zo kan je VM de zogenoemde loopback-interface van je host benaderen (via het standaardadres 10.0.2.2), evenals eventuele netwerkservices die op de host actief zijn. Dat kan nuttig zijn als bijvoorbeeld een applicatie op je VM een databaseserver nodig heeft die op je host draait.
Een VM krijgt zijn ip-adres van een DHCP-service die actief is in VirtualBox. Bij de eerste netwerkadapter is dat standaard netwerk 10.0.2.0, schakel je een extra virtuele netwerkadapter in (open het tabblad Adapter 2, plaats een vinkje bij Netwerkadapter inschakelen en kies Gekoppeld aan: NAT), dan wordt die aan netwerk 10.0.3.0 gekoppeld enzovoort.
©PXimport
04 Poortdoorverwijzing
Stel, je hebt een of andere netwerkservice op je VM draaien en die wil je nu toch ook bereikbaar maken voor de host of andere machines in je (fysieke) netwerk. Dat is niet zomaar mogelijk in NAT-modus, tenzij je portforwarding inschakelt. Open hiervoor Instellingen / Netwerk van je VM, klik op Geavanceerd / Poortdoorverwijzing en druk op het groene plusknopje. Geef je portforwarding-regel een naam, kies het protocol (TCP of UDP) en vul de velden Hostpoort en Gastpoort in. We nemen de simpele multi-platform MiniWeb HTTP Server als voorbeeld, omdat die zich in een paar seconden laat opzetten (handig voor kleinschalige experimenten). Deze draait standaard op poort 8000, maar wil je die bijvoorbeeld bereiken wanneer je op je host http://localhost:8088 invoert, dan vul je de velden van de portforwarding-regel als volgt in: MiniWeb HTTP Server, TCP, 8088, 8000.
Je hoeft het veld Host IP alleen in te vullen als je het verkeer van een specifieke netwerkinterface op je host wilt doorsturen. Het veld Gast-IP is nodig als je de VM een statisch ip-adres hebt meegegeven.
Je kunt dergelijke netwerkconfiguraties trouwens ook vanaf de Opdrachtprompt regelen via de meegeleverde tool VBoxManage.exe (zie ook het kader ‘Usb-stick’), met de volgende syntax:
vboxmanage modifyvm "<vm-naam>" --natpf<x> "MiniWeb HTTP Server,<protocol>,<host-ip>,<host-poort>,<gast-ip>,<gast-poort>"
Hierbij verwijst <x> naar het nummer van de virtuele netwerkadapter.
Mocht je ooit een netwerkscenario willen opzetten met een vijfde virtuele netwerkadapter (acht is overigens het maximum), dan is VBoxManage de enige manier:
vboxmanage modifyvm "<vm-naam>" –nic5 <netwerktype>
In plaats van <netwerktype> kun je onder meer kiezen uit de opties nat, intnet, bridged, hostonly en natnetwork (in de komende paragrafen worden deze opties individueel besproken).
©PXimport
05 Intern netwerk
Een NAT-constructie is al behoorlijk veilig, maar wil je dat een VM alleen andere VM’s, maar geen externe systemen of internet mag benaderen, dan kies je het best voor Gekoppeld aan: Intern netwerk. Zo’n opzet vertoont flink wat overeenkomst met een Bridged adapter (zie paragraaf 6), maar bij deze laatste loopt alle verkeer over de fysieke netwerkinterface van je host. Dat maakt dat een netwerksniffer als Wireshark via deze weg ook het verkeer tussen je VM’s kan monitoren – wat in bepaalde gevallen juist je bedoeling kan zijn.
Voor ons scenario selecteer je Intern netwerk en kies je de standaard beschikbare optie intnet. Of je tikt hier gewoon zelf de naam voor het internet netwerk in. Wil je andere VM’s van ditzelfde netwerk gebruik laten maken, dan moet je uiteraard ook daar diezelfde naam selecteren.
In het kader ‘Whonix’ illustreren we een slim gebruik van zo’n intern netwerk.
©PXimport
Whonix
De gratis tool Whonix, bedoeld om anoniem te kunnen surfen, illustreert mooi het nut van een constructie met NAT en een intern netwerk. Download het ova-bestand van Whonix, een kant-en-klaar ‘Open Virtual Appliance’, en installeer het in VirtualBox via Bestand / Appliance importeren. Na een snelle import zie je twee VM’s: Whonix-Gateway-XFCE en Whonix-Workstation-XFCE. Bij de gateway zijn twee netwerkadapters ingeschakeld: één gekoppeld aan NAT (om internet te kunnen bereiken) en één gekoppeld aan een intern netwerk (met de naam Whonix). De workstation-VM bevat slechts één adapter, die aan het interne netwerk Whonix is gekoppeld. Je surft vanuit deze VM dan via de gateway, die alle verkeer mooi over het anonimiserende Tor-netwerk laat lopen.
06 Bridged adapter
In paragraaf 5 hebben we al vermeld dat bij het type Bridged adapter alle verkeer via een fysieke netwerkinterface van je host loopt. Dat gebeurt via een zogenoemde netwerk-filter-driver op de host die data van de fysieke netwerkadapter filtert. Hierdoor kan VirtualBox pakketten van die adapter opvangen en ook data injecteren, zodat in zekere zin een softwarematige netwerkinterface wordt gecreëerd. Voor de host lijkt het alsof een VM fysiek aan de netwerkadapter is gekoppeld. De VM kan in principe in twee richtingen met de host communiceren en ook verbinding leggen naar het externe netwerk toe. Zo’n opzet kan bijvoorbeeld handig zijn als je netwerkservices op je VM draait die je bewust makkelijk bereikbaar wilt maken, zonder dat je met poortdoorverwijzing aan de slag moet.
De configuratie is vrij eenvoudig: selecteer Bridged adapter en kies daarna de gewenste fysieke netwerkadapter op je host.
©PXimport
07 Host-only adapter
Wil je je host toegang geven tot je virtuele machines en moeten die ook onderling met elkaar kunnen praten, dan biedt VirtualBox daarvoor de functie Host-only adapter. Communiceren met externe systemen is dan niet zonder meer mogelijk, aangezien je VM’s in dit geval niet zijn verbonden met een fysieke netwerkinterface. Wel wordt op de host een zogenoemde loopback-interface gecreëerd.
Deze setup zie je wel vaker opduiken bij vooraf geconfigureerde OVA-appliances waarbij de verschillende VM’s met elkaar moeten kunnen communiceren, zoals een webserver en een database. Wil je de webserver toch ook bereikbaar maken via internet, dan zou je hiervoor eventueel nog een bridged adapter kunnen instellen, zodat je database veilig afgeschermd blijft.
De configuratie vergt net iets meer werk. Eerst moet je namelijk een geschikte host-only adapter instellen. Scrol in je VM-lijst helemaal naar boven, kies Tools, klik op het menuknopje (met de drie streepjes) en selecteer Netwerk. Klik eventueel op Aanmaken en bevestig met Ja. Selecteer de adapter en vul het gewenste ip-adres en netwerkmasker in. Open het tabblad DHCP-server en plaats eventueel een vinkje bij Server inschakelen, waarna je de velden Serveradres, Servermasker, Laagste adres en Hoogste adres instelt. Bevestig met Toepassen. Tot slot open je Instellingen / Netwerk van je VM, kies je Gekoppeld aan: Host-only adapter en selecteer je de juiste adapter in het uitklapmenu.
©PXimport
08 NAT-netwerk
Wil je dat je virtuele machines onderling kunnen communiceren en ook het externe netwerk kunnen bereiken, dan koppel je best een NAT-service aan een intern netwerk, waar je vervolgens alle gewenste VM’s aan koppelt.
Denk bijvoorbeeld aan een scenario met een pentesting-appliance (penetration testing) als Kali Linux. We kunnen ons voorstellen dat je deze in zo’n NAT-netwerk wilt onderbrengen, samen met de VM’s die je als doelwit voor deze pentester wilt gebruiken.
Je maakt zo’n NAT-netwerk als volgt. Open het menu Bestand en kies Voorkeuren / Netwerk. Druk op het groene plusknopje en vervolgens op het oranje knopje Bewerk geselecteerd NAT-netwerk. Vul de velden Netwerknaam en Netwerk-CIDR in (bijvoorbeeld 192.168.1.0/24 voor het veld Netwerk-CIDR). Wellicht wil je het vinkje bij Ondersteunt DHCP laten staan. Onderaan in het venster staat de knop Poortdoorverwijzing. Zorg dat er een vinkje staat bij Inschakelen netwerk en bevestig met OK.
Vervolgens open je de netwerkinstellingen van je VM, waar je Gekoppeld aan: NAT-netwerk selecteert en in het uitklapmenu het zojuist aangemaakte NAT-netwerk aanduidt. Herhaal dit voor de virtuele machines die je aan ditzelfde netwerk wilt koppelen.
©PXimport