계층화된 서비스 공급자 및 앱 분류

참고 항목

계층화된 서비스 공급자는 더 이상 사용되지 않습니다. Windows 8 및 Windows Server 2012부터 Windows 필터링 플랫폼을 사용합니다.

 

Winsock 2는 계층화된 프로토콜을 수용합니다. 계층화된 프로토콜은 원격 엔드포인트와 데이터의 실제 교환을 위해 기본 전송 스택을 사용하는 동시에 더 높은 수준의 통신 함수만 구현하는 프로토콜입니다. 계층화된 프로토콜 또는 계층화된 서비스 공급자의 예는 인증을 수행하고 상호 합의된 암호화 체계를 설정하기 위해 연결 설정 프로세스에 프로토콜을 추가하는 보안 계층입니다. 이러한 보안 프로토콜에는 일반적으로 TCP 또는 SPX와 같은 기본 신뢰할 수 있는 전송 프로토콜의 서비스가 필요합니다. 기본 공급자가 구현하는 용어 기본 프로토콜은 원격 엔드포인트와 데이터 통신을 수행할 수 있는 TCP 또는 SPX와 같은 프로토콜을 구현하는 Winsock 공급자를 나타냅니다. 계층화된 프로토콜이라는 용어는 단독으로 사용할 수 없는 프로토콜을 설명하는 데 사용됩니다. 이러한 계층화된 프로토콜은 Winsock LSP(계층화된 서비스 공급자)로 설치됩니다.

LSP의 예로 클라이언트에 ISA(인터넷 Secutity and Authentication Server)의 일부로 설치된 Microsoft 방화벽 클라이언트 서비스 공급자가 있습니다. Microsoft 방화벽 클라이언트 서비스 공급자는 TCP 및 UDP용 Winsock 기본 공급자를 통해 설치됩니다. ISA 방화벽 클라이언트 소프트웨어의 DLL(동적 연결 라이브러리)은 모든 Winsock 애플리케이션이 투명하게 사용하는 Winsock 계층화된 서비스 공급자가 됩니다. 이러한 방식으로 ISA 방화벽 클라이언트 LSP는 클라이언트 애플리케이션에서 Winsock 함수 호출을 가로채고 대상이 로컬인 경우 원래 기본 기본 서비스 공급자로 요청을 라우팅하거나 대상이 원격인 경우 ISA 서버 컴퓨터의 방화벽 서비스로 요청을 라우팅할 수 있습니다. 클라이언트에서 Microsoft Forefront Firewall Service 및 TMG(위협 관리 게이트웨이) 클라이언트의 일부로 유사한 LSP가 설치됩니다.

LSP 초기화 중에 LSP는 여러 Winsock SPI(서비스 공급자 인터페이스) 함수에 대한 포인터를 제공해야 합니다. 이러한 함수는 LSP(다른 LSP 또는 Ws2_32.DLL) 바로 위에 있는 계층에서 일반 처리 중에 호출됩니다.

LSP가 구현하는 SPI 함수의 하위 집합 및 각 함수에 대해 수행되는 추가 처리의 특성에 따라 LSP 범주를 정의할 수 있습니다. LSP를 분류하고 Winsock 소켓을 사용하는 애플리케이션을 분류하면 런타임에 LSP가 지정된 프로세스에 관여해야 하는지 여부를 선택적으로 확인할 수 있습니다.

Windows Vista 이상에서는 특정 LSP만 로드되도록 Winsock 계층화된 서비스 공급자와 애플리케이션을 모두 분류하는 새 메서드가 제공됩니다. 이러한 기능을 추가하는 데는 몇 가지 이유가 있습니다.

주된 이유 중 하나는 winlogon 및 lsass와 같은 특정 시스템 중요 프로세스에서 소켓을 만들지만 이러한 프로세스는 이러한 소켓을 사용하여 네트워크에서 트래픽을 보내지 않기 때문입니다. 따라서 대부분의 LSP는 이러한 프로세스에 로드되지 않아야 합니다. 버그가 있는 LSP로 인해 lsass.exe 가 충돌할 수 있는 여러 사례도 문서화되었습니다. lsass가 충돌하면 시스템에서 강제로 종료됩니다. LSP를 로드하는 이러한 시스템 프로세스의 부작용은 이러한 프로세스가 종료되지 않으므로 LSP가 설치되거나 제거되면 다시 부팅이 필요하다는 것입니다.

보조 이유는 애플리케이션이 특정 LSP를 로드하지 않으려는 경우가 있기 때문입니다. 예를 들어 일부 애플리케이션은 암호화 LSP를 로드하지 않을 수 있으며, 이로 인해 애플리케이션이 암호화 LSP가 설치되지 않은 다른 시스템과 통신하지 못할 수 있습니다.

