의존성 혼란 공격을 막기 위한 소프트웨어 공급망 전략

의존성 혼란 공격을 막기 위한 소프트웨어 공급망 전략

종속성 혼란을 막기 위한 소프트웨어 공급망 전략은 PlatoBlockchain 데이터 인텔리전스를 공격합니다. 수직 검색. 일체 포함.

“이름이 뭐예요? 우리가 장미라고 부르는 것은 다른 이름으로 부르면 향기가 달콤할 것입니다.” 셰익스피어가 2년에 이 시(로미오와 줄리엣, 2막 1596장)를 썼을 때, 그는 이름은 단지 관습일 뿐이라고 말하고 있었습니다. 본질적인 의미는 없습니다. 줄리엣은 로미오를 그의 이름이 아니라 그 자체로 사랑합니다.

그러나 셰익스피어는 자신도 모르게 의존성 혼란 공격을 묘사하고 있었습니다.

종속성 혼란은 코드에서 사용하는 패키지가 자신의 것이 아닐 때 발생합니다. 이름은 같지만 프로덕션에서 실행되는 코드는 아닙니다. 이름은 같지만 한 패키지는 장미 냄새가 나고 다른 패키지는… 냄새가 나요.

최근 연구 보고서에 따르면 조직의 41~49%가 종속성 혼란 공격의 위험에 처해 있는 것으로 추정됩니다. OX Security의 새로운 연구에 따르면 조직이 종속성 혼란 공격의 위험에 처하면 자산의 73%가 취약한 것으로 나타났습니다. 연구는 중간 규모 및 대규모 조직(1개 이상, 8개)에 중점을 두었습니다.K+, 80K+ 직원) 금융, 게임, 기술, 미디어 등 광범위한 부문에 걸쳐 모든 규모의 조직 전반에 걸쳐 모든 부문에서 위험을 발견했습니다. 또한 연구에 따르면 사용자가 1억 명 이상인 거의 모든 애플리케이션이 종속성 혼란에 취약한 종속성을 사용하고 있는 것으로 나타났습니다.

이 문서는 종속성 혼란과 이를 방지하는 방법을 이해하는 데 도움을 주기 위해 작성되었습니다.

더블, 더블

종속성(패키지라고도 함)은 소프트웨어의 구성 요소입니다. 일반적으로 이러한 소프트웨어는 전체 커뮤니티에서 개발했든 회사 내에서 개발했든 공통적이고 필요한 작업을 수행합니다.

패키지 관리자는 종속성을 설치하고 업데이트된 상태로 유지하는 데 자주 사용됩니다. 패키지 이름을 찾기 위해 공용 및 개인 레지스트리를 검색하고 다른 모든 사항이 동일하다면 가장 높은 버전 번호를 선택합니다. 공격자는 이름은 같지만 버전이 더 높은 "더미" 패키지를 공개 레지스트리에 배치하여 이를 이용합니다.

패키지 관리자가 공용 레지스트리와 개인 레지스트리에서 두 개의 동일한 패키지를 발견하면 혼란이 발생합니다. 따라서 "종속성 혼란"이라는 이름이 붙었습니다. 두 패키지가 동일하므로 관리자는 자동으로 더 높은 버전의 패키지를 설치하도록 선택합니다. - 이 경우에는 공격자의 악성 패키지입니다.

이는 하이재커에게 귀하의 소프트웨어에 대한 백도어를 제공합니다. 이 시점부터 그들은 데이터 침해를 실행하고, 지적 재산을 도용하고, 소프트웨어 공급망의 신뢰를 손상시킬 수 있습니다. 또한 심각한 규제 처벌을 유발하는 규정 준수 위반이 발생할 수도 있습니다.

수고와 말썽

