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에서 사용하는 기존 방식을 계속 쓸 수 없게 됨
필요한 대안과 비용
- 유지관리자는 새 방식으로 두 가지 선택지를 제시함
- 자체 GitHub 에이전트와 하드웨어 토큰 사용
- GitHub와 통합되는 클라우드 기반 서명 솔루션 사용
- 선호하는 방식은 GitHub와 통합되는 클라우드 솔루션임
- 당시 유지관리자는 Digicert가 유일한 선택지처럼 보인다고 했고, Digicert 코드 서명 인증서는 단일 연도 기준 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가 이를 지원하며 하루 여러 번 빌드를 서명해도 비용이 센트 단위라고 말함
- 이후 다른 참여자는 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에 정리됐다고 안내함
댓글과 토론
Hacker News 의견들
-
e스포츠 코치용 오픈소스 비디오 플레이어를 무료로 만들었는데, 처음 설치할 때 경고를 우회해야 한다는 불만이 계속 들어와서 고통이 이해됨
인증서 비용은 낼 수 있지만, 이미 시간을 들여 무료로 배포하는 프로젝트에 돈까지 내고 싶지는 않음
오픈소스 소프트웨어용 Let's Encrypt 같은 서비스가 있으면 좋겠지만, Microsoft나 Apple 입장에서는 앱스토어라는 담장 친 정원에서 사람들을 벗어나게 만들 수 있어 핵심 이해관계에 어긋날 것 같음
25년 가까이 소프트웨어를 만들어왔는데, “보안”이라는 이름으로 내 컴퓨터에 대한 소유권이 줄어드는 모습을 보는 게 꽤 씁쓸함
https://www.vodon.gg/- Let's Encrypt 포럼에서도 프로젝트 초기부터 이런 요청이 계속 있었음
보통의 답은 코드 서명 인증서가 악성코드를 배포한 사람을 오프라인에서 처벌하거나, 특정 게시자 목록의 소프트웨어만 설치하는 정책을 가능하게 하려는 법적 신원 증명을 목표로 한다는 것임
반면 HTTPS용 도메인 검증 인증서는 DNS 이름에 대한 통제권을 증명하려는 것이고, 이는 자동화된 기술적 수단으로 검증 가능하며 오프라인 신원과 반드시 연결되지는 않음
Let's Encrypt 인증서는 어떤 키가 특정 DNS 이름을 통제하는 사람에게 통제되고 있는 듯하다는 점을 확인해 주지만, 코드 서명 인증서는 특정 관할권에 존재하는 특정 법인의 대리자가 통제하는 듯하다는 점까지 확인하려는 것이라 유용하게 검증하는 비용이 훨씬 큼
언젠가 정부가 이를 자동화할 방법을 제공할 수도 있지만, 두 인증서가 증명하는 대상과 검증 방식은 상당히 다름
관련 논의가 이미 https://news.ycombinator.com/item?id=38056024에 더 길게 이어져 있음 - 순진한 생각일 수도 있지만 해결책은 꽤 명확해 보임: 인증서 비용을 크라우드소싱하고, 돈이 들어오는 동안에만 소프트웨어에 서명하면 됨
사용자들이 정말 그만큼 신경 쓴다면 비용을 함께 부담할 의지가 있어야 하고, 그렇지 않다면 서명되지 않은 상태도 문제가 아니어야 함 - 서명되지 않으면 Chrome도 다운로드에 경고를 띄우는 또 다른 고통이 있음
다운로드 수가 충분히 쌓이면 이 경고가 꺼지는 것 같음 - Windows는 번거로움, 광고, 뒤통수, 추적, 강제 하드웨어 업데이트가 많은데 왜 쓰는지 모르겠음
Mac을 쓰면 이런 걱정이 줄어듦 - 유틸리티류 앱에서는 Microsoft Store가 농담 같은 수준임
- Let's Encrypt 포럼에서도 프로젝트 초기부터 이런 요청이 계속 있었음
-
비용만 문제가 아님
자동 릴리스 워크플로로 서명을 관리해 왔음
https://github.com/technion/rustypwneddownloader/blob/main/....
새 규칙에서는 이 워크플로를 쓸 수 없고, 빌드를 내 데스크톱으로 옮겨 하드웨어 서명 키를 쓰고 자동화되지도 투명하지도 않은 방식으로 업로드하는 게 보안 개선이라는 주장에 납득하기 어려움- 좋든 싫든 대부분의 프로젝트에는 개선이 맞음
첫째, 파일로 저장된 개인 키는 조용히 탈취될 수 있고, 그러면 남는 방법은 폐기뿐임
이것이 HSM 요구사항의 주된 이유고, 악성코드 제작자들이 한동안 이런 일을 해왔으며 여러 이유로 폐기는 어렵고 비용도 큼
HSM도 도난당할 수는 있지만 사무실이나 집에 침입해 물건을 들고 가야 하므로 알아차릴 가능성이 큼
HSM 사용 자격 증명도 탈취될 수 있지만 쉽게 빠르게 바꿀 수 있어서, PIN이 키로깅된 걸 알게 되면 침해에서 복구한 뒤 PIN만 바꾸면 되고 인증서를 폐기할 필요가 없음
둘째, CI에서 자동 서명하는 것은 실제로 위험할 수 있음
CI 시스템에 코드를 푸시할 수 있는 사람이면 누구든 당신 이름으로 코드 서명을 받을 수 있고, 당신이 인지하지 못할 수도 있음
키가 항상 온라인에 있으므로 CI 시스템이 해킹되면 끝이고, 그렇지 않더라도 CI는 임의 코드를 많이 실행하면서 촘촘히 감시되지 않기 때문에 코드를 밀어 넣을 수 있는 모든 사람이 약점이 됨
로컬에서 서명하면 키를 릴리스 순간까지 말 그대로 오프라인에 둘 수 있고, 키라는 소유 요소와 자격 증명이라는 지식 요소로 2단계 인증을 걸 수 있어 꽤 안전함
야간 개발 빌드, 내부 도구, 밖으로 나가면 안 되는 일시적 바이너리는 무료로 자체 서명하면 됨 - 나도 정확히 같은 처지임
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나 그 파트너에게 임대료를 내는 것이 아님
- $629 자체가 문제가 아니라, 많은 사람이 전혀 “필수”라고 동의하지 않는 것에 돈을 쓰도록 강제된다는 게 문제라고 봄
-
내 데스크톱 텍스트 편집기 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 양쪽에서 애플리케이션 서명으로 지옥을 겪었고, 점점 더 나빠지고 있음
우선 이 일은 뭐든 웹 앱으로 제공하고 싶게 만듦
브라우저는 여러 면에서 훨씬 나은 경험을 제공하고, 보안도 잘 통합된 경험인데 반해 25년 된 운영체제들은 보안을 뒤늦게 덧붙이는 느낌임
Apple 내부에서는 아무도 신경 쓰지 않겠지만, 이것이 하드웨어·소프트웨어 독점을 무너뜨리는 균열이 된다면 꽤 웃길 것임
두 번째로, 왜 제3자가 이런 서명을 서비스로 제공할 수 없는지 궁금함
기술적으로 내가 서명할 수 있는 앱 수에 제한은 없지 않나?
사용자가 보기에 인증서가 내 이름이 아니라 운영체제가 신뢰하는 ABC Corp 이름으로 서명되어 있다고 해서 왜 문제가 되는지도 모르겠음
체인 어딘가를 폐기할 수는 있겠지만 기술적으로 가능해 보이고, 내가 멍한 상태로 동의한 EULA 어딘가에서 명시적으로 금지하는지도 궁금함- Pianojacq에서 정확히 같은 결정 과정을 거쳤고, 많은 부분이 훨씬 어려워졌지만 특히 데이터베이스 작업이 그랬음
그래도 결과에는 정말 만족하고 사용자들도 그런 것 같음
재미있게도 최근 어떤 사람이 나에게 그걸 써보라고 추천했는데, 내가 주 저자라는 걸 알고 꽤 놀랐음 - 이건 책임 문제가 되지 않을까 싶음
이 시나리오에서는 아무거나 눈감고 서명하는 건가? 그렇다면 명백히 좋지 않음
대안은 긴 검토와 감사 절차인데, 무언가 틈을 빠져나가면 여전히 서명자에게 타격이 옴 - WASM과 WebGPU가 브라우저와 네이티브 사이의 성능 격차를 좁히고 있음
장치 드라이버가 아니라면 클라이언트 쪽 브라우저에서 쓰도록 재컴파일할 수 있는 지점에 가까워지고 있음
- Pianojacq에서 정확히 같은 결정 과정을 거쳤고, 많은 부분이 훨씬 어려워졌지만 특히 데이터베이스 작업이 그랬음
-
회사에서 최근 같은 문제를 겪었고, 기존 제공업체에서 인증서를 갱신할 수 없을 때서야 요구사항 변경을 알게 됨
이제 Windows 코드 서명을 어떻게 해야 하는지에 대한 정보가 놀랄 만큼 적음
물리 장치는 쓰고 싶지 않았고, 완전 원격 팀에서는 현실적이지 않음
결국 Digicert와 함께 Azure KeyVault를 쓰기로 했음
Comodo, 즉 Sectigo는 마음에 들지 않음
이 조합을 실제로 동작하게 하는 정보가 정말 적고, 동작 여부를 시험해 보기도 전에 약 $600을 써야 함
구성을 끝내고 나니 잘 동작함
Azure를 통해 서명하는 새 설정은 CI 시스템에 개인 키를 저장하는 것보다 더 안전함
하지만 Windows 앱 서명이 macOS나 iOS 서명보다 더 어려울 거라고는 생각해 본 적이 없었음- Microsoft 어딘가에서 영업 담당자 두 명이 이걸 읽고 하이파이브하고 있을 듯함
임무 완수임 - 어느 정도 어렵고 비싸게 만든 것이 의도된 설계일 수도 있겠다고 생각함
- 어떻게 구성했는지 글로 정리해 줄 수 있으면 좋겠음
말한 것처럼 정보가 부족해서 나를 포함해 많은 사람에게 유용할 것 같음
- Microsoft 어딘가에서 영업 담당자 두 명이 이걸 읽고 하이파이브하고 있을 듯함
-
답변 중 하나에 나온 SignPath(https://signpath.org)를 써본 사람이 있는지 궁금함
웹사이트에는 “SignPath Foundation provides reliable code signing for Open Source projects.”라고 되어 있음
합법적인 서비스라면 유용한 선택지가 될 수 있음- vim과 transmission이 다시 링크하고 있는 걸 보면 합법적으로 보임
현재 “재단”은 SignPath 회사가 운영하지만, 언젠가 재단이 확장되어 독립적이고 커뮤니티가 운영하는 형태가 되길 바란다고는 함
- vim과 transmission이 다시 링크하고 있는 걸 보면 합법적으로 보임
-
“Developers, developers, developers!”는 어디 갔나 싶음
대형 기술 회사들에 공통적으로 보이는 건 처음에는 좋아 보이다가 몇 년 뒤 부패가 스며들고, 충분히 오래 버티면 결국 기생적 존재로 변한다는 점임
Microsoft 규모의 회사라면 자신들이 그렇게 지지한다고 말하는 자유·오픈소스 세계가 자사 플랫폼에 번거로움이나 비용 없이 배포할 수 있게 하는 방법을 만들지 못할 리가 없음
보안이라는 이름의 이런 마찰은 항상 우연히도 수익에 도움이 됨- 그렇다 해도, 내가 뭔가 놓친 게 아니라면 왜 ImageMagick은 만료 당일까지 기다렸다가 이 글을 올렸는지 모르겠음
-
서명 인증서 비용을 전반적으로 낮춰줬으면 좋겠음
최대 10달러 정도면 됨
아주 적은 사람만 쓰는 특수 소프트웨어에는 지금 비용을 정당화할 수 없음
이렇게 비싸야 하는 이유로 떠올릴 수 있는 건 도난 카드의 정당한 소유자가 알아차릴 만큼 충분히 큰 금액이어야 한다는 정도임
그 자체가 일종의 작성자 검증이라는 뜻일 수는 있음
그렇다면 3개월 뒤 일부나 전부를 환불해도 되지 않나 싶음
검증 목적이라 해도 그 검증에 매년 돈을 받을 필요는 거의 없어 보이고, 결국 지대 추구처럼 보임- Microsoft는 이미 비용을 낮춘 셈임
Store는 기억상 일회성 $19이고 반복 또는 연간 비용이 아님
따라서 이 문제는 Store 밖에서 배포할 때만 해당됨
인증서가 비싼 이유는 정부가 디지털화되어 있지 않고 암호학을 제대로 다루지 않기 때문에, 개인 키의 소유와 법적 신원의 소유를 연결하는 데 많은 수작업이 필요하기 때문임
인증 기관은 국가별 웹사이트에서 등록 정보를 찾아야 하고, API가 없는 경우도 많으며, 전화 통화를 하고 여권 스캔본을 검토하는 등의 일을 해야 함
이 모든 게 노동집약적이라 비싸짐
정부가 자체 공개키 기반 구조를 운영하고 회사 등록 시 개인 키를 함께 발급하거나, 여권에 문서 서명용 개인 키가 들어간다면 훨씬 저렴해질 수 있음
안타깝게도 오래전부터 진전이 없었고, 국가 공개키 기반 구조를 실험한 몇몇 나라도 대부분 포기했음
미국은 국방부 밖에서 대규모 정부 공개키 기반 구조를 시도한 적이 없고, 그래서 미국 소프트웨어 회사들도 스마트카드 지원을 잘할 필요를 별로 느끼지 못했음
주류 운영체제는 탄탄한 지원이 없고 표준도 부족함
여기에 인증서 소비자 Microsoft와 CA/Browser Forum이 인증 기관에 요구하는 높은 운영 부담도 있음
이것 역시 비용이 듦
연간 요금은 비용을 시간에 걸쳐 나누기 위한 것임
인증 기관은 처음 인증서를 발급할 때 1년 요금보다 더 많은 비용이 들지만, 사용자가 몇 년은 쓸 거라고 가정하면 손익분기점을 넘고 작은 이익을 낼 수 있음
- Microsoft는 이미 비용을 낮춘 셈임
-
https://www.gnu.org/philosophy/right-to-read.en.html
오래 살수록 RMS가 현대의 카산드라였다는 걸 더 실감함