ページの本文へ

Hitachi

Hitachi Incdent Response Team

HIRT-PUB14002:Authenticode 署名

更新日:2014年02月12日

1. 概要

2013年8月中旬、マイクロソフトから MD5 ハッシュ付き証明書の使用を制限 (廃止) する更新プログラムがリリースされました。 そして、2014年2月12日、更新プログラムの Microsoft Update 経由での自動更新が始まりました。

更新プログラムを適用した場合、CertGetCertificateChain 関数を呼び出すマイクロソフト製品またはサードパーティ製品は、MD5 ハッシュが含まれる証明書を信頼しなくなります。 CertGetCertificateChain 関数は、終端証明書から開始される証明書チェーンコンテキストを構築し、チェーンを検証するときに、チェーン内のすべての証明書を調べ、MD5 ハッシュが含まれていないことを確認します。 チェーン内のいずれかの証明書に MD5 ハッシュが含まれている場合、終端証明書は信頼されません。

このため、事前に、証明書で使用している署名ハッシュアルゴリズムの確認、更新プログラムを適用した環境での動作確認などを実施しておくこと必要があります。 HIRT-PUB14002 では、Windows 環境でファイルに格納されている Authenticode 署名には、どのような情報が格納されているのか、 また、Authenticode 署名の証明書で使用している署名ハッシュアルゴリズムの確認方法を紹介します。

なお、署名ハッシュアルゴリズムを確認する際に、留意しておくべき点があります。

「信頼されたルート証明書機関 (図10:証明書マネージャ)」などポリシー設定で信頼されている証明書については、署名ハッシュアルゴリズムに関係なく信頼されます。

更新プログラムのチェックは、上記以外の証明書(ポリシー設定で信頼されている証明書以外) を対象に、MD5 による署名ハッシュアルゴリズムが含まれているかどうかを確認することになります。

  • マイクロソフト ルート証明書プログラムでの MD5 ハッシュ アルゴリズム廃止用の更新プログラム
    http://technet.microsoft.com/ja-jp/security/advisory/2862973
  • マイクロソフト セキュリティ アドバイザリ: マイクロソフト ルート証明書プログラムでの MD5 ハッシュ アルゴリズム廃止用の更新プログラム (2013 年 8 月 13 日)
    http://support.microsoft.com/kb/2862973/ja
    更新プログラムの適用条件、適用除外に関する情報が記載されています。

2. Authenticode 署名のフォーマット

Windows 環境でファイルに格納されている Authenticode 署名は、PKCS #7 の signedData の形式で構成され、ASN.1 (Abstract Syntax Notation One) 記述でファイルに格納されています。

SignedData ::= SEQUENCE {
  version            Version,
  digestAlgorithms   DigestAlgorithmIdentifiers,
  contentInfo        ContentInfo,
  certificates       [0] IMPLICIT ExtendedCertificatesAndCertificates OPTIONAL,
  Crls               [1] IMPLICIT CertificateRevocationLists OPTIONAL,
  signerInfos        SignerInfos }

 

contentInfo には、PKCS #7 の signedData の形式で格納されているコンテンツに関する情報を記載します。 certificates には証明書群を格納し、Crls には証明書失効リスト(CRL: Certificate Revocation List)、 signerInfos には署名群(コード署名、タイムスタンプ署名など)を格納します。

3. PE ファイルに格納されている Authenticode 署名

ここでは、ファイル winsdk_web.exe (Microsoft Windows SDK for Windows 7.1 Setup) (図1) を例題として取り上げ、 PE ファイルに格納されている Authenticode 署名をみていきます。

Properties of winsdk_web.exe
図1:ファイル winsdk_web.exe のプロパティ

ファイル winsdk_web.exe の場合、Authenticode 署名は、ASN.1 記述でファイルの後方(0x7AE1B〜0x7C54E)に格納されています (図2)。

Binary date of Authenticode signature
図2:ファイル winsdk_web.exe に格納されている Authenticode 署名

格納されている Authenticode 署名については、[ファイルのプロパティ|デジタル署名] から辿っていくことで、 コード署名(図3 コード署名C)、コード署名に関する X.509 証明書(図3 コード署名C1〜C3)、タイムスタンプ署名(図3 タイムスタンプ署名T)、タイムスタンプ署名に関する X.509 証明書(図3 タイムスタンプ署名T1〜T3)として、その内容を確認できます(図3)。

