기술 통찰력 / Secure Software Supply Chain

안전한 소프트웨어 공급망:
운영 환경에 소프트웨어를 빠르고 안전하게 제공

안전한 소프트웨어 공급망 구현은 소프트웨어 개발을 보호하고 DevSecOps 기능을 가속화하는 데 필수적입니다.


안전한 소프트웨어 공급망이란?

안전한 소프트웨어 공급망은 소스 코드에 대한 정기적인 업데이트와 플랫폼 거버넌스에 대한 정의된 제어를 통해 모든 종속성을 포함한 소프트웨어를 운영 환경에 안전하고 안정적이며 일관되게 제공하는 데 사용되는 프로세스입니다.

안전한 소프트웨어 공급망은 코드와 해당 종속성이 신뢰할 수 있고 규정을 준수하며 업데이트되고 출시할 준비가 되어 있다는 확신을 제공하고, 정기적인 검사를 통해 취약점을 탐지, 보고 및 제거할 수 있도록 보장합니다. 정의된 정책 세트가 공급망의 모든 시스템에 일관되게 시행되므로 무단 액세스를 방지하고 서명되지 않은 패키지가 실행되는 것을 차단합니다.




안전한 소프트웨어 공급망 모범 사례

안전한 소프트웨어 공급망을 개발하기 위해서는 조직에서 허용되는 리스크 수준에 비해 지속적으로 빠른 속도와 품질로 소스 코드에서 운영 환경에 이르기까지 소프트웨어 패키지(자사 및 타사 모두)를 제공할 수 있도록 지원하는 툴과 모범 사례가 필요합니다.

