파일 배포v2

Note

파일 배포 플러그인은 CC 평가 항목에 포함된 기능이 아니므로 CC 인증을 요구하는 공공기관에서는 해당 플러그인을 사용할 수 없습니다.

파일 배포 플러그인은 파일을 실행하거나 특정 위치에 다운로드합니다. 정책서버는 에이전트와 통신하여 단말에게 파일에 대한 배포, 실행, 설치를 할 수 있습니다.

  • 단말에 필요한 파일 배포

  • 단말의 미설치 소프트웨어 설치

파일 배포v2 플러그인은 기존 파일배포 플러그인에서 보안성 강화에 치중하여 추가되었습니다.

파일 배포v2 플러그인은 안전한 파일 배포를 위해 파일 무결성 검증과 배포자 신원확인을 제공합니다.

  • 3단계에 걸친 무결성 검증을 수행

  • 최종 사용자의 배포자 식별 및 승인

파일 배포v2 플러그인은 배포하는 파일에 대한 전자서명을 필수로 요구하며 전자서명과 서명검증을 위해 공급망 보안을 위해 설계된 Sigstore Signing 방식을 사용합니다. 파일 배포v2 플러그인은 Sigstore Signing을 사용하여 Sigstore Keyless Signing과 Public Key Signing 2가지 방식을 선택적으로 사용할 수 있습니다.

검증 방식

Sigstore Keyless Signing (Keyless)

Public Key Signing (self-managed-key)

검증 내용

  • Google/Github/MS에서 OIDC(OpenID Connect)를 방식으로 인증하여 신원 정보로 배포 파일에 전자서명 수행

  • 파일을 전송 받은 단말은 사용자ID(e.g. Google ID)와 OIDC(Google Account) 정보를 통해서 Sigstore에 서명된 파일이 맞는지 검증

  • 자체적으로 보유한 비밀키/공개키를 사용하여 배포 파일에 전자서명 수행

  • 검증을 위한 인증서(공개키)는 노드액션 수신 시 배포

환경 구성

  • 인터넷이 가능한 환경에서만 사용 가능

  • 인터넷망/폐쇄망 환경에서 모두 사용 가능

키 관리

  • 별도의 키 사용하지 않는 방식으로 관리자 계정에 대한 보안만 요구

  • 별도의 비밀키를 안전하게 보관 필요

준비사항

  • 배포파일 전자서명을 위한 cosign 바이너리 파일 필요(Sigstore Git hub Release v2.1.1 하단 Assets 에서 cosign-windows-amd64.exe 다운로드 )

  • 배포파일 전자서명/서명검증에 사용되는 외부 인터넷 통신 허용 필요 (전자서명PC, 정책서버, 사용자단말), 도메인 정보

  • 배포파일 전자서명에 사용되는 OIDC(Google, Git, MS)계정이 필요

  • 배포파일 전자서명을 위해 cosign 바이너리 파일이 필요

  • 배포파일 전자서명에 사용될 키가 필요하며 cosign을 사용해 생성하거나 별도의 키 준비 필요

제약사항

  • 최초 등록된 배포자에서 다른 배포자로 변경 불가

  • 최초 등록된 배포자에서 다른 배포자로 변경 불가

  • 배포파일 전자서명에 사용된 키파일을 별도 관리(USB 등)

Sigstore Keyless Signing 방식

Sigstore는 OpenID Connect(OIDC)를 사용하여 짧은 유효 기간의 인증서 를 생성합니다.
이 인증서는 소프트웨어를 서명하는 데 사용 되며, 서명된 소프트웨어는 cosign을 통해 공개적으로 검증할 수 있습니다.

OIDC는 OAuth 2.0의 확장으로, 사용자에게 리소스에 대한 액세스를 제공하기 위해 로그인 인증을 사용하는 프레임워크입니다. OIDC는 사용자의 암호를 요구하지 않고도 인증서를 생성할 수 있기 때문에, Sigstore에서 짧은 유효 기간의 인증서를 생성하는 데 사용됩니다.

