현대 애플리케이션은 대부분 다른 사람의 코드입니다. 일반적인 Node 또는 Python 프로젝트는 수백 개의 전이 의존성을 끌어들이며, 각각은 낯선 사람이 유지보수하고, 각각은 그것을 설치하는 머신에서 임의의 코드를 실행할 수 있습니다. 수년 동안 보안 업계는 이 위험을 데이터베이스 조회 문제로 취급했습니다. 의존성 트리를 스캔하고, 각 패키지와 버전을 알려진 취약점 목록과 일치시키고, 일치를 보고합니다. CVE 매칭에 기반한 소프트웨어 구성 분석으로 구축된 그 접근 방식은 여전히 유용하지만, 공격자들이 무자비하게 악용하기를 배운 맹점이 있습니다. CVE는 합법적인 소프트웨어의 알려진 결함을 설명합니다. 게시되는 순간부터 악의적이었던 패키지에 대해서는 아무것도 말하지 않으며, "postinstall 스크립트가 환경 변수를 유출한다"는 CVE는 없습니다. 2026년에 중요한 공격은 낡은 취약한 라이브러리가 아닙니다. 그것은 새로 게시된 악의적인 것이며, 이를 탐지하려면 코드가 무엇이라고 불리는지가 아니라 코드가 무엇을 하는지 살펴봐야 합니다.
이것은 행동 기반 공급망 보안으로의 전환입니다. "이 버전이 취약점 데이터베이스에 표시되는가"를 묻지 않고, 행동 기반 접근 방식은 "이 패키지가 어떤 기능을 행사하는가 — 설치 스크립트를 실행하거나, 네트워크 연결을 열거나, SSH 키를 읽거나, 셸을 생성하거나, 난독화된 페이로드를 숨기는가?"를 물어봅니다. 그 질문은 60초 전에 게시된 패키지에 대해 대답할 수 있으며, 이것이 정확히 타이포스쿼트 및 손상된 릴리스가 그들의 피해를 입히는 창입니다. 이 가이드는 행동 기반 모델이 어떻게 작동하는지, 어떻게 당신이 이미 실행하는 CVE 기반 및 SBOM 도구 대신에 보완하는지, 그리고 2026년에 방어 심층 공급망 스택을 어떻게 조립하는지 설명합니다.
CVE 매칭이 필요하지만 충분하지 않은 이유
소프트웨어 구성 분석(SCA)은 그 자리를 얻었습니다. 당신이 게시된 원격 코드 실행 결함이 있는 라이브러리 버전에 의존한다는 것을 아는 것은 진정한 값이며, 취약점 데이터베이스에 대해 의존성 트리를 일치시키는 도구는 매일 실제 문제를 탐지합니다. 모델은 두 가지 점점 일반적인 공격 패턴에 대해 이해합니다.
첫 번째는 악의적 패키지입니다. 코드가 설계상 적대적이며, 실수로 설치되거나 신뢰할 수 있는 유지보수자를 사칭하도록 선택된 이름으로 게시됩니다. 타이포스쿼트(reqeusts 대신 requests), 의존성 혼동(비공개를 공개 패키지가 그림자지음), 그리고 완전한 트로잔 릴리스 모두 여기에 해당합니다. 이들 중 어느 것도 CVE가 없으며, CVE는 게시된 후에 합법적인 소프트웨어의 알려진 약점에 대해 제출되기 때문입니다. 악의적 패키지가 충분히 잘 알려져 카탈로그될 때쯤이면, 이미 수천 대의 머신에서 실행되었습니다.
두 번째는 손상된 업데이트입니다. 이전에 신뢰할 수 있었던 패키지는 유지보수자 계정이 탈취되거나 빌드 파이프라인이 손상되어 새 버전이 악성코드를 배송합니다. 패키지 이름은 당신이 의도적으로 선택하고 신뢰한 것입니다. 버전 고정은 당신이 업데이트할 때 당신을 구하지 못합니다. CVE 스캔은 다시 한 번, 게시된 취약점이 없기 때문에 — 릴리스에는 수용할 충분한 이유가 있는 새로운 적대적 동작만 있기 때문에 — 이를 표시하지 않습니다.
두 패턴 모두 정의 특성을 공유합니다. 위협이 정체에서가 아니라 동작에서 보입니다. 방어는 따라서 동작을 검사해야 하며, 이는 정확히 행동 기반 도구가 구축된 것입니다.
행동 기반 탐지가 어떻게 작동하는지
핵심 아이디어는 패키지의 코드가 당신의 환경에서 실행되기 전에 무엇을 할 수 있는지 분석하는 것입니다. Socket과 같은 행동 기반 스캐너는 패키지의 소스 및 메타데이터를 파싱하고 악의와 연관되는 기능 및 신호를 찾습니다. 여러 범주가 가장 중요합니다.
설치 스크립트가 가장 큰 신호입니다. npm postinstall 훅(및 다른 곳의 동등물)은 설치 시간에 임의의 코드를 실행하며, 애플리케이션이 패키지를 가져오기 전에 이는 공급망 악성코드를 위한 선호하는 전달 메커니즘입니다. 갑자기 설치 스크립트를 얻은 패키지 또는 설치 스크립트가 네트워크에 도달하는 패키지는 조사를 할 가치가 있습니다. 네트워크 접근은 다음 계층입니다. 문자열 패딩 유틸리티는 소켓을 열 이유가 없으며, 설치 또는 런타임 시 낯선 호스트에 접근하는 의존성은 명시된 목적상 그 기능이 얼마나 예상치 못했는지에 비례하여 의심스럽습니다. 민감한 경로에 대한 파일시스템 접근 — SSH 키, 클라우드 자격증 파일, 환경 파일 — 는 강한 유출 표시입니다. 셸 및 프로세스 실행, 난독화되거나 축소된 페이로드는 그들의 논리를 숨기고, 인기 패키지에 대한 타이포스쿼트 이름 유사성이 그림을 완성합니다.
단일 신호는 결론적이지 않습니다. 많은 합법적인 패키지가 설치 스크립트를 실행하거나 연결을 엽니다. 값은 조합과 맥락에 있습니다. 목적이 "날짜 형식"인 패키지가 ~/.aws/credentials를 읽고 집으로 전화하는 난독화된 설치 스크립트를 배송하며 애매하지 않습니다. 행동 기반 도구가 그 패턴을 표면화하고, 점수를 매기고 — 가장 중요하게는 — CVE가 할당되기를 기다릴 필요 없이 순간 게시된 패키지에 대해 이를 수행할 수 있습니다.
Socket이 어디에 맞는지
Socket은 이 행동 기반 모델 주위에 구축된 가장 저명한 도구이며, 구체적인 예로서 교육적입니다. 여러 에코시스템을 덮습니다 — npm, PyPI, Go, Maven 등 — 그리고 위험이 실제로 들어오는 곳에서 개발자를 만나갑니다. 의존성이 추가되거나 업데이트되는 순간입니다. 해당 GitHub 앱은 위험한 의존성 변경을 도입하는 풀 요청에 직접 댓글을 달므로, 리뷰어는 나중에 별도의 대시보드에서 발견하는 대신 diff 옆에서 "이 새로운 전이 의존성이 네트워크 접근을 가진 설치 스크립트를 추가했습니다"를 봅니다. CLI는 패키지 관리자 주위의 안전한 래퍼를 제공합니다 — socket npm install은 패키지를 상륙하기 전에 검증합니다 — 그리고 스캔이 구성된 임계값을 넘을 때 파이프라인이 실패하는 socket ci 모드입니다.
Diff 인식, 워크플로우 삽입 설계가 중요한 부분입니다. 공급망 위험은 일상적인 의존성 변경을 통해 진입하므로 방어는 풀 요청에 존재해야 하며, 사후 감사에서는 아닙니다. Socket의 문제별 설정 — 설치 스크립트, 네트워크 접근, 난독화가 차단, 경고, 무시를 할지 선언 — 은 팀이 행동 기반 도구가 개발자를 경고 피로로 빠뜨리지 않도록 신호를 그들의 허용치에 조정할 수 있게 합니다. 그 노이즈 관리가 중요합니다. 보안 도구의 실패 모드는 경고 피로이며, 모든 설치 스크립트를 동등한 긴급함으로 표시하는 행동 기반 스캐너는 일 주일 내에 꺼집니다.
보완 스택: SBOM, 원산지, 도달 가능성
행동 기반 탐지는 한 계층이며, 전체 전략은 아닙니다. 2026년 공급망 보안 스택은 여러 보완 범주로 가장 잘 이해되며, 가장 강한 자세는 하나가 아닌 그들을 결합합니다.
SBOM 생성 및 스캔은 기초적으로 남아 있습니다. 소프트웨어 자재 명세서는 빌드의 모든 구성 요소의 인벤토리이며, 당신이 열거하지 않은 것을 방어할 수 없습니다. Syft 같은 도구는 SBOM을 생성하고 Grype는 취약점 데이터에 대해 스캔합니다; Trivy는 컨테이너, 파일시스템, 리포지토리 전체에서 둘 다 수행합니다. 이것이 CVE 매칭 계층이며, 여전히 필수적입니다 — 합법적인 의존성의 알려진 취약점이 실제이고 일반적인 문제입니다. 행동 기반 계층은 이 계층이 구조적으로 할 수 없는 것을 덮습니다.
빌드 원산지 및 서명은 다른 질문을 다룹니다. 아티팩트가 청구하는 것인지, 청구하는 소스로부터 구축되었는지, 청구하는 파이프라인으로 증명할 수 있는가? Sigstore 및 해당 서명 도구 Cosign은 SLSA 프레임워크와 함께, 아티팩트에 서명하고 빌드 원산지를 검증할 수 있게 하므로, 손상되거나 대체된 아티팩트가 검증에 실패합니다. 이는 패키지가 아니라 공급망 자체의 무결성을 방어합니다.
도달 가능성 분석은 전체 스택을 견딜 수 있게 하는 노이즈 필터입니다. CVE 스캔의 불편한 진실은 표시된 대부분의 취약점이 당신의 코드에서 실제로 악용 가능하지 않다는 것이며, 취약한 함수가 결코 호출되지 않기 때문입니다. 도달 가능성 도구 — Semgrep의 공급망 제품 및 다른 것들이 제공하는 기능 — 당신의 코드가 실제로 취약한 경로에 도달하는지 추적하며, 수백 개의 "취약점" 홍수를 실제로 악용 가능한 소수의 문제로 필터링합니다. 이것이 개발자의 주의를 할 가치가 있는 수백 개의 항목을 관리 불가능한 목록에서 몇 가지 문제로 전환합니다.
심층 방어 조립
이 범주들은 의존성 수명 주기에 명확하게 매핑되는 단일 방어의 계층입니다. 개발자가 의존성을 추가하거나 업데이트하도록 제안할 때, 행동 기반 계층(Socket)은 패키지가 악의적인지 평가하고 풀 요청에 댓글을 달합니다. 프로젝트가 구축될 때, SBOM 계층(Syft)은 모든 구성 요소를 인벤토리하고 스캔 계층(Grype, Trivy)은 알려진 취약점에 대해 검사하며, 도달 가능성 계층(Semgrep)이 결과를 실제로 악용 가능한 것으로 필터링합니다. 아티팩트가 생성될 때, 원산지 계층(Sigstore, Cosign, SLSA)은 그들에 서명하므로 다운스트림 소비자가 무결성을 검증할 수 있습니다. 각 계층은 다른 계층이 구조적으로 할 수 없는 간격을 덮습니다. 행동 기반이 새로운 악성코드를 탐지하고, SCA가 알려진 취약점을 탐지하고, 도달 가능성이 노이즈를 억제하고, 원산지가 무결성을 보장합니다.
이를 구축하는 팀을 위한 실질적인 조언은 활용도별로 시퀀스하는 것입니다. 아무 것도 없으면 SBOM 생성 및 스캔으로 시작하세요. 인벤토리 트리를 방어할 수 없기 때문입니다. 다음, 풀 요청 워크플로우에 행동 기반 탐지를 추가하세요. 악의적 패키지가 가장 높은 심각도이고 가장 탐지하기 어려운 위협이기 때문입니다. CVE 발견이 압도적이 될 때 도달 가능성을 계층화하세요. 그 전체 직업이 다른 계층을 견딜 수 있게 하기 때문입니다. 릴리스 프로세스가 성숙하고 다운스트림 소비자가 배송하는 것을 검증해야 할 때 서명 및 원산지를 채택하세요. 가장 중요하게, 각 계층의 출력을 개발자 워크플로우에 — 풀 요청, CI 실행 — 유지하세요. 아무도 확인하지 않는 별도의 대시보드에서가 아니라, 공급망 위험이 일상적인 변경을 통해 진입하고 그곳에서 탐지되어야 합니다.
현실 공격, 단계별
추상 개념을 근거에 두기 위해, 일반적인 2026 공급망 공격이 어떻게 전개되고 각 방어 계층이 어디에서 개입할 것인지 고려하세요. 공격자는 인기 있는 패키지를 확인합니다 — 널리 사용되는 HTTP 도우미라고 합시다 — 그리고 이름이 한 문자 떨어진 타이포스쿼트를 등록합니다. 그 패키지에, 그들은 설치 시간에 실행되는 postinstall 스크립트를 배치하여, 로컬 환경에서 클라우드 자격증 및 CI 토큰을 읽고 공격자 제어 호스트로 포스팅합니다. 그들은 그것을 게시하고 뚱뚱한 손가락 설치 및 의존성 혼동 실수가 나머지를 수행할 때까지 대기합니다.
CVE 스캐너는 아무것도 봅니다. 어제 존재하지 않은 패키지에 대해 게시된 취약점이 없습니다. 버전 고정은 보호를 제공하지 않습니다. 개발자가 이름을 오타하면, 악의적인 버전에 고정합니다. 행동 기반 계층, 그러나 많이 봅니다. 패키지가 풀 요청에 표시되는 순간, 스캐너는 새로 추가된 의존성이 설치 스크립트, 스크립트가 민감한 파일시스템 경로를 읽고, 낯선 호스트에 네트워크 연결을 열기를 표시합니다 — HTTP 도우미를 청구하는 패키지의 경우 조합이 모순됩니다. 풀 요청 댓글이 정확히 이것을 표면화하고, 리뷰어가 변경을 거절하고, 공격이 단일 자격증이 머신을 떠나기 전에 실패합니다.
이제 손상된 업데이트 변형을 고려하세요. 공격자는 대신 당신이 이미 신뢰하고 의존하는 패키지의 유지보수자 계정을 탈취하고 새 마이너 버전에 동일한 페이로드를 배송합니다. 여기서 타이포스쿼트 휴리스틱은 발화하지 않습니다 — 이름은 당신이 의도적으로 선택한 것입니다. 하지만 행동 기반 차분은 여전히 실화합니다. 이 릴리스는 이전 버전이 결코 가진 설치 스크립트 및 네트워크 접근을 추가했습니다, 그리고 버전을 비교하는 행동 기반 도구가 갑작스런 기능 변경을 표시합니다. 이것은 다른 아무 것도 탐지하지 않는 경우이며, 이것이 정확히 행동 기반 탐지가 스택에서의 자리를 얻은 이유입니다.
제한 및 인간 요소
완전한 도구 스택이 없으며, 행동 기반 탐지는 고유한 실패 모드를 가집니다. 결정된 공격자는 악의적 기능을 버전 간에 분할하거나 특정 조건에서만 트리거하여 행동 휴리스틱을 회피하기 위해 페이로드를 만듭니다. 거짓 양성은, 설정을 통해 감소할 수 있을지라도, 절대 0에 도달하지 않으며, 임계값을 조정하지 않는 팀은 결국 경고를 찍기 시작할 것입니다. 그리고 전체 모델은 개발자가 실제로 풀 요청 댓글을 읽는 것에 달려 있으며, 마감 압박 아래서 그들을 병합하지 않습니다. 기술은 공격 표면을 좁힙니다. 판단의 필요성을 제거하지 않습니다.
정직한 프레이밍은 2026년의 공급망 보안이 겹치고 불완전한 방어의 포트폴리오이며, 조합이 어느 단일 것도 훨씬 강합니다. 행동 기반 탐지는 가장 위험한 간격을 닫았습니다 — CVE 매칭이 절대 볼 수 없는 새로운 악의적 패키지 — 그리고 그것은 진정한 진보입니다. 하지만 그것은 SBOM, 스캔, 도달 가능성, 원산지 옆에 있기 때문에 작동하며, 각각 다른 것의 맹점을 보상하며, 모두 위험이 실제로 코드베이스에 진입하는 순간에 연결되어 있습니다.
결론
의존성 트리는 대부분 애플리케이션의 가장 크고 가장 제어되지 않는 부분이며, 2026년의 정의 공급망 위협은 CVE 데이터베이스가 들어본 적이 없는 악의적 패키지입니다. 행동 보안 도구가 CVE 매칭이 할 수 없는 질문에 대답합니다. "이것이 알려진 취약한 버전인가" 아니라 "이 코드가 무엇을 할 비즈니스를 가지는가"합니다. 풀 요청에서 Socket 또는 동등물을 실행하여 새로운 악성코드를 탐지하고, Syft, Grype, Trivy를 알려진 취약점 계층으로 유지하고, 노이즈를 견딜 수 있게 하기 위해 도달 가능성 분석을 추가하고, Sigstore 및 Cosign으로 아티팩트에 서명하세요. 그래서 무결성이 끝에서 끝까지 검증 가능합니다. 계층은 설계에 의해 보완적입니다 — 그리고 함께 조립되어, 개발자 워크플로우에 연결되어, 그들은 오픈 소스 의존성 트리를 맹점에서 방어된 경계로 전환합니다.
참고 자료
도구
배경 및 분석
관련 1337skills 치트시트