사이버 공격과 방어의 실무
어떤 기업은 사내 패키지 저장소(프라이빗 레지스트리)에 사내 전용 라이브러리 acme-utils를 두고 사용하고 있다. 공격자가 공개 패키지 저장소에 같은 이름 acme-utils로 더 큰 버전 번호의 패키지를 등록했더니, 빌드 설정에 따라서는 사내 빌드 환경이 공격자의 패키지를 가져와 버린다는 것이 밝혀졌다. 이 '의존성 혼동(dependency confusion)'에 대한 대책으로 가장 적절한 것은?
- A사내 전용 라이브러리의 버전 번호를 작게 유지하여 공개 저장소에 있는 패키지와 구별하기 쉽게 해 둔다
- B사내 전용 패키지는 조직이 관리하는 네임스페이스에 두고 사내 저장소에서만 가져오도록 설정하며, 잠금 파일(lock file)로 버전과 해시값을 고정한다
- C공개 저장소의 패키지는 심사를 거쳐 신뢰할 수 있으므로, 어느 저장소에서 가져올지는 설정하지 않아도 된다
정답과 해설 보기
정답: B. 사내 전용 패키지는 조직이 관리하는 네임스페이스에 두고 사내 저장소에서만 가져오도록 설정하며, 잠금 파일(lock file)로 버전과 해시값을 고정한다
의존성 혼동은 소프트웨어 공급망 공격의 일종입니다. 패키지 관리 도구 중에는 여러 저장소를 참조하여 같은 이름이 있으면 버전 번호가 큰 쪽을 고르도록 설정된 것이 있으며, 공격자는 이를 악용하여 사내 이름과 같은 부정한 패키지를 가져오게 합니다. 대책은 사내 패키지에 조직이 관리하는 네임스페이스(스코프)를 사용하고, 그 네임스페이스를 사내 저장소에만 연결하여 어느 저장소에서 가져올지를 명시하는 것입니다. 나아가 잠금 파일로 의존하는 패키지의 버전과 해시값을 고정하면, 모르는 사이에 다른 것으로 바뀌는 것을 막을 수 있습니다. 공개 저장소에 조직의 네임스페이스를 먼저 등록해 두는 것도 사칭을 막는 데 도움이 됩니다.