Escape-Zeichen in / etc / network / interfaces

8

Ich möchte sicher sein , dass alles , was Zeichenfolge ich in die Leitung passieren wpa-ssid "abc"in /etc/network/interfacesnicht zu brechen aus der Konfiguration verwendet werden.

Alles, was ich im Handbuch finden kann, ist, \dass es am Ende einer Zeile verwendet werden kann, um mit der nächsten Zeile fortzufahren.

Aber was ist mit \"mitten in einer Zeile?

Meine Sorge ist so etwas wie eine SSID

A"
up rm -rf /\

Gibt es eine allgemeine Codierung, die für beliebige Zeichen im SSID-Feld verwendet werden kann?

hultqvist
quelle

Antworten:

5

In Debians /etc/network/interfaces(oder einer anderen Distribution, die das ifupdown-Dienstprogramm von Debian verwendet) wird eine Backslash-Newline-Sequenz entfernt, und Backslash ist nirgendwo anders etwas Besonderes. Ein doppeltes Anführungszeichen ist ebenfalls nichts Besonderes. Das Zeichen #beginnt einen Kommentar, wenn es das erste Nicht-Leerzeichen in einer Zeile (ohne Fortsetzung) ist. Null-Bytes werden als Zeilenumbruchzeichen behandelt (ich denke, der Parser verwendet C-Zeichenfolgen und hat keine spezielle Behandlung für Null-Bytes, sodass sie möglicherweise zusätzlichen Schaden anrichten).

Konfigurationszeilen haben die Form eines Optionsnamens, gefolgt von einem durch Leerzeichen getrennten Wert. Führende und nachfolgende Leerzeichen werden ignoriert. Einige integrierte Optionen analysieren die Zeile weiter in Wörter. Der Wert der Optionen ifaceläuft immer bis zum Ende der Zeile.

Zum Beispiel die Linie

wpa-ssid  "a  b"  "cd"  

Setzt die Option wpa-ssidauf die 12-stellige Zeichenfolge "a  b"  "cd"(das interne Leerzeichen bleibt erhalten).

Das ifupdown-Skript von WPA Supplicant entfernt doppelte Anführungszeichen am Anfang und am Ende der wpa-ssidKonfigurationszeichenfolge. Die obige Zeile entspricht wpa-ssid a  b"  "cd. Auf diese Weise können Sie führende und nachfolgende Leerzeichen in der SSID haben.

Ich kann in den ifupdown-Skripten von WPA Supplicant kein Angebotsproblem finden. Es sieht also so aus, als ob alles, was ifupdown erzeugt, sicher ist.

