Skip to main content

공급망 코드 보안의 모범 사례

공급망의 중심(작성하는 코드 및 사용하는 코드)을 보호하는 방법에 대한 지침입니다.

이 가이드의 내용

이 가이드에서는 코드의 보안을 개선하기 위해 수행할 수 있는 가장 큰 변경 사항을 설명합니다. 각 섹션에서는 보안을 개선하기 위해 프로세스를 변경할 수 있는 사항을 간략하게 설명합니다. 가장 큰 변경 내용이 먼저 나열됩니다.

어떤 위험이 있나요?

개발 프로세스의 주요 위험은 다음과 같습니다.

  • 공격자가 악용할 수 있는 보안 취약성이 있는 종속성 사용
  • 공격자가 리소스에 액세스하는 데 사용할 수 있는 인증 자격 증명 또는 토큰
  • 공격자가 악용할 수 있는 사용자 고유의 코드에 취약성을 도입

위험은 리소스 및 프로젝트를 공격에 노출시키고 해당 위험은 사용자가 만든 패키지를 사용하는 모든 사람에게 직접 공유됩니다. 다음 섹션에서는 위험으로부터 자신과 사용자를 보호하는 방법을 설명합니다.

종속성에 대한 취약성 관리 프로그램 만들기

종속성에 대한 취약성 관리 프로그램을 만들어 종속된 코드를 보호할 수 있습니다. 높은 수준에서 다음을 보장하는 프로세스를 포함해야 합니다.

  1. 종속성의 인벤토리를 만듭니다.

  2. 종속성에 보안 취약성이 있는 경우를 알 수 있습니다.

  3. 끌어오기 요청에 대한 종속성 검토를 적용합니다.

  4. 해당 취약성이 코드에 미치는 영향을 평가하고 수행할 작업을 결정합니다.

자동 인벤토리 생성

첫 번째 단계로 종속성의 전체 인벤토리를 만들려고 합니다. 리포지토리의 종속성 그래프는 지원되는 에코시스템에 대한 종속성을 보여 줍니다. 종속성을 체크 인하거나 다른 에코시스템을 사용하는 경우 이를 타사 도구의 데이터로 보완하거나 종속성을 수동으로 나열해야 합니다. 리포지토리에 대한 최소한의 읽기 권한이 있는 경우 GitHub UI 또는 GitHub REST API를 통해 리포지토리에 대한 종속성 그래프를 SPDX 호환 SBOM(Software Bill of Materials)으로 내보낼 수 있습니다. 자세한 내용은 "리포지토리에 대한 소프트웨어 자료 청구서 내보내기"을(를) 참조하세요.

종속성에서 취약성 자동 검색

Dependabot은 종속성을 모니터링하고 알려진 취약성이 있는 경우 이를 알림으로써 도움이 될 수 있습니다. Dependabot을(를) 사용 설정하여 종속성을 보안 버전으로 업데이트하는 끌어오기 요청을 자동으로 제기하게 할 수도 있습니다. 자세한 내용은 "Dependabot 경고 정보" 및 "Dependabot 보안 업데이트 정보"을(를) 참조하세요.

끌어오기 요청에서 취약성 자동 검색

종속성 검토 작업은(는) 끌어오기 요청에 대한 종속성 검토를 적용하므로 끌어오기 요청이 리포지토리에 취약한 버전의 종속성을 도입하는지 쉽게 확인할 수 있습니다. 취약성이 감지되면 종속성 검토 작업에서 끌어오기 요청의 병합을 차단할 수 있습니다. 자세한 내용은 "종속성 검토 정보"을(를) 참조하세요.

취약한 종속성으로 인한 위험에 대한 노출 평가

취약한 종속성(예: 라이브러리 또는 프레임워크)을 사용하고 있는 경우 프로젝트의 노출 수준을 평가하고 수행할 작업을 결정해야 합니다. 취약성은 일반적으로 심각도 점수로 보고되어 그 영향이 얼마나 심각한지 보여 줍니다. 심각도 점수는 유용한 가이드이지만 취약성이 코드에 미치는 전체 영향을 알려주지는 못합니다.

