- Windows 무결성과 보안을 보장하기 위해 대부분의 64비트 드라이버, 특히 커널 모드 드라이버에는 유효한 디지털 서명이 필요합니다.
- 서명은 SignTool이나 Visual Studio와 같은 도구와 신뢰할 수 있는 기관에서 발급한 인증서를 사용하여 바이너리 파일과 카탈로그 모두에 적용할 수 있습니다.
- 자체 서명 인증서는 개발 및 테스트를 용이하게 합니다. 드라이버 서명되지 않음 윈도우 78.1 및 10 x64 형식을 지원하지만, 공개 배포용 상업용 서명을 대체하지는 않습니다.
- 윈도우 버전 간의 호환성은 적절한 해시 알고리즘(예: SHA2)을 사용하고 마이크로소프트 및 WHQL 지침을 준수하는 데 달려 있습니다.
윈도우에서 드라이버에 서명하는 것은 언뜻 보기에 고도의 기술력을 갖춘 개발자만 할 수 있는 작업처럼 보일 수 있지만, 만약 여러분이 개발자로서 윈도우 관련 업무를 한다면, 장치, 사용자 지정 드라이버 또는 테스트 환경조만간 이러한 요구 사항에 직면하게 될 것입니다. 최신 시스템, 특히 64비트 시스템에서 Windows는 커널에 몰래 침투하려는 모든 바이너리를 더 이상 신뢰하지 않습니다. 유효한 디지털 서명, SHA2와 같은 최신 알고리즘, 그리고 많은 경우 Microsoft의 인증을 요구합니다.
다음에서는 관리자 계약서에 서명한다는 것이 정확히 무엇을 의미하는지, 그리고 어떤 차이점이 있는지 차분히 살펴보겠습니다. 커널 모드 및 사용자 모드이것이 64비트 Windows 7, 8, 8.1 및 10에 미치는 영향, SignTool 또는 Visual Studio와 같은 도구의 역할, 그리고 개발 환경(테스트 또는 자체 서명 인증서)과 신뢰할 수 있는 기관에서 발급한 인증서를 사용하는 공개 배포 환경에 사용할 수 있는 옵션에 대해 알아봅니다.
윈도우에서 드라이버 서명이란 무엇이며 왜 필수적인가요?
Windows에서 드라이버 서명은 드라이버를 연결하는 과정을 포함합니다. 드라이버 패키지에 대한 디지털 서명 (바이너리 파일, INF 파일, 카탈로그 등) 파일을 보관하는 이유는 두 가지를 보장하기 위해서입니다. 첫째, 파일이 생성된 이후로 누구도 파일을 조작하지 않았다는 것, 둘째, 해당 파일이 명시된 게시자(소프트웨어 제공업체 또는 제조업체)로부터 실제로 제공되었다는 것을 보장하기 위해서입니다. 하드웨어).
실제로 윈도우 장치 설치 과정에서 이러한 디지털 서명은 다음과 같은 용도로 사용됩니다. 패키지의 무결성을 확인합니다. 그리고 게시자의 신원 정보도 확인합니다. 서명이 손상되었거나, 신뢰할 수 없는 인증서가 있거나, 해시값이 잘못되었거나 하는 등의 불일치가 있는 경우, 시스템은 경고를 표시하거나 설치를 차단하거나 드라이버 로드를 거부합니다.
Windows Vista 64비트 이후, 특히 Windows 7, 8, 8.1 및 10 x64에서는 커널 모드 보안 정책이 명확합니다. 커널에서 실행될 모든 드라이버는 커널 모드 보안 정책을 준수해야 합니다. 정식으로 서명되어야 합니다.그렇지 않으면 드라이버가 로드되지 않고 장치가 작동 불능 상태가 될 수 있으며, 유효하지 않은 바이너리가 강제로 로드될 경우 블루스크린이 발생할 수도 있습니다.
마이크로소프트에서 드라이버 인증을 받기로 결정했다면, Windows 하드웨어 품질 연구소(WHQL) 검증 절차에 드라이버를 제출할 수 있습니다. 드라이버 패키지가 인증 테스트를 통과하면 마이크로소프트에서 인증을 부여합니다. WHQL 공식 서명이는 신뢰성과 호환성을 향상시킬 뿐만 아니라 드라이버를 배포할 수 있도록 해줍니다. Windows Update를 그리고 마이크로소프트가 지원하는 기타 유통 채널.
윈도우 10 버전 1507부터 마이크로소프트 하드웨어 개발 센터를 통해 서명된 모든 드라이버는 다음 형식을 사용하여 서명된다는 점을 유념해야 합니다. SHA2는 해시 알고리즘입니다.SHA1은 이러한 시나리오에서 더 이상 사용되지 않으며, 특히 최신 시스템에서는 기존 인증서를 혼용하면 문제가 발생할 수 있습니다.

