내가 줄에 전달한 문자열이 구성을 깨는 데 사용될 wpa-ssid "abc"
수 없는지 확인하고 싶습니다 ./etc/network/interfaces
매뉴얼에서 찾을 수 있는 것은 \
한 줄의 끝에서 다음 줄로 계속하기 위해 사용할 수 있다는 것뿐입니다.
\"
하지만 줄 중간에 있는 경우는 어떻습니까?
제가 걱정되는 것은 SSID라던가 그런 것입니다.
A"
up rm -rf /\
SSID 필드의 임의 문자에 사용할 수 있는 범용 인코딩이 있습니까?
답변1
Debian /etc/network/interfaces
(또는 Debian의 ifupdown 유틸리티를 사용하는 다른 배포판)에서는 백슬래시 개행 시퀀스가 제거되고 백슬래시는 다른 곳에서는 특별하지 않습니다. 큰따옴표 문자도 특별하지 않습니다. 이 문자는 (비연속) 줄에서 공백이 아닌 첫 번째 문자인 경우 #
주석을 시작합니다 . Null 바이트는 개행 문자로 처리됩니다(파서가 C 문자열을 사용하고 Null 바이트를 특별히 처리하지 않으므로 추가적인 문제가 발생할 수 있다고 생각합니다).
구성 줄은 옵션 이름 뒤에 공백으로 구분된 값의 형식을 취합니다. 선행 및 후행 공백은 무시됩니다. 일부 내장 옵션은 행을 단어로 추가로 구문 분석하여 iface
항상 행의 끝까지 실행됩니다.
예를 들어, 라인
wpa-ssid "a b" "cd"
옵션을 wpa-ssid
12자 문자열로 설정합니다 "a b" "cd"
(내부 공백 유지).
WPA Supplicant의 ifupdown 스크립트는 구성 문자열의 시작과 끝에서 큰따옴표를 제거합니다 . wpa-ssid
위 행은 과 동일합니다 wpa-ssid a b" "cd
. 이렇게 하면 SSID에 앞뒤 공백을 포함할 수 있습니다.
WPA 신청자 ifupdown 스크립트에서 참조 문제를 찾을 수 없으므로 ifupdown이 생성하는 모든 것이 안전한 것처럼 보입니다.
/etc/network/interfaces
따라서 줄 바꿈이나 null 바이트가 포함되지 않는 한 모든 문자열이 SSID로 삽입되도록 허용할 수 있습니다 . 문자열 주위에 큰따옴표를 추가합니다(이렇게 하지 않으면 \
선행 또는 후행 공백, 다음으로 끝나거나 다음으로 시작 또는 끝나는 SSID가 "
깨집니다).
답변2
이 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와 연관된 문자 세트가 없습니다. 32바이트 NUL 바이트 문자열이 유효한 SSID입니다.
이는 다음을 의미합니다.
- 범용 SSID(strcpy() 등)를 조작할 때 일반 문자열 함수를 사용하지 마십시오.
- 예를 들어 SSID를 디스크에 기록할 때 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 키에는 최소한 하나의 특수 문자가 포함되어 있었고, debian-installer는 /etc/network/interfaces에서 특수 문자를 이스케이프하거나 인용하지 않았습니다. 그 결과 재부팅할 때 시스템이 무선 네트워크에 다시 연결을 시도(실패)하면서 부팅 프로세스 중에 오랜 시간 동안 정지됩니다. /etc/network/interfaces에 나열된 WPA 키를 참조하여 문제를 해결했습니다. 키에 특수 문자가 포함된 경우 자동으로 발생합니다.
다음과 같은 오류도 있습니다. 그 중 하나는 SSID 내의 공백과 관련이 있고 다른 오류는 비밀번호와 관련이 있습니다.
- 공백이 있는 SSID는 이스케이프됩니다.
- WPA 암호는 공백을 피하지 말아야 하는데 공백을 이스케이프합니다.
- [베타 1.1] xbmc의 Wi-Fi 구성이 SSID의 공백과 작동하지 않습니다.
두 경우 모두 문자열을 큰따옴표로 묶으면 두 값을 모두 보호하기에 충분해 보입니다.
다른 예
공식 문서
공식 문서를 주의 깊게 읽어보니 다음과 같은 내용을 발견했습니다.
공식 문서에는 다음 예가 나와 있습니다.
ap_scan=2
network={
ssid="test adhoc"
mode=1
frequency=2412
proto=WPA
key_mgmt=WPA-NONE
pairwise=NONE
group=TKIP
psk="passphrase"
}
따라서 올바르게 인용되는 한 공백이 허용되는 것 같습니다. 도구에 공백이 포함된 SSID를 제공하는 방법을 설명하는 다음 예도 있습니다 iwconfig
.
생성/가입하려는 네트워크의 이름(ssid)을 추가합니다. 이름에 공백이 있으면 작은따옴표를 사용하십시오.
$ sudo iwconfig eth1 essid 'name'
네트워크 수집자
데비안처럼 보이는 이 예를 찾았으므로 이 예가 귀하의 경우에는 효과가 있을 수 있지만 확실하게 말하기는 어렵습니다. 불법 문자를 방지하기 위해 URI 인코딩 방법을 노출하는 방법에 대한 예를 보여주기 때문에 이 내용을 언급했습니다.
발췌
예 4 "ESSID의 공간", WPA 키 uiopzxcv를 사용하여 essid 'Hopstock Gjestenett' 브로드캐스팅
ESSID에 공백을 사용하지 마십시오. 이 경우 encodeURI('Hopstock Gjestenett')를 사용하여 다음 실행 방법을 얻습니다.
wpa-ssid=Hopstock%20Gjestenett wpa-psk=uiopzxcv
따라서 .SSID를 사용하여 SSID에 표시된 공백을 인코딩할 수 있습니다 %20
.
SSID
더 자세히 조사한 결과 Wikipedia 페이지에서 이 리뷰를 찾았습니다.서비스 세트(802.11 네트워크).
각 BSS 또는 ESS는 서비스 세트 식별자(SSID)(1~32바이트 문자열)로 식별됩니다. 이는 일반적으로 사람이 읽을 수 있는 문자열이므로 "네트워크 이름"이라고도 합니다.6IBSS에서 SSID는 네트워크를 시작하는 클라이언트 장치에 의해 선택되며, 네트워크의 구성원인 모든 장치는 의사 무작위 순서로 SSID 브로드캐스트를 수행합니다.
이 리뷰는 Blackhat EU 2013의 프레젠테이션에서 뒷받침됩니다.악성 SSID(서비스 세트 식별자)를 사용한 실제적인 공격.
발췌
- SSID에 사용할 수 있는 문자에 대한 명시적인 제한은 없습니다(IEEE Std 802.11™-2012).
- 일부 제품 기반 제한 사항
- 일부 문자 제한(ASCII에만 해당)
- 유니코드
따라서 기술적으로 모든 문자가 SSID에 허용되며, 다양한 구현(예: Windows XP, Windows 7) 및 다양한 Linux 버전에서는 SSID의 문자 하위 집합을 허용/허용하지 않습니다.