1 ポイント 投稿者 GN⁺ 2023-10-30 | 1件のコメント | WhatsAppで共有
  • ImageMagickは、既存のコード署名証明書が2023年10月28日に失効し、これまでLeaderSSLが後援していた証明書を今後は受け取れなくなると告知した
  • 2023年6月からCA/B Forumが、OVコード署名の秘密鍵をFIPS 140-2 Level 2または**Common Criteria Level EAL4+**認証デバイスに保存するよう要求したため、秘密鍵をエクスポートしてGitHub Actionsで使う方法が使えなくなった
  • 影響範囲は.exeインストーラーだけに限られず、コード署名証明書で署名していたすべてのバイナリに及ぶ
  • 議論では、Digicertの年額629ドルの証明書、SignPath、Azure Key VaultとAzureSignTool、Azure Code Signing、自己署名などが代替案として挙げられ、一部にはGitHub Actions連携やAppVeyor要件などの制約がある
  • ImageMagickは2023年11月6日にAzure Code Signingの採用を決定し、その結果バイナリを再び署名できるようになった

証明書失効と署名中断の問題

  • ImageMagickのメンテナーは、現在使用中のコード署名証明書が2023年10月28日に失効すると告知した
  • 長年にわたりLeaderSSLがコード署名証明書を後援してきたが、今後は後援できなくなった
  • 2023年6月からCA/B Forumの要件が変更され、OVコード署名の秘密鍵は次のいずれかに保存されていなければならない
    • FIPS 140-2 Level 2認証デバイス
    • **Common Criteria Level EAL4+**認証デバイス
  • この要件により、ImageMagickはコード署名証明書と秘密鍵をエクスポートしてGitHub Actionsで使う従来の方法を継続できなくなった

必要な代替策と費用

  • メンテナーは、新しい方法として2つの選択肢を示した
    • 独自のGitHubエージェントとハードウェアトークンを使う
    • GitHubと統合できるクラウドベースの署名ソリューションを使う
  • 希望する方法は、GitHubと統合できるクラウドソリューションである
  • 当時メンテナーは、Digicertが唯一の選択肢のように見えると述べ、Digicertのコード署名証明書は1年あたり629ドルで、税別だと説明した
  • 組織として署名済みインストーラーが必要なら、コード署名証明書の後援をお願いしたいと呼びかけた

影響範囲

  • ある参加者は、影響が.exeインストーラーのみに限られるのか、それともportable zip内のmagick.exeのようなすべてのWin32バイナリも署名されなくなるのか質問した
  • メンテナーは、コード署名証明書で署名していたすべてのバイナリが影響を受けると回答した

議論された代替案

  • SignPath

    • ある参加者がSignPathを提案し、メンテナーはその会社を知らなかったが選択肢になり得ると答えた
    • 別の参加者は、OSSプロジェクトでSignPathを2年以上使っており、質問への対応も常に良好だったと経験を共有した
    • その参加者は、SignPathのソース検証方式のため、署名済みバイナリやインストーラーのビルドにはAppVeyorが必要で、インストーラーは.MSI形式でなければならないと理解していると付け加えた
    • SignPath側の参加者は、無料証明書にはいくつか制約があると説明した
      • 「SignPath Foundation」に発行される無料証明書では、透明で検証可能なビルドが求められ、当時はAppVeyorを意味していた
      • GitHub Actionsコネクタはまもなく提供予定だと述べた
      • MSI、MSIX、AppXのような標準形式には利点があるが、他のインストーラーも扱える
      • ImageMagickには登録済みのLLCがあるため、ImageMagick名義の証明書を制約なく取得でき、初年度はSignPathが後援できると提案した
  • Azure Key VaultとAzureSignTool

    • ある参加者は、GlobalSignが発行したEVコード署名証明書をAzure Key Vaultに入れ、AzureSignToolでGitHub Actionsからファイルに署名していると共有した
    • メンテナーは、この方法のほうがより安価な選択肢に見えると答え、AzureSignToolを使うdotnet/signも前日に勧められたと述べた
    • 別の参加者は、GlobalSignとAzure Key Vaultの組み合わせでWindowsインストーラーをEV証明書で署名する記事を共有した
    • ある参加者は、Azure Key Vaultはこれをサポートしており、1日に何度もビルドへ署名してもコストはセント単位だと述べた
    • その後、別の参加者は、2024年1月に証明書が失効したあと同じ問題に直面し、新しい証明書はデバイス上で発行される必要があり、Azure Key Vaultへ移せなかったと付け加えた
  • Azure Code Signing

    • ある参加者は、Azure Code Signingへ移行したと述べ、Microsoftとそのチームへ連絡してみると言った
    • メンテナーは、AzureCodeSigningTAPに直接メールしたと答えた
    • Azure Code Signingのエンジニアだと名乗る参加者は、GitHub Actionsをサポートしていると述べ、必要なら連絡してほしいと案内した
  • 自己署名

    • ある参加者は、バイナリを自己署名し、公開証明書をユーザーにインストールしてもらう方法を検討したかと質問した
    • メンテナーは、まだ検討しておらず、議論で提案された選択肢を見ているところだと答えた