GUI view of Authenticode signature
図3:PE ファイルに格納されているデジタル署名の確認

 

ここからは、ファイル winsdk_web.exe に格納されている Authenticode 署名をバイナリデータとして抽出し、ASN.1を解釈して表示する ASN.1ビューアを使って内容をみていきます。

version

-- pkcs7-signedData
 --- 1

 

digestAlgorithms

   --+ sha1
       NULL

 

contentInfo

   -- 1.3.6.1.4.1.311.2.1.4 (SPC_INDIRECT_DATA_OBJID) ・・・マイクロソフト暗号化の Oid
    ---- 1.3.6.1.4.1.311.2.1.15 (SPC_PE_IMAGE_DATAOBJ OID) ・・・マイクロソフト暗号化の Oid
       -- BIT STRING
        --- CONTEXT [0]
      --+ sha1
          NULL
       - OCTET STRING

 

マイクロソフト暗号化の Oid のうち、Authenticode 関連の Software Publishing として、次の Oid が定義されています。 contentInfo には、 PE ファイルの場合、SPC_INDIRECT_DATA_OBJID, SPC_PE_IMAGE_DATAOBJ OID が格納され、 CAB ファイルの場合、SPC_INDIRECT_DATA_OBJID, SPC_CAB_DATA_OBJID (1.3.6.1.4.1.311.2.1.25)が格納されます。

Authenticode....................................1.3.6.1.4.1.311.2
     Software Publishing (with associated encoders/decoders)
        SPC_INDIRECT_DATA_OBJID                 1.3.6.1.4.1.311.2.1.4
        SPC_STATEMENT_TYPE_OBJID                1.3.6.1.4.1.311.2.1.11
        SPC_SP_OPUS_INFO_OBJID                  1.3.6.1.4.1.311.2.1.12
        SPC_PE_IMAGE_DATA_OBJID                 1.3.6.1.4.1.311.2.1.15
        SPC_SP_AGENCY_INFO_OBJID                1.3.6.1.4.1.311.2.1.10
        SPC_MINIMAL_CRITERIA_OBJID              1.3.6.1.4.1.311.2.1.26
        SPC_FINANCIAL_CRITERIA_OBJID            1.3.6.1.4.1.311.2.1.27
        SPC_LINK_OBJID                          1.3.6.1.4.1.311.2.1.28
        SPC_HASH_INFO_OBJID                     1.3.6.1.4.1.311.2.1.29
        SPC_SIPINFO_OBJID                       1.3.6.1.4.1.311.2.1.30
     
     Software Publishing (with NO associated encoders/decoders)
        SPC_CERT_EXTENSIONS_OBJID               1.3.6.1.4.1.311.2.1.14
        SPC_RAW_FILE_DATA_OBJID                 1.3.6.1.4.1.311.2.1.18
        SPC_STRUCTURED_STORAGE_DATA_OBJID       1.3.6.1.4.1.311.2.1.19
        SPC_JAVA_CLASS_DATA_OBJID               1.3.6.1.4.1.311.2.1.20
        SPC_INDIVIDUAL_SP_KEY_PURPOSE_OBJID     1.3.6.1.4.1.311.2.1.21
        SPC_COMMERCIAL_SP_KEY_PURPOSE_OBJID     1.3.6.1.4.1.311.2.1.22
        SPC_CAB_DATA_OBJID                      1.3.6.1.4.1.311.2.1.25
        SPC_GLUE_RDN_OBJID                      1.3.6.1.4.1.311.2.1.25 

 

 

certificates

certificates には、4 つの証明書が格納されています。