커널 모드와 사용자 모드에서의 드라이버 서명 방식의 차이점
Windows에서 실행되는 드라이버는 커널 모드 및 사용자 모드두 환경의 서명 정책이 완전히 동일하지는 않지만, 운영 체제의 새 버전이 출시될 때마다 점점 더 엄격해지는 경향이 있습니다.
커널 모드 드라이버는 시스템 커널에서 실행되고 메모리와 하드웨어에 대한 특권 액세스 권한을 가지기 때문에 가장 민감합니다. Windows Vista 이상 64비트 버전에서는 이러한 드라이버가 서명이 필요합니다. 요금이 부과되기 위해서는 이러한 제한이 필요합니다. 이 제한은 시스템 안정성 및 보호와 직접적인 관련이 있습니다. 악성 코드 그것은 낮은 수준으로 주입하려고 시도합니다.
반면, 사용자 모드에서 작동하는 드라이버(예: 많은 프린터 드라이버 및 추가 구성 요소)는 원래 그러한 엄격한 의무를 따르지 않았습니다. 실제로 이전 버전의 Windows에서는 그것은 절대적인 필수 조건은 아니었습니다. 이러한 드라이버에 서명이 되어 있어야 한다는 것은 아닙니다. 하지만 마이크로소프트는 보안상의 이유로 항상 드라이버 서명을 권장해 왔으며, Windows 8 이후로는 특정 유형의 사용자 드라이버에 서명이 필수적인 경우가 있습니다.
일반적인 예로, x64 컴퓨터에 설치되는 프린터 드라이버는 일반적으로 설치 과정 중에 사용자 확인을 요청하는 대화 상자를 표시합니다. 실제로 해당 패키지는 정식으로 서명되어야 합니다. 설치 과정이 중단되거나 심각한 보안 경고 없이 진행될 수 있도록 하기 위함입니다.
요점은 사용자 모드에서 보편적인 요구 사항은 아니지만 마이크로소프트가 이를 점점 더 권장하고 있다는 것입니다. 모든 드라이버 관련 소프트웨어는 서명되어야 합니다.서명을 통해 누가 생성했는지 확실하게 확인할 수 있고, 변조 여부를 감지할 수 있으며, 악성 구성 요소가 합법적인 컨트롤러로 위장하여 침투할 위험을 줄일 수 있습니다.
윈도우 버전별 서명 요구 사항 및 SHA 알고리즘
가장 골치 아픈 문제 중 하나는 윈도우 버전과 해시 알고리즘(예: ...) 간의 호환성 문제입니다. SHA1과 SHA2많은 개발자들이 한 시스템에서는 작동하지만 다른 시스템에서는 작동하지 않는 드라이버를 접하게 되는데, 그 원인의 상당 부분은 서명 정책의 변경에 있습니다.
64비트 윈도우 7이나 8과 같은 구형 시스템에서는 SHA1 기반의 인증서와 서명을 사용하는 것이 일반적이었지만, 마이크로소프트는 이미 이에 대해 경고한 바 있습니다. SHA1은 보안 측면에서 부족했습니다.윈도우 8.1 및 10 개발이 진행됨에 따라 SHA2는 코드 및 드라이버 서명의 표준으로 자리 잡았습니다.
실제로 일부 제조업체는 Microsoft 이외의 기관에서 발급한 이중 인증서(SHA1 및 SHA2)를 내장하여 커널 모드 바이너리에 서명하는 방식을 선택했습니다. 이러한 이중 서명된 바이너리는 특정 경우에, Windows 10 이전 버전에서는 로드되지 않습니다.일부 윈도우 10 시스템에서는 심각한 시스템 충돌이나 블루스크린을 유발할 수도 있습니다.
이러한 문제를 완화하기 위해 Microsoft는 KB 3081436 업데이트와 같은 특정 패치를 출시했습니다. 영향을 받는 시스템에 이 업데이트를 설치하면 특정 SHA2 서명 드라이버와의 호환성 문제가 해결되고 호환 드라이버 목록이 제공됩니다. 참조 SHA 해시 값 해당 지원 문서의 "추가 정보 - 파일 해시 정보" 섹션을 참조하십시오.
여러 버전의 Windows에서 작동해야 하는 드라이버를 배포하려는 경우, 다음 사항을 검토하는 것이 필수적입니다. 버전별 서명 요구 사항 마이크로소프트에서 자세히 설명한 내용입니다. 여기에는 어떤 알고리즘이 유효한지, 하위 호환성은 어떻게 처리되는지, 그리고 어떤 서명 조합(카탈로그, 내장 바이너리, 교차 인증서 등)이 공식적으로 허용되는지가 명시되어 있습니다.
사용자 모드 드라이버 서명: 권장 사항 및 자료
커널이 가장 많은 관심을 받는 경우가 많지만, 사용자 모드 드라이버 서명 또한 주목할 만한 가치가 있습니다. 마이크로소프트는 처음부터 이를 엄격하게 시행하지는 않았지만, 나중에는 적용했습니다. 안전 유지를 강력히 권장합니다. 시스템에 대한 신뢰를 제공하고 최종 사용자에게 확신을 줍니다.
사용자 모드 드라이버의 시그니처는 기본적으로 커널 모드에서와 동일한 기능을 수행합니다. 컨트롤러 제공업체를 식별합니다. (제조업체, ISV 등)의 서명을 확인하고 패키지가 서명된 이후 수정되지 않았음을 확인합니다. 예를 들어, 사용자가 x64 컴퓨터에 사용자 모드 드라이버가 포함된 프린터를 설치할 때 설치 마법사에서 게시자를 신뢰할지 묻는 대화 상자가 표시될 수 있습니다. 서명이 유효하고 인증서가 인정된 기관에 속하면 설치가 훨씬 원활하게 진행되고 경고 메시지도 훨씬 줄어듭니다.
Microsoft는 서명 프로세스를 자세히 다루는 일련의 문서와 튜토리얼을 제공하며, 그중 상당수는 원래 커널 모드를 위해 설계되었지만 사용자 모드에도 적용할 수 있습니다. 주요 문서는 다음과 같습니다. 운전자 서명 또한 커널 모드 코드 서명 튜토리얼 내의 하위 주제인 "커널 모듈에 버전 서명하는 방법"은 Windows에서 코드 서명의 일반적인 논리를 이해하는 데 좋은 출발점입니다.
또한 Windows Driver Kit(WDK) 설치에는 도움말 파일이 포함되어 있습니다. selfsign_readme.htm디렉토리에 위치 셀프사인이 문서에서는 테스트 인증서를 생성하는 방법과 개발 과정에서 이를 사용하는 방법을 설명합니다. 특히 신뢰할 수 있는 루트 인증 기관에서 발급한 인증서가 아직 없는 경우에 유용합니다.
요약하자면, 사용자 모드 드라이버는 기술적으로 일부 시나리오에서는 서명 없이도 작동할 수 있지만, 보안, 브랜드 이미지 및 Windows 설치 마법사와의 호환성 때문에 서명이 필수적인 것으로 간주해야 합니다. 운전자와 계약하는 것이 가장 현명한 방법입니다..
SignTool을 사용하여 Windows 7 및 8에서 커널 모드 드라이버에 서명하기
64비트 Windows 7 및 8 환경에서 커널 모드 드라이버에 서명하는 가장 일반적인 방법 중 하나는 명령줄 도구를 사용하는 것입니다. 명령 서명 도구Windows SDK에 포함된 이 유틸리티를 사용하면 파일에 서명하고 기존 서명을 확인할 수 있으며, 다양한 시나리오에 맞는 폭넓은 옵션을 제공합니다.
가장 중요한 몇 가지 옵션 SignTool의 주요 기능은 다음과 같습니다.
- /ac: 추가 인증서를 지정합니다. 예를 들어, 사용자의 인증서를 신뢰할 수 있는 루트 인증 기관에 연결하는 교차 인증서를 지정할 수 있습니다.
- /f: 서명 인증서가 포함된 파일(일반적으로 .pfx 파일)을 나타냅니다.
- /p: .pfx 파일에 저장된 서명 인증서와 연결된 암호를 제공합니다.
- /fd: 파일 서명을 생성할 때 사용되는 해시 알고리즘을 정의합니다. 예를 들어, /fd sha256 SHA256을 기반으로 서명을 생성합니다(별도로 지정하지 않으면 이전 버전에서는 일반적으로 SHA1이 기본값입니다).
- /n «인증서의 일반 이름»Windows 인증서 저장소에서 일반 이름(CN)을 기준으로 특정 인증서를 선택할 수 있습니다.
- /t: Microsoft Authenticode 체계와 호환되는 타임스탬핑 서버를 지정합니다.
- /tr: RFC 3161을 준수하는 타임스탬프 서버를 나타내며, 이는 최신 기술이므로 새로운 구현에 권장됩니다.
드라이버 프로젝트를 진행할 때 서명이 필요한 파일을 아는 것이 중요합니다. Windows 7 또는 8에 드라이버가 올바르게 설치되려면 서명이 되어 있어야 합니다. 프로젝트의 모든 관련 바이너리 (예를 들어, .sys 파일)과 패키지에 포함된 파일들을 그룹화하는 카탈로그 파일(.cat)도 포함됩니다.
크게 두 가지 방법이 있습니다. 해당 파일들을 SignTool이 설치된 작업 디렉토리로 복사하거나, 직접 실행하는 것입니다. 해당 파일들을 Windows SDK bin 폴더로 이동하세요. 그리고 거기서 도구를 실행하세요. 중요한 것은 서명에 사용할 바이너리 파일과 인증서를 모두 준비해 두어야 한다는 것입니다.
일반적인 시나리오는 적절한 코드 서명 인증서를 획득하는 것을 포함합니다. 예를 들어, "Microsoft Cross Certificate" 인증서 GlobalSign 또는 다른 신뢰할 수 있는 기관에서 발급한 교차 인증서(CrossCert.crt)를 기본 코드 서명 인증서(예: CodeSign.pfx)와 함께 작업 디렉터리에 배치하고 다음과 유사한 명령을 실행합니다.
signtool sign /ac CrossCert.crt /f CodeSign.pfx /p password1234 /tr http://timestamp.globalsign.com/tsa/r6advanced1 filter.sys
이 명령은 서명을 생성합니다. 교차 인증이 포함됩니다 그리고 GlobalSign의 RFC 3161 서버에서 타임스탬프를 가져옵니다. 타임스탬프는 인증서가 나중에 만료되더라도 해당 파일이 인증서가 유효했던 날짜에 서명되었음을 증명하기 때문에 중요합니다.
파일에 서명한 후에는 모든 것이 올바른지 확인해야 합니다. 일반적으로 다음과 같은 검증 명령어를 사용하여 확인합니다.
signtool verify -v -kp filename.sys
선택 -v 이 기능은 인증서 체인에 대한 자세한 정보를 보여주는 상세 출력을 강제하며, 옵션도 제공합니다. -kp 이 과정은 커널 모드 드라이버의 특정 코드 서명 기준에 따라 서명을 검증합니다. 모든 것이 정상적으로 진행되면 서명과 인증서 체인이 올바르다는 결과가 표시됩니다.
마지막으로 추천합니다 .cat 파일에 대해서도 동일한 서명 및 검증 과정을 반복하십시오. 패키지의 일부입니다. 바이너리 파일과 카탈로그 모두 제대로 서명되면 Windows 7 및 8 x64에 보안 문제 없이 드라이버를 설치할 수 있으며, 설치 마법사 중에 신뢰할 수 있는 게시자 정보와 표준 시스템 창이 나타납니다.
이 도구의 모든 변형에 대해 더 자세히 알아보려면 Microsoft에서 제공하는 포괄적인 SignTool 명령 참조와 함께 다음 자료를 참조하십시오. 커널 모드에서 코드 서명을 위한 구체적인 튜토리얼 또한 윈도우 커널 모듈의 디지털 서명에 관한 문서도 제공합니다. 이러한 자료들은 특수한 경우, 고급 매개변수, 그리고 각 시스템 버전의 특징을 설명합니다.
바이트와 기술 전반에 관한 세계에 대한 열정적인 작가입니다. 나는 글쓰기를 통해 내 지식을 공유하는 것을 좋아하며 이것이 바로 이 블로그에서 할 일이며 가젯, 소프트웨어, 하드웨어, 기술 동향 등에 관한 가장 흥미로운 모든 것을 보여 드리겠습니다. 제 목표는 여러분이 간단하고 재미있는 방식으로 디지털 세계를 탐색할 수 있도록 돕는 것입니다.