VMware는 민첩한 소프트웨어 개발 시 보안을 통합하고 소프트웨어 공급망 공격을 완화할 수 있는 안전한 소프트웨어 개발을 위해 중점을 두어야 하는 5가지 영역을 파악했습니다.

  1. 1. 애플리케이션 소스 코드 확보

    소프트웨어 개발 수명주기 내에서 공급망을 통해 최대한 제어할 수 있는 부분은 직접 작성하는 코드입니다. 안전하지 않은 코드를 배송하는 경우 보안 공급망은 중요하지 않습니다. 이 코드의 보안을 보장하는 전략을 구현하여 공급망 공격을 완화할 수 있습니다.

    모범 사례

    • 운영 환경에서 보안 준비를 지원하도록 개발자를 지원합니다.
    • 코드 저장소에 대한 액세스 제어를 사용하여 무단 코드 변경과 원치 않는 코드 변경을 방지합니다.
    • 일반적인 프로그래밍 오류가 운영 환경에서 악용될 수 있는 버그가 되기 전에 개발 중에 이를 포착할 수 있도록 코드 린팅(linting)/정적 코드 액세스를 활용합니다.
    • 오류로 인해 발생한 의도하지 않은 취약점과 악의적인 행위자에 의해 의도적이고 악의적으로 유발된 취약점을 모두 방지하도록 피어 코드 검토를 포함시킵니다.
    • 코드가 유출되거나 리버스 엔지니어링되거나 공개되는 경우 공격을 방지하기 위해 소스 코드에 민감한 자격 증명 및 구성이 없도록 비밀 데이터 관리 방식을 시행합니다.
    • 소프트웨어 보안 테스트의 일종인 SAST(Static App Security Testing)를 사용하여 소스 코드를 검사하고 알려진 취약한 코딩 방식과 일치하는 코딩 패턴을 검색합니다.
    • SCA(Source Composition Analysis)를 사용하여 애플리케이션에 사용되는 타사 라이브러리, 프레임워크 및 구성 요소를 확인합니다.

    성과

    • 애플리케이션 개발자는 보안 모범 사례에 따라 고품질 코드를 개발할 수 있습니다.
    • 저장소에 대한 모든 커밋을 신뢰할 수 있습니다.
    • 소스 코드에 비밀 데이터나 기타 민감한 환경 데이터가 없습니다.
  2. 2. 애플리케이션 종속성 관리

    빌드를 생성할 때 처음부터 시작하는 개발자는 거의 없습니다. 시간을 단축하고 개발 속도를 높이기 위해 오픈 소스 및 기타 카탈로그에서 사전 구축된 코드를 사용할 수 있습니다. 다시 말해서 소프트웨어는 운영 환경에서 애플리케이션의 취약점을 확인하고 패치를 적용할 때 최종 빌드에 통합된 사전 구축된 코드 조각을 고려해야 합니다.

    안전한 소프트웨어 설계 및 개발을 위해 팀은 애플리케이션 종속성을 명확하게 시각화할 수 있어야 합니다. 모든 종속 라이브러리에 패치를 적용하고 CVE(Common Vulnerability and Exposures)가 없는지 정기적으로 검사하면 종속성이 악용될 가능성이 줄어듭니다.

    모범 사례

    • 모든 종속 라이브러리에 패치를 적용되고 CVE가 없도록 종속성 취약점 검사를 정기적인 검사에 통합합니다,
    • 적시에 취약한 종속성에 패치를 적용합니다.
    • 종속성을 실수로 업데이트하여 새로운 취약점이 발생하는 경우가 생기기 않도록 종속성을 확인된 특정 버전에 고정하는 종속성 고정(잠금 파일)을 사용합니다.
    • 다수의 개발자가 사용하는 잘 알려지고 평판이 좋은 소스에서 얻은 종속성을 사용하는 것이 좋습니다. 이는 신뢰할 수 없는 위치의 종속성보다 손상될 가능성이 낮습니다.
    • 어떤 종속성이 사용 중인지 정확히 파악합니다. 최신 애플리케이션은 수십 개 이상의 종속성으로 구성되어 종속성 계층 구조의 깊숙한 곳에 취약점이 유입되는 공격 벡터를 생성합니다.
    • 새로운 종속성에 대해 조치를 취해야 하는 시기에 대해 판단합니다. 경우에 따라 대규모 종속성을 피하여 공격 노출 범위를 최소화할 수 있습니다.
    • 기존 종속성에 대한 업데이트를 평가합니다. 소프트웨어 벤더는 정기적인 유지 관리의 일부로 중앙 집중식 서버에서 업데이트를 배포하는 경우가 많습니다. 벤더의 네트워크에 침투할 수 있는 공격자는 일반 제품 업데이트처럼 보이는 항목에 멀웨어를 삽입할 수 있습니다.
    • 리스크 관리를 실천합니다.

    성과

    • 개발자는 타사 및 내부 종속성에 대한 출처를 안정적으로 검증할 수 있습니다.
    • 애플리케이션 팀은 애플리케이션의 소프트웨어 BOM(Bill of Materials)을 완벽하게 시각화할 수 있습니다.
    • 이해관계자는 CVE에 취약할 수 있는 애플리케이션을 신속하게 식별할 수 있습니다.
    • 애플리케이션 종속성 취약점에 대한 마찰이 적은 패치 적용을 보장합니다.
  3. 3. 보안 CI/CD 시스템

    거버넌스는 CI/CD(지속적인 통합 및 지속적인 제공) 파이프라인을 제어하는 데 중요한 부분입니다. 시스템 사용 권한이 제대로 마련되어 있는지 확인하면 소프트웨어 공급망을 보호하는 데 도움이 될 수 있습니다. 여기에는 최소한의 권한이 포함됩니다.

    모범 사례

    • CI/CD 파이프라인에 대한 액세스 제어를 구현하고 간접적 접근법을 제거하여 파이프라인의 우회를 방지합니다.
    • 자동화 파이프라인에서 업무, 작업 및 스크립트를 실행하려면 최소한의 필수 권한이 있는 시스템 계정을 사용합니다.
    • 푸시 기반 배포 대신 풀 기반 배포를 사용합니다. 푸시 기반 배포를 사용하는 경우 대상 시스템 외부에 자격 증명을 노출해야 합니다. 풀 기반 배포 시나리오에서는 대상 시스템의 자격 증명이 노출되지 않지만 컨트롤러는 Git 저장소(GitOps) 또는 이미지 레지스트리의 상태 변경 사항을 동기화합니다.
    • CI/CD 파이프라인에 자격 증명 관리를 사용하고 배포 툴에 가장 민감한 환경에 대한 자격 증명이 필요한지 확인합니다.
    • 빌드 로그 및 감사 추적을 생성하고 저장합니다.

    성과

    • 개발자는 타사 및 내부 종속성에 대한 출처를 안정적으로 검증할 수 있습니다.
    • 애플리케이션 팀은 애플리케이션의 소프트웨어 BOM(Bill of Materials)을 완벽하게 시각화할 수 있습니다.
    • 이해관계자는 CVE에 취약할 수 있는 애플리케이션을 신속하게 식별할 수 있습니다.
    • 애플리케이션 종속성 취약점에 대한 마찰이 적은 패치를 적용합니다.
  4. 4. 보안 이미지 빌드 및 레지스트리

    컨테이너 이미지를 보다 안전하게 만드는 목표는 이미지 레지스트리에서 높은 CVE의 수를 줄이고 CVE를 수정하는 데 필요한 목표 시간을 단축하는 것입니다. 기본 이미지를 신뢰할 수 있도록 서명하고 이미지 저장소에 대한 제어 정책이 시행되도록 하여 이를 달성할 수 있습니다.

    모범 사례

    • 이미지 저장소에 대한 제어/액세스 정책을 구현합니다. 사용 중인 모든 이미지 참조는 자동화된 CI 프로세스를 통해 승인 및 검증해야 하며, 이 프로세스를 벗어나는 액세스는 최소화해야 합니다.
    • 소규모의 승인된 기본 이미지 세트를 활용하여 공격 노출 범위를 줄입니다. 기본 이미지가 서명되고 버전이 지정되었는지 확인합니다. 신뢰할 수 있는 기본 이미지가 결정되고 사용 가능하게 되며 빌드에 사용됩니다.
    • 애플리케이션 이미지 및/또는 아티팩트를 안전한 장소에 저장합니다. 이미지 저장소에 제어 정책을 시행하고 레지스트리에 저장할 때 이미지가 서명되었는지 확인합니다.
    • 취약점 데이터베이스를 업데이트하고 정기적으로 예약된 이미지 취약점 검사에 사용합니다.
    • 알려진 신뢰할 수 있는 아티팩트 세트만 사용하여 재현 가능하고 생성되는 보안 이미지 빌드를 활용합니다. 빌드 중에 백도어가 유입되기 어렵고 탐지될 수 있는지 확인합니다.
    • 테스트에 사용된 동일한 아티팩트가 더 높은 환경으로 승격되는지 확인하기 위해 운영 환경으로 승격된 아티팩트를 추적합니다. 감사 추적이 가능합니다.
    • 이미지 태깅을 활용합니다.
    • 인증을 검증합니다.

    성과

    • 무결성을 보장하기 위해 애플리케이션 이미지에 서명됩니다.
    • 이미지가 보안 레지스트리에 저장됩니다.
    • 배포된 아티팩트에 대한 신뢰를 구축할 수 있습니다.
    • 이미지 취약점을 파악할 수 있습니다.
    • 운영 가능한 이미지 취약점 문제를 해결할 수 있습니다.
  5. 5. 보안 런타임

    지능형 위협 탐지 툴과 함께 제로 트러스트 아키텍처와 SIEM(Security Information and Event Management)을 구현하면 애플리케이션 및 애플리케이션 개발 플랫폼을 위한 보다 안전한 환경이 조성됩니다. 플랫폼 운영에 관찰 기능을 통합하면 런타임을 모니터링하고 애플리케이션의 성능을 이해하는 데 도움이 됩니다.

    모범 사례

    • 보안 엔지니어는 SIEM 툴과 공격자가 액세스 권한을 얻었음을 나타내는 특정 이벤트를 식별할 수 있는 기타 위협 탐지 툴을 통해 여러 이벤트의 상관 관계를 파악하여 공격을 탐지할 수 있어야 합니다.
    • 런타임 취약점 검사를 사용하여 Kubernetes 환경의 취약점을 식별합니다.
    • 공격자가 하나의 네트워크에 액세스한 후 다른 신뢰할 수 있는 네트워크 및 환경으로 쉽게 이동하지 못하도록 안전한 네트워킹을 구현합니다. 공격자가 네트워크 트래픽을 스니핑하지 못하도록 하려면 안전한 통신을 통해 전송 중인 데이터를 보호하는 것이 필수적입니다.
    • 안전한 멀티테넌시 전략을 사용합니다. 격리를 위해 네임스페이스 및 클러스터 전략을 사용하고 역할 기반 액세스 제어를 추가합니다.
    • 종종 잘못 구성된 인프라로 인해 발생하는 보안 침해를 방지할 수 있도록 개발 환경을 올바르게 구성합니다.
    • 비밀 데이터 관리를 사용하여 비밀 데이터를 필요로 하는 애플리케이션과 서비스에 비밀 데이터를 안전하게 배포하고 해당 애플리케이션과 서비스가 작동하는 데 필요한 비밀 데이터에만 액세스할 수 있도록 합니다. 이는 공격 노출 범위와 잠재적인 침해의 영향을 줄이는 데 도움이 됩니다.
    • 승인된 사용자만 환경에 액세스할 수 있도록 안전한 환경 액세스를 구현합니다. 이 경우 여러 가지 다양한 보안 제어를 구현하는 것이 적절할 수 있습니다. 무단 액세스를 탐지할 수 있어야 합니다.
    • 동적 애플리케이션 보안 테스트("블랙박스" 테스트)를 활용하여 실행 중인 애플리케이션의 보안 취약점과 약점을 찾습니다.
    • 서명되지 않은 이미지가 운영 환경에서 실행되는 것을 방지합니다.
    • 공급망의 보안 취약점 문제를 해결하는 데 소요되는 시간을 단축합니다.
    • 일관된 정책 시행을 사용합니다. 보안 정책, 로그 감사, 규정 준수 정책 및 네트워크 정책을 결정, 적용 및 테스트합니다.
      • 보안 및 액세스 정책을 지속적으로 시행합니다.
      • 시스템은 안전한 소프트웨어 공급망에서 제공되지 않은 코드 실행을 거부합니다.
      • 정책 작성(rego) 시 실수하기 쉽기 때문에 신중하고 적절한 테스트를 통해 정책을 개발해야 합니다.
      • 통합 정책을 테스트하여 충돌이 없는지 확인합니다.

    성과

    • 인접한 워크로드가 워크로드에 영향을 주거나 액세스하거나 방해할 수 없도록 워크로드 격리가 보장됩니다.
    • 네트워크를 통한 서비스 간 통신은 안전하고 안정적입니다.
    • 개발자는 애플리케이션 CVE를 신속하게 시각화할 수 있습니다.
    • 최신의 안전한 워크로드 호스팅 플랫폼을 제공합니다.


