ImageMagickのWindowsインストーラーは、今後署名されなくなる予定
(github.com/ImageMagick)- 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件のコメント
Hacker Newsの意見
eスポーツコーチ向けのオープンソース動画プレイヤーを無料で作ったが、初回インストール時に警告を回避しなければならないという不満がずっと寄せられており、その苦痛は理解できる
証明書の費用は払えるが、すでに時間をかけて無料で配布しているプロジェクトに、さらにお金まで払いたいとは思わない
オープンソースソフトウェア向けの Let's Encrypt のようなサービスがあればよいが、Microsoft や Apple の立場では、人々をアプリストアという囲い込まれた庭から外へ出すことになり、核心的な利害に反しそうだ
25年近くソフトウェアを作ってきたが、「セキュリティ」という名目で自分のコンピューターに対する所有権が減っていくのを見るのは、かなり苦い気分だ
https://www.vodon.gg/
通常の答えは、コード署名証明書は、マルウェアを配布した人をオフラインで処罰したり、特定の発行者リストのソフトウェアだけをインストールするポリシーを可能にしたりするための法的な身元証明を目的としている、というもの
一方、HTTPS 用のドメイン検証証明書は DNS 名に対する制御権を証明しようとするもので、これは自動化された技術的手段で検証可能であり、オフラインの身元と必ずしも結び付くわけではない
Let's Encrypt の証明書は、ある鍵が特定の DNS 名を制御する人に制御されているようだ、という点を確認してくれるが、コード署名証明書は、特定の法域に存在する特定の法人の代理人が制御しているようだ、という点まで確認しようとするため、有用に検証するコストははるかに大きい
いつか政府がこれを自動化する方法を提供するかもしれないが、2つの証明書が証明する対象と検証方法はかなり異なる
関連する議論はすでに https://news.ycombinator.com/item?id=38056024 でより長く続いている
ユーザーが本当にそれだけ気にするなら費用を一緒に負担する意思があるはずだし、そうでなければ未署名の状態も問題ではないはずだ
ダウンロード数が十分に蓄積されると、この警告は消えるようだ
Mac を使えばこうした心配は減る
費用だけが問題ではない
自動リリースワークフローで署名を管理してきた
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...
100ドル程度の小さな SFF/Atom PC にハードウェアキーを接続すればよい
変わるのは、署名ステップがクラウドからローカルランナーへ移ることだけだ
セキュリティ面で改善なのかどうかは、どちらと見るべきかよく分からない
ImageMagick のように重要で広く使われているプロジェクトが、ソフトウェア署名のような必須要素にさえ $629 を用意できないというのは驚き
技術産業が、自分たちが大きく依存しているオープンソースプロジェクトを財政的にきちんと支援できていないことを示す明確な例だと思う
莫大な価値を提供していても、こうしたプロジェクトは持続可能なだけの価値を十分に回収できないことが多い
オープンソースへの貢献を扱い、評価する方法に大きな変化が必要だという冷静な reminder になっている
これがセキュリティの問題なのか、それとも「セキュリティ」を掲げながら お金を払わないと参加できない市場を押し進める問題なのかが核心だと思う
むしろ逆であるべきではないかと思う
$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 のどこかで明示的に禁止されているのかも気になる
それでも結果には本当に満足しているし、ユーザーもそう感じているようだ
面白いことに、最近ある人が私にそれを使ってみるよう勧めてきて、私が主著者だと知ってかなり驚いていた
このシナリオでは、何でも目をつぶって署名するのか? それなら明らかによくない
代替案は長いレビューと監査プロセスだが、何かがすり抜ければ、それでも署名者に打撃が来る
デバイスドライバでなければ、クライアント側ブラウザで使えるように再コンパイルできる地点に近づいている
会社で最近同じ問題に遭遇し、既存プロバイダーで証明書を更新できなくなって初めて要件変更を知った
今や Windows コード署名をどうすべきかに関する情報が驚くほど少ない
物理デバイスは使いたくなかったし、完全リモートのチームでは現実的ではない
結局 Digicert と一緒に Azure KeyVault を使うことにした
Comodo、つまり Sectigo は気に入らない
この組み合わせを実際に動かすための情報が本当に少なく、動くかどうか試す前に約 $600 を使わなければならない
設定を終えたら、うまく動いた
Azure 経由で署名する新しい設定は、CI システムに秘密鍵を保存するより安全
ただ、Windows アプリの署名が macOS や iOS の署名より難しくなるとは考えたこともなかった
任務完了というわけだ
言っていたように情報が不足しているので、私を含め多くの人に役立つと思う
回答の一つに出ていた SignPath(https://signpath.org)を使ったことがある人がいるのか気になる
Web サイトには “SignPath Foundation provides reliable code signing for Open Source projects.” とある
合法的なサービスなら、有用な選択肢になり得る
現在「財団」は SignPath 社が運営しているが、いつか財団が拡大して、独立したコミュニティ運営の形になることを望んでいるとは言っている
「Developers, developers, developers!」はどこへ行ったのかと思う
大手テック企業に共通して見えるのは、最初は良さそうに見えても数年後には腐敗が入り込み、十分長く持ちこたえると最終的には寄生的な存在に変わるという点
Microsoftほどの規模の会社なら、自分たちがあれほど支持していると言う自由・オープンソースの世界が、自社プラットフォームに手間や費用なしで配布できるようにする方法を作れないはずがない
セキュリティという名のこうした摩擦は、いつも偶然にも収益の助けになる
署名証明書の費用を全体的に下げてほしい
最大でも10ドルくらいで十分
ごく少数の人しか使わない特殊なソフトウェアでは、今の費用を正当化できない
これほど高くなければならない理由として思いつくのは、盗難カードの正当な所有者が気づくくらい十分大きな金額である必要がある、という程度
それ自体が一種の作成者確認という意味にはなり得る
それなら3か月後に一部または全額を返金してもいいのではと思う
検証目的だとしても、その検証に毎年お金を取る必要はほとんどなさそうで、結局はレントシーキングのように見える
Storeは記憶では一回限りの$19で、継続費用や年額費用ではない
したがって、この問題はStore外で配布する場合にだけ当てはまる
証明書が高い理由は、政府がデジタル化されておらず暗号技術を適切に扱えていないため、秘密鍵の所有と法的な身元の所有を結びつけるのに多くの手作業が必要だから
認証局は国別のウェブサイトで登録情報を探さなければならず、APIがない場合も多く、電話をかけたりパスポートのスキャンを確認したりする必要がある
これらすべてが労働集約的なので高くなる
政府が自前の公開鍵基盤を運用し、会社登記時に秘密鍵も一緒に発行したり、パスポートに文書署名用の秘密鍵が入っていたりすれば、はるかに安くできる
残念ながら、かなり前から進展はなく、国家の公開鍵基盤を試したいくつかの国もほとんどが諦めた
米国は国防総省の外で大規模な政府公開鍵基盤を試みたことがなく、そのため米国のソフトウェア企業もスマートカード対応をしっかり行う必要性をあまり感じなかった
主流のOSには堅牢なサポートがなく、標準も不足している
さらに証明書の利用者であるMicrosoftとCA/Browser Forumが認証局に求める高い運用負担もある
これにも費用がかかる
年額料金は費用を時間で分散するためのもの
認証局は最初に証明書を発行するとき、1年分の料金より多くの費用がかかるが、ユーザーが数年は使うと仮定すれば損益分岐点を超えて小さな利益を出せる
https://www.gnu.org/philosophy/right-to-read.en.html
長く生きるほど、RMSが現代のカサンドラだったのだとますます実感する