caratteri di escape in / etc / network / interfaces


8

Voglio essere sicuro che qualsiasi stringa di passo nella linea wpa-ssid "abc"di /etc/network/interfacesnon saranno utilizzati per uscire dalla configurazione.

Tutto quello che posso trovare nel manuale è che \può essere usato alla fine di una riga per continuare sulla riga successiva.

Ma che dire \"nel mezzo di una linea?

Le mie preoccupazioni sono un SSID qualcosa del genere

A"
up rm -rf /\

Esiste una codifica generale che può essere utilizzata per caratteri arbitrari nel campo SSID?

Risposte:


5

In Debian /etc/network/interfaces(o in qualsiasi altra distribuzione che usa l'utility ifupdown di Debian), una sequenza backslash-newline viene rimossa e la barra rovesciata non è speciale altrove. Un carattere a virgoletta doppia non è neanche speciale. Il personaggio #inizia un commento se è il primo carattere non bianco su una riga (non continuazione). I byte null sono trattati come caratteri di nuova riga (penso - il parser usa stringhe C e non ha una gestione speciale per i byte null, quindi potrebbero causare malizia aggiuntiva).

Le linee di configurazione assumono la forma di un nome di opzione seguito da un valore, separato da spazi bianchi. Gli spazi bianchi iniziali e finali vengono ignorati. Alcune opzioni integrate analizzano ulteriormente la linea in parole; il valore delle opzioni ifaceva sempre fino alla fine della riga.

Ad esempio, la linea

wpa-ssid  "a  b"  "cd"  

imposta l'opzione wpa-ssidsulla stringa di 12 caratteri "a  b"  "cd"(viene conservato lo spazio bianco interno).

Lo script ifupdown del supplicant di WPA rimuove le doppie virgolette all'inizio e alla fine della wpa-ssidstringa di configurazione, la riga sopra è equivalente wpa-ssid a  b"  "cd. In questo modo, è possibile avere spazi iniziali e finali nell'SSID.

Non riesco a trovare un problema di quotazione negli script ifupdown del WPA Supplicant, quindi sembra che tutto ciò che ifupdown produrrà sia sicuro.

Pertanto, è possibile consentire l'inserimento di qualsiasi stringa come SSID /etc/network/interfaces, a condizione che non contenga newline o byte null. Aggiungi doppie virgolette intorno alla stringa (in caso contrario, gli SSID con spazi bianchi iniziali o finali, o che finiscono con \, o che iniziano o finiscono con ", saranno alterati).


In realtà ci ho provato con successo wpa-ssid my ssid.
hultqvist,

@phq - per essere chiari, sei stato in grado di usare la linea wpa-ssid=my ssid?
slm

@slm no, /etc/network/interfacesnon usa =nella sua sintassi, ho provato adesso e non funziona =.
hultqvist,

@phq - ma a tuo punto, sei stato in grado di assegnargli un SSID con spazi? my ssid?
slm

@slm yes L'SSID con spazi ha sempre funzionato
hultqvist,

0

Queste domande e risposte SO sono intitolate: esiste uno standard che definisce cosa sono un SSID e una password validi? risponde ad alcune delle tue domande.

estratto

La sezione 7.3.2.1 della specifica 802.11-2007 ( http://standards.ieee.org/getieee802/download/802.11-2007.pdf ) definisce gli SSID.

Un SSID valido è 0-32 ottetti con contenuti arbitrari. Un SSID di lunghezza 0 indica l'SSID jolly (ad esempio nei frame di richiesta del probe).

Non esiste un set di caratteri associato all'SSID: una stringa di 32 byte di NUL byte è un SSID valido.

Ciò implica:

  • non dovresti mai usare le normali funzioni di stringa quando manipoli SSID generici (strcpy () e amici).
  • non si deve supporre che l'SSID sia stampabile quando, ad esempio, lo si registra su disco

C'è anche questo commento sulla risposta alla domanda SO:

C'è una versione aggiornata dello standard ( http://standards.ieee.org/getieee802/download/802.11-2012.pdf ), che definisce il SSIDEncodingcampo. Può essere UNSPECIFIED(per dati arbitrari) o UTF8.

Quindi vorrei cercare gli standard più recenti come guida e assicurarmi di poter gestire ciò che è legale in base a ciò.

Cos'altro?

Inoltre, potrei essere incline a proteggermi normalizzando l'input di un utente usando una qualche forma di funzione di codifica URL (qualcosa che funzionerebbe ovviamente con gli SSID) o semplicemente rimuovendo i caratteri illegali e semplicemente non li autorizzo prima di scrivere queste stringhe in questo file .

Personaggi strani?

Gli unici problemi che ho riscontrato con caratteri strani / speciali relativi al interfacesfile erano questi tipi di bug che sono stati archiviati contro il debian-installer.

debian-installer ha richiesto le mie informazioni sulla rete wireless e le ha utilizzate con successo per connettersi in modalità wireless alla rete. Ha anche scritto le mie informazioni sulla rete wireless su / etc / network / interfaces. Tuttavia, la chiave WPA che ho inserito conteneva almeno un carattere speciale e debian-installer non ha evitato o citato i caratteri speciali in / etc / network / interfaces. Il risultato è stato che, al riavvio, il sistema si è bloccato per molto tempo durante il processo di avvio mentre ha tentato (senza successo) di riconnettersi alla rete wireless. Ho risolto il problema semplicemente citando la chiave WPA elencata in / etc / network / interfaces. Ciò dovrebbe accadere automaticamente se la chiave contiene caratteri speciali.

Inoltre c'erano questi bug, uno relativo agli spazi all'interno del SSID, l'altro relativo alla passphrase:

In entrambi i casi sembrerebbe che avvolgere le stringhe con virgolette doppie sia sufficiente per proteggere i valori per entrambi.

Esempi aggiuntivi

Documenti ufficiali

Scorrendo la documentazione ufficiale ho trovato questo pezzo qui:

I documenti ufficiali mostrano questo esempio:

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

Quindi sembrerebbe che gli spazi siano consentiti, purché siano quotati correttamente. Inoltre c'è questo esempio che spiega come fornire un SSID con spazi allo iwconfigstrumento:

Aggiungi il nome (ssid) per la rete che vuoi creare / unire. Usa virgolette singole se c'è uno spazio nel nome.

   $ sudo iwconfig eth1 essid 'name'

Webconverger

Ho trovato questo esempio che sembra essere Debian sotto il cofano, quindi l'esempio potrebbe essere appropriato alla tua situazione, ma è difficile dirlo con certezza. Lo sollevo solo perché mostra un esempio di come mi sarei aspettato che un metodo di codifica URI fosse esposto per proteggere da caratteri illegali.

estratto

Esempio 4 "Spaces in the ESSID", trasmissione del saggio "Hopstock Gjestenett", con chiave WPA uiopzxcv

Evitare spazi negli ESSID. In questo caso, risolviamo il problema con un encodeURI ('Hopstock Gjestenett'), per ottenere la seguente ricetta di avvio:

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

Quindi potresti essere in grado di codificare gli spazi che compaiono negli SSID usando %20.

SSID

Scavando ancora di più ho trovato questo commento dalla pagina di Wikipedia sul set di servizi (rete 802.11) .

Ogni BSS o ESS è identificato da un identificatore del set di servizi (SSID), una stringa da 1 a 32 byte. Questa è normalmente una stringa leggibile dall'uomo e quindi comunemente chiamata "nome della rete". 6 In un IBSS, l'SSID viene scelto dal dispositivo client che avvia la rete e la trasmissione dell'SSID viene eseguita in un ordine pseudo-casuale da tutti i dispositivi membri della rete.

Questo commento è supportato da questa presentazione di Blackhat EU 2013, intitolata: Sfruttamento pratico utilizzando un identificatore di set di servizi dannosi (SSID) .

estratto

  • Nessuna restrizione definita su quali caratteri possono essere utilizzati all'interno di un SSID (IEEE Std 802.11 ™ -2012)
  • Alcune limitazioni basate sui prodotti
    • Qualche limitazione di carattere (solo ascii)
    • Unicode

Quindi tecnicamente è consentito qualsiasi carattere in un SSID, diverse implementazioni come Windows XP, Windows 7 e diverse versioni di Linux consentono / impediscono sottoinsiemi di caratteri all'interno di SSID.

Riferimenti


1
La tua risposta non arriva al punto: in quale evasione è disponibile /etc/network/interfaces?
Gilles 'SO- smetti di essere malvagio' il

@Gilles - grazie, è stato un inizio prima oggi al lavoro, ho aggiunto alcune informazioni aggiuntive che avevo trovato ma che non avevo aggiunto alla A allora. Principalmente bug relativi alla fuga di caratteri per "wpa-ssid" e "wpa-psk".
slm

Non posso dire se urlencoding l'essid funziona come parametro di avvio ma non funziona nel file interfacce.
hultqvist,

@phq - Non sono sorpreso, questa è stata solo un'idea, e la codifica è generalmente il modo in cui gestisci la sanificazione dei dati come questo in altre applicazioni, citandolo sembrerebbe essere l'unica altra opzione, oltre a rimuoverlo.
slm
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.