/ etc / network / interfacesのエスケープ文字


8

私は確かに、私はラインに渡すどんな文字列をそのようにしたいwpa-ssid "abc"/etc/network/interfaces構成を抜け出すために使用されることはありません。

マニュアルで見つけること\ができるのは、行末で次の行に続けるために使用できることだけです。

しかし\"、行の真ん中はどうですか?

私の心配は次のようなSSIDです

A"
up rm -rf /\

SSIDフィールドの任意の文字に使用できる一般的なエンコーディングはありますか?

回答:


5

Debian /etc/network/interfaces(またはDebianのifupdownユーティリティを使用するその他のディストリビューション)では、バックスラッシュと改行のシーケンスが削除されており、バックスラッシュは他の場所では特別ではありません。二重引用符も特別ではありません。#(継続ではない)行の最初の非空白文字である場合、その文字はコメントを開始します。nullバイトは改行文字として扱われます(パーサーはC文字列を使用し、nullバイトに対する特別な処理がないため、さらに悪影響を及ぼす可能性があります)。

構成行は、空白で区切られたオプション名とそれに続く値の形式を取ります。先頭と末尾の空白は無視されます。一部の組み込みオプションは、行をさらに解析して単語にします。オプションの値はiface常に行末まで実行されます。

たとえば、行

wpa-ssid  "a  b"  "cd"  

オプションwpa-ssidを12文字の文字列に設定します"a  b"  "cd"(内部の空白は保持されます)。

WPAサプリカントのifupdownスクリプトは、wpa-ssid構成文字列の最初と最後の二重引用符を取り除きますwpa-ssid a  b"  "cd。上の行はと同等です。このようにして、SSIDに先頭と末尾の空白を含めることができます。

WPAサプリカントのifupdownスクリプトに引用の問題が見つからないため、ifupdownが生成するものは安全であるように見えます。