종속성 혼란 공격에는 다양한 접근 방식이 있습니다.

  • 네임스페이스. PyPI(Python Package Index) 또는 JavaScript와 같은 공개 레지스트리에 악성 소프트웨어 라이브러리를 업로드하여 npm 레지스트리 - 그건 비슷한 이름을 붙인 신뢰할 수 있는 내부 사용 라이브러리에 네임스페이스/URL 확인을 생략하거나 개인 레지스트리에서 강제로 가져오지 않는 시스템은 실수로 악성 코드를 가져올 수 있습니다. 그만큼 최근 PyTorch 종속성 혼란 사건 그러한 예 중 하나입니다.
  • DNS 스푸핑. DNS 스푸핑과 같은 기술을 사용하면 시스템이 합법적인 내부 URL/경로처럼 보이는 것을 표시하면서 악성 저장소에서 종속성을 가져오도록 지시할 수 있습니다.
  • 스크립팅. 빌드/설치 스크립트를 수정하거나 지속적인 통합/지속적인 전달 (CI/CD) 파이프라인 구성을 사용하면 시스템이 로컬 저장소가 아닌 악성 소스에서 소프트웨어 종속성을 다운로드하도록 속일 수 있습니다.

잘 수행되고 조심스럽게 이루어진 일

종속성 혼란을 방지하려면 다음 방법을 도입하세요.

  • 패키지 관리자에서 정책을 설정하세요. 패키지 관리자가 비공개 패키지보다 공개 패키지의 우선순위를 지정하는 것을 허용하지 않습니다.
  • 항상 .npmrc 파일을 포함하세요. 널리 사용되는 NPM을 패키지 관리자로 사용하는 경우 특정 조직 범위에서 패키지를 가져올 위치를 지정하는 .npmrc 파일을 항상 포함하세요.
  • 공개 레지스트리에 패키지 이름을 예약하세요. 종속성 혼란 공격으로부터 보호하는 또 다른 방법은 하이재커가 패키지 이름을 사용할 수 없도록 패키지 이름을 공개 레지스트리에 보관하여 패키지 관리자가 악성 패키지를 설치하도록 "속일" 수 없도록 하는 것입니다.

종속성 혼란 공격으로부터 완벽하게 보호하려면 조직은 항상 다음을 사용해야 합니다. 모든 내부 패키지의 조직 범위, 내부 레지스트리에 게시하는 경우에도 마찬가지입니다. 조직 범위는 NPM의 공개 레지스트리에도 등록되어야 합니다. 이를 통해 누구든지 범위를 가로채거나 혼란을 이용하는 것을 방지할 수 있습니다.

패키지 이름도 공개적으로 등록해야 합니다. 예를 들어 조직이 Python 종속성을 위한 패키지 관리자로 널리 사용되는 PIP를 사용하는 경우 인식 가능하고 모든 프로젝트에서 작동하는 엄격한 접미사가 포함된 내부 패키지를 만들어야 합니다. 동일한 이름의 빈 패키지를 공개 레지스트리 PyPI에 자리 표시자로 업로드합니다.

공용 레지스트리에 패키지 이름을 예약하는 또 다른 이유는 다른 사람이 이를 예약하면(악의든 아니든) 개발자가 개인 레지스트리의 모든 패키지 이름을 공용 레지스트리에 아직 예약되지 않은 이름으로 변경해야 하기 때문입니다. 이는 길고 지루한 과정이 될 수 있습니다.

모든 패키지 레지스트리에서 사용자가 패키지 이름을 예약할 수 있도록 허용하는 것은 아니므로 이를 지원하는 패키지 레지스트리를 찾으십시오.

출구, 곰에게 쫓기다

종속성 혼란 공격은 전 세계 조직에 심각하고 임박한 사이버 보안 위협을 제기합니다. 전체 조직의 약 절반이 위험에 처해 있으며 해당 조직 자산의 73%가 노출되었습니다. 이렇게 증가하는 위협에 대응하기 위해 조직은 강력한 예방 조치를 구현하고 사이버 보안 모범 사례를 채택해야 합니다.

셰익스피어의 장미는 수백년 동안 의존성 혼란 공격의 위험을 예고했을 수 있지만 음유시인의 또 다른 인용문은 장미를 보호하기 위한 지혜를 담고 있을 수 있습니다. “모든 눈이 스스로 협상하도록 하고 어떤 대리인도 신뢰하지 마십시오.” (아무것도 아닌 것에 대한 많은 고뇌, 2막 1장)

타임 스탬프 :

더보기 어두운 독서