シリアル番号:2E AB 11 DC 50 FF 5C 9D CB C0

   ----- 2
      - INTEGER (2E AB 11 DC 50 FF 5C 9D CB C0) ・・・シリアル番号
      -+ sha1WithRSA
         NULL
      ---+ organizationalUnitName
           Copyright (c) 1997 Microsoft Corp.
       --+ organizationalUnitName
           Microsoft Corporation
       --+ commonName
           Microsoft Root Authority ・・・発行者
      -+ 070822223102Z (2007/08/23 07:31:02 JST) ・・・有効期間の開始
         120825070000Z (2012/08/25 16:00:00 JST) ・・・有効期間の終了
      ---+ countryName
           US
       --+ stateOrProvinceName
           Washington
       --+ localityName
           Redmond
       --+ organizationName
           Microsoft Corporation
       --+ commonName
           Microsoft Code Signing PCA ・・・サブジェクト(発行先)
      --+ rsaEncryption
          NULL
       - BIT STRING
      ---+ X509v3 Extended Key Usage ・・・拡張キー使用方法
           OCTET STRING (1.3.6.1.5.5.7.3.3) ・・・コード署名
        -+ 2.5.29.1 (old Authority Key Identifier) ・・・機関キー識別子
           OCTET STRING
        -+ X509v3 Basic Constraints ・・・基本制限
           true
           OCTET STRING
        -+ X509v3 Subject Key Identifier ・・・サブジェクトキー識別子
           OCTET STRING
        -+ X509v3 Key Usage ・・・キー使用方法
           OCTET STRING (86) ・・・Digital Signature, Certificate Signing, 
                                   Off-line CRL Signing, CRL Signing
     -+ sha1WithRSA
        NULL
     - BIT STRING

Certificate Chain of 2eab11dc50ff5c9dcbc0 Certificate of 2eab11dc50ff5c9dcbc0
図4:シリアル番号:2EAB11DC50FF5C9DCBC0
[X.509 証明書(図3 コード署名C2)]

シリアル番号:61 01 CF 3E 00 00 00 00 00 0F

    ---- 2
      - INTEGER (61 01 CF 3E 00 00 00 00 00 0F) ・・・シリアル番号
      -+ sha1WithRSAEncryption
         NULL
      ---+ countryName
           US
       --+ stateOrProvinceName
           Washington
       --+ localityName
           Redmond
       --+ organizationName
           Microsoft Corporation
       --+ commonName
           Microsoft Code Signing PCA ・・・発行者
      -+ 091207224029Z (2009/12/08 07:40:29 JST) ・・・有効期間の開始
         110307224029Z (2011/03/08 07:40:29 JST) ・・・有効期間の終了
      ---+ countryName
           US
       --+ stateOrProvinceName
           Washington
       --+ localityName
           Redmond
       --+ organizationName
           Microsoft Corporation
       --+ organizationalUnitName
           MOPR
       --+ commonName
           Microsoft Corporation ・・・サブジェクト(発行先)
      --+ rsaEncryption
          NULL
       - BIT STRING
      ---+ X509v3 Extended Key Usage ・・・拡張キー使用方法
           OCTET STRING (1.3.6.1.5.5.7.3.3) ・・・コード署名
        -+ X509v3 Subject Key Identifier ・・・サブジェクトキー識別子
           OCTET STRING
        -+ X509v3 Key Usage ・・・キー使用方法
           true
           OCTET STRING (80) ・・・Digital Signature
        -+ X509v3 Authority Key Identifier ・・・機関キー識別子
           OCTET STRING
        -+ X509v3 CRL Distribution Points ・・・CRL 配布ポイント
           OCTET STRING
        -+ Authority Information Access ・・・機関情報アクセス
           OCTET STRING
     -+ sha1WithRSAEncryption
        NULL
     - BIT STRING

Certificate Chain of 6101cf3e00000000000f Certificate of 6101cf3e00000000000f
図5:シリアル番号:6101CF3E00000000000F
[X.509 証明書(図3 コード署名C3)]

