코드 서명
Code signing이 글은 검증을 위해 인용구가 추가로 필요하다. – · · 책 · · (2012년 1월 (이 를 |
코드서명은 실행 파일과 스크립트에 디지털 서명을 해 소프트웨어 작성자를 확인하고 코드가 서명된 이후 변경되거나 손상되지 않았음을 보장하는 과정이다.이 프로세스는 암호화 해시의 사용을 이용하여 진정성과 무결성을 검증한다.[1]
코드 서명은 몇 가지 중요한 특징을 제공할 수 있다.코드 서명의 가장 일반적인 용도는 배치 시 보안을 제공하는 것이다. 일부 프로그래밍 언어에서는 네임스페이스 충돌을 방지하기 위해 사용될 수도 있다.거의 모든 코드 서명 구현은 작성자나 빌드 시스템의 신원을 확인하는 일종의 디지털 서명 메커니즘과 객체가 수정되지 않았음을 확인하는 체크섬을 제공할 것이다.또한 개체에 대한 버전 정보를 제공하거나 개체에 대한 다른 메타 데이터를 저장하는 데 사용될 수 있다.[2]
소프트웨어에 대한 인증 메커니즘으로서 코드 서명의 효율성은 기초 서명 키의 보안에 달려 있다.다른 공공키 인프라(PKI) 기술과 마찬가지로, 시스템의 무결성은 출판사가 자신의 개인키를 무단 접속으로부터 보호하는 것에 의존한다.범용 컴퓨터의 소프트웨어에 저장된 키는 절충되기 쉽다.따라서 하드웨어 보안 모듈 또는 HSM으로 알려진 안전하고 변조 방지 암호화 하드웨어 장치에 키를 저장하는 것이 더 안전하고 모범적인 방법이다.[3]
보안 제공
많은 코드 서명 구현은 TLS나 SSH에 의해 채택된 프로세스와 유사하게 하나의 공개 키와 하나의 비공개 키 쌍을 포함하는 시스템을 사용하여 코드를 서명하는 방법을 제공할 것이다. 예를 들어 의 경우.NET, 개발자는 개인 키를 사용하여 그들이 만들 때마다 라이브러리나 실행 파일에 서명한다.이 키는 개발자 또는 그룹에게 고유하거나 때로는 애플리케이션 또는 개체에 따라 고유할 것이다.개발자는 스스로 이 키를 생성하거나 신뢰할 수 있는 CA(인증 기관)에서 키를 얻을 수 있다.[4]
코드 서명은 지정된 코드 조각의 출처가 즉시 명확하지 않을 수 있는 분산 환경에서 특히 중요하다. 예를 들어 Java 애플릿, ActiveX 컨트롤 및 기타 활성 웹 및 브라우저 스크립팅 코드.또 다른 중요한 사용법은 기존 소프트웨어에 업데이트와 패치를 안전하게 제공하는 것이다.[5]Windows, Mac OS X 및 대부분의 Linux 배포판은 다른 사용자가 패치 시스템을 통해 악의적으로 코드를 배포할 수 없도록 코드 서명을 사용하여 업데이트를 제공한다.제3자나 물리적 매체(디스크)에 의해 업데이트가 전달되었더라도 수신 운영체제가 업데이트가 적법한지 확인할 수 있도록 한다.
Windows와 Mac OS X에서 코드 서명은 최초 실행 시 소프트웨어를 인증하는 데 사용되며, 타사 디스트리뷰터 또는 다운로드 사이트에 의해 소프트웨어가 악의적으로 변조되지 않았음을 보장한다.이러한 형태의 코드 서명은 그 플랫폼의 분산된 특성 때문에 리눅스에서는 사용되지 않으며, 패키지 매니저는 모든 형태의 소프트웨어(업데이트 및 패치뿐만 아니라)에 대한 주요 배포 모드일 뿐만 아니라, 원하는 경우 소스 코드의 직접 검사를 허용하는 오픈 소스 모델이다.데비안 기반 리눅스 배포판(다른 배포판 중)은 공용 키 암호화를 사용하여 다운로드한 패키지를 검증한다.[6]
CA(인증 기관)를 사용하여 신뢰할 수 있는 식별 정보
코드 서명을 인증하는 데 사용되는 공개 키는 신뢰할 수 있는 루트 권한 CA로 다시 추적할 수 있어야 하며, 가급적 안전한 공개 키 인프라(PKI)를 사용해야 한다.이는 코드 자체를 신뢰할 수 있다는 것을 보장하지는 않으며, 명시된 소스(또는 더 명시적으로 특정 개인 키에서)에서만 코드 자체를 신뢰할 수 있다.[7]CA는 루트 신뢰 수준을 제공하고 다른 사람에게 신뢰를 대리하여 할당할 수 있다.사용자가 CA를 신뢰하는 경우, 사용자는 해당 CA 또는 해당 대리점에 의해 생성된 키로 서명된 코드의 정당성을 신뢰할 수 있다.많은 운영 체제와 프레임워크에는 하나 이상의 인증 기관에 대한 신뢰가 내장되어 있다.또한 공공 CA와 동일한 기능을 제공하는 민간 CA를 조직 내부에 구현하는 것도 대기업이 일반적이지만 조직 내에서만 신뢰받고 있다.
확장 유효성 검사(EV) 코드 서명
확장 유효성 검사(EV) 코드 서명 인증서는 추가 유효성 검사 및 기술 요구 사항이 적용된다.이 지침은 CA/B 포럼의 기본 요건 및 확장 검증 가이드라인에 기초한다.EV 코드 서명 지침에서는 EV 고유의 검증 요건 외에 "가입자의 개인 키가 FIPS 140-2 레벨 2의 요건을 충족하거나 초과하는 암호화 모듈에 생성, 저장, 사용"[8]이라고 규정하고 있다.
윈도우즈 10 커널 모드 드라이버 서명과 같은 특정 애플리케이션에는 EV 코드 서명 인증서가 필요하다.[9]또한 마이크로소프트의 IEBlog는 "EV 코드 서명 인증서에 의해 서명된 윈도우즈 프로그램은 해당 파일이나 게시자에 대한 이전 평판이 존재하지 않더라도 SmartScreen 평판 서비스와 즉시 평판을 확립할 수 있다"[10]고 명시하고 있다.
샘플 EV 코드 서명 인증서
SSL.com이 소프트웨어 서명을 위해 사용하는 디코딩된 EV 코드 서명 인증서의 예다. SSL.com EV Code Signing Intermediate CA RSA R3
발급자의 commonName으로 표시되며, 이를 EV 코드 서명 인증서로 식별한다.인증서의Subject
필드에서는 SSL Corporation을 조직으로 설명한다. Code Signing
유일한 X509v3 확장 키 사용으로 표시된다.
인증서:Data: Version: 3 (0x2) Serial Number: 59:4e:2d:88:5a:2c:b0:1a:5e:d6:4c:7b:df:35:59:7d Signature Algorithm: sha256WithRSAEncryption Issuer: commonName = SSL.com EV Code Signing Intermediate CA RSA R3 organizationName = SSL Corp localityName= Houston StateOrProvinceName = Texas countryName = 미국 유효 기간 이전:Aug 30 20:29:13 2019 GMT Not After : Nov 12 20:29:13 2022 GMT Subject: 1.3.6.1.4.1.311.60.2.1.3 = US 1.3.6.1.4.1.311.60.2.1.2 = Nevada streetAddress = 3100 Richmond Ave Ste 503 businessCategory = Private Organization postalCode = 77098 commonName = SSL CorpleNumber = NV20081614243 organizationName = SSL corpocalityName = Houston stateOrProvinceName = 텍사스 countryName = 미국 제목 공개 키 정보: 공개 키 알gorithm: rsa암호화 공개키: (2048비트) Modulus: 00:c3:e9:ae:be:d7:a2:6f:2f:24 ...Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Authority Key Identifier: keyid:36:BD:49:FF:31:2C:EB:AF:6A:40:FE:99:C0:16:ED:BA:FC:48:DD:5F Authority Information Access: CA Issuers - URI:http://www.ssl.com/repository/SSLcom-SubCA-EV-CodeSigning-RSA-4096-R3.crt OCSP - URI:http://ocsps.ssl.com X509v3 인증서 정책:정책: 2.23.140.1.3 정책: 1.2.616.1.113527.2.5.1.7 정책: 1.3.6.1.4.1.38064.1.3.3.2 CPS: https://www.ssl.com/repository X509v3 확장 키 사용: 코드 서명 X509v3 CRL 배포 지점:전체 이름: URI:http://crls.ssl.com/SSLcom-SubCA-EV-CodeSigning-RSA-4096-R3.crl X509v3 주체 키 식별자: EC:6A:64:06:26:A7:7A:69:E8:CC:06:D5:6F:FA:E1:C2:9A:29:79:DE X509v3 키 사용: 중요 디지털 시그니처 시그니처 알고리즘: sah256WithRSAEncryption 17:d7:a1:26:58:31:2b:9f:3b ...
CA에 대한 대안
또 다른 모델은 개발자가 자체 개발한 키를 제공하기로 선택할 수 있는 최초 사용 모델에 대한 신뢰다.이 시나리오에서 사용자는 보통 어떤 방식으로든 개발자로부터 직접 공개 키를 가져와야 처음으로 오브젝트가 자신에게서 나왔는지 확인할 수 있다.많은 코드 서명 시스템은 서명 안에 공개 키를 저장할 것이다.실행하기 전에 코드의 서명을 확인하는 일부 소프트웨어 프레임워크와 OS를 사용하면 첫 실행 후 그 시점부터 개발자를 신뢰하도록 선택할 수 있다.애플리케이션 개발자는 설치자에 공개 키를 포함시킴으로써 유사한 시스템을 제공할 수 있다.그런 다음 키를 사용하여 업그레이드, 플러그인 또는 다른 애플리케이션과 같이 실행해야 하는 후속 개체를 모두 동일한 개발자로부터 가져온 것으로 검증할 수 있다.
타임 스탬핑
타임 스탬핑은 만료된 인증서의 경우 나타날 신뢰 경고를 회피하기 위해 고안되었다.사실상, 타임 스탬핑은 인증서의 유효기간을 넘어 코드 트러스트를 확장한다.[11]
타협으로 증명서가 취소될 수밖에 없는 경우, 타협 사건의 구체적인 날짜와 시간은 취소 기록의 일부가 된다.이 경우 시간 스탬핑을 통해 인증서가 손상되기 전 또는 후에 코드가 서명되었는지 여부를 확인할 수 있다.[11]
Xcode의 코드 서명
개발자들은 iOS와 TVOS 앱을 실행하기 전, 그리고 앱 스토어에 업로드하기 전에 서명해야 한다.이는 개발자가 유효한 애플 개발자 ID를 소유하고 있음을 증명하기 위해 필요하다.응용 프로그램은 장치에서 실행될 수 있도록 유효한 프로필이나 인증서가 필요하다.
문제
다른 보안 조치와 마찬가지로 코드 서명은 실패할 수 있다.사용자들은 서명되지 않은 코드를 실행하도록 속일 수 있고, 심지어 검증을 거부하는 실행 코드로도 속일 수 있으며, 시스템은 개인 키가 비공개인 경우에만 안전성을 유지한다.[12][13]
또한 코드 서명은 소프트웨어 작성자에 의한 악의적인 활동이나 의도하지 않은 소프트웨어 버그로부터 최종 사용자를 보호하지 않는다는 점에 유의해야 한다. 단지 작성자 이외의 사람이 소프트웨어를 수정하지 않았음을 보장할 뿐이다.샌드박스 시스템이 잘못된 타임 스탬프나 RAM 사용 과다로 인해 인증서를 받지 못하는 경우도 있다.
구현
마이크로소프트는 마이크로소프트 테스트 드라이버를 위해 제공되는 코드 서명 형식(인증코드 기반)을 구현한다.드라이버는 커널에서 실행되기 때문에 시스템을 불안정하게 하거나 보안 구멍에 시스템을 개방할 수 있다.이러한 이유로 마이크로소프트는 자사의 WHQL 프로그램에 제출된 드라이버를 테스트한다.드라이버가 통과된 후 Microsoft는 드라이버 버전이 안전하다고 서명한다.32비트 시스템에서만 마이크로소프트와 검증되지 않은 드라이버 설치는 코드가 서명되지 않았다는 사용자에게 즉시 경고하는 즉시 설치를 허용하기로 동의한 후 가능하다..NET(관리) 코드의 경우, 인증서와 반대로 Public/Private 키와 SHA-1 해시를 사용하는 Strong Name Signing이라는 추가적인 메커니즘이 있다.그러나 마이크로소프트는 Authenticode의 대체품으로 Strong Name Signing에 대한 의존을 단념하고 있다.[14]
게임 및 소비자 장치의 서명되지 않은 코드
게임 콘솔과 같은 소비자 기기의 맥락에서, "부호화되지 않은 코드"라는 용어는 소프트웨어가 일반적으로 받아들여지고 실행되기 위해 필요한 암호 키로 서명되지 않은 응용 프로그램을 가리키는 데 종종 사용된다.대부분의 콘솔 게임은 콘솔 메이커에 의해 고안된 비밀 키로 서명되어야 한다. 그렇지 않으면 게임은 콘솔에 로딩되지 않을 것이다.소프트웨어 공격, modchip의 사용, swap trick 또는 softmod를 실행하는 것을 포함하여, 서명되지 않은 코드를 실행하는 몇 가지 방법이 있다.
서명된 응용 프로그램을 다른 DVD에 복사하는 것만으로는 부팅이 불가능한 것은 처음에는 분명해 보이지 않을 수 있다.Xbox에서 그 이유는 XBE(Xbox 실행 파일)에 XBE가 부팅 가능한 미디어 유형을 지정하는 미디어 유형 플래그가 포함되어 있기 때문이다.거의 모든 Xbox 소프트웨어에서 실행 파일이 공장에서 생산된 디스크에서만 부팅되도록 설정되므로 실행 파일을 굽기 가능한 미디어에 복사하는 것만으로도 소프트웨어 실행을 중지하는 데 충분하다.
그러나 실행 파일이 서명되기 때문에 단순히 플래그 값을 변경하는 것은 실행 파일의 서명을 변경하여 확인 시 유효성 검사에 실패하기 때문에 가능하지 않다.
참고 항목
참조
- ^ "Introduction to Code Signing".
- ^ Hendric, William (2015). "A Complete overview of Trusted Certificates - CABForum" (PDF). Retrieved 2015-02-26.
- ^ "Securing your Private Keys as Best Practice for Code Signing Certificates" (PDF).
- ^ Hendric, William (17 June 2011). "What is Code Signing?". Retrieved 26 February 2015.
- ^ "Digital Signatures and Windows Installer".
- ^ "SecureApt - Debian Wiki".
- ^ https://casecurity.org/wp-content/uploads/2013/10/CASC-Code-Signing.pdf
- ^ "Guidelines For The Issuance And Management Of Extended Validation Code Signing Certificates" (PDF). CA/Browser Forum. Retrieved 4 December 2019.
- ^ "Driver Signing Policy". Microsoft. Retrieved 9 December 2019.
- ^ "Microsoft SmartScreen & Extended Validation (EV) Code Signing Certificates". Microsoft. Retrieved 9 December 2019.
- ^ a b Morton, Bruce. "Code Signing" (PDF). CASC. Retrieved 21 February 2014.
- ^ "Fake antivirus solutions increasingly have stolen code-signing certificates". 9 January 2014.
- ^ http://www.eweek.com/c/a/Security/Theres-A-Racket-Brewing-In-the-Code-Signing-Cert-Business/[데드링크]
- ^ 강력한 이름 바이패스: .NET 보안 블로그