
CVE-2017-12865 익스플로잇
Connection Manager
Copyright (C) 2007-2012 Intel Corporation. All rights reserved.
Connection Manager에는 다음 기능이 내장되어 있습니다. - 일반 플러그인 인프라 - 장치 및 네트워크 추상화(기본 저장소 지원 포함) - IPv4, IPv4-LL(링크-로컬) 및 DHCP - RFC 5227에 따른 IPv4 주소 충돌 감지(ACD) - IPv6, DHCPv6 및 6to4 터널 - 고급 라우팅 및 DNS 구성 - 내장 DNS 프록시 및 지능형 캐싱 - 내장 WISPr 핫스팟 로그인 및 포털 감지 - 시간 및 시간대 구성(수동 및 NTP 자동) - 프록시 처리(수동 및 WPAD 자동) - 테더링 지원(USB, Bluetooth 및 WiFi AP 모드) - 상세 통계 처리(홈 및 로밍)
네트워킹 지원을 위해 다양한 플러그인을 활성화할 수 있습니다: - 이더넷 플러그인 - WEP40/WEP128 및 WPA/WPA2(개인 및 엔터프라이즈)를 지원하는 WiFi 플러그인 - Bluetooth 플러그인(BlueZ 사용) - 2G/3G/4G 플러그인(oFono 사용)
추가 기능을 제공하는 플러그인도 사용할 수 있습니다: - 루프백 인터페이스 설정 - PACrunner 프록시 처리 - PolicyKit 권한 부여 지원
ConnMan이 시작되면 사용할 모든 네트워크 인터페이스를 정리합니다. 이것이 바람직하지 않으면 main.conf 구성 파일에서 NetworkInterfaceBlacklist를 설정하거나 -I 명령줄 옵션을 사용하여 네트워크 인터페이스를 무시할 수 있습니다.
Connection Manager를 컴파일하려면 다음 소프트웨어 패키지가 필요합니다. - GCC 컴파일러 - GLib 라이브러리 - D-Bus 라이브러리 - IP-Tables 라이브러리(테더링 지원용) - GnuTLS 라이브러리(선택 사항) - PolicyKit(선택 사항) - readline(명령줄 클라이언트)
구성하려면 다음을 실행하세요. ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var
configure는 필요한 모든 구성 요소와 패키지를 자동으로 검색합니다.
컴파일 및 설치하려면 다음을 실행하세요. make && make install
작동하는 시스템을 위해서는 특정 구성 옵션을 활성화해야 합니다.
--disable-ethernet
이더넷 네트워크 카드 지원을 비활성화합니다.
기본적으로 이더넷 기술 지원이 내장되어 활성화되어 있습니다.
이 옵션은 이더넷 지원이 필요 없는 특정 시스템용 소형 데몬을
빌드할 때 사용할 수 있습니다.
--disable-gadget
USB 이더넷 가젯 장치 지원을 비활성화합니다.
기본적으로 USB 이더넷 가젯 기술 지원이 내장되어
활성화되어 있습니다. 이 옵션은 USB 이더넷 가젯
지원이 필요 없는 특정 시스템용 소형 데몬을 빌드할 때
사용할 수 있습니다.
--disable-wifi
WiFi 장치 지원을 비활성화합니다.
기본적으로 WiFi 기술 지원이 내장되어
활성화되어 있습니다. 이 옵션은 WiFi 지원이 필요 없는
특정 시스템용 소형 데몬을 빌드할 때 사용할 수 있습니다.
wpa_supplicant가 실행되지 않는 상태에서 WiFi 지원
데몬을 빌드해도 안전합니다. wpa_supplicant의 시작은
자동으로 감지되며 런타임 종속성일 뿐입니다.
ConnMan을 빌드하는 데 필요하지 않습니다.
--disable-bluetooth
Bluetooth 장치 지원을 비활성화합니다.
기본적으로 Bluetooth 기술 지원이 내장되어
활성화되어 있습니다. 이 옵션은 Bluetooth 지원이 필요 없는
특정 시스템용 소형 데몬을 빌드할 때 사용할 수 있습니다.
bluetoothd가 실행되지 않는 상태에서 Bluetooth 지원
데몬을 빌드해도 안전합니다. bluetoothd의 시작은 자동으로
감지되며 런타임 종속성일 뿐입니다. ConnMan을
빌드하는 데 필요하지 않습니다.
--disable-ofono
셀룰러 2G/3G/4G 장치 지원을 비활성화합니다.
기본적으로 oFono 기술 지원이 내장되어
활성화되어 있습니다. 이 옵션은 oFono를 사용하지 않는
특정 시스템용 소형 데몬을 빌드할 때 사용할 수 있습니다.
ofonod가 실행되지 않는 상태에서 oFono 지원
데몬을 빌드해도 안전합니다. ofonod의 시작은 자동으로
감지되며 런타임 종속성일 뿐입니다. ConnMan을
빌드하는 데 필요하지 않습니다.
--disable-dundee
Bluetooth DUN 장치 지원을 비활성화합니다.
기본적으로 Bluetooth DUN 기술(dundee) 지원이
내장되어 활성화되어 있습니다. 이 옵션은 dundee를 사용하지 않는
특정 시스템용 소형 데몬을 빌드할 때 사용할 수 있습니다.
dundee가 실행되지 않는 상태에서 dundee 지원
데몬을 빌드해도 안전합니다. dundee의 시작은 자동으로
감지되며 런타임 종속성일 뿐입니다. ConnMan을
빌드하는 데 필요하지 않습니다.
--enable-iwd
Linux용 무선 데몬 지원을 활성화합니다.
IWD 프로젝트는 아직 초기 릴리스가 없으므로
기본적으로 IWD 지원은 활성화되지 않습니다.
WiFi 지원과 함께 이 옵션을 활성화해도 안전합니다.
--disable-pacrunner
PACrunner 프록시 처리 지원을 비활성화합니다.
기본적으로 PACrunner 지원이 내장되어 활성화되어 있습니다. 이
옵션은 PACrunner를 사용하지 않는 특정 시스템용 소형
데몬을 빌드할 때 사용할 수 있습니다.
pacrunner 데몬 없이 PACrunner 지원 데몬을 빌드해도
안전합니다. 런타임에 필요하면 PACrunner 프로세스를
감지하여 시작합니다. ConnMan을 빌드하는 데에는
필요하지 않습니다.
--disable-loopback
루프백 장치 설정을 비활성화합니다.
init 시스템이 매우 최소화되어 있고 네트워킹 스크립트가 없는
배포판의 경우, 루프백 장치를 설정하고 활성화하는
작업을 처리할 수 있습니다.
네트워킹 스크립트가 이미 있어도 이 옵션을 선택한 채로
두는 것이 안전합니다. 이미 구성된 루프백 장치를
감지하면 그대로 둡니다.
--disable-wispr
WISPr 핫스팟 로그인 지원을 비활성화합니다.
메모리 요구 사항이 매우 낮은 시스템의 경우, WISPr
핫스팟 로그인 지원이 비활성화됩니다. WISPr 코드는
여전히 데몬에 컴파일되지만, 보안 연결을 위한 GnuTLS
요구 사항은 제거됩니다.
GnuTLS 지원이 없으면 메모리 요구 사항이 약 30%
줄어듭니다. 이동이 적고 핫스팟에 로그인하지 않는
시스템에서는 더 나은 절충안이 될 수 있습니다.
WISPr 지원을 비활성화해도 포털 감지 지원이
비활성화되는 것은 아닙니다. 포털은 여전히 감지되지만,
로그인 자격 증명을 요청하는 대신 브라우저 세션 요청이
에이전트를 통해 이루어집니다.
--enable-polkit
PolicyKit 권한 부여 지원을 활성화합니다.
이를 통해 모든 D-Bus 접근을 보안 정책에 대해 검사하고
특정 기능에 대한 접근을 제한할 수 있습니다.
--enable-nmcompat
NetworkManager 호환 인터페이스 지원을 활성화합니다.
이를 통해 최소한의 NetworkManager 인터페이스 집합을
노출할 수 있습니다. NetworkManager를 사용하여 온라인/오프라인
상태를 감지하도록 작성된 애플리케이션이 있고 아직 ConnMan을
사용하도록 전환되지 않은 시스템에 유용합니다.
--disable-client
명령줄 클라이언트 지원을 비활성화합니다.
기본적으로 명령줄 클라이언트는 활성화되어 있으며
readline 라이브러리를 사용합니다. ConnMan을 다른 방식으로
구성하는 특정 시스템에서는 명령줄 클라이언트를
비활성화하고 readline에 대한 의존성을 제거할 수 있습니다.
--enable-selinux
SELinux 유형 적용(TE) 규칙 컴파일 지원을 활성화합니다.
호스트 환경이 enforcing 모드인 경우 TE 규칙이 필요합니다.
이 옵션이 없으면 VPN 클라이언트 프로세스가
net.connman.Task 인터페이스를 통해 connman-vpnd에 알림을
보낼 수 없습니다. 컴파일된 connman-task.pp 모듈도
다음 명령을 사용하여 설치해야 합니다.
# semodule -i connman-task.pp
dbus 접근을 활성화하려면.
--with-dns-backend=TYPE
DNS 확인 백엔드 지원을 활성화합니다.
사용할 DNS 백엔드를 선택합니다. 지원되는 값은 "internal"
및 "systemd-resolved"입니다. "internal"을 선택하면 ConnMan
이 캐싱 DNS 프록시로 빌드됩니다. "systemd-resolved"
를 선택하면 ConnMan이 DNS 확인을 수행하도록
systemd-resolved를 구성합니다. 기본값은 "internal"입니다.
ConnMan에서는 -d 명령줄 옵션을 사용하여 디버깅 출력을 활성화할 수 있습니다. -d 옵션에 매개변수가 없으면 모든 소스 코드 파일에 대해 디버깅이 활성화됩니다. -d 옵션에 매개변수가 있으면 해당 매개변수는 디버깅이 활성화된 소스 코드 파일을 나타냅니다. 파일 이름에 와일드 카드를 사용할 수 있습니다. 예: -d Activate all normal debug prints -d src/service.c This prints debugging info from src/service.c file only -d src/network.c:src/ipconfig.c This activates debug prints in src/network.c and src/ipconfig.c files. -d 'src/n*.c' This would activate debug print from all the C source files starting with letter 'n' in src directory. Note the quotation marks around option, that is to prevent shell expansion. -d '/n.c:/i.c' Activate debug prints for all C source files starting with letters 'n' or 'i' in any sub-directory.
ConnMan의 일부 구성 요소는 환경 변수로 활성화되는 디버깅 출력을 가지고 있습니다. 환경 변수가 설정되면 해당 구성 요소가 추가 디버깅 정보를 출력합니다. 다음 환경 변수를 사용할 수 있습니다: CONNMAN_DHCP_DEBUG DHCPv4 related debug information CONNMAN_DHCPV6_DEBUG DHCPv6 related debug information CONNMAN_IPTABLES_DEBUG Extra information when iptables is used CONNMAN_RESOLV_DEBUG Name resolver debug prints. These debug prints are used when ConnMan resolves host names for its own use. Note that the DNS proxy debug prints do not use this environment variable. For that, one can use "-d src/dnsproxy.c" command line option. CONNMAN_SUPPLICANT_DEBUG Debugging prints for communication between connmand and wpa_supplicant processes. CONNMAN_WEB_DEBUG Debug information when ConnMan does Internet connectivity check in Wispr and 6to4 components.
예: CONNMAN_WEB_DEBUG=1 src/connmand -n
타이밍 조건이 중요하다면 로그 추적을 얻기 위해 다음 명령을 사용하는 것이 좋습니다: connmand -d 2>&1 | ts '[%H:%M:%.S]' | tee connman.log
'ts' 프로그램은 일반적으로 moreutils 패키지에서 사용할 수 있습니다.
테더링을 지원하려면 다음 커널 구성 옵션을 모듈(m) 또는 내장(y)으로 활성화해야 합니다.
CONFIG_BRIDGE CONFIG_IP_NF_TARGET_MASQUERADE
CONFIG_IP_NF_TARGET_MASQUERADE를 활성화하려면 다음 옵션도 모듈(m) 또는 내장(y)으로 활성화해야 합니다.
CONFIG_NETFILTER CONFIG_NF_CONNTRACK_IPV4 CONFIG_NF_NAT_IPV4
세션에서 라우팅 및 통계 지원을 위해 다음 옵션을 모듈(m) 또는 내장(y)으로 활성화해야 합니다.
CONFIG_IP_NF_IPTABLES CONFIG_IP_MULTIPLE_TABLES CONFIG_NETFILTER_NETLINK_ACCT CONFIG_NETFILTER_XT_MATCH_NFACCT CONFIG_NETFILTER_XT_CONNMARK CONFIG_NETFILTER_XT_TARGET_CONNMARK CONFIG_NETFILTER_XT_MATCH_CONNMARK
USB 가젯 테더링을 지원하려면 다음 커널 구성 옵션을 활성화해야 합니다.
CONFIG_USB_GADGET CONFIG_USB_ETH
wpa_supplicant와 Connection Manager가 제대로 함께 작동하게 하려면 wpa_supplicant .config 파일을 편집하고 다음을 설정해야 합니다.
CONFIG_WPS=y CONFIG_AP=y CONFIG_CTRL_IFACE_DBUS_NEW=y
추가:
CONFIG_BGSCAN_SIMPLE=y
마지막 옵션은 연결된 상태에서 백그라운드 스캔 지원을 활성화하며, WiFi에서 로밍할 때 필요합니다.
wpa_supplicant 2.x 이상을 사용하는 것이 좋습니다.
wpa_supplicant가 D-Bus 자동 시작으로 구성된 경우 ConnMan이 wpa_supplicant의 자동 시작을 트리거합니다. 단, 이 트리거는 한 번만 발생한다는 점에 유의하세요. wpa_supplicant가 중지되거나 충돌하면 ConnMan은 주기적으로 자동 시작을 시도하지 않습니다. 자동 시작은 systemd 또는 유사한 서비스 관리 도구의 몫입니다. wpa_supplicant가 ConnMan에 의해 시작되지 않는 경우, D-Bus 제어 인터페이스를 활성화하고 ConnMan이 통신할 수 있도록 "-u" 옵션이 사용되었는지 확인하세요.
pptp 및 l2tp VPN 플러그인을 컴파일하려면 ppp 개발 패키지가 필요합니다.
l2tp를 실행하려면 다음이 필요합니다. - xl2tpd, http://www.xelerance.com/services/software/xl2tpd
pptp를 실행하려면 다음이 필요합니다. - pptp client, http://pptpclient.sourceforge.net
l2tp와 pptp 모두 pppd도 필요합니다.
OpenVPN 2.2까지는 서버에서 추가 경로를 푸시하는 것이 항상 작동하지 않을 수 있습니다. 증상 중 일부는 업링크가 셀룰러 네트워크인 경우 ConnMan이 추가 경로를 설정하지 못하는 것입니다. 동일한 설정이 WiFi 또는 이더넷 업링크에서는 잘 작동합니다.
OpenVPN 2.4.5(최소한)까지는 관리 채널을 통해 개인 키 복호화 실패에 대한 정보를 얻을 수 없습니다. 이로 인해 복호화 실패 정보가 OpenVPN 플러그인에 전달되지 않아 잘못된 키로 계속 재시도하게 됩니다. 개인 키 복호화 실패를 보내려면 OpenVPN에 다음 패치가 필요합니다: https://git.sailfishos.org/mer-core/openvpn/blob/ 4f4b4af116292a207416c8a990392e35a6fc41af/rpm/privatekey-passphrase- handling.diff
GnuTLS를 사용할 때는 구성에 따라 GnuTLS가 /dev/urandom을 사용하여 내부 엔트로피 풀을 지연(lazy) 또는 즉시(eager) 초기화한다는 점에 유의하세요. 즉시 초기화의 경우 엔트로피 풀이 채워질 때까지 링크 로더가 ConnMan의 로딩을 지연시킵니다. 소형 시스템에서는 ConnMan의 시작이 수 초 지연될 수 있습니다(25초 이상 지연된 보고도 있었습니다).
GnuTLS는 환경 변수 GNUTLS_NO_EXPLICIT_INIT가 설정된 경우 지연 평가로 되돌릴 수 있습니다. 자세한 내용은 gnutls_global_init(3)의 매뉴얼 페이지를 읽어보세요.
ConnMan은 서비스가 연결될 때 인터넷 연결 여부를 감지하려고 시도합니다. 온라인 확인이 성공하면 서비스는 Online 상태가 되고, 그렇지 않으면 Ready 상태로 유지됩니다. 온라인 확인은 호텔에서 연결 비용을 지불해야 하는 경우처럼 ConnMan이 캡티브 포털 뒤에 있는지 감지하는 데에도 사용됩니다.
온라인 확인은 ipv4.connman.net(IPv4 연결용) 및 ipv6.connman.net (IPv6 연결용)에서 status.html 문서를 가져오려고 시도하여 수행됩니다. 사용되는 URL은 다음과 같습니다. http://ipv{4|6}.connman.net/online/status.html
온라인 확인은 다음 세 가지 모드 중 하나로 작동합니다.
여기서 "one-shot"이 기본값이며 "OnlineCheckMode" 설정에 의해 제어됩니다.
"none" 모드에서는 "온라인" HTTP 기반 인터넷 연결 확인이 수행되지 않습니다. 연결된 모든 서비스와 관리자 상태는 Ready 상태에서 종료되며 Online으로 진행되지 않습니다.
"one-shot"(기본 모드)에서는 기본 서비스(즉, 우선순위가 높은(메트릭 0) 게이트웨이 기본 경로를 가진 서비스)에 대해 단일 "온라인" HTTP 기반 인터넷 연결 확인이 수행됩니다. 확인이 성공하면 해당 서비스와 관리자 상태는 "online" 상태로 종료됩니다. 확인이 실패하면 후속 확인은 "OnlineCheckIntervalStyle", "OnlineCheckInitialInterval", "OnlineCheckMaxInterval"에 따라 다시 예약되며, 하나가 성공하거나 서비스가 연결 해제될 때까지 무기한 계속됩니다.
"continuous" 모드에서는 기본 서비스(즉, 우선순위가 높은(메트릭 0) 게이트웨이 기본 경로를 가진 서비스)에 대해 지속적인 "온라인" HTTP 기반 인터넷 연결 확인이 수행됩니다. "one-shot" 모드와 마찬가지로 첫 번째 확인이 성공하면 해당 서비스와 관리자 상태는 Online 상태로 종료됩니다. 그 후 후속 확인은 "OnlineCheckIntervalStyle" 및 "OnlineCheckMaxInterval"에 따라 예약됩니다. 확인이 실패하면 후속 확인은 "OnlineCheckIntervalStyle", "OnlineCheckInitialInterval", "OnlineCheckMaxInterval"에 따라 다시 예약됩니다. "OnlineCheckFailuresThreshold"에 도달하면 서비스와 관리자 상태는 Ready로 강등되고 서비스의 "Error" 속성은 "online-check-failed"로 설정되며 후속 확인은 계속됩니다. 그 사이에 사용 가능한 다른 서비스가 기본 서비스로 승격되어 온라인 확인이 시작될 수 있습니다. 강등된 서비스의 경우 "OnlineCheckSuccessesThreshold"에 도달하면 서비스 "Error" 속성이 지워지고 서비스 상태가 Online으로 승격되어 잠재적으로 다시 기본 서비스가 될 수 있습니다.
이 기능을 비활성화해야 하는 경우 connman.conf(5)에서 "OnlineCheckMode" 옵션을 참조하세요. "OnlineCheckIPv4URL" 및 "OnlineCheckIPv6URL" 옵션을 통해 다른 URL을 지정할 수도 있습니다. 두 온라인 확인 요청 사이의 간격 범위는 "OnlineCheckInitialInterval" 및 "OnlineCheckMaxInterval" 옵션과 "OnlineCheckIntervalStyle" 옵션으로 세밀하게 조정할 수 있습니다.
위에서 언급했듯이, "one-shot" 및 "continuous" 모드에서는 온라인 확인 요청이 실패하면("continuous" 모드의 경우 성공해도 마찬가지) 더 긴 간격 후에 다른 요청이 트리거됩니다. 간격은 "OnlineCheckIntervalStyle" 설정에 따라 "fibonacci" 또는 "geometric"의 두 가지 수학적 수열 중 하나를 따르며, 기본값은 "geometric"입니다. geometric 설정은 "OnlineCheckInitialInterval"과 "OnlineCheckMaxInterval"로 지정된 범위의 제곱 수열입니다. "OnlineCheckInitialInterval" 및 "OnlineCheckMaxInterval"의 기본값은 범위 [1, 12]이며, 이는 해당 범위에서 다음과 같은 "geometric" 간격(초)에 해당합니다: 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144. 대조적으로 해당 범위의 "fibonacci" 수열은 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144입니다. "fibonacci" 수열 및 방식은 "geometric"보다 12단계(144초에서 "geometric"과 동일 지점)까지 검사 주기가 더 공격적이지만, 그 이후에는 훨씬 더 공격적으로 줄어들어 19번째 간격에서 1시간에 도달하며, "geometric"은 60번째 간격이 되어서야 1시간에 도달합니다.
온라인 확인 절차 중에 ConnMan은 연결된 서비스가 사용하는 올바른 네트워크 인터페이스를 통해 온라인 확인 쿼리가 전달되도록 ipv4.connman.net 및 ipv6.connman.net에 대한 호스트 경로를 임시로 설치합니다. 이 호스트 경로는 온라인 확인이 완료되면 자동으로 제거됩니다. 서버는 연결 클라이언트의 IPv4/6 주소를 포함한 연결 정보를 명시적으로 기록하지 않습니다. 서버 런타임 로그는 처리된 연결 수에 따라 RAM 메모리에서 순환됩니다.
ConnMan은 온라인 확인 요청을 수행할 때 HTTP 헤더에 다음과 같은 최소한의 정보를 보냅니다(예): Host: ipv4.connman.net User-Agent: ConnMan/1.23 wispr Connection: close
현재 연결이 성공하면(200 OK HTTP 응답 코드가 반환됨) connman.net에서 다음 정보가 반환됩니다: Server: nginx Date: Mon, 09 Jun 2014 09:25:42 GMT Content-Type: text/html Connection: close X-ConnMan-Status: online
X-ConnMan-Status 필드는 포털 감지에 사용됩니다. 이 필드가 없으면 ConnMan은 포털이 WISPr을 지원하지 않는 경우 포털 로그인을 처리하기 위해 net.connman.Agent dbus 인터페이스에서 RequestBrowser 메서드를 호출합니다. 자세한 내용은 doc/agent-api.txt를 참조하세요.
메일링 리스트: [email protected]
받은 편지함으로 메일을 받기 위해 구독하려면 이메일 계정에서 (빈) 메시지를 다음 주소로 보내기만 하면 됩니다.
메일링 리스트 아카이브: https://lore.kernel.org/connman
IRC: ircs://irc.oftc.net:6697/#connman (for SSL) irc://irc.oftc.net:6667/#connman (for non-SSL)