したがって/etc/network/interfaces、改行やnullバイトが含まれていない場合は、SSIDとして任意の文字列をに挿入できます。文字列を二重引用符で囲みます(そうしないと、先頭または末尾に空白がある、または末尾がである\、またはで始まるまたは末尾がのSSID "がマングルされます)。


実際、私はうまくやってみましたwpa-ssid my ssid
hultqvist 2013年

@phq-明確にするために、あなたはラインを使うことができましたwpa-ssid=my ssidか?
slm

@slmいいえ、その構文で/etc/network/interfacesは使用=していません=。今試してみましたが、では機能しません。
hultqvist 2013年

@phq-しかし、あなたの考えでは、それにスペースを含むSSIDを与えることができましたか?my ssid
slm

@slmはい、スペースを含むSSIDは常に機能します
hultqvist '27

0

このタイトルのSO Q&A:有効なSSIDとパスワードを定義する標準はありますか?あなたの質問のいくつかに答えます。

抜粋

802.11-2007仕様のセクション7.3.2.1(http://standards.ieee.org/getieee802/download/802.11-2007.pdf)は、SSIDを定義しています。

有効なSSIDは、任意の内容の0〜32オクテットです。長さ0のSSIDは、ワイルドカードSSIDを示します(プローブ要求フレーム内など)。

SSIDに関連付けられた文字セットはありません-NULバイトの32バイトの文字列が有効なSSIDです。

これは以下を意味します:

  • 汎用SSID(strcpy()およびその仲間)を操作するときは、通常の文字列関数を使用しないでください。
  • たとえば、ディスクにログを記録するときに、SSIDが印刷可能であると想定しないでください。

SOの質問に対する回答についても、次のコメントがあります。

標準を更新したバージョン(http://standards.ieee.org/getieee802/download/802.11-2012.pdf)があり、SSIDEncodingフィールドを定義しています。UNSPECIFIED(任意のデータの場合)またはにすることができますUTF8

ですから、私は最新のガイダンス基準を検討し、それに基づいて合法的なものに対処できるようにします。

ほかに何か?

さらに、何らかの形式のURLエンコーディング関数(SSIDで明らかに機能するもの)を使用してユーザーの入力を正規化するか、不正な文字を単に削除して、これらの文字列をこのファイルに書き込む前に許可しないことで、自分を守ろうとする傾向があります。

変なキャラクター?

interfacesファイルに関連する奇妙な特殊文字で見つけられる唯一の問題は、debian-installerに対して提出されたこれらのタイプのバグでした。

debian-installerは私の無線ネットワーク情報を尋ね、それを無線でネットワークに接続するのに成功しました。また、ワイヤレスネットワーキング情報を/ etc / network / interfacesに書き込みました。しかし、入力したWPAキーには少なくとも1つの特殊文字が含まれており、debian-installerは/ etc / network / interfaces内の特殊文字をエスケープしたり引用したりしませんでした。その結果、再起動時に、ワイヤレスネットワークへの再接続を(失敗して)試行したため、システムは起動プロセス中に非常に長い時間ハングしました。/ etc / network / interfacesにリストされているWPAキーを単に引用することで問題を修正しました。キーに特殊文字が含まれている場合、これは自動的に行われるはずです。

また、これらのバグもありました。1つはSSID内のスペースに関連し、もう1つはパスフレーズに関連しています。

どちらの場合も、文字列を二重引用符で囲むことで、両方の値を保護できます。

追加の例

公式ドキュメント

ここでこのビットを見つけた公式ドキュメントを掘り下げます:

公式ドキュメントはこの例を示しています:

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

したがって、スペースが正しく引用されている限り、スペースが許可されているように見えます。また、iwconfigツールにスペースを含むSSIDを提供する方法を説明する次の例もあります。

作成/参加するネットワークの名前(ssid)を追加します。名前にスペースが含まれている場合は、単一引用符を使用してください。

   $ sudo iwconfig eth1 essid 'name'

ウェブコンバージャー

この例は内部ではDebianのように見えるので、状況に適している可能性がありますが、確実に判断するのは困難です。これは、不正な文字から保護するためにURIエンコーディングメソッドがどのように公開されることを期待しているかの例を示しているためです。

抜粋

例4「ESSIDのスペース」、essid 'Hopstock Gjestenett'をWPAキーuiopzxcvでブロードキャスト

ESSIDにはスペースを入れないでください。この場合、encodeURI( 'Hopstock Gjestenett')を使用して次のブートレシピを取得します。

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

したがって、を使用して、SSIDに表示されるスペースをエンコードできる場合があります%20

SSID

さらに深く掘り下げた私は、サービスセット(802.11ネットワーク)の Wikipediaページからこのコメントを見つけました。

各BSSまたはESSは、1〜32バイトの文字列であるサービスセット識別子(SSID)によって識別されます。これは通常人間が読める文字列であるため、一般的に「ネットワーク名」と呼ばれます。6 IBSSでは、SSIDはネットワークを起動するクライアントデバイスによって選択され、SSIDのブロードキャストは、ネットワークのメンバーであるすべてのデバイスによって擬似ランダムな順序で実行されます。

このコメントは、Blackhat EU 2013のプレゼンテーション「悪意のあるサービスセット識別子(SSID)を使用した実用的な悪用」によって裏付けられています。

抜粋

  • SSID内で使用できる文字に関して定義された制限はありません(IEEE Std 802.11™-2012)
  • 製品に基づくいくつかの制限
    • 一部の文字制限(ASCIIのみ)
    • Unicode

したがって、技術的にはSSIDで任意の文字を使用できます。WindowsXP、Windows 7などのさまざまな実装と、さまざまなLinuxバージョンでは、SSID内の文字のサブセットを許可/禁止します。

参考文献


1
あなたの答えは要点に達していません:どのエスケープが利用できます/etc/network/interfacesか?
Gilles 'SO-悪をやめる'

@ギレス-おかげで、それは今日の仕事の始めでした、私が見つけたが、Aに追加しなかったいくつかの追加情報を追加しました。主に「wpa-ssid」と「wpa-psk」の文字のエスケープに関連するバグ。
slm

essidのurlencodingがブートパラメータとして機能するかどうかはわかりませんが、interfacesファイルでは機能しません。
hultqvist 2013年

@phq-私は驚くことではありません、これは単なるアイデアであり、エンコーディングは一般に、他のアプリケーションでこのようなデータをサニタイズする方法です。
slm
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.