シリアル番号:6A 0B 99 4F C0 00 25 AB 11 DB 45 1F 58 7A 67 A2

    ---- 2
      - INTEGER (6A 0B 99 4F C0 00 25 AB 11 DB 45 1F 58 7A 67 A2) ・・・シリアル番号
      -+ sha1WithRSAEncryption
         NULL
      ---+ organizationalUnitName
           Copyright (c) 1997 Microsoft Corp.
       --+ organizationalUnitName
           Microsoft Corporation
       --+ commonName
           Microsoft Root Authority ・・・発行者
      -+ 060916010447Z (2006/09/16 10:04:47 JST) ・・・有効期間の開始
         190915070000Z (2019/09/15 16:00:00 JST) ・・・有効期間の終了
      ---+ countryName
           US
       --+ stateOrProvinceName
           Washington
       --+ localityName
           Redmond
       --+ organizationName
           Microsoft Corporation
       --+ commonName
           Microsoft Timestamping PCA ・・・サブジェクト(発行先)
      --+ rsaEncryption
          NULL
       - BIT STRING
      ---+ X509v3 Extended Key Usage ・・・拡張キー使用方法
           OCTET STRING (1.3.6.1.5.5.7.3.8) ・・・タイムスタンプ
        -+ 2.5.29.1 (old Authority Key Identifier) ・・・機関キー識別子
           OCTET STRING
        -+ 1.3.6.1.4.1.311.21.1 (szOID_CERTSRV_CA_VERSION) ・・・CA バージョン
           OCTET STRING
        -+ X509v3 Subject Key Identifier ・・・サブジェクトキー識別子
           OCTET STRING
        -+ 1.3.6.1.4.1.311.20.2 (szOID_ENROLL_CERTTYPE_EXTENSION) ・・・証明書テンプレート名
           OCTET STRING
        -+ X509v3 Key Usage ・・・キー使用方法
           OCTET STRING (86) ・・・Digital Signature, Certificate Signing, 
                                   Off-line CRL Signing, CRL Signing
        -+ X509v3 Basic Constraints ・・・基本制限
           true
           OCTET STRING
     -+ sha1WithRSAEncryption
        NULL
     - BIT STRING

Certificate Chain of 6a0b994fc00025ab11db451f587a67a2 Certificate of 6a0b994fc00025ab11db451f587a67a2
図6:シリアル番号:6A0B994FC00025AB11DB451F587A67A2
[X.509 証明書(図3 タイムスタンプ署名T2)]

シリアル番号:61 06 94 2D 00 00 00 00 00 09

    ---- 2
      - INTEGER (61 06 94 2D 00 00 00 00 00 09) ・・・シリアル番号
      -+ sha1WithRSAEncryption
         NULL
      ---+ countryName
           US
       --+ stateOrProvinceName
           Washington
       --+ localityName
           Redmond
       --+ organizationName
           Microsoft Corporation
       --+ commonName
           Microsoft Timestamping PCA ・・・発行者
      -+ 080725190217Z (2008/07/26 04:02:17 JST) ・・・有効期間の開始
         130725191217Z (2013/07/26 04:12:17 JST) ・・・有効期間の終了
      ---+ countryName
           US
       --+ stateOrProvinceName
           Washington
       --+ localityName
           Redmond
       --+ organizationName
           Microsoft Corporation
       --+ organizationalUnitName
           MOPR
       --+ organizationalUnitName
           nCipher DSE ESN:7A82-688A-9F92
       --+ commonName
           Microsoft Time-Stamp Service ・・・サブジェクト(発行先)
      --+ rsaEncryption
          NULL
       - BIT STRING
      ---+ X509v3 Subject Key Identifier ・・・サブジェクトキー識別子
           OCTET STRING
        -+ X509v3 Authority Key Identifier ・・・機関キー識別子
           OCTET STRING
        -+ X509v3 CRL Distribution Points ・・・CRL 配布ポイント
           OCTET STRING
        -+ Authority Information Access ・・・機関情報アクセス
           OCTET STRING
        -+ X509v3 Extended Key Usage ・・・拡張キー使用方法
           OCTET STRING (1.3.6.1.5.5.7.3.8) ・・・タイムスタンプ
        -+ X509v3 Key Usage ・・・キー使用方法
           true
           OCTET STRING (c0) ・・・Digital Signature, Non-Repudiation
     -+ sha1WithRSAEncryption
        NULL
     - BIT STRING

Certificate Chain of 6106942d000000000009 Certificate of 6106942d000000000009
図7:シリアル番号:6106942D000000000009
[X.509 証明書(図3 タイムスタンプ署名T3)]

signerInfos

signerInfos には、2 つの署名が格納されています。