마지막으로, 다른 LSP에서 LSP 범주를 사용하여 Winsock 프로토콜 체인에서 자체적으로 설치해야 하는 위치를 결정할 수 있습니다. 수년 동안 다양한 LSP 개발자들은 LSP가 어떻게 동작하는지 알 수 있는 방법을 원했습니다. 예를 들어 데이터 스트림을 검사하는 LSP는 데이터를 암호화하는 LSP 위에 있어야 합니다. 물론 이 LSP 분류 방법은 타사 LSP가 자신을 적절하게 분류하는 데 의존하기 때문에 바보 같은 증거가 아닙니다.

Windows Vista 이상의 LSP 분류 및 기타 보안 향상 기능은 사용자가 의도치 않게 악성 LSP를 설치하지 못하도록 하기 위해 설계되었습니다.

LSP 범주

Windows Vista 이상에서는 LSP가 Windows 소켓 호출 및 데이터와 상호 작용하는 방법에 따라 분류할 수 있습니다. LSP 범주는 Winsock SPI 함수의 하위 집합에서 식별 가능한 동작 그룹입니다. 예를 들어 HTTP 콘텐츠 필터는 데이터 검사기(LSP_INSPECTOR 범주)로 분류됩니다. LSP_INSPECTOR 범주는 데이터 전송 SPI 함수에 대한 매개 변수를 검사합니다(변경되지 않음). 애플리케이션은 LSP의 범주를 쿼리하고 LSP 범주 및 애플리케이션의 허용된 LSP 범주 집합에 따라 LSP를 로드하지 않도록 선택할 수 있습니다.

다음 표에서는 LSP를 분류할 수 있는 범주를 나열합니다.

LSP 범주 설명
LSP_CRYPTO_COMPRESS LSP는 암호화 또는 데이터 압축 공급자입니다.
LSP_FIREWALL LSP는 방화벽 공급자입니다.
LSP_LOCAL_CACHE LSP는 로컬 캐시 공급자입니다.
LSP_INBOUND_MODIFY LSP는 인바운드 데이터를 수정합니다.
LSP_INSPECTOR LSP는 데이터를 검사하거나 필터링합니다.
LSP_OUTBOUND_MODIFY LSP는 아웃바운드 데이터를 수정합니다.
LSP_PROXY LSP는 프록시 역할을 하며 패킷을 리디렉션합니다.
LSP_REDIRECTOR LSP는 네트워크 리렉터입니다.
LSP_SYSTEM LSP는 서비스 및 시스템 프로세스에서 사용할 수 있습니다.

 

LSP는 둘 이상의 범주에 속할 수 있습니다. 예를 들어 방화벽/보안 LSP는 검사기(LSP_INSPECTOR) 및 방화벽(LSP_FIREWALL) 범주 모두에 속할 수 있습니다.

LSP에 범주 집합이 없으면 다른 모든 범주에 있는 것으로 간주됩니다. 이 LSP 범주는 서비스 또는 시스템 프로세스(예: lsass, winlogon 및 많은 svchost 프로세스)에 로드되지 않습니다.

LSP 분류

Windows Vista 이상에서는 LSP를 분류하기 위해 몇 가지 새로운 함수를 사용할 수 있습니다.

LSP 를 분류하기 위해 WSCSetProviderInfo 또는 WSCSetProviderInfo32 함수는 GUID를 사용하여 LSP 숨겨진 항목, 이 LSP 프로토콜 항목에 대해 설정할 정보 클래스 및 함수 동작을 수정하는 데 사용되는 플래그 집합을 식별합니다.

WSCGetProviderInfo 또는 WSCGetProviderInfo32 함수는 마찬가지로 LSP에 대한 정보 클래스와 연결된 데이터를 검색하는 데 사용됩니다.

애플리케이션 분류

Windows Vista 이상에서 애플리케이션을 분류하는 데 사용할 수 있는 몇 가지 새로운 함수는 다음과 같습니다.

애플리케이션을 분류하기 위해 WSCSetApplicationCategory 함수는 애플리케이션을 식별하기 위해 실행 이미지의 로드 경로, 애플리케이션을 시작할 때 사용되는 명령줄 인수 및 이 애플리케이션의 모든 인스턴스에 허용되는 LSP 범주를 사용하여 호출됩니다.

WSCGetApplicationCategory 함수는 마찬가지로 애플리케이션과 연결된 LSP(계층화된 서비스 공급자) 범주를 검색하는 데 사용됩니다.

로드할 LSP 결정

