아티클
튜토리얼
대화형 가이드
DevSecOps 도구
DevOps 워크플로를 보호하는 DevSecop 도구
Kev Zettler
풀스택 웹 개발자
소프트웨어 회사의 최선의 노력에도 불구하고 보안 침해는 여전히 발생합니다. 2000년 이래로, 약 35억 명의 사람들이 개인 데이터를 도난당했습니다. 문제의 일부는 소프트웨어 애플리케이션 코드베이스의 규모와 복잡성이 커짐에 따라 보안 취약점 및 악용에 대한 노출도 증가한다는 것입니다.
또한 소프트웨어 개발 및 IT 팀 간의 프로세스를 자동화하고 통합하는 DevOps 접근 방식을 채택하는 조직이 늘어나면서 기존의 보안 도구는 더 이상 적합하지 않은 경우가 많습니다. 오늘날 개발자는 개발 워크플로의 모든 단계에 보안 조치를 포함해야 합니다. DevOps 워크플로의 보안과 관련하여, 이 방식을 DevSecOps라고 합니다.
DevSecOps란 무엇입니까?
DevSecOps는 지속적 통합, 지속적 제공 및 지속적 배포 파이프라인에 보안을 통합하는 방법입니다. DevOps 가치를 소프트웨어 보안에 통합하여 보안 확인은 개발 프로세스의 능동적 통합된 부분이 됩니다.
DevOps와 마찬가지로 DevSecops는 프로젝트 관리 워크플로와 자동화된 IT 도구를 결합하는 조직적이고 기술적인 방법론입니다. DevSecOps는 적극적인 보안 감사 및 보안 테스트를 애자일 개발 및 DevOps 워크플로에 통합하여 보안을 완성된 제품에 적용하기보다는 보안이 제품에 구축되도록 합니다.
DevSecops를 구현하기 위해 팀은 다음을 수행해야 합니다.
- 소프트웨어 코드의 취약성을 최소화하기 위해 소프트웨어 개발 수명 주기 전반에 걸쳐 보안을 도입합니다.
- 개발자 및 운영 팀을 포함한 전체 DevOps 팀이 보안 모범 사례를 준수할 책임을 공유하도록 합니다.
- 보안 컨트롤, 도구 및 프로세스를 DevOps 워크플로에 통합하여 소프트웨어 제공의 각 단계에서 자동화된 보안 검사를 수행할 수 있도록 합니다.
DevSecOps를 사용하면 계획, 빌드, 테스트, 배포, 운영 및 관찰과 같은 일반적인 DevOps 파이프라인의 각 단계에 보안이 적용되어야 합니다.
연속성은 DevOps 파이프라인의 차별화된 특징입니다. 여기에는 지속적 통합, CI/CD(지속적 제공/배포), 지속적 피드백 및 지속적 운영이 포함됩니다. 일회성 테스트 또는 예약된 배포 대신 각 기능이 지속적으로 수행됩니다.
관련 자료
Snyk for Bitbucket Cloud에 대해 자세히 알아보기
솔루션 보기
Snyk for Bitbucket Cloud 받기
계획
빌드
개발자가 소스 리포지토리에 코드를 커밋하면 빌드 단계가 시작됩니다. DevSecOps 빌드 도구는 빌드 출력 아티팩트에 대한 자동화된 보안 분석에 중점을 둡니다. 중요한 보안 사례에는 소프트웨어 구성 요소 분석, SAST(정적 애플리케이션 소프트웨어 테스트) 및 단위 테스트가 포함됩니다. 기존 CI/CD 파이프라인 도구를 연결하여 이러한 테스트를 자동화할 수 있습니다.
개발자는 알 수 없거나 신뢰할 수 없는 소스에서 받은 타사 코드를 정기적으로 설치하고 그 종속성 위에 제품을 만듭니다. 외부 코드 종속성에는 실수로 또는 악의적인 취약성 및 악용이 포함될 수 있습니다. 빌드 단계에서는 이러한 종속성을 검토하고 보안 취약성을 검사하는 것이 중요합니다.
빌드 단계 분석을 실행하는 몇 가지 잘 알려진 도구에는 OWASP Dependency-Check, SonarQube, SourceClear, Retire.js, Checkmarx 및 Snyk가 있습니다.
코드 단계를 위한 DevSecOps 도구는 개발자가 더 안전한 코드를 작성하도록 돕습니다. 중요한 코드 단계 보안 관행에는 정적 코드 분석, 코드 검토 및 사전 커밋 후크가 포함됩니다.
보안 도구를 개발자의 기존 Git 워크플로에 직접 연결하면 모든 커밋 및 병합은 자동으로 보안 테스트 또는 검토를 트리거합니다. 이러한 도구는 다양한 프로그래밍 언어와 통합 개발 환경을 지원합니다. 널리 사용되는 보안 코드 도구로는 Gerrit, Phabricator, SpotBugs, PMD, CheckStyle 및 Find Security Bugs가 있습니다.
테스트
테스트 단계는 빌드 아티팩트가 만들어져 스테이징 또는 테스트 환경에 성공적으로 배포된 후에 트리거됩니다. 포괄적인 테스트 스위트는 실행하는 데 상당한 시간이 걸립니다. 이 단계는 더 고비용의 테스트 작업이 마지막에 남도록 일찍 실패해야 합니다.
테스트 단계에서는 DAST(동적 애플리케이션 보안 테스트) 도구를 사용하여 사용자 인증, 권한 부여, SQL Injection 및 API 관련 엔드포인트와 같은 라이브 애플리케이션 흐름을 감지합니다. 보안 중심의 DAST는 OWASP 상위 10에 나열된 이슈 등 심각도가 높은 알려진 이슈 목록에 대해 애플리케이션을 분석합니다.
사용 가능한 오픈 소스 및 유료 테스트 도구는 매우 많으며 BDD Automated Security Tests, JBroFuzz, Boofuzz, OWASP ZAP, Arachi, IBM AppScan, GAUNTLT 및 SecApp suite를 포함하여 언어 에코시스템에 대한 다양한 기능과 지원을 제공합니다.
배포
이전 단계를 성공적으로 통과하면 빌드 아티팩트를 프로덕션에 배포해야 합니다. 배포 단계에서 해결해야 할 보안 관련 부분은 라이브 프로덕션 시스템에서만 발생하는 보안 문제입니다. 예를 들어, 프로덕션 환경과 이전 스테이징 및 개발 환경 간의 구성의 차이는 모두 철저히 검토해야 합니다. 향후 갱신에 대해 프로덕션 TLS 및 DRM 인증서의 유효성을 검사하고 검토해야 합니다.
배포 단계는 Osquery, Falco 및 Tripwire와 같은 런타임 확인 도구를 사용하기에 적합한 시점입니다. 이러한 도구는 실행 중인 시스템이 예상대로 작동하는지 확인하기 위해 정보를 추출합니다. 조직은 또한 혹독한 상황을 견딜 수 있는 시스템의 기능에 대한 신뢰를 구축하기 위해 시스템을 실험하여 카오스 엔지니어링 원칙을 실행할 수 있습니다. 작동 중단한 서버, 하드 드라이브 장애 또는 네트워크 연결 끊기와 같은 실제 이벤트를 시뮬레이션할 수 있습니다. Netflix는 카오스 엔지니어링 원칙을 실천하는 Chaos Monkey 도구로 널리 알려져 있습니다. 또한 Netflix는 부적절하게 구성된 인프라 보안 그룹에서 위반 또는 취약점을 찾고 취약한 서버를 차단하는 Security Monkey 도구를 활용합니다.
DevSecOps 주기의 릴리스 단계가 되면 애플리케이션 코드와 실행 파일은 이미 철저한 테스트를 마쳤어야 합니다. 이 단계에서는 사용자 액세스 제어, 네트워크 방화벽 액세스 및 보안 데이터 관리와 같은 환경 구성 값을 검토하여 런타임 환경 인프라를 보호하는 데 중점을 둡니다.
PoLP(최소 권한 원칙)은 릴리스 단계의 주요 관심사입니다. PoLP는 모든 사용자, 프로그램 또는 프로세스가 기능을 수행하기 위해 최소한의 액세스 권한을 가지는 것을 의미합니다. 여기에는 소유자가 액세스를 제한할 수 있도록 API 키 및 액세스 토큰을 감사하는 작업이 포함됩니다. 이런 감사가 없다면 공격자가 시스템의 의도치 않은 영역에 액세스하는 키를 찾게 될 수 있습니다.
구성 관리 도구는 동적 인프라의 정적 구성에 대한 가시성을 제공하기 때문에 릴리스 단계에서 보안의 핵심 요소입니다. 그런 다음 시스템 구성을 감사하고 검토할 수 있습니다. 구성은 변경할 수 없게 되며 구성 관리 리포지토리에 대한 커밋을 통해서만 업데이트할 수 있습니다. 인기 있는 구성 관리 도구로는 Ansible, Puppet, HashiCorp Terraform, Chef 및 Docker 등이 있습니다.
보안 커뮤니티에서는 CIS(Center for Internet Security) 벤치마크 및 NIST 구성 체크리스트와 같은 인프라 강화를 위한 모범 사례에 대한 지침과 권장 사항을 제공합니다.
관찰
라이브 프로덕션 환경에 애플리케이션을 배포하여 안정화한 다음에는 추가적인 보안 조치가 필요합니다. 회사는 자동화된 보안 검사 및 보안 모니터링 루프를 통해 공격이나 유출에 대해 라이브 애플리케이션을 모니터링하고 관찰해야 합니다.
RASP(런타임 애플리케이션 자체 보호)는 인바운드 보안 위협을 실시간으로 자동으로 식별하고 차단합니다. RASP는 들어오는 공격을 관찰하는 리버스 프록시 역할을 하며 명시적인 조건에 대응하여 인력의 개입 없이 애플리케이션이 자동으로 다시 구성될 수 있도록 합니다.
전문 내부 또는 외부 팀은 침투 테스트를 수행하여 의도적으로 시스템을 손상시켜 악용 또는 취약성을 찾을 수 있습니다. 또 다른 보안 기술은 보안 악용 및 취약점을 보고하는 외부 개인에게 보상을 지불하는 버그 바운티 프로그램을 제공하는 것입니다.
보안 모니터링은 분석을 사용하여 중요한 보안 관련 메트릭을 계측하고 모니터링합니다. 예를 들어 이러한 도구는 사용자 계정 액세스 양식이나 데이터베이스 엔드포인트와 같은 중요한 공개 엔드포인트에 대한 요청에 플래그를 지정합니다. 널리 사용되는 런타임 방어 도구의 몇 가지 예로는 Imperva RASP, Alert Logic 및 Halo 등이 있습니다.
결론...
점점 더 많은 개발 팀이 프로세스를 발전시키고 새로운 도구를 도입함에 따라, 보안 면에서 부지런히 노력해야 합니다. DevSecOps는 주기적인 프로세스이며, 새로운 코드 배포마다 지속적으로 반복되고 적용되어야 합니다. 악용 및 공격자는 끊임없이 진화하고 있으며, 최신 소프트웨어 팀도 진화해야 합니다.
DevSecOps 테스트의 좋은 시작점은 Bitbucket Pipelines를 통해 테스트를 자동화하는 것입니다. 또한 Atlassian Marketplace에서 사용할 수 있는 테스트 자동화 도구 및 리소스를 검토하세요.
이 문서 공유
다음 토픽
여러분께 도움을 드릴 자료를 추천합니다.
이러한 리소스에 책갈피를 지정하여 DevOps 팀의 유형에 대해 알아보거나 Atlassian에서 DevOps에 대한 지속적인 업데이트를 확인하세요.