최근 NPM (Node Package Manager) 패키지 레포지토리에서 일부 패키지가 해킹되는 사건이 생겼다고 한다. 관련하여 부트캠프 동기 분이 공유해주신 유튜브 자료를 공유하며, 조심하려는 차원에서 블로그에 포스팅해보려고 한다.
0:00 - 1:26: Intro
1:27 - 2:30: "left-pad" 이슈
2:30 - 3:19: Supply Chain Attack 이란?
3:19 - 4:35: NPM Account 공격 사례
4:35 - 5:54: MathJS 공격 사례
5:54 - 6:33: Installation Scripts 공격 사례
6:33 - 7:50: Typosquatting Attack 공격 사례
7:50 - 9:54: 공격 예방 & 보호 방법 (아래에 요약)
9:54 - 10:45: Outro
https://www.youtube.com/watch?v=DjfpcmK62ew
공급망 공격으로부터 보호하려면 (요약)
1. 최대한 가장 필요한 서드파티 패키지만 설치한다.
2. typosquatting의 피해를 입지 않으려면 설치하려는 패키지 이름의 철자를 정확하게 입력하고 동일한 개발자가 게시한 것이 확실한 것이 아니라면 '-min'이나 기타 이상한 확장자(extensions)로 끝나는 패키지를 신뢰하지 않는다.
3. 설치 전후 스크립트를 실행하지 않도록 NodeJS와 'npm'에 지시하여 보안을 강화할 수 있다.
- 패키지를 설치할 때 아래와 같이 '--ignore-scripts'플래그를 추가한다.
- NPM CLI가 설치 전후 스크립트의 실행을 건너뛰도록 지시한다.
npm i react --ignore-scripts
- 하지만 문제는 사전 및 사후 설치를 사용하는 정상 패키지의 설치 프로세스가 중단될 수도 있다.
- 다행히 현재 대부분의 정상 패키지에서도 설치 스크립트 사용은 더이상 권장되지 않는다.
4. 새로 출시된 NodeJS 버전 20으로 업그레이드 할 수도 있다. (2023-04-18 기준)
- 해당 버전에는 소프트웨어가 실행 중일 때 소프트웨어의 권한을 제한할 수 있는 새로운 기능이 포함되어 있고,
- '--experimental-permission' 플래그를 사용하여 프로그램과 해당 패키지의 파일 시스템에 대한 읽기 및 쓰기 권한을 부여하거나 거부할 수 있다.
5. Github을 사용하는 경우, Dependabot 알림에 주의한다.
- Dependabot은 Github에서 호스팅되는 모든 코드에 대해 실행되는 자동화된 시스템이다.
- 주기적으로 코드를 스캔하여 보안 문제가 있는 종속성을 사용하고 있는 경우 알려주고, 리포지토리에 자동으로 풀 리퀘스트를 생성하여 업데이트하도록 한다.
6. Docker와 VS Code를 사용하여 격리된 프로젝트 환경을 만든다.
Docker와 VS Code를 사용하여 개인 파일과 격리된 컨테이너 내부에서 프로젝트를 실행할 수 있다.
- Docker 설치: 먼저, Docker를 설치해야 한다. Docker는 애플리케이션을 컨테이너화하여 효율적인 실행을 가능하게 한다.
- Dockerfile 작성: Dockerfile은 Docker 이미지를 빌드하는 데 사용된다. Dockerfile을 작성하여 프로젝트에 필요한 의존성 및 환경을 정의한다.
- Docker 이미지 빌드: 작성한 Dockerfile을 사용하여 Docker 이미지를 빌드한다. 이 단계에서는 프로젝트를 실행할 환경을 정의하는 데 필요한 모든 구성 요소를 포함한다.
- Docker 컨테이너 실행: 빌드된 Docker 이미지를 사용하여 Docker 컨테이너를 실행한다. 이 단계에서는 실행할 프로젝트를 컨테이너 내부에 배치하여 격리된 환경에서 실행할 수 있다.
- VS Code 설정: VS Code를 사용하여 Docker 컨테이너에 연결할 수 있다. 이를 위해서는 Docker 확장 프로그램을 설치해야 한다. Docker 확장 프로그램을 설치하고 설정을 구성하여 컨테이너 내부의 코드를 편집할 수 있다.
- 컨테이너 내부의 프로젝트 실행: VS Code를 사용하여 컨테이너 내부의 프로젝트를 실행한다. 이를 위해서는 VS Code에서 터미널을 열고 컨테이너 내부의 셸에 연결해야 한다. 그런 다음 프로젝트를 실행하거나 디버그할 수 있다.
이러한 단계를 따라가면 격리된 Docker 환경에서 프로젝트를 실행할 수 있다. 이를 통해 프로젝트에 필요한 의존성이 호스트 시스템에 설치되지 않으므로, 다른 프로젝트나 시스템과 충돌하지 않도록 보호할 수 있다.
자세한 내용은 구글링 및 관련 레퍼런스를 참조해보자.
https://learn.microsoft.com/ko-kr/training/modules/use-docker-container-dev-env-vs-code/
728x90
'FE > 개발 관련 뉴스, 서적, 자료' 카테고리의 다른 글
[Leiapix Converter] Create 3D GIFs (0) | 2023.04.01 |
---|---|
[개발 서적] 읽을 책 리스트 (0) | 2023.03.13 |