오픈 소스 소프트웨어의 주요 이점 중 하나는 누구나 소스 코드를 읽고 그 기능을 검사할 수 있다는 것입니다. 하지만 대부분의 소프트웨어, 심지어 오픈 소스 소프트웨어도 컴파일된 바이너리 형태로 다운로드되기 때문에 검사하기가 훨씬 더 어렵습니다. 공격자가 오픈 소스 프로젝트에 대한 공급망 공격을 실행하려면 소스 코드를 수정하지 않은 채로 제공되는 바이너리를 교체하는 것이 가장 눈에 띄지 않는 방법입니다.
이러한 종류의 공격에 대응하는 가장 좋은 방법은 오픈 소스 소프트웨어 빌드를 재현 가능하게 만드는 것입니다. 즉, 동일한 소스로 시작하는 빌드가 실행될 때마다 동일한 출력을 생성하도록 하는 것입니다. 이렇게 하면 누구나 실제 소스에서 빌드하고 재빌드된 바이너리가 게시된 바이너리와 비트 단위로 동일한지 확인하여 게시된 바이너리에 숨겨진 변경 사항이 없는지 확인할 수 있습니다. 이 접근 방식은 바이너리를 분해하거나 내부를 들여다보지 않고도 바이너리에 백도어나 소스 코드에 없는 기타 변경 사항이 없음을 증명합니다. 누구나 바이너리를 확인할 수 있으므로 독립적인 그룹이 공급망 공격을 쉽게 탐지하고 보고할 수 있습니다. (DeepL 번역)
왜 이런 걸 걱정하는가 했더니, 이미 약 1년 전부터 이런 종류의 공격이 비밀스럽게 이루어지고 있었던 모양입니다. 아 세상 참 흉흉하여라…
이런 것도 일종의 공급망 공격인 것 같습니다.
마침 1개월 전에 릴리즈된 Go 1.21.0의 경우 최초로 자신들의 툴체인 빌드 결과물이 완전히 재현 가능하다는 내용의 게시물을 블로그에 올렸더군요. 그 글의 처음 두 문단은 다음과 같습니다.
Perfectly Reproducible, Verified Go Toolchains
왜 이런 걸 걱정하는가 했더니, 이미 약 1년 전부터 이런 종류의 공격이 비밀스럽게 이루어지고 있었던 모양입니다. 아 세상 참 흉흉하여라…