Lees je VPN-log voordat je hem verstuurt: veld voor veld
Supportlogs bevatten gebruikersnamen, certificaatnamen, interne adressen en soms een sleutel. Loop de velden door, zoek naar geheimen en stuur dan een geredigeerd uittreksel.
Je opent een supportticket, voegt de diagnostische export toe die de client heeft gemaakt, en wacht. Het bestand bevat waarschijnlijk helemaal geen browsegeschiedenis, en dat is precies wat het veilig laat voelen. Het bevat nog steeds wie je bent, welke machine je gebruikte, welke interne adressen je wanneer bereikte, en soms een privésleutel die is gekopieerd door een client die zijn configuratie logt. Het bestand doornemen voordat je het verstuurt kost ongeveer vijf minuten en voorkomt een permanente onthulling.
Open het en lees de eerste veertig regels
Begin bovenaan, waar clients gewoonlijk versie, platform en configuratie uitstorten. De eerste regels vertellen hoe uitgebreid het bestand is, en dat bepaalt hoeveel van de rest je moet aanpakken. Een standaardlog en een foutopsporingslog zijn verschillende artefacten met een verschillende blootstelling.
head -n 40 vpn-support.log
sed -n '1,40p' vpn-support.log | grep -nE 'version|platform|config|option'
Controleer ook de grootte en vorm van het bestand voordat je er iets van leest. Een tekstbestand van twee megabyte met één herhaalde gebeurtenis is gemakkelijk in te korten. Een binaire opname in dezelfde map is een heel ander probleem, en vraagt een ander gesprek met degene die de export opvroeg.
Op Windows zijn de equivalenten elk één cmdlet, en de eerste is de moeite waard op elk bestand dat je niet zelf hebt gemaakt:
Get-Content .\vpn-support.txt -TotalCount 40
Get-Item .\vpn-support.txt | Select-Object Length,LastWriteTime
De velden die een persoon identificeren
Gebruikersnamen duiken op plaatsen waar mensen ze niet verwachten: het account dat voor authenticatie wordt gebruikt, het certificaatonderwerp, het profielpad onder een thuismap, en de machinenaam die vaak een echte naam codeert. Een log dat het accountveld redigeert en het thuispad intact laat, heeft niets geredigeerd.
| Field | What it identifies | Practical treatment |
|---|---|---|
| Account or username | A person, and often an employer | Replace consistently, keep the mapping |
| Certificate subject and CN | Device or user identity | Keep the structure, replace the value |
| Home directory path | A login name, sometimes a full name | Replace the segment, not the whole path |
| Machine or hostname | A person or a physical location | Replace with a stable pseudonym |
Consistentie is belangrijker dan volledigheid wanneer een supportengineer één sessie door het bestand moet volgen. Vervang waarden door stabiele labels in plaats van ze te verwijderen, zodat elk voorkomen van dezelfde gebruiker nog steeds als dezelfde gebruiker leest. Het veld helemaal verwijderen breekt de draad die de engineer nodig heeft en maakt het bestand niet veiliger.
Een tijdstempel is in samenhang ook persoonsgegeven. De tijden waarop een account verbond, over een maand genomen, beschrijven werktijden en reizen. Als de vraag niet het volledige bereik nodig heeft, snijd het bestand dan bij tot het venster rond de gebeurtenis.
De velden die een netwerk identificeren
Eindpuntadressen, interne routes en gepushte opties beschrijven de vorm van een privénetwerk. Dat is precies de informatie die een aanvaller graag zou hebben, en die staat er meestal veel gedetailleerder in dan het ticket nodig heeft.
Zoek naar de adresfamilie die in gebruik is, niet alleen naar de familie die je verwachtte. Een dual-stackclient kan een IPv6-eindpunt en een reeks IPv6-routes loggen waar niemand aan dacht ze te redigeren, omdat de controle alleen naar gestippelde viertallen zocht.
grep -nEo '([0-9]{1,3}\.){3}[0-9]{1,3}' vpn-support.log | sort -u | head -n 40
grep -nEo '([0-9a-fA-F]{0,4}:){2,7}[0-9a-fA-F]{0,4}' vpn-support.log | sort -u | head -n 20
De unieke lijst is het punt. Die vertelt hoeveel verschillende adressen het bestand noemt, en dat is meestal veel minder dan het voelt tijdens het scrollen. Hij geeft je ook een checklist om tegen te redigeren en een manier om te bewijzen dat je ze allemaal hebt gedekt. Tien adressen is een klus van vijf minuten, en honderd zeggen je dat de export breder is dan de vraag.
Bewaar de topologie als de engineer die nodig heeft. Het tweede en derde octet vervangen terwijl de subnetrelaties behouden blijven, beantwoordt de vraag zonder het bereik te publiceren. Dezelfde truc werkt voor IPv6-prefixen. Wat de engineer nodig heeft is de vorm van de storing, en de vorm overleeft een consistente vervanging.
Geheimen schuilen in vormen, niet in labels
Een privésleutel heeft het woord “password” niet in de buurt nodig. Hij verschijnt als een blok tussen markeringsregels, als een lange base64-string of als een inline configuratiedump. Tokens verschijnen als queryparameters, en inloggegevens verschijnen in URL’s die een client woordelijk heeft gelogd.
grep -nE 'BEGIN [A-Z ]*PRIVATE KEY|password|passwd|token|secret|psk|auth-user-pass' vpn-support.log
grep -nE 'https?://[^ ]*:[^ ]*@' vpn-support.log
Het tweede patroon is degene die mensen vergeten. Een URL van de vorm schema, gebruiker, wachtwoord, host is een volledige inloggegevens, en clients loggen zulke URL’s telkens wanneer een proxy of feed met inline authenticatie is geconfigureerd.
Verstuur nooit het originele bestand als bewijs dat je het niet hebt bewerkt. Als een beheerder aandringt op een ongewijzigde export, vraag waarvoor die nodig is, stuur hem via hun geverifieerde supportkanaal en verwijder daarna je lokale kopie. Dat verzoek is legitiem; een openbare plak is dat niet.
Bouw de geredigeerde kopie en stuur het uittreksel
Werk op een kopie, bewaar het origineel op een beschermde plek en redigeer met een herhaalbaar commando in plaats van met de hand. Eén doorgang over de adrespatronen vangt het meeste ervan:
cp vpn-support.log vpn-support.original.log
sed -E 's/([0-9]{1,3}\.){3}[0-9]{1,3}/ADDR/g; s/[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+/USER@DOMAIN/g' \
vpn-support.original.log > vpn-support.redacted.log
grep -cE 'PRIVATE KEY|password|token' vpn-support.redacted.log
De uiteindelijke telling moet nul zijn. Is dat niet zo, dan heeft de redactiedoorloop een vorm gemist en moet je naar die regels kijken voordat je iets verstuurt. Lees het geredigeerde bestand ook één keer met je eigen ogen; een script vangt patronen, geen context.
Stuur het kleinste uittreksel dat de storing nog toont. Tien regels rond de fout zijn meestal genoeg, en ze zijn veel gemakkelijker te controleren dan een bestand van twee megabyte. Bewaar daarna de koppeling tussen je labels en de echte waarden op een plek die je beheert, want de vervolgvraag zal die nodig hebben.
De OpenVPN-documentatie over loggen beschrijft hoe detailniveaus veranderen wat er wordt vastgelegd, wat nuttige context is om te bepalen hoeveel van het bestand het probleem echt nodig heeft.