안전한 소프트웨어 공급망의 중요성

지난 몇 년 동안 공급망 공격이 더욱 만연해지면서 소프트웨어 개발에 대한 관심이 더욱 높아졌습니다. 최근 Executive Order on Improving the Nation’s Cybersecurity(국가 사이버 보안 개선에 관한 행정 명령)에서 조직을 위한 공급망 보안 모범 사례에 대해 설명했습니다. 이는 공격자가 개발 프로세스에 액세스하여 소스 코드에 멀웨어를 삽입하는 공급망 손상을 해결하려고 합니다. 이 멀웨어는 게시된 소프트웨어에서 다운스트림으로 전파될 수 있었고 공격자가 애플리케이션을 실행하는 조직에서 정보를 훔칠 수 있었습니다. 이 행정 명령은 미국 내 조직이 보다 안전한 소프트웨어 공급망을 개발하고 중요한 인프라 기능을 중단할 수 있는 손상을 방지하도록 자극합니다.

운영 경로에 있는 취약점을 이해하고 완화하면 비즈니스 투자의 위험을 줄이는 데 도움이 되며 최종 사용자에게 보다 안전한 소프트웨어를 빠른 속도로 제공할 수 있으며 개발자가 코드를 배포하는 데 따른 마찰을 없앨 수 있습니다. Tanzu는 개발자가 즐겨 사용하는 운영자 정의 가드레일을 갖춘 안전한 툴 솔루션을 제공합니다. Tanzu Labs 전문가는 귀사와 협력하여 개발 팀과 보안 팀 간의 긴밀한 협업을 제공하는 프로세스를 구축합니다. VMware는 검증된 솔루션으로 DevSecOps 모범 사례를 개선하고 비즈니스에 가치를 제공하는 아이디어를 구축할 수 있는 안전한 플랫폼에서 애플리케이션 개발 프로세스를 보호할 수 있도록 도와드리겠습니다.