シリアル番号:61 01 CF 3E 00 00 00 00 00 0F

   --- 1
     ----+ countryName
           US
       --+ stateOrProvinceName
           Washington
       --+ localityName
           Redmond
       --+ organizationName
           Microsoft Corporation
       --+ commonName
           Microsoft Code Signing PCA ・・・発行者
      - INTEGER (61 01 CF 3E 00 00 00 00 00 0F) ・・・シリアル番号
     -+ sha1
        NULL
     --- contentType
       -- 1.3.6.1.4.1.311.2.1.4 (SPC_INDIRECT_DATA_OBJID)
      -- 1.3.6.1.4.1.311.2.1.11 (SPC_STATEMENT_TYPE_OBJID)
       --- 1.3.6.1.4.1.311.2.1.21 (SPC_INDIVIDUAL_SP_KEY_PURPOSE_OBJID)
                                  ・・・ Microsoft Individual Code Signing
      -- messageDigest
       -- OCTET STRING
      -- 1.3.6.1.4.1.311.2.1.12 (SPC_SP_OPUS_INFO_OBJID)
       ---- CONTEXT [0]
         -- http://microsoft.com
     -+ rsaEncryption
        NULL
     - OCTET STRING

Certificate Chain of 6101cf3e00000000000f
図8:シリアル番号:6101CF3E00000000000F
[図3 コード署名C]

シリアル番号:61 06 94 2D 00 00 00 00 00 09

     --- countersignature
       --- 1
         ----+ countryName
               US
           --+ stateOrProvinceName
               Washington
           --+ localityName
               Redmond
           --+ organizationName
               Microsoft Corporation
           --+ commonName
               Microsoft Timestamping PCA ・・・発行者
          - INTEGER (61 06 94 2D 00 00 00 00 00 09) ・・・シリアル番号
         -- sha1
         --- contentType
           -- pkcs7-data
          -- signingTime
           -- 100514111007Z (2010/05/14 20:10:07 JST) ・・・タイムスタンプ
          -- messageDigest
           -- OCTET STRING
         -+ sha1WithRSAEncryption
            NULL
         - OCTET STRING

Certificate Chain of 6106942d000000000009
図9:シリアル番号:6106942D000000000009
[図3 タイムスタンプ署名C]

4. CertGetCertificateChain 関数

CertGetCertificateChain 関数は、最下位に存在する証明書から、 その上位の証明書、そして、最上位に位置する証明書(ルート証明書)までの一連の証明書群(証明書チェーン)を取得する関数です。
ファイル winsdk_web.exe の Authenticode 署名の certificates には、コード署名に関する X.509 証明書(図3 コード署名C2〜C3)、タイムスタンプ署名に関する X.509 証明書(図3 タイムスタンプ署名T2〜T3)の 4つの証明書が格納されています。 CertGetCertificateChain 関数では、これらの証明書から、図10に示すパソコンに格納されている残りの証明書(本事例の場合には、ルート証明書で、 コード署名C1、タイムスタンプ署名T1 (図11))を探しだし、証明書チェーンの取得を完了します。

Certificate Manager
図10:証明書マネージャ

Certificate of c1008b3c3c8811d13ef663ecdf40
図11:シリアル番号:C1008B3C3C8811D13EF663ECDF40
[X.509 証明書(図3 コード署名C1、タイムスタンプ署名T1)]

 

署名ツール signtool を使った証明書チェーンの確認

署名ツール signtool を使うことで、証明書チェーンの取得と共に、MD5 ハッシュ付き証明書の使用を制限 (廃止) する更新プログラムの影響を確認できます。 検証に成功すれば、更新プログラムの影響はありません。 なお、署名ツール signtool を使って確認する場合には、調査対象となる機器上で確認してください。

#signtool verify /pa /v /d winsdk_web.exe

Verifying: winsdk_web.exe
Hash of file (sha1): 66C80242C18BDFA3F6E93AFC11F47D3FD5C39DB3

Signing Certificate Chain:

                             ・・・X.509 証明書(図3 コード署名C1)
    Issued to: Microsoft Root Authority
    Issued by: Microsoft Root Authority
    Expires:   Thu Dec 31 16:00:00 2020
    SHA1 hash: A43489159A520F0D93D032CCAF37E7FE20A8B419

                             ・・・X.509 証明書(図3 コード署名C2)
        Issued to: Microsoft Code Signing PCA
        Issued by: Microsoft Root Authority
        Expires:   Sat Aug 25 16:00:00 2012
        SHA1 hash: 3036E3B25B88A55B86FC90E6E9EAAD5081445166

                             ・・・X.509 証明書(図3 コード署名C3)
            Issued to: Microsoft Corporation
            Issued by: Microsoft Code Signing PCA
            Expires:   Tue Mar 08 07:40:29 2011
            SHA1 hash: 9617094A1CFB59AE7C1F7DFDB6739E4E7C40508F

