종속성
도달 가능성 분석
도달 가능성 분석은 코드가 종속성 안의 취약한 함수를 실제로 호출할 수 있는지 확인합니다. 패키지에 결함이 있어도 애플리케이션이 그 부분을 전혀 건드리지 않을 수 있으며, 도달 가능성 분석은 이런 발견 사항의 순위를 낮춰 팀이 악용될 수 있는 것에 집중하게 합니다.
업데이트
왜 필요한가
SCA 스캔은 패키지 버전을 권고와 대조합니다. 어떤 버전에 결함이 있다는 것은 알지만, 애플리케이션이 결함이 있는 부분을 사용하는지는 알지 못합니다. 함수가 수백 개이고 그중 취약한 파서가 하나인 라이브러리는 그 파서를 호출하든 하지 않든 똑같이 보고되며, 큰 종속성 트리 전체로 보면 아무도 끝낼 수 없는 백로그가 쌓입니다.
도달 가능성 분석의 작동 방식
- 취약한 코드를 찾습니다. 도구는 취약점이 어느 함수에 있는지 알아야 합니다. 권고에 이 정보가 없는 경우가 많아, 공급업체들은 자체 데이터를 관리합니다.
- 호출 그래프를 만듭니다. 여러분의 코드에서 종속성 아래까지, 어떤 함수가 어떤 함수를 호출하는지 매핑합니다.
- 경로를 찾습니다. 여러분의 코드에서 취약한 함수로 이어지는 호출 체인이 있으면 그 발견 사항은 도달 가능합니다. 없으면 도달 불가능으로 표시되고 순위가 낮아집니다.
도달 가능성의 수준
| 수준 | 답하는 질문 | 장단점 |
|---|---|---|
| 종속성 | 패키지를 가져오기는 하는가? | 저렴하지만, 사용하지 않는 종속성만 걸러 냄 |
| 함수 | 호출 경로가 취약한 함수에 도달할 수 있는가? | 일반적인 목표이며, 호출 그래프와 함수별 취약점 데이터가 필요 |
| 런타임 | 이 코드가 프로덕션에서 로드되거나 실행되었는가? | 실제 트래픽에서 얻은 증거이지만, 관찰하는 동안 실행된 것에 한정 |
실제 익스플로잇에는 경로 이상의 것이 필요합니다. 입력이 결함을 촉발하는 형태로 함수에 도달해야 하는데, 이를 판별할 수 있는 도구는 많지 않습니다.
도달 가능성 분석이 부족한 곳
- 도달 불가능이 안전을 뜻하지는 않습니다. 도구가 경로를 찾지 못했다는 뜻일 뿐입니다. 리플렉션, 동적 임포트, 플러그인 로딩은 정적 분석이 보지 못하는 경로를 만들 수 있습니다.
- 언어 지원 범위가 다릅니다. 정적으로 컴파일되는 언어는 동적 언어보다 추적하기 쉬우며, 어떤 생태계에 함수 수준 분석을 제공하는지는 도구마다 다릅니다.
- 취약점 데이터가 불완전합니다. 아무도 권고를 함수에 매핑하지 않았다면 도구는 찾을 대상이 없습니다.
- 코드에 따라 달라집니다. 오늘 도달 불가능한 발견 사항이 다음 릴리스 후에는 도달 가능해질 수 있으므로, 답을 다시 확인해야 합니다.
- 식별된 것의 순위만 매깁니다. 스캐너가 찾지 못한 구성 요소는 분석할 수 없습니다. 완전한 인벤토리가 없으면 도달 가능성 분석은 전체 그림의 일부만 정렬합니다.
안전하게 사용하는 법
- 작업을 무시하는 데가 아니라 순서를 정하는 데 쓰세요. 도달 가능한 발견 사항을 먼저 고치고, 나머지는 닫지 말고 일정을 잡으세요.
- 실제 악용 정보보다 우선하게 하지 마세요. CISA KEV 카탈로그에 있거나 EPSS 점수가 높은 발견 사항은 도달 불가능으로 표시되어 있더라도 사람이 판단해야 합니다.
- 인터넷에 노출된 서비스에는 신중하세요. 공격자가 직접 접근할 수 있는 곳에서는 잘못된 답의 대가가 가장 큽니다.
- 판단 근거를 기록하세요. 발견 사항이 해당되지 않는다고 판단했다면 VEX 문서가 그 결정을 보존하고 고객에게 이유를 알려 줍니다.
도달 가능성이 심각도, 익스플로잇 데이터, 비즈니스 맥락과 어떻게 맞물리는지는 취약점 우선순위를 정하는 방법을 참조하세요.
도달 가능성 분석을 제공하는 도구는?
Snyk, Endor Labs, Mend, Checkmarx, Semgrep, Aikido를 비롯한 많은 상용 SCA 도구가 제공하며, 분석 깊이는 언어마다
다릅니다. Go의 govulncheck은 한 생태계를 위한 무료 예입니다. 각 도구가 다루는 범위는
최고의 SCA 도구 비교를 참조하세요.
CRACI의 역할
CRACI는 도달 가능성 분석을 제공하지 않습니다. CRACI는 그 이전 단계, 즉 빌드에 무엇이 들어 있는지 파악하는 일을 합니다. 각 작업이 가져오는 모든 패키지를 기록하는 GitHub Actions 러너로, 잠금 파일 스캐너가 놓치는 숨은 종속성까지 기록하며, 새 취약점이 게시될 때마다 출시된 것의 SBOM을 계속 재평가합니다. 도달 가능성이 최우선 과제라면 그 목적으로 만든 도구를 CRACI와 함께 사용하세요. SCA 도구와 함께 CRACI가 맡는 역할을 참조하세요.
도달 가능성 분석: 자주 묻는 질문
SCA의 도달 가능성 분석이란 무엇입니까?
코드가 종속성 안의 취약한 함수를 실제로 호출할 수 있는지 확인해, 코드에서 이어지는 경로가 없는 발견 사항의 순위를 낮출 수 있게 합니다.
도달 가능성 분석은 정확합니까?
유용하지만 증명은 아닙니다. 도달 가능한 발견 사항에는 실제 경로가 있지만, 도달 불가능하다는 것은 도구가 경로를 찾지 못했다는 뜻일 뿐입니다. 리플렉션, 동적 로딩, 취약점 데이터의 빈틈은 모두 경로를 가릴 수 있습니다.
도달 불가능한 취약점은 무시해도 됩니까?
곧바로 무시하지는 마세요. 도달 가능한 발견 사항 뒤로 일정을 잡고, 코드가 바뀌면 다시 확인하며, 실제로 악용되고 있거나 인터넷에 노출된 서비스에서 실행되는 것에는 각별히 주의하세요.
도달 가능성과 악용 가능성은 어떻게 다릅니까?
도달 가능성은 코드가 취약한 함수에 닿을 수 있는지를 묻습니다. 악용 가능성은 공격자가 그 경로로 피해를 줄 수 있는지를 묻습니다. 결함이 도달 가능하더라도 여러분의 환경에서는 악용할 수 없을 수 있습니다.
도달 가능성 분석으로 알림이 줄어듭니까?
예, 그것이 주된 목적입니다. 얼마나 줄어드는지는 언어, 도구, 그리고 코드가 각 종속성을 얼마나 사용하는지에 따라 다릅니다.