개발자 / 보안

“코드 서명을 쉽고 안전하게” 마이크로소프트 ‘신뢰 서명’ 서비스의 이해

Simon Bisson | InfoWorld 2024.05.08
지금 설치하는 코드가 최소한 솔루션 업체에서 제공한 코드라는 것을 어떻게 확신할 수 있을까? 이를 확인하기 위해 일반적으로 사용하는 방법은 코드 서명이다. 코드 서명은 저작권 확인에 사용할 수 있는 서명을 바이너리에 추가한다. 서명에는 해당 코드가 서명된 이후 변경되지 않았음을 입증하는 해시가 포함된다.
 
ⓒ Getty Images Bank

SBOM(Software bills of materials)을 확인하고 정상적인 바이너리를 하이재킹하는 맬웨어 위험을 낮추기 위해 코드 서명의 중요성이 높아지고 있다. 마이크로소프트 스토어, 윈도우 패키지 관리자와 같은 서비스를 사용해서 애플리케이션을 배포할 계획이라면, 리포지토리 측에서 소프트웨어 출처를 검증할 수 있게 해주는 서명이 필수적이다. 


공개 키 인프라를 사용해 코드 보호하기 

코드 서명은 익숙한 공개 키 암호화 기술을 기반으로 하는 만큼 과정도 간단하다. 공개 키 암호화 기술과 마찬가지로, 게시자의 신원과 기반 인증서를 발급한 인증 기관을 검증하는 디지털 인증서와 서명이 필요하다. 마지막 검증 부분이 게시자와 코드 사이에 신뢰 관계를 설정하기 위한 핵심이다. 여기에는 스토어와 인증된 코드가 타겟팅하는 기반 OS, 두 곳에서 모두 관리하는 신뢰할 수 있는 인증 기관 목록이 사용된다. 

자체 서명 인프라를 관리하는 것은 점점 어려워지고 있다. 이유는 여러 가지다. 자체 서명 인증서는 내부 코드 배포에는 사용할 수 있지만, 스토어에서 받아주지 않는다. 또한 이제 신뢰할 수 있는 하드웨어 보안 모듈에 인증서를 저장해야 하고 코드에 사용되는 인증서의 유효성을 항상 보장하기 위해 정기적으로 갱신도 해야 한다. 

마이크로소프트는 오래전부터 다양한 코드 서명 방법을 제공해 왔고, 윈도우가 신뢰할 수 있는 드라이버만 설치하도록 보장하기 위해 코드 서명을 사용한다. 코드 서명 프로세스는 마이크로소프트 자체 소프트웨어 업데이트와 윈도우 스토어에 사용되는 설치 프로그램까지 확장됐다. 

애저 코드 서명(Azure Code Signing)이 이런 방법 중 하나였는데, 비주얼 스튜디오, 윈도우 스토어와 잘 통합됨에도 불구하고 개발자들의 관심을 끌지는 못했다. 어쨌든 애저 코드 서명은 가장 값싼 옵션도 아니었고, 온프레미스 솔루션과 경쟁해야 했다. 


'신뢰 서명'이란?

마이크로소프트는 클라우드에 호스팅되는 옵션을 간소화하고 애저 보안 컴퓨팅 인프라의 최신 업데이트를 통합해서 '신뢰 서명(Trusted Signing)'이라는 기능을 프리뷰로 제공하고 있다. 이와 함께 마이크로소프트는 새로운 가격 체계를 도입하고 깃허브 빌드 파이프라인과의 통합을 제공한다. 

신뢰 서명의 목표는 코드 서명의 수명 주기 전체를 한곳에 모아서 필요한 인증서를 획득하고, 안전하게 저장하고, 안전한 코드 서명 방법을 제공하는 프로세스를 간소화하는 것이다. 