The signature is timestamped: Fri May 14 20:10:07 2010
Timestamp Verified by:

                             ・・・X.509 証明書(図3 タイムスタンプ署名T1)
    Issued to: Microsoft Root Authority
    Issued by: Microsoft Root Authority
    Expires:   Thu Dec 31 16:00:00 2020
    SHA1 hash: A43489159A520F0D93D032CCAF37E7FE20A8B419

                             ・・・X.509 証明書(図3 タイムスタンプ署名T2)
        Issued to: Microsoft Timestamping PCA
        Issued by: Microsoft Root Authority
        Expires:   Sun Sep 15 16:00:00 2019
        SHA1 hash: 3EA99A60058275E0ED83B892A909449F8C33B245

                             ・・・X.509 証明書(図3 タイムスタンプ署名T3)
            Issued to: Microsoft Time-Stamp Service
            Issued by: Microsoft Timestamping PCA
            Expires:   Fri Jul 26 04:12:17 2013
            SHA1 hash: 05FECB745F7F3B1A0E262A73435CCB7EAAED8B37

Description:     winsdk_web.exe
Description URL: http://microsoft.com

Successfully verified: winsdk_web.exe

Number of files successfully Verified: 1
Number of warnings: 0
Number of errors: 0

[ファイルのプロパティ|デジタル署名] を用いた証明書チェーンの確認

[ファイルのプロパティ|デジタル署名] を用いる場合には、各 X.509 証明書で使われている署名ハッシュアルゴリズムを確認していきます。 本事例の場合には、コード署名に関する X.509 証明書(図11)、タイムスタンプ署名に関する X.509 証明書(図12) の計6個を確認することになります。

ここで、コード署名に関する X.509 証明書のうち [コード署名C1]、タイムスタンプ署名に関する X.509 証明書のうち [タイムスタンプ署名T1] に署名ハッシュアルゴリズムとして MD5 が使われています。 しかし、これら証明書は、「信頼されたルート証明書機関 (図10:証明書マネージャ)」に登録されているため、更新プログラムによる制限対象外となりますので、計6個の X.509 証明書については、更新プログラムによる影響はないと判断できます。

Certificate Chain of Code Sign
図11:コード署名に関する X.509 証明書

Certificate Chain of Timestamp Sign
図12:タイムスタンプ署名に関する X.509 証明書

5. 関連情報

  • キー使用方法
    http://www.ipa.go.jp/security/rfc/RFC5280-04JA.html#042103
    06 ・・・Certificate Signing, Off-line CRL Signing, CRL Signing
    80 ・・・Digital Signature
    86 ・・・Digital Signature, Certificate Signing, Off-line CRL Signing, CRL Signing
    c0 ・・・Digital Signature, Non-Repudiation
    c6 ・・・Digital Signature, Non-Repudiation, Certificate Signing, Off-line CRL Signing, CRL Signing
  • 拡張キー使用方法
    http://www.ipa.go.jp/security/rfc/RFC5280-04JA.html#042112
    id-kp-serverAuth (1.3.6.1.5.5.7.3.1) ・・・サーバ認証
    id-kp-clientAuth (1.3.6.1.5.5.7.3.2) ・・・クライアント認証
    id-kp-codeSigning (1.3.6.1.5.5.7.3.3) ・・・コード署名
    id-kp-emailProtection (1.3.6.1.5.5.7.3.4) ・・・電子メールの保護
    id-kp-timeStamping (1.3.6.1.5.5.7.3.8) ・・・タイムスタンプ
    id-kp-OCSPSigning (1.3.6.1.5.5.7.3.9) ・・・OCSP 署名

6. 更新履歴

2014年02月12日
  • このページを新規作成および公開しました。

担当:寺田、沼田、大西/HIRT