악의적인 제3자가 데비안 이미지의 코드 보안을 공격/위협하는 것을 방지하거나 우리가 받는 패키지가 실제로 관리자가 생각하는 패키지인지 확인하기 위해 어떤 보안 시스템과 프로세스가 마련되어 있나요?
답변1
검증 패키지
이미지의 내용은 PGP 키를 사용하여 직접 또는 간접적으로 서명됩니다. Debian 배포판의 "루트"에서 시작:
Release
, 독립적인 서명으로 서명됨Release.gpg
, 모든 패키지 인덱스의 해시(MD5, SHA1, SHA256) 및 설치 프로그램 해시(InRelease
이제 두 가지를 결합하십시오);- 패키지 인덱스(예를 들어,
binary-amd64
)에는 패킷의 해시(MD5 및 SHA256)가 포함되어 있습니다.
해시와 서명은 apt-get
시스템(에서 관리 apt-key
)에 저장된 PGP 키와 같은 도구를 사용하여 확인됩니다. 그러므로 수신 시스템이 정상이라면 기본적으로 아카이브의 PGP 키로 (간접적으로) 서명하지 않고는 데비안 아카이브에서 어떤 패키지도 설치할 수 없습니다. 이미지의 침입자가 관련 PGP 키를 제어하지 않는 경우 바이너리를 교체할 수 없습니다.
제어 미러
이는 아카이브를 손상시키는 것만으로는 최종 사용자 시스템을 실제로 손상시키는 데 충분하지 않으며 해당 시스템이 이미 신뢰하는 PGP 키도 손상시켜야 함을 의미합니다. (결과적으로 데비안 시스템에 키를 추가하는 것은 가볍게 받아들일 일이 아닙니다.) 아카이브의 보안은 그다지 중요하지 않기 때문에 이렇게 하면 첫 번째 문제가 어느 정도 해결됩니다. 그러나 중요한 시스템(서명이 발생하는 곳)은 엄격하게 모니터링되고 감독되며 이에 액세스할 수 있는 사람은 거의 없습니다.
유지관리자의 기대
패키지가 "실제로 유지관리자가 생각하는 것과 같다"는 것을 보장하려면 더 많은 참여가 필요합니다. 패키지가 사용하는 경로는 다음과 같습니다.
- 패키지는 관리자가 준비하고 데비안 키링(즉업로드된 데비안 개발자나 데비안 관리자에게 속한 키, 데비안 키링 서버에 업로드되고 키링 유지 관리 팀에 의해 병합됨)
- 서명된 패키지는 아카이브에 업로드되어 확인됩니다(무엇보다도 사용된 키는 현재 키링에 있어야 하고 만료되지 않아야 하며, 서명이 유효해야 하며, DM이 패키지에 서명한 경우에는 DM에는 패키지에 대한 관련 권한이 있어야 합니다.
- 업로드된 모든 바이너리는 있는 그대로 최종 아카이브에 푸시됩니다(여기에서는 약간 단순화했지만 이것이 효과입니다).
- 누락된 바이너리의 원인은 다음과 같습니다.세워빌드의 PGP 키로 서명하고 최종 아카이브로 푸시됩니다(어떤 빌드 키가 유효한지 알고 해당 키와 비교하여 파일을 확인합니다).
- 이러한 모든 업데이트는 결국 적절한 인덱스 업데이트(위와 같이 서명됨)를 사용하여 미러 네트워크에 푸시됩니다.
관리자가 패키지 소스와 함께 바이너리를 업로드하면 이러한 파일이 최종적으로 (현재로서는) 제공될 것입니다. 이제 바이너리 업로드는 선택 사항이므로 이를 건너뛰는 것이 점점 일반화되고 결국 업로드된 바이너리는 삭제됩니다. (우분투에서는 항상 그랬습니다.) 다른 바이너리가 관리자의 기대를 충족하는지 여부는 구축된 네트워크에 따라 다릅니다. 따라서 건물도 면밀히 감독되고 거의 액세스되지 않는 중요한 시스템입니다. 모든 아티팩트가 서명되었으므로 파일의 무결성을 항상 확인할 수 있습니다. 먼저 관리자의 키에 대해, 그 다음에는 빌드된 키에 대해, 마지막으로 보관된 키에 대해 확인할 수 있습니다.
원본 서명은 이미지에서 사용할 수 없으며 모든 DD는 누락된 바이너리를 업로드할 수 있습니다. 그러나 Debian 11부터 아카이브의 모든 새 바이너리는 빌드 데몬에서 제공됩니다. DD에서 업로드한 바이너리는 불안정하거나 실험적이거나 백포트된 리포지토리에서만 사용할 수 있습니다. 원본 서명은 다음에서 얻을 수 있습니다.데비안-개발-변경파일.
요컨대, 현재 시스템은 완벽하지는 않지만 미러에서 다운로드할 수 있는 모든 파일에 대한 추적성을 제공합니다. 이러한 상황을 개선하기 위한 많은 노력이 있습니다:반복 가능한 빌드(이렇게 하면 게시된 소스와 바이너리의 일치 여부를 독립적으로 확인할 수 있습니다), 관리자가 제공한 바이너리를 제거합니다...