이 서비스는 익숙한 애저 툴을 기반으로 한다. 애저 포털에서 구독 내의 리소스 그룹에 신뢰 서명 계정을 추가하는 방법으로 설정할 수 있다. 다른 용도로 사용되지 않는, 코드 서명을 위한 별도의 리소스 그룹을 설정하는 것이 좋다. 이렇게 하면 액세스 권한을 가진 사용자와 역할을 더 효과적으로 제어할 수 있다. 

신뢰 서명에는 기본과 프리미엄, 두 가지 옵션이 있다. 두 옵션의 가장 큰 차이점은 저장할 수 있는 ID 검증 및 인증서 프로필의 수다. ID 검증은 사용자(또는 사용자의 조직)가 누구인지 검증하는 데 사용되고, 인증서 프로필은 코드 서명에 사용되는 인증서를 생성하는 데 사용된다. 인증서 프로필에는 서명의 역할과 서명의 신뢰성을 확인한 방법에 대한 정보가 포함된다. 


신뢰 서명 시작하기 

시작은 간단하다. 애저 포털 또는 애저 CLI를 사용할 수 있지만, ID 검증은 포털을 통해서만 가능하다. CLI를 사용하는 경우 단계가 하나 더 추가되고 프로세스를 자동화할 수 없으므로 이 점에 유의해야 한다. 

첫 단계는 애저 구독에 코드 서명 리소스 공급자를 등록하는 것이다. 리소스 공급자 목록은 내 계정 설정에 있다. 여기서 Microsoft.CodeSigning 옵션을 선택할 수 있다. 선택하면 NotRegistered에서 Registered로 전환되고, ID 세부 정보와 서명 인증서 프로필을 저장하기 위한 계정을 생성해서 신뢰 서명을 설정할 수 있게 된다. 지금은 애저의 미국 및 유럽 지역으로만 제한되며, 두 지역 각각에는 외부 빌드 서비스에 자동화된 서명을 추가하는 데 사용할 수 있는 자체 전용 엔드포인트 URL이 있다. 

다음 단계로, 새 애저 리소스로 신뢰 서명 계정을 만든다. 대부분의 애저 리소스와 마찬가지로 리소스를 만드는 과정은 기본 마법사의 안내에 따라 필요한 양식을 입력해서 새 리소스 그룹을 만들고 요금제를 선택하고 애저 지역에 계정을 배포하는 순서로 진행된다. 인스턴스를 배포하는 데는 몇 분 정도가 소요된다. 이후 조직 ID의 유효성을 확인할 수 있다. 

적절한 신뢰 서명 ID 검증자(Trusted Signing Identity Verifier) 역할이 있는 계정으로 애저에 로그인해야 한다. 또한 유효성을 검사하는 ID가 공개 ID인지 비공개 ID인지를 선택해야 한다. 공개 ID에는 인증서를 위해 법적 비즈니스 ID가 필요하고, 비공개 ID의 경우 애저 테넌트만 있으면 된다. 공개 ID에는 URL, 연락처 이메일 주소, 그리고 마이크로소프트 스토어를 통해 코드를 제공하려는 경우 마이크로소프트 스토어 셀러 ID가 필요하다. 

3년의 납세 기록이 있어야 하므로 스타트업 또는 일인 사업자의 경우 신뢰 서명을 사용하는 것이 불가능하다(문서에 따르면 이 조건은 향후 바뀔 수도 있다). 마이크로소프트 측에서 추가로 확인할 부분이 있다면 포털을 통해 부가 정보를 제공해야 할 수 있다. 즉각적인 응답을 기대하면 안 된다. 계정이 확인될 때까지 몇 주 또는 그 이상이 걸릴 수도 있다. 

계정이 확인되면 공개 또는 비공개 인증서 프로필을 생성할 수 있다. 먼저 양식에 정보를 입력하는데, 이 정보는 서명 인증서에 인코딩된다. 여기까지 하면 신뢰 서명 계정에 저장된 세부 정보를 사용해서 코드에 서명을 시작하고 점점 증가 중인 서명 통합에 연결하기 위한 준비가 된다. 