LSP 분류의 마지막 부분은 어떤 LSP가 어떤 프로세스에 로드될지 결정하는 것입니다. 프로세스가 Winsock을 로드하는 경우 설치된 모든 LSP에 대한 애플리케이션 범주 및 LSP 범주를 다음과 같이 비교합니다.

  • 애플리케이션이 분류되지 않은 경우 모든 LSP를 프로세스에 로드하도록 허용합니다.
  • 애플리케이션과 LSP에 범주가 할당된 경우 다음 모두 true여야 합니다.
    LSP 범주 중 하나 이상이 애플리케이션의 지정된 범주에 있습니다.
    애플리케이션의 지정된 범주에 지정된 범주만 LSP 범주에 지정됩니다. 예를 들어 애플리케이션이 범주를 지정하는 경우 LSP의 범주에 있어야 합니다.
    LSP_SYSTEM 범주가 애플리케이션의 범주에 있는 경우 LSP의 범주에 있어야 합니다.

참고 항목

LSP가 분류되지 않은 경우 해당 범주는 사실상 0입니다. 일치가 발생하려면 애플리케이션의 범주에 LSP의 지정된 모든 범주가 있어야 합니다(애플리케이션의 범주는 LSP 범주의 상위 집합이어야 합니다). LSP_SYSTEM 애플리케이션 범주에 있는 경우 LSP 범주에도 있어야 합니다.

 

다음 예제를 참조하세요.

Foo.exe 애플리케이션은 LSP_SYSTEM + LSP_FIREWALL + LSP_CRYPTO_COMPRESS 분류됩니다. application Bar.exe 는 LSP_FIREWALL + LSP_CRYPTO_COMPRESS 분류됩니다. 시스템에 4개의 LSP가 설치되어 있습니다.

  • LSP1에서 LSP_SYSTEM 범주를 설정했습니다.
  • LSP2는 범주가 설정되지 않으므로 해당 범주는 0입니다.
  • LSP3에서 LSP_FIREWALL 범주를 설정했습니다.
  • LSP4에는 LSP_SYSTEM + LSP_FIREWALL + LSP_CRYPTO_COMPRESS + LSP_INSPECTOR 범주가 설정되었습니다.

이 예제 에서 Foo.exe 애플리케이션은 LSP1만 로드하고 Bar.exe 애플리케이션은 LSP3을 로드합니다.

Winsock 공급자 설치 확인

Microsoft Windows SDK(소프트웨어 개발 키트)에는 로컬 컴퓨터에 설치된 Winsock 전송 공급자를 확인하는 데 사용할 수 있는 샘플 Winsock 프로그램이 포함되어 있습니다. 기본적으로 이 Winsock 샘플의 소스 코드는 Windows 7용 Windows SDK의 다음 디렉터리에 설치됩니다.

C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\NetDs\winsock\LSP

이 샘플은 계층화된 서비스 공급자를 설치하고 테스트하기 위한 유틸리티입니다. 그러나 로컬 컴퓨터의 Winsock 카탈로그에서 자세한 정보를 프로그래밍 방식으로 수집하는 데도 사용할 수 있습니다. 기본 공급자와 계층 서비스 공급자를 포함하여 현재 Winsock 공급자를 모두 나열하려면 이 Winsock 샘플을 빌드하고 다음 콘솔 명령을 실행합니다.

instlsp -p

출력은 계층화된 서비스 공급자를 포함하여 로컬 컴퓨터에 설치된 Winsock 공급자 목록입니다. 출력에는 Winsock 공급자의 카탈로그 ID 및 문자열 이름이 나열됩니다.

모든 Winsock 공급자에 대한 자세한 정보를 수집하려면 다음 콘솔 명령을 실행합니다.

instlsp -p -v

출력은 로컬 컴퓨터에서 지원되는 WSAPROTOCOL_INFO 구조 목록입니다.

로컬 컴퓨터에 설치된 계층화된 서비스 공급자 목록의 경우 다음 콘솔 명령을 실행합니다.

instlsp -l

LSP 구조를 매핑하려면 다음 콘솔 명령을 실행합니다.

instlsp -m

참고 항목

TDI 기능은 더 이상 사용되지 않으며 이후 버전의 Microsoft Windows에서 제거될 예정입니다. TDI를 사용하는 방법에 따라 WSK(Winsock 커널) 또는 WFP(Windows 필터링 플랫폼)를 사용합니다. WFP 및 WSK에 대한 자세한 내용은 Windows 필터링 플랫폼Winsock 커널을 참조하세요. WSK 및 TDI에 대한 Windows Core 네트워킹 블로그 항목은 WSK(Winsock Kernel) 소개를 참조하세요.