Sigstore Keyless Signing 사용 방법

Step1. 배포파일 전자서명

  1. cosign을 다운로드 받아 배포파일 전자서명에 사용할 디렉토리에 저장합니다.

  2. 파일명을 cosign.exe로 변경합니다.

  3. 전자서명할 파일을 디렉토리에 복사합니다.

  4. 시작 > 실행 > cmd를 입력한 후 실행하여 cosign.exe 파일이 위치하는 디렉토리로 이동합니다.

  5. 아래 명령어를 입력하여 전자서명을 수행합니다.

> cosign.exe sign-blob {배포파일명} --output-certificate {생성할 cert 파일명.cert} --output-signature {생성할 시그니처 파일명.sig}
  1. cmd창에 표시된 URL 정보를 복사하여 브라우저를 사용하여 Web페이지에 접속합니다.

  2. cmd창에 표시된 8자리 문자 값과 cmd창에 표시된 8자리 문자값이 동일한지 확인하고 Submit 버튼을 클릭합니다.

  3. Git, Google, Microsoft 세가지 OIDC중 하나를 선택하고 인증을 수행합니다.

  4. 잠시 후 cmd창에 서비스 약관 동의에 y 를 입력합니다.

  5. 디렉토리내에 Cert, Sig 파일이 정상적으로 생성되었는지 확인합니다.

Step2. 전자서명 검증하기

  1. 시작 >창에서 아래 명령어를 입력합니다.

> cosign.exe verify-blob {배포파일명} --certificate {생성된 cert 파일명.cert} --signature {생성된 시그니처 파일명.sig} --certificate-identity={인증에 사용한 ID} --certificate-oidc-issuer={OIDC 발행자}
예시> cosign.exe verify-blob agent.zip --certificate agent.cert --signature agent.sig --certificate-identity=genian@genians.com --certificate-oidc-issuer=https://accounts.google.com
  1. 정상적으로 전자서명이 이루어진 경우 Verified OK 라고 표시됩니다.

Step3. 노드액션 생성하기

  1. 정책서버 Web콘솔에 접속하여 상단 정책 으로 이동합니다.

  2. 좌측 메뉴 노드정책 > 노드액션 으로 이동합니다.

  3. 상단 작업선택 > 생성 을 클릭합니다.

아래 기본설정 이 있습니다.

  1. 액션명 은 용도에 따라 "(용도)액션명" 형태로 사용하시면 향후 운영시 편하게 노드액션을 구분할 수 있습니다.

  2. 설명 은 용도에 따라 다르게 사용하는 경우 어떤 목적으로 사용하는 노드액션인지 구분할 수 있습니다.

  3. 라벨 을 추가하면 "설명" 입력란에 표시되는 맞춤 라벨로 플러그인을 분류 할 수 있습니다.

아래의 액션 수행설정 을 구성합니다.

  1. OS 종류 는 macOS, Linux, Windows 대상에 맞는 OS를 선택합니다.

  2. 조건 설정 은 일반적으로 배포를 할 때 특정조건에 맞는 사용자에게 배포하기 위해 사용합니다.

