Communities und Passwörter verstecken

„Schick mir bitte mal die Config“. Kennen wir sicherlich alle. Das Problem ist nur: Was mach ich mit den Passwörtern und SNMP-Communities?
Die IP-Adressen und Port-Konfigurationen sind ja nix spektakuläres, das kann ruhig jeder sehen. Mit den Passwörtern ist das schon was anderes. Von Hand raus werfen find ich persönlich immer anstrengend und außerdem ist mir das zu fehleranfällig. Meine Variante, und wer hätte das gedacht, ist ein SED-Einzeiler:

sed -re 's/(password 7|key.* 7|secret 5|community) ([[:graph:]]+)(.*)/\1\<hidden\>\3/g'
Wie funktioniert das Ganze? Zuerst mal lasse ich SED mit -re im „Erweiterten RegEx-Modus“ laufen, damit kann man einfach flexibler suchen. Dann suche ich mit (password 7|key.* 7|secret 5|community) nach allen Zeilen die folgende Zeichenketten enthalten:

  • "password 7" – Also ein Cisco 7-Passwort.
  • "key.*7" – Das passt auf key 7 genau so wie auf key-string 7. Die Keys sind in der Regel auch immer ein Cisco 7-Passwort.
  • "secret 5" – Gesalzene MD5-Hashes
  • "community" – Klar, SNMP-Communities

Und weil ich das ganze in runde Klammern eingepackt habe, speichert SED alles was darauf passt in seinem ersten RegEx-Speicher. Den brauche ich gleich wieder. Als zweites kommt das eigentliche Passwort. Das kann aber ein normales Wort, oder ein Hex-String sein. Um das am Einfachsten zu finden, hab ich hier die vordefinierte Zeichenklasse [[:graph:]] benutzt. Die enthält alle Buchstaben und Satzzeichen, aber zum Beispiel keine Leerzeichen oder Tabs. Auch hier wieder: Der Ausdruck steht in runden Klammern, ab in den RegEx-Speicher Nummer 2.

Als letztes suche ich nach allem, das noch hinter dem Passwort steht. Dafür benutze ich einen ganz einfachen Ausdruck (.*). Das bedeutet nix anderes als „Hier kann alles kommen, muss aber nicht“. Sollte was drinstehen kommt das in RegEx-Speicher 3.

Jetzt kümmere ich mich mal um die Ausgabe. Im zweiten Teil kommen nämlich unsere RegEx-Speicher bei \1 \<hidden\>\3 wieder ins Spiel. Hier gebe ich den Inhalt des ersten Speichers mit \1, ein Leerzeichen, dann die Zeichenkette <hidden> und am Schluss den Inhalt des dritten RegEx-Speichers mit \3 aus.Den Speicherinhalt Nummer 2 ignoriere ich einfach, denn das wäre ja das Passwort und das soll ja weg.

Nicht wundern: Die Größer-/Kleiner-Zeichen müssen mit einem Backslash kommentiert werden, um die Shell nicht zu irritieren.

Und so sieht das ganze dann in Aktion aus. Ich hab bewusst nur mal die Zeilen kopiert, die SED überhaupt ändert, die Original-Konfiguration ist ziemlich lang.

$ cat S3-config | sed -re 's/(password 7|key.* 7|secret 5|community)
([[:graph:]]+)(.*)/\1 \<hidden\>\3/g' | grep hidden
enable secret 5 <hidden>
username admin privilege 15 secret 5 <hidden>
server-private 10.1.6.11 key 7 <hidden>
server-private 10.1.6.12 key 7 <hidden>
ip ftp password 7 <hidden>
ip ospf message-digest-key 1 md5 7 <hidden>
ip ospf message-digest-key 1 md5 7 <hidden>
standby 2 authentication md5 key-string 7 <hidden>
standby 3 authentication md5 key-string 7 <hidden>
standby 13 authentication md5 key-string 7 <hidden>
standby 17 authentication md5 key-string 7 <hidden>
standby 18 authentication md5 key-string 7 <hidden>
standby 19 authentication md5 key-string 7 <hidden>
standby 20 authentication md5 key-string 7 <hidden>
standby 21 authentication md5 key-string 7 <hidden>
ip ospf message-digest-key 1 md5 7 <hidden>
standby 22 authentication md5 key-string 7 <hidden>
standby 50 authentication md5 key-string 7 <hidden>
snmp-server community <hidden> RO MGMT-STATIONS
password 7 <hidden>

Jetzt kann ich die Ausgabe gefahrlos in eine Email einpacken und verschicken, ohne mit darüber Gedanken machen zu müssen, ob jemand die Mail mit liest. Alle wichtigen Infos sind jetzt draussen.

Übrigens: Man bekommt den Output auch direkt in die Zwischenablage wenn man die Ausgabe durch clip schickt. Unter MacOS X heisst das pbcopy, das macht aber das gleiche.

Ich hoffe der Tip hat dir ein bisschen weiter geholfen. Wenn du etwas ähnliches geschrieben hast, oder du einen Verbesserungsvorschlag hast, lass es mich in den Kommentaren wissen!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

*