깃허브 빌드 액션에 신뢰 서명 추가하기 

가장 흥미로운 옵션은 윈도우 러너 중 하나를 사용해서 빌드가 완료되는 즉시 코드에 서명하는 깃허브 액션에 대한 지원이다. 빌드가 완료된 후 계정 비밀번호와 신뢰 서명 계정을 위한 코드 서명 엔드포인트를 사용해서 액션을 추가하면 된다. 구성 중에 서명할 폴더와 파일 유형, 사용 중인 해시 유형, 그리고 RFC 3161 타임스탬프를 추가해야 한다. 특정 출력 파일을 대상으로 하는 경우 서명할 파일이 목록으로 저장된 카탈로그 파일을 포함할 수 있다. 

그 결과는 손댈 필요 없이 서명된 빌드를 제공하는 방식이다. 리포지토리의 특정 프로덕션 분기로 코드를 푸시하면 코드 빌드, 패키징, 서명은 액션이 알아서 처리한다. 윈도우 스토어 또는 윈도우 패키지 관리자 리포지토리로 제공하는 작업까지 해준다. 러너는 비주얼 스튜디오 스토어에서 제공되므로 비주얼 스튜디오 내에서 관리하고 편집할 수 있다. 


인증서 수명 주기 자동화 

이 서비스의 또 다른 측면은 인증서 수명 주기 지원이다. 서비스의 기반이 되는 모델은 인증서와 인증서 키에 대한 표준 x.509 접근 방식이다. 인증서의 수명이 짧다는 사실을 의식하는 것이 중요하다. 인증서는 매일 갱신되며, 72시간 동안만 유효하다. 따라서 침해되었을 가능성이 있는 특정 빌드를 신속하게 무효화할 수 있다. 아무것도 직접 할 필요가 없다. 전체 프로세스가 자동으로 수행되며, 발급된 인증서는 애저에 로그인되고 안전한 암호화 하드웨어에 저장되어 관리된다. 

물론 중요한 질문 중 하나는 비용이다. 신뢰 서명은 크게 비싸지는 않다. 기본 옵션은 각 인증서 프로필 유형 중 하나를 사용할 수 있으며 비용은 월 5,000개 서명에 9.99달러다(초과분은 서명 당 0.005달러). 더 많은 인증서가 필요하다면, 월 10만 개의 서명이 가능한 99.99달러 프리미엄 옵션을 선택할 수 있다. 프리미엄도 초과 사용분에 대한 비용은 동일하며 각 계정에서 각 유형을 10개까지 사용할 수 있다. 

마이크로소프트는 코드 서명을 사용하기 쉽도록 하기 위해 많은 노력을 기울이고 있다. 렛츠 인크립트(Let's Encrypt)와 같이 오픈소스 프로젝트 또는 개인 개발자를 위한 무료 옵션이 있다면 좋겠지만, 현재는 없다. 

지금 필요한 것은 코드 서명을 소프트웨어 개발 수명 주기의 자연스러운 한 부분으로 만들 수 있는, 간편하고 모두가 사용할 수 있는 코드 서명 인프라다. 서명되는 코드가 많아질수록 마이크로소프트와 윈도우를 포함한 모두의 위험은 더 낮아진다. 신뢰 서명과 같은 서명 서비스를 공개 서비스로 제공하는 것이 장기적으로는 최선의 방법이겠지만, 지금 당장 사용할 수 있는 것은 신뢰 서명이다. 
editor@itworld.co.kr
Sponsored

회사명 : 한국IDG | 제호: ITWorld | 주소 : 서울시 중구 세종대로 23, 4층 우)04512
| 등록번호 : 서울 아00743 등록발행일자 : 2009년 01월 19일

발행인 : 박형미 | 편집인 : 박재곤 | 청소년보호책임자 : 한정규
| 사업자 등록번호 : 214-87-22467 Tel : 02-558-6950

Copyright © 2024 International Data Group. All rights reserved.