GitLab은 유일무이한 진정한 엔드 투 엔드(end-to-end) DevOps 플랫폼입니다. GitLab은 더 높은 수준의 보안을 지원하는 동시에 최신 애플리케이션 개발 이슈를 해결할 수 있도록 지원합니다. GitLab은 SCM과 CI 모두에서 인정받는 리더기업이며, 최근에는 애플리케이션 보안 분야의 유망주이기도 합니다. GitLab은 DevOps 플랫폼에 보안 기능을 구축했으며, 업계 분석가들은 GitLab의 보안 기능을 포인트 타 보안 솔루션과 직접 비교한 다양한 보고서를 작성하였습니다.
GitLab과 같은 통합 플랫폼은 다음과 같은 개별 툴이 제공할 수 없는 장점을 가집니다.
- 전체적인(End-to-End) 가시성 및 감사 가능성: 누가 무엇을, 어디서, 언제 변경했는지.
- 일관된 정책 적용 및 관리: 어떤 정책이 어디에 사용되는지, 예외에 대해 수행되는 모든 작업.
- 보다 광범위한 엔드 투 엔드 컨텍스트를 통한 더욱 지능적인 대응.
- 단순화된 툴 체인의 공격 표면 감소.
애플리케이션 보안을 강화하기 위한 4단계
스타 트업에서 글로벌 기업에 이르기까지 약 3천만 명 이상의 사용자가 있는 GitLab은 보안을 깊이 있게 고려해야 합니다. 다음은 강력한 DevSecOps 플랫폼과 종합적인 보안 프로그램을 결합하여 소프트웨어 공급망을 신속하게 제어하고 파악할 수 있도록 지원하는 4가지 방법입니다. 보안 강화를 위해서는 부서 간 협업과 함께 인력, 프로세스 및 툴의 조합이 필요합니다.
1단계: 새로운 공격 표면을 고려하여 보안 위생 상태를 평가합니다.
가장 피해가 큰 공격조차도 기본 보안(패치나 암호 등)의 안일함을 파고드는 경향이 있으며 오랜 기간 동안 사용된 공격 방법을 사용합니다. 새로운 권장 사항은 아닐 수 있지만, 보안의 범위를 넓혀 다음과 같이 권장합니다. 보안 정책을 다시 살펴보고 소프트웨어 개발 툴 체인, 컨테이너, Orchestrator 및 인프라와 같은 새로운 공격 영역을 코드로 고려하십시오. 보안(secret)이 탐지 되는지 확인하세요. MFA(Multi-Factor-Authentication)가 사용되는지 확인하세요. 관리자 설정(admin setting)에서 가시성 및 액세스 제어(Control access and visibility)를 확인하세요.
2단계: 스캔, 정책 및 규정 준수 자동화
표준화된 CI 파이프라인 내에서 보안 스캔을 자동화하세요. 대부분의 사용자는 SAST 및/또는 페너레이션 테스트를 사용하고 더 많은 사용자가 dependency 스캐닝을 추가하고 있습니다. 각 스캔 유형은 다양한 유형의 취약성을 발견하지만, 포인트 솔루션을 사용하여 애플리케이션 프로젝트 전체에 광범위한 스캔을 적용하는 경우 막대한 비용이 발생할 수 있습니다. 여러 스캔 유형을 다른 기종 툴 체인에 통합하려고 하면 복잡성과 비용이 가중됩니다.
GitLab의 단일 플랫폼에는 SAST, DAST, dependency, container scanning, secrets detection, API 퍼징을 포함한 fuzz testing 등을 통해 앱 보안 스캔이 포함됩니다. GitLab 앱 보안 스캔을 통해 다음 세 가지 작업을 수행할 수 있습니다.
- 서드 파티 코드와 컨테이너 코드를 포함한 모든 코드를 검색합니다. GitLab Ultimate의 Auto DevOps 기능을 통해 사용되는 보안 스캔을 쉽게 구성할 수 있습니다.
- 코드의 모든 변경 사항을 스캔합니다. GitLab의 내장 앱 보안 테스트는 하나의 공통 UI로 여러 스캔 방법을 사용하여 코드 의 모든 변경을 검사합니다. GitLab CI 기능 내의 리뷰 앱을 활용하여 CI 파이프라인 내에서 DAST를 실행할 수도 있습니다. 코드가 기본 브랜치에 push 되기 전에 스캔이 수행되므로 공유 환경에 대한 취약점을 줄일 수 있습니다.
- Fuzz Testing을 사용하여 알려진 CVE의 서명이 없는 안전하지 않은 논리 결함을 찾습니다. GitLab의 보안 스캔에는 웹 API에 대한 커버리지 기반 테스트와 동작 테스트가 모두 포함됩니다. fuzz 테스트는 다른 스캐너와 함께 CI 파이프라인에 통합되어 있기 때문에 결과를 쉽게 사용할 수 있으며 독립형 fuzz 테스트보다 설정이 쉽습니다.
자동화는 매우 좋은 기술이지만, 표준화되고 제어된 CI 프로세스에도 적용되어야 합니다. CNCF는 "소프트웨어 공급망을 최대한 자동화하면 인적 오류와 구성 드리프트 가능성을 크게 줄일 수 있습니다.”라고 당부합니다. 모든 프로젝트에 사용할 수 있는 표준화된 CI 템플릿을 사용해야 하는지, 업계 표준에 규정 준수를 자동으로 적용하는지, 취약점이 발견될 때 예외 정책이 있는 MR을 누가 승인할 수 있는지에 대한 의문을 가져야 합니다.
정책을 자동화하면 더욱 일관된 규정 준수를 보장하는 동시에 감사 작업도 줄어듭니다. CI/CD 자동화는 다음과 같은 공통된 제어 기능을 적용합니다.
- Merge Request 업무 분리
- ID 및 액세스 승인 제어
- 구성 관리 및 변경 제어
- 구성 및 파이프라인 변경에 대한 액세스 제한
- protected 브랜치 및 환경
- 감사(Auditing)
- 라이센스 코드 사용
- 보안 테스트(Security testing)
GitLab Ultimate는 단일 DevOps 플랫폼 내에서 많은 컴플라이언스 기능을 제공합니다. 수많 은 컴플라이언스 기능, 컴플라이언스 관리 및 감사 보고서와 함께 컴플라이언스 대시보드가 포함됩니다. 즉, 정책이 일관되게 적용될 수 있도록 가능한 한 자동화를 적용합니다.
3단계: 소프트웨어 팩토리 자체 보안
GitLab의 DevOps 플랫폼은 액세스와 소프트웨어 팩토리 정책, 그리고 측정할 수 있는 반복 프로세스를 한 곳에서 관리하여 소프트웨어 팩토리 자체를 보호하는 데 필요한 작업을 단순화합니다. GitLab의 보안 팀은 다음과 같은 모범 사례와 프로젝트에 대한 블로그 기사를 제공합니다.
- 제로 트러스트(Zero Trust) 원칙을 적용(최소 권한 액세스와 같은 개념)합니다. GitLab은 제로 트러스트를 통해 리모트 환경을 완벽히 보호합니다.
- 새로운 기술의 지속적인 통합은 생산성과 보안 모두에 중점을 두고 있습니다. 예를 들어, Hashicorp Vault와의 통합에서는 공급망 환경에서 운영되는 모든 엔티티가 정기적인 키 순환으로 강화된 인증 메커니즘을 사용하여 상호 인증하도록 요구할 수 있습니다.
- GitLab 인스턴스 강화를 권장합니다. GitLab 인스턴스 강화의 가장 좋은 사례는 제품을 개선하고 프로세스를 더욱 강화하기 위한 공개 프로젝트가 진행될 때 실행하는 것입니다. 강화된 UBI 기반 클라우드 기본 GitLab 이미지는 정기적으로 확인 및 검증해야 합니다.
- CI/CD 변수는 파이프라인의 동작을 제어할 수 있습니다. 범위 환경은 CI/CD 변수를 사용할 수 있는 환경(예: production)을 정의하여 CI/CD 변수의 범위를 제한할 수 있습니다.
4단계: 지속적인 평가 및 개선과 함께 반복
최신 소프트웨어 공급망을 보호하려면 위의 1~3단계를 지속해서 재검토해야 합니다. 툴 체인 또는 환경이 복잡할수록 앱과 공급망을 보호하는 데 있어 최신 상태를 유지하는 것이 더 어려워집니다. 현대의 애플리케이션 개발 프로세스에서는 소프트웨어 팩토리가 빌드된 후 코드를 검사하는 대신 보안 및 제어에 대한 툴링을 통해 소프트웨어 팩토리의 새로운 사고방식을 요구합니다. 새로운 사고방식은 특히 비용을 더 투자해야 하는 기존 툴에 부담을 느낄 수 있습니다.
보안 기능이 내장된 GitLab의 DevOps 플랫폼은 소프트웨어 공급망 보호의 지속적인 개선을 할 수 있지만 확실히 보장되지는 않습니다. 만약 Solarwinds 사태와 같은 고도로 표적화된 공격이 지속된다면, 최고의 방어 조치에도 취약점이 발견될 수 있습니다. GitLab이나 다른 어떠한 벤더 도 공급망 공격과 같은 사태로부터 고객을 보호할 수 있다고 말할 수 없습니다. Defense-in-Depth 전략은 항상 최고이며 GitLab과 같은 단일 DevSecOps 플랫폼의 단순성은 작업을 단순화하고 가시성 및 컨트롤 포인트를 개선할 수 있는 강력한 보안 기능입니다.
원문: https://about.gitlab.com/blog/2021/04/28/devops-platform-supply-chain-attacks