예시: "c:\%ProgramFiles%\abc.exe 가 존재하지 않는 경우" 라는 조건을 사용하여 배포하게 되면 abc.exe 가 존재하지 않는 단말에만 배포가 가능합니다.
  1. 플러그인선택 에서는 파일 배포 V2 를 선택합니다.

  2. 배포 파일 에는 업로드 버튼을 클릭하여 파일을 선택합니다.

  3. 배포파일 검증방법 은 Sigstore Keyless Signing을 선택합니다.

  4. 신뢰하는 OIDC 발행자 에는 전자서명 시 인증에 사용한 OIDC(Github, Google, Microsoft)를 선택합니다.

  5. 신뢰하는 ID 에는 전자서명 시 인증에 사용한 ID(email주소 형태)를 입력합니다.

  6. Certificate 는 우측 파일읽기 버튼을 클릭하여 전자서명 시 생성되었던 cert 파일을 추가합니다.

  7. Signature 는 우측 파일읽기 버튼을 클릭하여 전자서명 시 생성되었던 sig 파일을 추가합니다.

  8. 배포 옵션 의 경우 배포할 방식을 설정합니다.

  • 파일 실행: 압축파일일 경우 "파일 경로"에 실행할 파일을 설정하고, "실행옵션"과 실행할 "수행 계정"을 설정하여 해당 파일을 실행시킵니다. "리부팅 옵션"을 통해 파일 실행 이후 리부팅여부를 설정합니다.

  • 다운로드: 배포 파일을 복사할 단말의 파일 및 폴더 경로를 지정합니다.

  1. 수정 버튼을 클릭합니다.

  2. 왼쪽 정책 항목에서 노드정책 으로 이동한 후 기본정책 을 클릭합니다.

  3. 노드액션 설정 을 찾아 할당 버튼을 클릭합니다.

  4. 사용가능 항목에서 파일 배포 을 찾아 선택 항목으로 드래그하여 이동합니다.

  5. 수정 버튼을 클릭한 후 수정 버튼을 클릭합니다.

Note

Sigstore Keyless Siging 방식의 경우 전자서명/서명검증을 위하여 외부와 통신이 필수적이며 아래 도메인에 대한 통신이 허용되어야합니다.
(출발지:정책서버, 에이전트), (서비스포트: TCP/443)
rekor.sigstore.dev : 원장 기록 시스템
oauth2.sigstore.dev : Sigstore oauth 흐름 제공 서버
accounts.google.com : OIDC 제공자(다른 OIDC인 경우 해당 OIDC 도메인)
fulcio.sigstore.dev : sigstore CA 서버
tuf-repo-cdn.sigstore.dev : SLSA 검증

Public Key Signing 방식

Sigstore cosign은 자체관리 키 전자서명 방식도 제공하고 있습니다.
Public Key Signing 방식은 직접 키를 생성하여 전자서명을 하거나 별도로 제작하여 사용중인 키를 사용하여 전자서명을 하는 방식입니다.

Public Key Signing 사용 방법

Step1. 배포파일 전자서명

  1. Sigstore Keyless Signing 방식의 Step1 의 1~4 를 수행 후 다음으로 진행합니다.

  2. 별도로 사용하는 전자서명용 키가 없다면 아래 명령어를 입력하여 전자서명용 비밀키와 공개키를 생성합니다.

> cosign.exe generate-key-pair
> 비밀키 패스워드 입력
> 비밀키 패스워드 확인
> dir 을 입력하여 비밀키(key) 파일과 공개키(pub) 파일이 생성되었는지 확인합니다.
  1. 키를 생성했다면 아래와 같이 생성한 키를 사용하여 배포파일에 전자서명을 수행합니다.

> cosign.exe sign-blob {배포파일명} --key cosign.key --tlog-upload=false --output-signature {생성할 시그니처 파일명.sig}
예시> cosign.exe sign-blob agent.zip --key cosign.key --tlog-upload=false --output-signature agent.sig

Step2. 전자 서명 검증하기

  1. CMD창에서 아래 명령어를 입력합니다.

> cosign.exe verify-blob {배포파일명} --key {공개키 파일명.pub} --signature {생성된 시그니처 파일명.sig} --insecure-ignore-tlog=true --insecure-ignore-sct=true
예시> cosign.exe verify-blob agent.zip --key cosign.pub --signature agent.sig --insecure-ignore-tlog=true --insecure-ignore-sct=true
  1. 정상적으로 전자서명이 이루어진 경우 Verified OK 라고 표시됩니다.

