escape caracteres em / etc / network / interfaces

8

Eu quero ter certeza de que qualquer string que eu passe para a linha wpa-ssid "abc" em /etc/network/interfaces não será usada para sair da configuração.

Tudo que posso encontrar no manual é que \ pode ser usado no final de uma linha para continuar na próxima linha.

Mas e quanto a \" no meio de uma linha?

Minhas preocupações são um SSID como

A"
up rm -rf /\

Existe alguma codificação geral que possa ser usada para caracteres arbitrários no campo SSID?

    
por hultqvist 25.11.2013 / 16:43

2 respostas

5

Em /etc/network/interfaces (ou qualquer outra distribuição usando o utilitário ifupdown do Debian) do Debian, uma seqüência de barra invertida é removida, e a barra invertida não é especial em nenhum outro lugar. Um caracter de aspas duplas também não é especial. O caractere # inicia um comentário se for o primeiro caractere que não é espaço em branco em uma linha (não continuação). Bytes nulos são tratados como caracteres de nova linha (eu acho - o analisador usa C strings e não tem tratamento especial para bytes nulos, então eles podem causar danos adicionais).

As linhas de configuração assumem a forma de um nome de opção seguido por um valor, separados por espaço em branco. O espaço em branco inicial e final é ignorado. Algumas opções internas analisam mais a linha em palavras; o valor das opções para iface sempre é executado até o final da linha.

Por exemplo, a linha

wpa-ssid  "a  b"  "cd"  

define a opção wpa-ssid para a string de 12 caracteres "a  b"  "cd" (o espaço em branco interno é preservado).

O script ifupdown do WPA Supplicant retira aspas duplas no início e no final da string de configuração wpa-ssid , a linha acima é equivalente a wpa-ssid a  b"  "cd . Dessa forma, você pode ter espaços em branco iniciais e finais no SSID.

Não consigo encontrar um problema de citação nos scripts ifupdown do WPA Supplicant, por isso parece que tudo o que o ifupdown produzirá é seguro.

Assim, você pode permitir que qualquer string como um SSID seja injetada em /etc/network/interfaces , desde que não contenha nenhuma nova linha ou byte nulo. Adicione aspas duplas em torno da string (se você não fizer isso, os SSIDs com espaço em branco inicial ou final, ou que terminem com \ , ou que comecem ou terminem com " , serão desconfigurados).

    
por 26.11.2013 / 02:01
0

Este SO Q & A intitulado: Existe um padrão que define o que é um SSID válido e senha? responde algumas de suas perguntas.

trecho

Section 7.3.2.1 of the 802.11-2007 specification (http://standards.ieee.org/getieee802/download/802.11-2007.pdf) defines SSIDs.

A valid SSID is 0-32 octets with arbitrary contents. A 0-length SSID indicates the wildcard SSID (in probe request frames for instance).

There's no character set associated with the SSID - a 32-byte string of NUL-bytes is a valid SSID.

This implies:

  • you should never use normal string functions when manipulating generic SSIDs (strcpy() and friends).
  • you should not assume that the SSID is printable when, for instance, logging it to disk

Há também este comentário sobre a resposta à pergunta da SO:

There's updated version of standard (http://standards.ieee.org/getieee802/download/802.11-2012.pdf ), which defines SSIDEncoding field. It can be UNSPECIFIED (for arbitrary data) or UTF8.

Por isso, gostaria de ver o último padrão de orientação e garantir que você possa lidar com o que é legal com base nisso.

O que mais?

Além disso, posso estar inclinado a me proteger normalizando a entrada de um usuário usando alguma forma de função de codificação de URL (algo que funcionaria com SSIDs obviamente) ou simplesmente removendo caracteres ilegais e simplesmente não permitindo que eles gravem essas seqüências de caracteres. para este arquivo.

Personagens estranhos?

Os únicos problemas que encontrei com caracteres estranhos / especiais relacionados ao arquivo interfaces foram esses tipos de erros que foram colocados no debian-installer.

debian-installer asked for my wireless networking information and successfully used it to connect wirelessly to the network. It also wrote my wireless networking information to /etc/network/interfaces. However, the WPA key that I entered contained at least one special character, and debian-installer did not escape or quote the special character(s) in /etc/network/interfaces. The result was that, on reboot, the system hung for a very long time during the boot process as it tried (unsuccessfully) to re-connect to the wireless network. I fixed the problem by simply quoting the WPA key listed in /etc/network/interfaces. This should happen automatically if the key contains special characters.

Também havia esses bugs, um relacionado a espaços dentro do SSID, os outros relacionados à frase secreta:

Em ambos os casos, parece que envolver as strings com aspas duplas é suficiente para proteger os valores de ambos.

Exemplos adicionais

Documentos oficiais

Pesquisando a documentação oficial, encontrei este trecho aqui:

Os documentos oficiais mostram este exemplo:

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

Assim, parece que espaços são permitidos, desde que sejam citados corretamente. Além disso, há este exemplo explicando como fornecer um SSID com espaços para a ferramenta iwconfig :

Add the name (ssid) for the network you want to create/join. Use single quotes if there is a space in the name.

   $ sudo iwconfig eth1 essid 'name'

Webconverger

Eu encontrei este exemplo que parece ser Debian sob o capô, então o exemplo pode ser apropriado para a sua situação, mas é difícil dizer com certeza. Eu a mostro apenas porque mostra um exemplo de como eu esperava que um método de codificação de URI fosse exposto para proteger contra caracteres ilegais.

trecho

Example 4 "Spaces in the ESSID", broadcasting essid 'Hopstock Gjestenett', with WPA key uiopzxcv

Please avoid spaces in ESSIDs. In this case we workaround with a encodeURI('Hopstock Gjestenett'), to get the following boot recipe:

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

Assim, você poderá codificar os espaços que aparecem em SSIDs usando %20 .

SSIDs

Indo ainda mais fundo, encontrei este comentário da página da Wikipedia em Conjunto de serviços (rede 802.11) .

Each BSS or ESS is identified by a service set identifier (SSID) - a 1 to 32 byte string. This is normally a human-readable string and thus commonly called the "network name".6 In an IBSS, the SSID is chosen by the client device that starts the network, and broadcasting of the SSID is performed in a pseudo-random order by all devices that are members of the network.

Este comentário é apoiado por esta apresentação do Blackhat EU 2013, intitulado: Exploração Prática Usando um Identificador de Conjunto de Serviço Mal-intencionado (SSID) .

trecho

  • No defined restrictions as to what characters can be used within an SSID (IEEE Std 802.11™-2012)
  • Some limitation based on products
    • Some character limitation (ascii only)
    • Unicode

Portanto, tecnicamente qualquer caractere é permitido em um SSID, diferentes implementações como o Windows XP, o Windows 7, e várias versões do Linux permitem / não permitem subconjuntos de caracteres dentro de SSIDs.

Referências

por 25.11.2013 / 17:20