LabHub
배우기 러닝패스 코스

빌드는 초록불이었는데 그 라이브러리는 누가 넣었나 · 증거가 없으면 배포하지 않는다 · 실습

서명은 맞는데 그 빌더를 우리가 허락한 적이 없다

LabHub 에서 이어서 보기

목표

릴리스 묶음에 출처 증명을 붙여 서명하고, 증거가 모자란 묶음을 배포 전에 막는 관문을
프로그램으로 만듭니다. 막히는 경우를 세 가지 직접 만들어 확인합니다.

왜 중요한가

서명은 "누가 만들었나" 에 답하고 SBOM 은 "무엇이 들어 있나" 에 답합니다. 그런데 사고
보고서에 가장 많이 남는 문장은 셋 다 아닙니다 — "이 바이트가 어디서 왔는지 아무도
모른다" 입니다. 출처 증명은 그 질문의 답을 빌드 시점에 적어 두는 일입니다. 무엇을
입력으로 썼고, 어느 커밋에서, 어느 빌더가, 언제 만들었는지. 그리고 그 기록은 배포 전에
읽히지 않으면 없는 것과 같습니다. 관문이 하는 일이 그것이고, 관문의 값어치는 무엇을
막았는지가 아니라 왜 막았는지를 사람이 읽을 수 있는가에서 나옵니다. 마지막 경우를 꼭
직접 만들어 보세요 — 서명도 맞고 다이제스트도 맞는데, 그 빌더를 허락한 적이 없는 묶음입니다.

단계

1. /root/gate/release 에 산출물과 SBOM 을 모으고 /root/gate/subject.json 을 적습니다.
2. /root/gate/release/provenance.json 에 in-toto Statement 를 씁니다.
3. 재료의 다이제스트와 빌드 시각을 더합니다.
4. 키 쌍을 만들어 /root/gate/release/provenance.json.sig 로 서명합니다.
5. /root/gate/allowed-builders.txt/root/gate/release-gate.sh 로 관문을 만듭니다.
6. 정상 묶음의 판정을 /root/gate/06-pass.json 에 남깁니다.
7. /root/gate/unsigned·/root/gate/tampered·/root/gate/rogue 를 만들어 /root/gate/07-reject.json 에 남깁니다.
8. 네 판정을 /root/gate/08-audit.jsonl 에 감사 기록으로 남깁니다.

참고

단계 8개

  1. 릴리스 묶음을 한자리에 모은다
  2. 빌드가 무엇을 무엇으로부터 만들었는지 적는다
  3. 재료와 시각을 적는다
  4. 증명에 서명해 묶음에 넣는다
  5. 관문을 프로그램으로 적는다
  6. 정상 묶음이 통과하는 것을 확인한다
  7. 증거가 모자란 묶음 셋을 만들어 막는다
  8. 판정을 감사 기록으로 남긴다