An SBOM은 무엇을 설치했는지 증명할 뿐, 설치했어야 했는지는 증명하지 못합니다.

SBOM은 영수증과 같습니다. 무엇을 설치했는지는 알려주지만, 그것을 설치하는 것이 옳았는지는 알려주지 않습니다.

대부분의 팀은 CI/CD 파이프라인에서 SBOM과 CVE 스캔을 사용합니다. 이러한 도구들은 기존 패키지의 알려진 취약점을 찾는 데 매우 유용합니다. 하지만 AI 코딩 에이전트를 사용할 때는 거대한 사각지대가 존재합니다.

AI 에이전트는 패키지 이름을 제안합니다. 에이전트는 그 이름이 실제 이름이든, 환각(hallucination)이든, 타이포스쿼팅(typosquat)이든 상관없이 동일한 확신을 가지고 제안합니다.

공격자가 어제 악성 패키지 이름을 등록했다면, 아직 CVE가 없을 것입니다. 설치 후 스캔(post-install scan)은 이를 확인하고 '안전함'으로 표시할 것입니다. 스캔 결과는 정직하지만, 잘못된 질문에 답한 셈입니다. "이것이 나쁜 것으로 알려져 있는가?"라는 질문에는 답했지만, "이 이름이 우리 스택에 존재해도 되는가?"라는 질문에는 답하지 못했습니다.

SBOM이 악성 패키지를 기록할 때쯤이면 이미 피해는 발생한 후입니다. 악성 코드는 종종 postinstall 스크립트를 통해 설치 단계에서 실행됩니다. 스캐너가 파일 트리를 확인하기도 전에 환경 변수와 CI 비밀 정보를 훔쳐갈 수 있습니다.

부작용이 발생하기 전에 판결이 내려져야 합니다.

저는 이 문제를 해결하기 위해 간단한 도구를 만들었습니다. 이것은 설치 전 출처 검증 게이트(pre-install provenance gate)입니다. 스캐너와는 다르게 작동합니다:

• npm install이 실행되기 에 이름을 확인합니다. • 검증된 기준선(vouched baseline)에 대해 '기본 거부(default-deny)' 방식을 사용합니다. • 인기 패키지와의 편집 거리(edit distance)를 측정하여 타이포스쿼팅을 찾아냅니다. • 알려진 안전한 이름과 일치하지 않는 환각(hallucination)을 잡아냅니다. • .npmrc를 검증하여 잘못된 레지스트리에 접속하지 않는지 확인합니다.

이 도구는 오프라인 방식이며, 키가 필요 없고, 오직 Python 표준 라이브러리만을 사용합니다. 네트워크에 연결하지 않으며, 패키지를 해석(resolve)하지도 않습니다. 그저 제안된 이름을 보고 다음과 같이 묻습니다: "우리가 이 이름을 신뢰할 수 있는가?"

이름이 신뢰할 수 있는 스냅샷이나 인기 있는 기준선에 없다면, 게이트는 DENY를 반환합니다.

이미 일어난 일에 대한 기록에만 의존하는 것을 멈추십시오. 무엇이 일어날 수 있는지 결정하기 시작하십시오.

Source: https://dev.to/alex_spinov/an-sbom-proves-what-you-installed-it-cant-prove-you-should-have-117c

Optional learning community: https://t.me/GyaanSetuAi