보안 기능은 각 프로젝트가 설치하는 모든 패키지의 목록을 유지하며 이를 공개된 권고사항과 대조합니다. 따라서 취약한 버전은 pull request에 도입될 때와 이미 실행 중인 버전에 대해 새로운 권고사항이 발표될 때 모두 탐지됩니다.
목록화
기본 브랜치의 새 헤드마다, 그리고 하루에 최소 한 번씩 Coroid는 다음과 같은 도구로 프로젝트의 잠금 파일을 읽어들입니다:OSV-Scanner, 특정 버전으로 고정되어 공개된 체크섬과 비교됩니다. 이 스캐너는 종속성 파일과 Coroid가 생성한 구성만을 사용하며 네트워크 접근이나 인증 정보는 필요하지 않습니다. 저장소 자체의osv-scanner.toml는 영향을 주지 않습니다.
보안 → 종속성 메뉴에는 각 프로젝트의 목록이 표시됩니다. 여기에는 패키지와 그 설치된 버전, 해당 패키지를 선언하는 매니페스트, 취약한 패키지, 각 파일의 적용 범위, 그리고 권고사항 데이터가 마지막으로 읽힌 시점이 포함됩니다.내보내기 CycloneDX는 목록을 CycloneDX 1.5 파일로 다운로드합니다. 이 파일에는 이미 공개된 결과에 대한 취약점만이 포함됩니다. 자세한 내용은공개.
Coroid가 완전히 읽어들이는 항목
적용 범위는 저장소별가 아닌 잠금 파일별로 결정됩니다. 모노레포의 경우 각 잠금 파일은 별도의 그룹으로 취급되며 자체적인 적용 범위를 가집니다. 따라서 다른 매니페스트가 불완전하더라도 완전한 잠금 파일의 결과는 유효합니다.
| 파일 | 에코시스템 | 정확한 버전 | 완전한 전이적 종속성 | 적용 범위 |
|---|---|---|---|---|
package-lock.json | npm | 예 | 예 | 완전함 |
npm-shrinkwrap.json | npm | 예 | 예 | 완전함 |
pnpm-lock.yaml | npm | 예 | 예 | 완전함 |
yarn.lock | npm | 예 | 예 | 완전함 |
requirements.txt | PyPI | 예 | 아니요 | 부분적 |
go.mod | Go | 예 | 아니요 | 부분적 |
이 표는 Coroid 자체 테스트에서 스캐너를 통해 생성된 것으로, 테스트 내용이 변경될 때만 업데이트됩니다.
- npm 워크스페이스, pnpm 및 Yarn: 워크스페이스의
package.json는 자체 잠금 파일이 없으면 루트 잠금 파일의 적용을 받습니다.package.json는 잠금 파일과 더 이상 일치하지 않으면 잠금 파일이 다시 생성될 때까지 부분적으로 간주됩니다. - npm 잠금 파일는 버전 2 또는 3이어야 합니다. git, 로컬 파일 또는 패치에서 가져온 pnpm 및 Yarn 항목은 부분적으로 처리됩니다.
requirements.txt는==.- 기타 종속성 파일 (
package.json에 잠금 파일이 없으면,pyproject.toml,poetry.lock,Pipfile,Cargo.lock,Gemfile.lock,pom.xml, Gradle, Composer, NuGet 등의 경우에도 파일명과 함께 부분적으로 표시되므로, 실제로 적용 범위가 확보되지 않은 프로젝트가 완전히 적용된 것으로 오인되는 일은 없습니다.
보안 권고
Coroid은(는) 다음에서 보안 권고를 가져옵니다:OSV, 여기에는 각 프로젝트에서 사용하는 생태계별 GitHub의 보안 권고도 포함됩니다. 매시간 마지막으로 읽은 이후 새로 추가되거나 변경된 내용을 읽고, 하루에 한 번은 전체 내용을 읽습니다. 저장된 인벤토리를 사용해 일치 항목을 찾으므로 저장소에 액세스할 필요가 없습니다.
Coroid의 목표는 보안 권고 데이터에 새 권고가 나타난 후 60분 이내에 모든 인벤토리에서 새 권고의 95%를 일치시키는 것이며, 각 일치 항목에 걸린 시간을 측정합니다. 취약점이 처음 공개된 시점부터 걸리는 시간은 보장할 수 없습니다. 보안 권고가 게시되는 시점에 따라 달라지기 때문입니다.
보안 권고 데이터가 90분 넘게 지연되었거나 마지막 읽기에 실패한 경우, 개요 및 종속성에 "보안 권고 피드 지연 시작 시각: …"이 표시되며 지연이 지속되는 동안 어떤 프로젝트도 검사 범위가 완전한 것으로 표시되지 않습니다.
보안 권고가 철회되면 Coroid은(는) 동일한 취약점에 대해 남아 있는 보안 권고를 바탕으로 여전히 적용되는 항목을 다시 계산합니다. 남아 있는 권고가 없을 때만 발견 항목이 "더 이상 적용되지 않음"으로 종료되며, 수정됨으로 표시되지는 않습니다.
풀 리퀘스트에서
해당Coroid Security검사는 pull request이(가) 변경하는 잠금 파일을 기준 커밋과 헤드 커밋에서 검사하고, 변경으로 인해 새로 도입되는 취약 버전만 집계합니다:
- 관찰: 검사를 통과하거나, 발견 내용을 명시하는 중립 결과를 보고합니다.
- 차단: 선택된 심각도(기본값은 높음) 이상의 알려진 취약한 버전을 도입하는 변경 사항은 검사를 통과하지 못합니다. 해당 변경 사항이 수정하는 잠금 파일의 커버리지가 불충분한 경우에도 검사에 실패하며, 그 이유와 재실행 방법이 안내됩니다.
이 동일한 검사는 Coroid 자체의 수정 및 기능 관련 풀 요청이 개설되기 전에도 수행됩니다. 검사의 작동 방식, 적용 요구 방법 및 재실행 방법에 대해서는GitHub 권한 및 Coroid 보안 검사.
알림
저장소의 첫 번째 완전한 인벤토리는 자동으로 기준이 되며, 그 결과는 보안 섹션에 표시되지만 알림은 발송되지 않습니다. 이후 새로운 치명적인 종속성 관련 결과가 확인되면 조직의 소유자와 관리자에게 한 번만 알림이 전달되는데, 알림 수단은 벨 소리, 이메일(이메일 사용 설정 시) 및 Slack(Slack 연동 시)입니다. 공개된 권고 사항의 경우에는 패키지명과 권고 내용이 안내되고, 아직 공개되지 않은 경우에는 치명적인 결과를 확인해야 한다는 내용만 표시됩니다. 자세한 내용은공개.