最終決定

  • 2023年11月6日、メンテナーは提案されたさまざまな選択肢に感謝し、Azure Code Signingを使うことに決めたと述べた
  • この決定により、ImageMagickはバイナリを再び署名できるようになった
  • 設定手順は、別リポジトリの記事ImageMagick now uses Azure Code Signingにまとめられていると案内した

1件のコメント

 
GN⁺ 2023-10-30
Hacker Newsの意見
  • eスポーツコーチ向けのオープンソース動画プレイヤーを無料で作ったが、初回インストール時に警告を回避しなければならないという不満がずっと寄せられており、その苦痛は理解できる
    証明書の費用は払えるが、すでに時間をかけて無料で配布しているプロジェクトに、さらにお金まで払いたいとは思わない
    オープンソースソフトウェア向けの Let's Encrypt のようなサービスがあればよいが、Microsoft や Apple の立場では、人々をアプリストアという囲い込まれた庭から外へ出すことになり、核心的な利害に反しそうだ
    25年近くソフトウェアを作ってきたが、「セキュリティ」という名目で自分のコンピューターに対する所有権が減っていくのを見るのは、かなり苦い気分だ
    https://www.vodon.gg/

    • Let's Encrypt のフォーラムでも、プロジェクト初期からこうした要望はずっとあった
      通常の答えは、コード署名証明書は、マルウェアを配布した人をオフラインで処罰したり、特定の発行者リストのソフトウェアだけをインストールするポリシーを可能にしたりするための法的な身元証明を目的としている、というもの
      一方、HTTPS 用のドメイン検証証明書は DNS 名に対する制御権を証明しようとするもので、これは自動化された技術的手段で検証可能であり、オフラインの身元と必ずしも結び付くわけではない
      Let's Encrypt の証明書は、ある鍵が特定の DNS 名を制御する人に制御されているようだ、という点を確認してくれるが、コード署名証明書は、特定の法域に存在する特定の法人の代理人が制御しているようだ、という点まで確認しようとするため、有用に検証するコストははるかに大きい
      いつか政府がこれを自動化する方法を提供するかもしれないが、2つの証明書が証明する対象と検証方法はかなり異なる
      関連する議論はすでに https://news.ycombinator.com/item?id=38056024 でより長く続いている
    • 素朴な考えかもしれないが、解決策はかなり明確に見える:証明書費用をクラウドソースし、お金が入っている間だけソフトウェアに署名すればよい
      ユーザーが本当にそれだけ気にするなら費用を一緒に負担する意思があるはずだし、そうでなければ未署名の状態も問題ではないはずだ
    • 署名されていないと、Chrome もダウンロード時に警告を出すという別の苦痛がある
      ダウンロード数が十分に蓄積されると、この警告は消えるようだ
    • Windows は面倒、広告、不意打ち、追跡、強制的なハードウェア更新が多いのに、なぜ使うのか分からない
      Mac を使えばこうした心配は減る
    • ユーティリティ系アプリでは Microsoft Store は冗談のようなレベルだ
  • 費用だけが問題ではない
    自動リリースワークフローで署名を管理してきた
    https://github.com/technion/rustypwneddownloader/blob/main/....
    新しいルールではこのワークフローは使えず、ビルドを自分のデスクトップへ移してハードウェア署名キーを使い、自動化も透明性もない方法でアップロードすることがセキュリティ改善だという主張には納得しにくい

    • 好むと好まざるとにかかわらず、ほとんどのプロジェクトにとっては改善である
      第一に、ファイルとして保存された秘密鍵は気付かれずに盗まれ得るし、そうなると残る手段は失効しかない
      これが HSM 要件の主な理由であり、マルウェア作者たちはしばらく前からこうしたことをしてきたうえ、さまざまな理由で失効は難しく費用も大きい
      HSM も盗まれる可能性はあるが、オフィスや家に侵入して物を持ち去る必要があるため、気付く可能性が高い
      HSM を使うための認証情報も盗まれ得るが、簡単かつ素早く変更できるので、PIN がキー入力記録されたと分かったら、侵害から復旧した後に PIN だけを変えればよく、証明書を失効させる必要はない
      第二に、CI で自動署名することは実際に危険になり得る
      CI システムにコードをプッシュできる人なら誰でも、あなたの名前でコード署名を受けられ、あなたがそれに気付かないこともあり得る
      鍵が常にオンラインにあるため CI システムがハッキングされたら終わりで、そうでなくても CI は任意のコードを大量に実行しながら綿密に監視されているわけではないため、コードを押し込めるすべての人が弱点になる
      ローカルで署名すれば、リリースの瞬間まで鍵を文字どおりオフラインにしておけるし、鍵という所有要素と認証情報という知識要素で二要素認証をかけられるため、かなり安全だ
      ナイトリー開発ビルド、内部ツール、外に出てはいけない一時的なバイナリは、無料で自己署名すればよい
    • 私もまったく同じ状況だ
      GitHub Actions のシークレットに OV .pfx 証明書を保存して、同じ方法で使っている
      私の証明書は2024年11月に期限切れになるが、どうするかまだ決めていない
      会社ではなく個人開発者として証明書を取得するだけでも十分に難しかった
      それでも結局はお金の問題であるべきだ
      原文にある年629ドルのクラウドホスティング HSM なら可能で、その費用を払えば、今使っている signtool や Set-AuthenticodeSignature のようなコマンドで GitHub Actions 上で動かせる: https://docs.digicert.com/en/software-trust-manager/ci-cd-in...
    • GitHub Actions は確かではないが、ローカル CI ランナーで解決できるのではないかと思う
      100ドル程度の小さな SFF/Atom PC にハードウェアキーを接続すればよい
      変わるのは、署名ステップがクラウドからローカルランナーへ移ることだけだ
      セキュリティ面で改善なのかどうかは、どちらと見るべきかよく分からない
    • このせいで人々がバイナリにまったく署名しなくなるなら、それは確実に悪い結果
  • ImageMagick のように重要で広く使われているプロジェクトが、ソフトウェア署名のような必須要素にさえ $629 を用意できないというのは驚き
    技術産業が、自分たちが大きく依存しているオープンソースプロジェクトを財政的にきちんと支援できていないことを示す明確な例だと思う
    莫大な価値を提供していても、こうしたプロジェクトは持続可能なだけの価値を十分に回収できないことが多い
    オープンソースへの貢献を扱い、評価する方法に大きな変化が必要だという冷静な reminder になっている

    • $629 そのものが問題なのではなく、多くの人がまったく「必須」だと同意していないものにお金を使うよう強制されることが問題だと思う
      これがセキュリティの問題なのか、それとも「セキュリティ」を掲げながら お金を払わないと参加できない市場を押し進める問題なのかが核心だと思う
    • なぜ ImageMagick プロジェクトが Microsoft にお金を払わなければならないのか不明
      むしろ逆であるべきではないかと思う
    • これを技術産業がオープンソースに資金提供できなかった失敗と見ることもできるが、私はこうしたセキュリティシステムが 金銭的なゲートキーピング なしに提供されなかった失敗だと見る
      $629 は小さな金額ではない
    • 無料で作ったものを配布するために $629 を払わなければならない ことを、普通のこととして受け入れることはできない
      Microsoft が Windows エコシステムに自ら作り出したことだ
    • 自由ソフトウェアは 自由 に関するもの
      Microsoft やそのパートナーに賃料を払うことではない
  • 私のデスクトップ用テキストエディタ KeenWrite は、Wine、rcedit-x64.exe、osslsigncode、シェルスクリプトを使って Windows バイナリに署名している
    まず rcedit-x64.exe がバイナリに識別情報を付与する
    https://gitlab.com/DaveJarvis/KeenWrite/-/blob/main/installe...
    次に osslsigncode が証明書を適用する
    https://gitlab.com/DaveJarvis/KeenWrite/-/blob/main/scripts/...
    前述の通り、収益 0 ドルのオープンソースプロジェクトが Windows で配布するためにお金を払わなければならないのは、自分のコンピュータに対する所有権が減ることだと思う

    • ちなみに、この方法では証明書を更新できないはず
      今は HSM ベース でなければならない
  • Windows と macOS の両方でアプリケーション署名に地獄を見てきたし、どんどん悪くなっている
    まず、この件は何でも Web アプリ として提供したくさせる
    ブラウザは多くの面でずっと優れた体験を提供し、セキュリティもうまく統合された体験なのに対し、25 年もののオペレーティングシステムはセキュリティを後付けしているように感じる
    Apple 内部では誰も気にしないだろうが、これがハードウェア・ソフトウェア独占を崩す亀裂になるなら、かなり面白いことになると思う
    2つ目に、なぜ第三者がこうした署名をサービスとして提供できないのか気になる
    技術的には、私が署名できるアプリの数に制限はないのでは?
    ユーザーから見て、証明書が私の名前ではなく、OS が信頼する ABC Corp の名前で署名されているからといって、なぜ問題になるのかも分からない
    チェーンのどこかを失効させることはできるだろうが、技術的には可能に見えるし、私がぼんやり同意した EULA のどこかで明示的に禁止されているのかも気になる

    • Pianojacq でまったく同じ意思決定プロセスをたどったし、多くの部分がずっと難しくなったが、特に データベース作業 がそうだった
      それでも結果には本当に満足しているし、ユーザーもそう感じているようだ
      面白いことに、最近ある人が私にそれを使ってみるよう勧めてきて、私が主著者だと知ってかなり驚いていた
    • これは 責任問題 になるのではないかと思う
      このシナリオでは、何でも目をつぶって署名するのか? それなら明らかによくない
      代替案は長いレビューと監査プロセスだが、何かがすり抜ければ、それでも署名者に打撃が来る
    • WASM と WebGPU が、ブラウザとネイティブの間の性能差を縮めている
      デバイスドライバでなければ、クライアント側ブラウザで使えるように再コンパイルできる地点に近づいている
  • 会社で最近同じ問題に遭遇し、既存プロバイダーで証明書を更新できなくなって初めて要件変更を知った
    今や Windows コード署名をどうすべきかに関する情報が驚くほど少ない
    物理デバイスは使いたくなかったし、完全リモートのチームでは現実的ではない
    結局 Digicert と一緒に Azure KeyVault を使うことにした
    Comodo、つまり Sectigo は気に入らない
    この組み合わせを実際に動かすための情報が本当に少なく、動くかどうか試す前に約 $600 を使わなければならない
    設定を終えたら、うまく動いた
    Azure 経由で署名する新しい設定は、CI システムに秘密鍵を保存するより安全
    ただ、Windows アプリの署名が macOS や iOS の署名より難しくなるとは考えたこともなかった

    • Microsoft のどこかで営業担当者 2 人がこれを読んでハイタッチしていそう
      任務完了というわけだ
    • ある程度難しく高価にしているのは 意図された設計 なのかもしれないと思う
    • どう設定したのか記事にまとめてもらえるとありがたい
      言っていたように情報が不足しているので、私を含め多くの人に役立つと思う
  • 回答の一つに出ていた SignPathhttps://signpath.org)を使ったことがある人がいるのか気になる
    Web サイトには “SignPath Foundation provides reliable code signing for Open Source projects.” とある
    合法的なサービスなら、有用な選択肢になり得る

    • vim と transmission がリンクを張り返しているのを見ると、合法的に見える
      現在「財団」は SignPath 社が運営しているが、いつか財団が拡大して、独立したコミュニティ運営の形になることを望んでいるとは言っている
  • 「Developers, developers, developers!」はどこへ行ったのかと思う
    大手テック企業に共通して見えるのは、最初は良さそうに見えても数年後には腐敗が入り込み、十分長く持ちこたえると最終的には寄生的な存在に変わるという点
    Microsoftほどの規模の会社なら、自分たちがあれほど支持していると言う自由・オープンソースの世界が、自社プラットフォームに手間や費用なしで配布できるようにする方法を作れないはずがない
    セキュリティという名のこうした摩擦は、いつも偶然にも収益の助けになる

    • とはいえ、私が何か見落としているのでなければ、なぜImageMagickは失効当日まで待ってからこの記事を出したのか分からない
  • 署名証明書の費用を全体的に下げてほしい
    最大でも10ドルくらいで十分
    ごく少数の人しか使わない特殊なソフトウェアでは、今の費用を正当化できない
    これほど高くなければならない理由として思いつくのは、盗難カードの正当な所有者が気づくくらい十分大きな金額である必要がある、という程度
    それ自体が一種の作成者確認という意味にはなり得る
    それなら3か月後に一部または全額を返金してもいいのではと思う
    検証目的だとしても、その検証に毎年お金を取る必要はほとんどなさそうで、結局はレントシーキングのように見える

    • Microsoftはすでに費用を下げたようなもの
      Storeは記憶では一回限りの$19で、継続費用や年額費用ではない
      したがって、この問題はStore外で配布する場合にだけ当てはまる
      証明書が高い理由は、政府がデジタル化されておらず暗号技術を適切に扱えていないため、秘密鍵の所有と法的な身元の所有を結びつけるのに多くの手作業が必要だから
      認証局は国別のウェブサイトで登録情報を探さなければならず、APIがない場合も多く、電話をかけたりパスポートのスキャンを確認したりする必要がある
      これらすべてが労働集約的なので高くなる
      政府が自前の公開鍵基盤を運用し、会社登記時に秘密鍵も一緒に発行したり、パスポートに文書署名用の秘密鍵が入っていたりすれば、はるかに安くできる
      残念ながら、かなり前から進展はなく、国家の公開鍵基盤を試したいくつかの国もほとんどが諦めた
      米国は国防総省の外で大規模な政府公開鍵基盤を試みたことがなく、そのため米国のソフトウェア企業もスマートカード対応をしっかり行う必要性をあまり感じなかった
      主流のOSには堅牢なサポートがなく、標準も不足している
      さらに証明書の利用者であるMicrosoftとCA/Browser Forumが認証局に求める高い運用負担もある
      これにも費用がかかる
      年額料金は費用を時間で分散するためのもの
      認証局は最初に証明書を発行するとき、1年分の料金より多くの費用がかかるが、ユーザーが数年は使うと仮定すれば損益分岐点を超えて小さな利益を出せる
  • https://www.gnu.org/philosophy/right-to-read.en.html
    長く生きるほど、RMSが現代のカサンドラだったのだとますます実感する