Auf diese Weise können Sie zulassen, dass eine beliebige Zeichenfolge als SSID /etc/network/interfaceseingefügt wird , sofern sie keine Zeilenumbrüche oder Nullbytes enthält. Fügen Sie um die Zeichenfolge doppelte Anführungszeichen hinzu (wenn Sie dies nicht tun, werden SSIDs mit führenden oder nachfolgenden Leerzeichen oder solche, die mit enden \oder mit beginnen oder enden ", entstellt).

Gilles 'SO - hör auf böse zu sein'
quelle
Eigentlich habe ich es erfolgreich versucht wpa-ssid my ssid.
Hultqvist
@phq - um klar zu sein, konnten Sie die Leitung benutzen wpa-ssid=my ssid?
slm
@slm nein, /etc/network/interfaceswird nicht =in seiner Syntax verwendet, ich habe es gerade versucht und es funktioniert nicht mit =.
Hultqvist
@phq - aber bis zu Ihrem Punkt konnten Sie ihm dann eine SSID mit Leerzeichen geben? my ssid?
slm
@slm ja SSID mit Leerzeichen hat immer funktioniert
hultqvist
0

Diese SO Q & A mit dem Titel: Gibt es einen Standard, der definiert, was eine gültige SSID und ein gültiges Passwort sind? beantwortet einige Ihrer Fragen.

Auszug

In Abschnitt 7.3.2.1 der 802.11-2007-Spezifikation ( http://standards.ieee.org/getieee802/download/802.11-2007.pdf ) werden SSIDs definiert.

Eine gültige SSID ist 0-32 Oktette mit beliebigen Inhalten. Eine SSID mit der Länge 0 gibt die Platzhalter-SSID an (z. B. in Testanforderungsrahmen).

Der SSID ist kein Zeichensatz zugeordnet - eine 32-Byte-Zeichenfolge aus NUL-Bytes ist eine gültige SSID.

Dies impliziert:

  • Sie sollten niemals normale Zeichenfolgenfunktionen verwenden, wenn Sie generische SSIDs (strcpy () und Freunde) bearbeiten.
  • Sie sollten nicht davon ausgehen, dass die SSID druckbar ist, wenn Sie sie beispielsweise auf der Festplatte protokollieren

Es gibt auch diesen Kommentar zur Antwort auf die SO-Frage:

Es gibt eine aktualisierte Version des Standards ( http://standards.ieee.org/getieee802/download/802.11-2012.pdf ), die das SSIDEncodingFeld definiert . Es kann sein UNSPECIFIED(für beliebige Daten) oder UTF8.

Daher würde ich mich an den neuesten Standard halten und sicherstellen, dass Sie sich mit den rechtlichen Bestimmungen befassen können.

Was sonst?

Außerdem könnte ich geneigt sein, mich selbst zu schützen, indem ich die Eingaben eines Benutzers mithilfe einer URL-Codierungsfunktion normalisiere (was offensichtlich mit SSIDs funktionieren würde) oder einfach unzulässige Zeichen streife und sie einfach nicht zulasse, bevor diese Zeichenfolgen in diese Datei geschrieben werden .

Seltsame Charaktere?

Die einzigen Probleme, die ich mit seltsamen / speziellen Zeichen im Zusammenhang mit der interfacesDatei finden konnte, waren diese Arten von Fehlern, die gegen den Debian-Installer eingereicht wurden.

debian-installer hat nach meinen Informationen zum drahtlosen Netzwerk gefragt und diese erfolgreich verwendet, um eine drahtlose Verbindung zum Netzwerk herzustellen. Außerdem wurden meine Informationen zu drahtlosen Netzwerken in / etc / network / interfaces geschrieben. Der von mir eingegebene WPA-Schlüssel enthielt jedoch mindestens ein Sonderzeichen, und das Debian-Installationsprogramm hat die Sonderzeichen in / etc / network / interfaces nicht maskiert oder zitiert. Das Ergebnis war, dass das System beim Neustart während des Startvorgangs sehr lange hängen blieb, als es (erfolglos) versuchte, erneut eine Verbindung zum drahtlosen Netzwerk herzustellen. Ich habe das Problem behoben, indem ich einfach den in / etc / network / interfaces aufgeführten WPA-Schlüssel zitiert habe. Dies sollte automatisch geschehen, wenn der Schlüssel Sonderzeichen enthält.

Es gab auch diese Fehler, einer in Bezug auf Leerzeichen innerhalb der SSID, der andere in Bezug auf die Passphrase:

In beiden Fällen scheint es ausreichend zu sein, die Zeichenfolgen in doppelte Anführungszeichen zu setzen, um die Werte für beide zu schützen.

Zusätzliche Beispiele

Offizielle Dokumente

Beim Durchstöbern der offiziellen Dokumentation habe ich dieses Bit hier gefunden:

Die offiziellen Dokumente zeigen dieses Beispiel:

ap_scan=2
network={
        ssid="test adhoc"
        mode=1
        frequency=2412
        proto=WPA
        key_mgmt=WPA-NONE
        pairwise=NONE
        group=TKIP
        psk="passphrase"
}

Es scheint also, dass Leerzeichen zulässig sind, solange sie korrekt zitiert werden. Außerdem gibt es dieses Beispiel, in dem erläutert wird, wie eine SSID Leerzeichen für das iwconfigTool bereitgestellt wird:

Fügen Sie den Namen (ssid) für das Netzwerk hinzu, das Sie erstellen / beitreten möchten. Verwenden Sie einfache Anführungszeichen, wenn der Name ein Leerzeichen enthält.

   $ sudo iwconfig eth1 essid 'name'

Webconverger

Ich habe dieses Beispiel gefunden, das unter der Haube Debian zu sein scheint, daher mag das Beispiel Ihrer Situation angemessen sein, aber es ist schwer sicher zu sagen. Ich spreche es nur an, weil es ein Beispiel dafür zeigt, wie ich erwartet hätte, dass eine URI-Codierungsmethode zum Schutz vor illegalen Zeichen verfügbar gemacht wird.

Auszug

Beispiel 4 "Spaces in the ESSID", das essid 'Hopstock Gjestenett' mit dem WPA-Schlüssel uiopzxcv sendet

Bitte vermeiden Sie Leerzeichen in ESSIDs. In diesem Fall umgehen wir mit einem encodeURI ('Hopstock Gjestenett'), um das folgende Boot-Rezept zu erhalten:

   wpa-ssid=Hopstock%20Gjestenett wpa-psk=uiopzxcv

So können Sie möglicherweise die Leerzeichen codieren, die in SSIDs angezeigt werden %20.

SSIDs

Als ich noch tiefer grub, fand ich diesen Kommentar von der Wikipedia-Seite auf Service Set (802.11-Netzwerk) .

Jedes BSS oder ESS wird durch eine Service Set Identifier (SSID) identifiziert - eine 1 bis 32-Byte-Zeichenfolge. Dies ist normalerweise eine für Menschen lesbare Zeichenfolge und wird daher üblicherweise als "Netzwerkname" bezeichnet. 6 In einem IBSS wird die SSID vom Clientgerät ausgewählt, das das Netzwerk startet, und die Übertragung der SSID wird von allen Geräten, die Mitglieder des Netzwerks sind, in einer pseudozufälligen Reihenfolge ausgeführt.

Dieser Kommentar wird durch diese Präsentation von Blackhat EU 2013 mit dem Titel: Praktische Nutzung unter Verwendung einer SSID (Malicious Service Set Identifier) ​​untermauert .

Auszug

  • Keine definierten Einschränkungen hinsichtlich der Verwendung von Zeichen innerhalb einer SSID (IEEE Std 802.11 ™ -2012)
  • Einige Einschränkungen basierend auf Produkten
    • Einige Zeichenbeschränkungen (nur ASCII)
    • Unicode

Technisch gesehen ist also jedes Zeichen in einer SSID zulässig. Unterschiedliche Implementierungen wie Windows XP, Windows 7 und verschiedene Linux-Versionen erlauben / verbieten Teilmengen von Zeichen in SSIDs.

Verweise

slm
quelle
1
Ihre Antwort kommt nicht auf den Punkt: In was ist Flucht möglich /etc/network/interfaces?
Gilles 'SO - hör auf böse zu sein'
@ Gilles - danke, es war ein früherer Start heute bei der Arbeit. Ich habe einige zusätzliche Informationen hinzugefügt, die ich gefunden, aber damals nicht zum A hinzugefügt hatte. Meistens Fehler im Zusammenhang mit der Flucht von Zeichen für "wpa-ssid" & "wpa-psk".
slm
Ich kann nicht sagen, ob die Urlencodierung der essid als Boot-Parameter funktioniert, aber in der Interfaces-Datei nicht.
Hultqvist
@phq - Ich bin nicht überrascht, dies war nur eine Idee, und die Codierung ist im Allgemeinen die Art und Weise, wie Sie mit der Bereinigung von Daten wie diesen in anderen Anwendungen umgehen. Es scheint die einzige andere Option zu sein, außer sie zu entfernen.
slm