코드에 대한 취약성의 영향을 평가하려면 라이브러리를 사용하는 방법도 고려하고 실제로 시스템에 미치는 위험을 결정해야 합니다. 이 취약성은 사용하지 않는 기능의 일부일 수 있으며 영향을 받는 라이브러리를 업데이트하고 일반적인 릴리스 주기를 계속할 수 있습니다. 또는 코드가 위험에 심하게 노출되어 영향을 받는 라이브러리를 업데이트하고 업데이트된 빌드를 즉시 제공해야 할 수도 있습니다. 이 결정은 시스템에서 라이브러리를 사용하는 방법에 따라 달라지며, 사용자만 내릴 수 있는 결정입니다.

통신 토큰 보호

코드는 종종 네트워크를 통해 다른 시스템과 통신해야 하며 인증하려면 비밀(예: 암호 또는 API 키)이 필요합니다. 시스템에서 실행하려면 해당 비밀에 액세스해야 하지만 소스 코드에 포함하지 않는 것이 가장 좋습니다. 이는 많은 사람들이 액세스할 수 있는 리포지토리에 특히 중요하고 퍼블릭 리포지토리에도 중요합니다.

리포지토리에 커밋된 비밀 자동 검색

참고:

GitHub 파트너는 비밀이 퍼블릭 리포지토리 및 신뢰하는 퍼블릭 npm 패키지에 커밋되거나 저장되는 시기를 자동으로 감지할 수 있도록 많은 공급자와 협력하며, 계정을 안전하게 유지하기 위한 적절한 조치를 취할 수 있도록 공급자에게 알립니다. 자세한 내용은 "비밀 검사 경고 정보"을(를) 참조하세요.

다음을 소유하는 경우 GitHub에서 실수로 유출된 비밀에 대해 경고하는 추가 검사를 사용하도록 설정하고 구성할 수 있습니다.

  • GitHub의 퍼블릭 리포지토리
  • GitHub Enterprise Cloud에 대한 라이선스가 있는 GitHub Advanced Security을(를) 사용하는 조직. Secret scanning은(는) 프라이빗 리포지토리도 분석합니다.

GitHub에서 사용하는 비밀의 보안 스토리지

코드 외에도 다른 위치에서 비밀을 사용해야 할 수 있습니다. 예를 들어 GitHub Actions 워크플로, Dependabot 또는 GitHub Codespaces 개발 환경이 다른 시스템과 통신할 수 있도록 하기 위해서입니다. 비밀을 안전하게 저장하고 사용하는 방법에 대한 자세한 내용은 "GitHub Actions에서 비밀 사용", "Dependabot에 대한 개인 레지스트리 액세스 구성" 및 "GitHub Codespaces에 대한 계정별 비밀 관리"을(를) 참조하세요.

리포지토리에서 취약한 코딩 패턴 제외

참고: Code scanning는 GitHub.com의 모든 퍼블릭 리포지토리에 사용할 수 있습니다. Code scanning는 또한 GitHub Enterprise Cloud를 사용하고 GitHub Advanced Security에 대한 라이선스가 있는 조직이 소유한 프라이빗 리포지토리에서 사용할 수 있습니다. 자세한 내용은 "GitHub Advanced Security 정보"을(를) 참조하세요.

끌어오기 요청 검토 프로세스 만들기

모든 끌어오기 요청이 병합되기 전에 검토되고 테스트되도록 하여 코드의 품질과 보안을 향상시킬 수 있습니다. GitHub에는 검토 및 병합 프로세스를 제어하는 데 사용할 수 있는 많은 기능이 있습니다. 시작하려면 "보호된 분기 정보"을(를) 참조하세요.

코드에서 취약한 패턴 검사

안전하지 않은 코드 패턴은 검토자가 도움 없이 찾기 어려운 경우가 많습니다. 코드에서 비밀을 검사하는 것 외에도 보안 취약성과 관련된 패턴을 확인할 수 있습니다. 예를 들어 메모리에 안전하지 않거나 삽입 취약성으로 이어질 수 있는 사용자 입력을 이스케이프하지 못하는 기능입니다. GitHub는 코드를 스캔하는 방법과 시기에 접근하는 여러 가지 방법을 제공합니다. 시작하려면 "코드 검사 정보"을(를) 참조하세요.

다음 단계