LabHub

폐쇄망 현장 — 방산·국방 도메인 · 반입 번들과 무결성 · 실습

반입 번들 만들고 서명 검증이 깨지는 자리 찾기

LabHub 에서 이어서 보기

목표

폐쇄망에 넣을 반입 번들을 처음부터 만들어 서명하고, 받는 쪽이 되어 검증하고, 검증이 어디서 깨지는지를 두 가지 변조로 직접 확인합니다.

왜 중요한가

이 파드에는 gpg 가 없고 설치할 수도 없습니다. 실제 폐쇄망도 대개 그렇습니다 — 인가 목록에 없는 소프트웨어는 그것부터 반입 심사이기 때문입니다. 그래서 어디에나 있는 openssl 로 서명과 검증을 합니다. 그리고 무결성은 한 층이 아니라 두 층입니다. 파일 해시는 '목록이 말한 그 파일인가' 를, 서명은 '그 목록을 아는 사람이 만들었는가' 를 지킵니다. 한 층만 보면 반드시 하나를 통과시키고, 그 사실은 두 경우를 직접 만들어 보기 전에는 실감이 안 납니다.

단계

1. python3/root/bundle/payload/ 아래 여섯 개 파일을 만듭니다. 둘은 바이너리입니다.
2. /root/bundle/stage/MANIFEST.sha256 에 파일별 SHA-256 을 상대 경로로 뜹니다.
3. /root/bundle/keys/ 에 RSA 2048 키쌍을 만들고 개인키 권한을 600 으로, 공개키 지문을 release.pub.sha256 에 남깁니다.
4. openssl dgst -sha256 -sign 으로 /root/bundle/stage/MANIFEST.sig 를 만듭니다.
5. /root/bundle/out/intake-2609-01.tar.gz 로 묶고 같은 이름의 .sha256 을 뜹니다. 키 파일은 넣지 않습니다.
6. /root/bundle/recv/ 에 풀어 번들 해시 → 서명 → 파일 해시 순으로 검증하고 결과를 receipt.txt 에 적습니다.
7. /root/bundle/tamper-a//root/bundle/tamper-b/ 에 두 가지 변조를 넣고 결과를 /root/bundle/tamper.txt 에 적습니다. A 는 payload/deps/libpq.so.5.bin 한 바이트만, B 는 거기에 더해 매니페스트의 그 줄까지 고칩니다.
8. /root/bundle/intake.md 에 일곱 절짜리 반입 승인 요청서를 씁니다.

참고

단계 8개

  1. 반입할 트리 만들기
  2. 파일별 해시 매니페스트 뜨기
  3. 서명 키쌍 만들고 지문 남기기
  4. 매니페스트에 서명하기
  5. 번들로 묶기 (키는 넣지 않는다)
  6. 받는 쪽 절차를 순서대로 밟기
  7. 검증이 어디서 깨지는지 두 경우로 확인하기
  8. 반입 승인 요청서 쓰기