종속성
SCA 스캔
SCA 스캔은 프로젝트가 사용하는 오픈 소스 구성 요소를 파악하고, 각 구성 요소를 취약점 및 라이선스 데이터와 대조합니다. 스캔이 무엇을 볼 수 있고 어디서 도움이 필요한지만 알면, 파이프라인에 추가할 수 있는 가장 저렴한 보안 검사 중 하나입니다.
업데이트
SCA 스캔에서 일어나는 일
-
대상 읽기. 스캐너는
package-lock.json,poetry.lock,Cargo.lock같은 매니페스트와 잠금 파일을 읽거나 컨테이너 이미지를 압축 해제합니다. - 구성 요소 목록 작성. 찾은 내용을 이름과 버전으로 해석하며, 대개 전이적 종속성도 포함합니다.
- 데이터 대조. 각 구성 요소를 GitHub Advisory Database, OSV, NVD 같은 소스에서 조회하고, 라이선스를 정책과 비교합니다.
- 보고. 발견 사항은 심각도순으로 정렬되며, 대개 수정된 버전이 함께 제시됩니다. CI에서는 정책에 따라 작업을 실패시킬 수 있습니다.
이것이 속한 더 넓은 관행은 소프트웨어 구성 분석이란 무엇인가를 참고하세요.
SCA 스캔을 실행할 위치
한 곳에서 한 번 스캔하면 빈틈이 남습니다. 단계마다 답하는 질문이 다르므로 대부분의 팀은 여러 곳에서 실행합니다.
| 위치 | 답하는 질문 | 놓치는 것 |
|---|---|---|
| 개발자 머신 또는 IDE | 이 패키지를 추가해도 안전합니까? | 개발자가 스캔하지 않은 모든 것 |
| 풀 리퀘스트 | 이 변경이 알려진 위험을 추가합니까? | 변경되지 않은 코드에 대한 새로운 보안 권고 |
| CI 빌드 | 릴리스에 무엇이 들어 있습니까? | 스캐너가 빌드에서 볼 수 없는 모든 것 |
| 컨테이너 레지스트리 | 이 이미지에 무엇이 들어 있습니까? | 흔적을 남기지 않는 컴파일된 코드와 빌드 도구 |
| 출시 후 | 출시한 소프트웨어가 새로운 문제의 영향을 받습니까? | 출시된 내용의 기록이 완전하다면 없음 |
대부분의 프로그램이 건너뛰는 것이 마지막 행입니다. 새로운 보안 권고가 몇 달 전에 출시한 버전에 영향을 주더라도, 이를 위한 스캔을 실행시킬 풀 리퀘스트는 없습니다.
SCA 스캔 결과를 읽는 방법
실제 프로젝트를 처음 스캔하면 발견 사항이 수백 건 나오는 경우가 많습니다. 다음 순서로 처리하세요.
- 실제로 악용되는 것부터 시작합니다. CISA의 KEV 카탈로그에 있는 발견 사항은 알려진 악용 사례가 없는 더 높은 CVSS 점수보다 우선합니다. 취약점 우선순위 지정 방법을 참고하세요.
- 실제로 해당하는지 확인합니다. 개발 전용 종속성은 출시되지 않습니다. 일부 도구는 도달 가능성 분석을 추가해 취약한 코드가 호출될 수 있는지 확인합니다.
- 올바른 수준에서 수정합니다. 전이적 발견 사항은 대개 그것을 끌어오는 패키지에서 수정하며, 종속성 그래프가 이를 보여 줍니다.
- 수정하지 않을 것은 기록합니다. 수용하기로 한 발견 사항에는 그 이유를 남겨야 합니다. 그렇지 않으면 다음 사람이 같은 작업을 반복합니다. VEX는 이를 기록하는 표준 방식입니다.
깨끗한 스캔 결과가 깨끗한 소프트웨어를 뜻하지 않는 이유
- 선언된 것만 봅니다. 스캐너는 눈앞의 파일을 읽으므로, 잠금 파일을 커밋하지 않은 리포지토리에서는 활용할 정보가 적고, 설치 훅이 가져온 코드는 아예 나타나지 않습니다.
- 지정한 대상만 봅니다. 파이프라인의 베이스 이미지, 빌드 도구, GitHub Actions는 애플리케이션 매니페스트와 별개입니다.
- 공개된 것만 압니다. 새로운 악성 패키지에는 아직 보안 권고가 없습니다.
- 목록은 빌드가 아닙니다. 빌드는 실행 시점에 버전을 해석하므로, 스캔이 읽은 것과 릴리스에 들어 있는 것이 다를 수 있습니다.
이는 상용이든 오픈 소스든 스캔 자체의 한계입니다. CRACI는 Snyk와 Aikido가 보고하지 않은 취약한 패키지를 찾아냈습니다. 해당 구성 요소가 그 도구들이 스캔한 대상에 애초에 없었기 때문입니다.
무료 스캐너와 상용 스캐너
무료 옵션도 기본은 잘 다룹니다. Dependabot 알림은 GitHub에 기본 포함되어 있고, OWASP Dependency-Check와 Trivy는 오픈 소스이며, Grype는 Syft SBOM 생성기와 함께 사용합니다. 상용 도구는 정책, 우선순위 지정, 도달 가능성, 여러 팀에 걸친 워크플로를 더합니다. 최고의 SCA 도구 비교에서 13개 도구를 다루며, 이 가이드는 무료 생성기들의 결과가 서로 다른 이유를 보여 줍니다.
SCA 스캔과 빌드 시점 기록
CRACI는 스캐너가 아니며, 기존 스캐너를 포기할 필요도 없습니다. CRACI는 각 작업이 가져오는 모든 패키지를 트리의 모든 깊이에서, CI 캐시에서 복원된 패키지까지 포함해 기록하는 GitHub Actions 러너이며, 새로운 취약점이 공개될 때마다 출시된 소프트웨어의 SBOM을 계속 재평가합니다. 스캐너는 풀 리퀘스트와 개발자 머신을 담당하고, CRACI는 빌드와 그 이후의 모든 것을 담당합니다. SCA 도구와 함께 CRACI가 맡는 역할을 참고하세요.
SCA 스캔: 자주 묻는 질문
SCA 스캔이란 무엇입니까?
SCA 스캔은 프로젝트의 매니페스트, 잠금 파일 또는 컨테이너 이미지를 읽고, 사용하는 오픈 소스 구성 요소를 파악해 취약점 및 라이선스 데이터와 대조합니다.
SCA는 종속성 스캔과 같습니까?
거의 같습니다. 종속성 스캔은 대개 종속성에서 알려진 취약점을 확인하는 것을 뜻합니다. SCA는 더 넓은 용어로, 라이선스, 오래된 패키지, SBOM 같은 인벤토리 생성까지 포함합니다.
SCA 스캔은 언제 실행해야 합니까?
새로운 위험이 들어오지 않도록 풀 리퀘스트에서, 릴리스를 기술하기 위해 CI 빌드에서, 그리고 새로운 보안 권고가 이미 출시한 소프트웨어에 영향을 주므로 출시 후에도 지속적으로 실행해야 합니다.
SCA 스캔은 얼마나 걸립니까?
모든 코드를 분석하는 것이 아니라 메타데이터를 읽기 때문에 대개 몇 초에서 몇 분이면 끝납니다. 그래서 모든 풀 리퀘스트에서 실행하기에 현실적입니다.
SCA 스캐너마다 결과가 다른 이유는 무엇입니까?
스캐너마다 무엇을 읽을지, 구성 요소의 이름을 어떻게 붙일지, 어떤 취약점 데이터를 사용할지에 대한 규칙이 다릅니다. 같은 커밋에서도 서로 다른 구성 요소 목록과 발견 사항이 나올 수 있습니다.
SCA 스캔으로 멀웨어를 찾을 수 있습니까?
보안 권고 대조는 권고가 나온 뒤에야 악성 릴리스를 찾아냅니다. 패키지의 동작을 분석하는 도구는 일부를 더 일찍 잡아낼 수 있습니다. 새로운 악성 패키지는 등장한 당일에는 보안 권고가 없습니다.
SCA 스캔이 보지 못한 것을 확인하세요
GitHub Actions 워크플로 하나를 CRACI에서 실행하고, 기록된 SBOM을 스캐너가 보고한 구성 요소와 비교해 보세요.
데모 예약