JB-RPINM – Jarno’s Raspberry Pi Network Meter 1/2
Het is alweer even geleden dat we een Raspberry Pi project gedaan hebben. Soms heb je even nodig voordat je een goede reden gevonden hebt om je Raspberry Pi’s af te stoffen en te gebruiken. Dit project vind zijn basis bij de Shark Jack van Hak5. Een leuke tool maar wat mij betreft niet veelzijdig genoeg. Ik wil graag een RJ45 female connector zodat ik er ook een kabel in kan pluggen. En ik wil graag meer informatie omtrent het netwerk krijgen i.p.v. alleen het feit of ik netwerktoegang heb. En weet je wat, ik wil het ook allemaal live kunnen zien. Al met al beginnen mijn wensen de vorm aan te nemen van een € 2000 – € 5000 netwerk tester zoals de Netscout apparaten. De Netscout AirCheck G2 doet mooie dingen met het WiFi. Ook leuk. En welk apparaat heeft zowel ethernet als WiFi? Juist, een Raspberry Pi. Kunnen we dan misschien een geavanceerde netwerkmeter maken van een Raspberry Pi? Nou, laten we zien hoe ver we komen. Ik noem het project (in deze beta fase) de JB-RPINM ofwel, Jarno’s Raspberry Pi Network Meter.
De JB-RPINM is dus geen pentest tool maar louter en alleen een informatie tool. De JB-PINM wordt speciaal ontwikkeld voor security researchers en systeembeheerders die snel meer informatie over het netwerk willen krijgen ongeacht of we het hebben over een bekabeld of draadloos netwerk.
De basis voor dit project is een Raspberry Pi. Hierop zullen we verschillende tools draaien die dit inzicht simpel via een duidelijke GUI kunnen verschaffen. Uiteraard is de Raspberry Pi ook inzetbaar voor andere doeleinden mocht je de netwerk meter ooit niet meer nodig hebben. Dit project is een prachtig voorbeeld om mijn nieuwe Raspberry Pi 4B in te zetten. De Raspberry Pi 4B (er is geen A) kent verschillende systeem upgrades t.o.v. de Raspberry Pi 3B+.
- Snellere processor, Broadcom BCM2711, Quad-core Cortex-A72 (ARM v8) 64-bit 1.5GHz VS Broadcom BCM2837B0, Quad-core Cortex-A53 (ARMv8) 64-bit 1.4GHz
- Meer geheugen, 1, 2 of 4 GB LPDDR4 RAM VS 1GB LPDDR2 RAM
- Sneller ethernet, Gigabit Ethernet (1000Mbps troughput) VS Gigabit Ethernet over USB 2.0 (maximum throughput 300Mbps)
- Nieuwere bluetooth, Bluetooth 5, BLE VS Bluetooth 4.2, BLE
- Andere power vereisten, 5V DC via USB-C connector (minimum 3A*) VS 5V/2.5A DC micro-USB connector
- Snellere videoprocessor, 500 MHz VideoCore VI VS 400 MHz VideoCore IV
Al met al is de Raspberry Pi 4B dus een flinke verbetering t.o.v. de Raspberry Pi 3B+ en dat dat hebben we voor dit project wel nodig. Gedurende dit project werk ik met een Raspberry Pi 4B – 4GB variant. De belangrijkste reden om voor de Raspberry Pi 4B te kiezen is dat de ethernet aansluiting nu ook werkelijk 1Gbps kan verwerken i.p.v. maximaal 300Mbps. Dit zorgt ervoor dat de JB-RPINM ook in moderne netwerken gebruikt kan worden.
Nu we de Raspberry Pi verkozen hebben als “computer” om de techniek te bouwen en deze procesmatig te verwerken hebben we nog wat andere hardware nodig om er een totale netwerkmeter van te kunnen maken.
- LCD Display (touchscreen) – We willen immers resultaten kunnen bekijken en programma’s kunnen activeren.
- PowerBank – We willen graag draadloos gebruik kunnen maken van het apparaat.
- Behuizing – Om ervoor te zorgen dat alles een beetje netter en een beetje veiliger verpakt zit.
- Gewone Raspberry Pi zaken zoals een adapter, micro HDMI kabel of verloopplug en een 16GB Micro SD kaart.
De volgende hardware hebben we gekozen:
- LCD Touchscreen – Element 14 Raspberry Pi 7” Touchscreen Display – 10 finger capacitive touch.
- Powerbank – Anker PowerCore+ 26800 PD – 5V/3A output (0848061063516)
- Behuizing – Multicomp Pro ASM-1900147-11 White
De behuizing op de foto is de “Officiele Raspberry Pi 4 Behuizing – Rood/Wit” maar deze hebben we niet nodig voor dit project. Ook de PiJuice, waarmee je de Raspberry Pi draadloos kunt gebruiken doordat je er een accupack op bevestigd hebben we niet nodig. Het scherm stuurt namelijk de Raspberry Pi aan en niet andersom zoals normaliter het geval is. Omdat het scherm dus fungeert als stroombron kan de PiJuice ons niet helpen en zijn we afhankelijk van een afdoende powerbank zoals de Anker PowerCore+ 26800 PD.
Laten we ook even kijken aan welke eisen de JB-RPINM minimaal moet voldoen. Alle extra’s die we er later bijmaken zijn mooi meegenomen, maar we hebben wel een goed uitgangspunt nodig.
- Keuze tussen interface (ethernet of WiFi)
- Dashboard toont o.a.: Normale IP settings, internet toegang, link speed, POE informatie (ethernet)
- Bij Ethernet extra programma’s zoals VLAN informatie, switch informatie (connected ports)
- Bij WiFi extra WiFi informatie zoals verschillende SSID’s, kanaalsterkte, drukte op de kanalen
- Applicaties voor zowel ethernet als WiFi zoals een speedtest, throughput test (iPerf basis)
- Extra programma’s zoals b.v.: Packet Capture, Kismet en Wireshark
Bovenstaande opties moeten een snel beeld geven van de huidige netwerkstatus met als extra mogelijkheid het starten van andere apps om nog meer specifieke informatie te verzamelen. De workflow is als volgt:
- Systeem boot in GUI based application
- Applicatie is standaard ingesteld op Ethernet maar je kunt switchen naar WiFi waar je weer andere mogelijkheden en informatie krijgt welke toegespitst zijn op WiFi.
- Je kunt verbinden met WiFi om meer informatie over dat specifieke netwerk te leren (internet connectiviteit / IP gegevens etc.). Maar zolang je niet verbonden bent staat WiFi in “Monitoring Mode” om het WiFi landschap in zijn geheel te kunnen scannen.
- De interface geeft toegang tot de diverse apps zoals WireShark.
- De interface laat ook een bandbreedte grafiek zien.
- Het systeem kan vanuit de GUI weer uitgeschakeld worden.
Dus zoiets:
Maar zover zijn we nog niet. Laten we eerst de hardware eens in elkaar zetten.
JB-RPINM Hardware Assemblage
Het in elkaar zetten van de hardware is geen “rocket science”. Het 7 inch display wordt geleverd met een reeds gemonteerde hat. Het is zaak om de GPIO pinnen van de Raspberry Pi 4B te verbinden met de pinnen op de hat. Vervolgens moeten de juiste jumper wires en de DSI kabel aangesloten worden. De DSI (Display Serial Interface) kabel zorgt voor de beeldoverdracht en de jumperwires zorgen voor de overdracht van stroom (5V & Ground), touch signalen (SDA / Serial Data) en synchronisatie tussen de Raspberry Pi en het display (SCL / Serial CLock).
Allereerst verbinden we de jumper wires met de pinnen op de hat van het 7 inch display:
Vervolgens verbinden we de DSI kabel:
Nu is het tijd om de Raspberry Pi 4B erop te schroeven en de DSI kabel te verbinden.
Nu is het zaak om de jumper wires met de juiste GPIO pinnen te verbinden.
Nu de Raspberry Pi volledig bevestigd en aangesloten is kunnen we het geheel wegwerken in de speciale case.
Zoals je ziet moeten alle aansluitingen gewoon bruikbaar zijn:
Wat opvalt is dat na het aansluiten van alle kabels het beeld gedraaid is:
Binnen Raspbian kunnen we dit gemakkelijk aanpassen door via “Voorkeuren” – “Screen Configuration” het DSI scherm 180 graden te draaien.
Echter is hiermee alleen het beeld correct gedraaid, maar qua touch niet. Dus om linksboven iets te activeren, b.v. het menu moet je rechtsonder op het scherm drukken. Om dit op te lossen moeten we display rotation terugzetten naar default en aanpassen via de config.txt file.
cd /boot sudo cp config.txt configORIGINAL.txt sudo nano config.txt |
Hier voeren we de volgende regel aan toe:
lcd_rotate=2 |
Vervolgens reboot je de Raspberry en is zowel je scherm als je touch correct ingesteld. Of we echter Raspbian gaan gebruiken als OS is nog maar zeer de vraag. Let’s take a moment to reconsider.
Keuze voor een OS
Nu de hardware gereed is wordt het tijd om een OS te kiezen. Waarom? Simpel… omdat ik geen kennis en tijd heb om een OS zelf te maken en compilen. Wie weet is dit ooit een prachtige uitdaging maar op dit moment kies ik liever voor een bestaand OS waar al goed over nagedacht is. Belangrijk is dat het OS snel start en het project kan draaien. Raspbian is do logische keuze omdat dit het default OS is van Raspberry. Alle tools zijn aanwezig en het OS biedt veel mogelijkheden. De boot-tijd is echter ook aan de lange kant.
Minibian is Raspbian maar dan zonder de GUI en overbodige software. Met Minibian heb je echter wel toegang tot dezelfde resources als bij Raspbian en is dus goed naar je eigen hand te zetten. Echter is op dit moment Minibian wordt gemaakt door vrijwilligers en is momenteel nog niet klaar voor de Raspberry Pi 4B.
De volgende keuze is OpenWRT of Alpine. Alpine is klein en lijkt prima aan onze behoeftes te kunnen voldoen maar levert wat problemen op met software van derde. App management is veel manueel werk. OpenWRT is ontzettend snel maar helaas ook nog niet beschikbaar voor de Raspberry Pi 4B.
Gentoo is in deze ook een prima keuze maar nogal intensief alvorens het werkt en de benodigde software draait. Al met al lijkt Raspbian toch de makkelijkste keuze. Helaas vind ik dat de boottijden een beetje tegenvallen. Om Raspbian volledig te booten kost 40 seconden. Dit is op zich geen ramp maar ik zou willen streven naar 20 seconden of minder. Nu kunnen we de Raspberry Pi overklokken of de software laden v.a. een externe USB drive maar dat wil ik hier niet doen. Laten we dus kijken hoe snel de boottijden zijn van Raspbian Buster Lite (zonder GUI en bloatware en dus een beetje vergelijkbaar met Minibian).
Raspbian Buster Lite lijkt het echter met een boottijd van 42 seconde helemaal niets beter te doen dan Raspbian met een GUI. Laten we eens kijken hoe het Kali Sticky Fingers OS performt. Dit OS hebben we al eens eerder gebruikt in een project (https://jarnobaselier.nl/wifi-jammer-met-raspberri-pi-en-kali-pi-sticky-fingers-1-3/) en beviel erg goed. Kali Linux bevat een aantal tools welke we later toch nodig hebben. Helaas krijg ik na veel testen Sticky Fingers niet werkend op het 7 inch scherm. De configuratie zou simpel moeten zijn. Het “menu” script in “” zou als volgt aangepast moeten worden.
Helaas werkt dit niet. Dus nadat de basis ingesteld is gaan we op zoek naar een alternatief. Na wat afwegingen kiezen we voor de default Kali – https://www.offensive-security.com/kali-linux-arm-images/.
JB-RPINM Basis Instellingen
Eerst is het zaak om de juiste basisinstellingen op het Kali systeem juist te plaatsen. Zo gaan we SSH inschakelen. Maak een reservering in je DHCP (zodat de Raspberry Pi altijd hetzelfde IP adres krijgt en je makkelijk kunt verbinden).
Laten we voor het gemak een raspi-config like configuratiescherm installeren zodat we de belangrijkste settings kunnen instellen. De installatie van kalipi-config gaat als volgt:
apt install whiptail parted lua5.1 alsa-utils psmisc libraspberrypi0 libraspberrypi-dev libraspberrypi-doc libraspberrypi-bin wget -O /usr/local/bin/kalipi-config https://raw.githubusercontent.com/Re4son/RPi-Tweaks/master/kalipi-config/kalipi-config chmod 755 /usr/local/bin/kalipi-config |
Nu gaan we het configuratiescherm opstarten en de volgende aanpassingen maken (kalipi-config):
01 – Change User Password = Verander je default user credentials. De default credentials zijn: root=toor pi=raspberry ftp=raspberry vnc=toortoor 02 – Network Options N1 – Hostname = JB-RPINM 03 – Boot options B1 – Desktop/CLI = Boot in Desktop (GUI) met autologin (we gaan voor het gemak en de kracht van de Linux X drivers). 04 – Localisation Options I2 – Change Timezone = Europe / Amsterdam I4 – Change WiFi Country = NL / Netherlands 05 – Interfacing Options P2 – SSH = Enable 07 – Advanced options A1 = Expand Filesystem = Uitvoeren 09 – Update = Uitvoeren |
Vervolgens verlaten we het configuratiescherm en voeren we nogmaals een update uit:
apt-get update |
Nu gaan we het beeldscherm installen. Het default touchscreen werkt goed maar
kalipi-tft-config Kies voor – 01 – Setup Display en kies voor “S110 – Raspberri Pi touchscreen”. Selecteer het scherm en kies ervoor om deze 180 graden (ROT180) te roteren zodat het scherm recht staat. Nu kies je nog voor optie 04 – Update overlays en na de update reboot je de Raspberri Pi. |
Het 7 inch LCD scherm is nu recht. Wil je de output sturen naar een HDMI poort dan moet je diverse aanpassingen maken in de boot config.txt file. Deze aanpassingen verschillen per type aangesloten HDMI monitor.
mount /dev/mmcblk0p1 /boot cd /boot nano config.txt |
Nu gaan we de netwerk manager (GUI) installeren:
apt-get install network-manager |
En nu gaan we ervoor zorgen dat de network manager onze interfaces kan beheren:
nano /etc/NetworkManager/NetworkManager.conf |
Verander “managed=false” naar “managed=true” en reboot de network manager:
service network-manager restart |
Wat ook handig is, is een goede tekst editor. We installeren hiervoor Geany:
apt-get install geany |
Tot zover de basisinstellingen. In post 2 gaan we verder met het programmeren van de JB-RPINM!