Step3. 노드액션 생성하기

  1. Sigstore Keyless Signing 방식의 Step3 의 1~10 를 수행 후 다음으로 진행합니다.

  2. 배포파일 검증방법 은 Public Key Signing을 선택합니다.

  3. 신뢰하는 공개키 는 우측 파일읽기 버튼을 클릭하여 키생성 시 함께 생성되었던 pub 파일을 추가합니다.

  4. Signature 는 우측 파일읽기 버튼을 클릭하여 전자서명 시 생성되었던 sig 파일을 추가합니다.

  5. Sigstore Keyless Signing 방식의 Step3 의 16~21 를 수행합니다.

Danger

최초 설정된 배포방식과 배포자 변경이 불가능 하기때문에 최초 노드액션 생성 시 사용한 Private key 는 분실위험이 없도록 안전하게 보관 해야 합니다.
등록된 배포자정보는 Web콘솔 설정 > 환경설정 > 에이전트 > 배포 옵션 섹션에서 확인할 수 있습니다.

Yubikey 를 이용한 개인키 관리방법

Public Key 방식으로 개인를 관리하면서, 관리되고있는 PC 의 포멧 등으로 사용되고 있는 키 분실 사례가 많이 발생하고 있습니다. 또 한 외부토큰에 개인키를 저장하면 물리적으로 분리되어 있어 해킹이나 악성 소프트웨어로부터 보호됩니다. 이러한 이유로 외부 토큰(YubiKey)을 이용하여 개인키를 안전하게 관리하는것을 권장합니다.

cosign piv-tool 명령으로 하드웨어 토큰을 관리하기 위한 유틸리티를 제공합니다.

Step1. Yubikey 초기화

이 소개에 사용된 모델 : yubikey 5 nfc

> cosign piv-tool reset

Danger

하드웨어 토큰을 초기화 하는 명령어이므로 기존에 Yubikey 에 저장되어있는 인증서있다면 삭제됩니다.

Step2. Pin 설정

  • 초기화 후 PIN 기본값은 123456

  • 아래는 PIN 을 ‘111222’으로 정의한 예제입니다.

> cosign piv-tool set-pin --new-pin=111222
? pin. This will overwrite the previous pin.: y
Setting new pin. This will overwrite the previous pin.: y
  • Pin 이 이미 정의되어있는 상태에서 PIN 변경하려면 다음과 같이 명령어를 수행합니다.

> cosign piv-tool set-pin --old-pin=111222 --new-pin=232323
? pin. This will overwrite the previous pin.: y
Setting new pin. This will overwrite the previous pin.: y323
  • Pin 이 ‘111222’ 에서 ‘232323’ 으로 변경됩니다.

Step3. 인증서 생성

  • Yubikey에 인증서를 생성합니다.

> cosign piv-tool generate-key --random-management-key

Step4. 등록된 키 확인

  • Yubikey에 저장되어있는 인증서 정보를 출력합니다.

> cosign piv-tool attestation

Step5. 공개키 추출

  • 앞서 위에서도 설명되었듯이 전자 서명 검증하기위해서는 대상파일, 공개키, 시그니처 가 필요합니다.

  • 다음 명령을 통하여 Yubikey 공개키를 파일로 내보내기 할 수 있습니다. publickey.pub 파일이 생성됩니다.

> cosign.exe public-key —sk > publickey.pub

Step6. 코드사인(Signature생성)

  • Public Key Signing 방식 - Step1. 배포파일 전자서명 에서의 cosign.exe sign-blob 명령과 유사하지만 스마트카드토큰을 사용하는것에 차이가 있습니다.

  • piv 가 연결이 되어있으므로 이번 명령에서는 --key 항목을 생략하고 코드사인을 시도합니다.

> cosign.exe sign-blob {배포파일명} --tlog-upload=false --output-signature {생성할 시그니처 파일명.sig}
예시> cosign.exe sign-blob agent.zip --tlog-upload=false --output-signature agent.sig
> 등록된 PIN 입력
> Yubikey 에 물리적인 터치 수행

Step7. 무결성 확인

  • Public Key Signing 방식 - Step2. 전자 서명 검증하기 와 동일하게 수행합니다.