공급망 공격은 JavaScript 생태계에 큰 문제입니다. 이 짧은 게시물에서는 브라우저 내부와 브라우저 외부 모두에서 모든 JavaScript 런타임에서 구현할 수 있는 간단한 보안 조치를 개략적으로 설명하겠습니다. 이를 통해 오늘날 JavaScript 생태계를 괴롭히는 대부분의 공급망 공격을 방지할 수 있습니다.
최근 웹사이트가 해킹된 사건은 다음과 같습니다.
문제의 핵심은 JavaScript 모듈이 이를 호출한 애플리케이션이나 모듈의 권한을 상속한다는 것입니다. 이는 브라우저 내 런타임과 브라우저 외부 런타임 모두에서 문제가 됩니다.
이 문제는 애플리케이션이 의존하는 모듈 버전이 애플리케이션 작성자가 모르는 사이에 변경될 수 있다는 사실로 인해 더욱 복잡해집니다. 따라서 모든 종속성의 코드를 철저하게 검토했더라도(그 자체로 엄청난 노력이 필요함) 종속성 버전이 잠겨 있지 않으면 이러한 노력은 헛수고가 될 것입니다.
버전을 잠그고 semver 기반 종속성을 사용하는 것은 어떨까요? 글쎄요, 이는 주로 모듈 게시자가 버그 수정을 게시하는 경우 수정된 코드를 사용하는 것이 더 낫기 때문입니다. 그리고 이것이 esm.sh와 같은 JavaScript CDN이 semvers를 지원하는 큰 이유 중 하나입니다.
웹 브라우저는 샌드박스 실행 환경이므로 웹사이트에서 가져온 타사 JavaScript 모듈(3JM)이 최종 사용자의 기기에 손상을 줄 수 없습니다.
그럼에도 불구하고 3JM은 웹사이트의 동의 없이 장치의 컴퓨팅 리소스를 사용하고 비트코인 채굴 등을 위한 네트워크 요청을 발행할 수 있습니다.
Deno와 같은 일부 브라우저 외부 런타임은 JavaScript/TypeScript 애플리케이션에 부여되는 권한을 제한하는 조치를 구현합니다. 그러나 이러한 조치는 다음과 같은 이유로 부족합니다.
현재 보안 팀은 NPM과 같이 잘 알려진 레지스트리에 게시된 모듈에서 취약점을 찾기 위해 자동화된 프로세스를 마련했습니다. 이 보안 조치에는 몇 가지 단점이 있습니다.
이러한 문제를 해결하기 위해 JS/TS 애플리케이션이 현재 작동하는 방식과 역호환되는 새로운 모듈별 권한 시스템을 제안합니다.
여기에는 각 애플리케이션과 모듈이 deno.json / deno.jsonc / package.json 파일에서 선언할 수 있는 새로운 선택적 권한 구성이 포함됩니다. 권한은 두 부분으로 구성됩니다:
JS/TS 런타임에서 권한을 사용하는 방법은 다음과 같습니다.
{ "self": { "read": {"allow": [], "deny": []}, "write": {"allow": [], "deny": []}, "net": {"allow": [], "deny": []}, "env": {"allow": [], "deny": []}, "run": {"allow": [], "deny": []} }, "imports": { "jsr:@org/module@1.0.0": { "read": {"allow": [], "deny": []}, "write": {"allow": [], "deny": []}, "net": {"allow": [], "deny": []}, "env": {"allow": [], "deny": []}, "run": {"allow": [], "deny": []} }, "https://cdn.example/org/module@1.0.0": { "read": {"allow": [], "deny": []}, "write": {"allow": [], "deny": []}, "net": {"allow": [], "deny": []}, "env": {"allow": [], "deny": []}, "run": {"allow": [], "deny": []} }, "[default]": { "read": {"allow": [], "deny": []}, "write": {"allow": [], "deny": []}, "net": {"allow": [], "deny": []}, "env": {"allow": [], "deny": []}, "run": {"allow": [], "deny": []} } } }
매우 간단해 보입니다. JS/TS 언어에는 수정이 필요하지 않습니다. 그리고 권한 구성이 없으면 애플리케이션과 해당 종속성 그래프가 모두 명령줄 인수에서 제공한 권한을 갖는 현재 상황으로 돌아갑니다.
위 내용은 JavaScript 생태계에 대한 공급망 공격 방지의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!