공급망 중독: 'npm install'이 당신을 배신할 때

요약: 당신은 안전한 코드를 작성합니다. 스마트 컨트랙트를 감사합니다. 하지만 비밀 백도어가 있는 라이브러리를 설치합니다. 이 기사는 악명 높은 Ledger Connect Kit 해킹을 언급하며 "공급망 공격"을 다루고 의존성을 고정(Locking)하는 방법을 설명합니다.
1. 개념: 우물에 독 풀기
현대 개발은 "레고 블록"(라이브러리) 위에 구축됩니다. 일반적인 React dApp은 1,000개 이상의 의존성을 사용할 수 있습니다.
해커들은 당신을 해킹할 수 없다는 것을 압니다(당신은 편집증적이니까요). 그래서 그들은 당신이 사용하는 도구를 해킹합니다.
그들이 axios나 web3.js 같은 라이브러리를 손상시키면, 새 버전으로 업데이트하는 모든 앱이 자동으로 감염됩니다.

2. 사례: Ledger Connect Kit (2023)
2023년 12월, 암호화폐 세계가 멈췄습니다.
전 Ledger 직원이 피싱에 당했습니다. 해커들은 그들의 NPM 게시 키에 접근했습니다.
공격:
- 그들은 악성 업데이트를
@ledgerhq/connect-kit에 푸시했습니다. - 이 라이브러리는 Sushiswap, Revoke.cash 및 수백 개의 dApp이 지갑을 연결하는 데 사용합니다.
- 결과: 사용자가 합법적인 사이트(Sushiswap 같은)에 접속했을 때, 가짜 "지갑 연결" 팝업이 떴습니다. Sushiswap의 잘못이 아니었습니다 — 공급망에서 악성 코드를 로드한 라이브러리 때문이었습니다.
- 팝업에 서명한 사용자는 털렸습니다.

3. 공격 벡터: 타이포스쿼팅 (Typosquatting)
해커들은 인기 있는 패키지와 거의 동일한 이름의 패키지를 게시합니다.
- 진짜:
react-dom - 가짜:
react-dom-core(또는rreact-dom)
실수로 npm install react-dom-core를 입력하면, React처럼 작동하지만... 당신의 .env 파일도 훔치는 패키지를 설치하게 됩니다.
4. dApp 보호 방법
버전 고정 (Lock Your Versions)
중요한 라이브러리의 경우 package.json에서 캐럿 ^ 또는 틸드 ~를 절대 사용하지 마세요.
- 나쁨:
"web3": "^1.9.0"(1.9.9, 잠재적으로 감염된 버전으로 자동 업데이트). - 좋음:
"web3": "1.9.0"(당신이 확인한 버전에 정확히 머무름).
npm audit 및 Snyk 사용
배포 전마다 npm audit을 실행하세요. 알려진 취약점 데이터베이스와 대조하여 의존성을 확인합니다.
엔터프라이즈 수준 보안을 위해 Snyk 또는 Socket.dev 같은 도구는 패키지의 행동을 분석합니다 (예: "왜 이 CSS 라이브러리가 네트워크에 접속하려고 하지?").
경고: 악성 패키지는 종종 전염성 인터뷰 사기를 통해 구직자와 개발자를 노립니다. 나쁜 패키지를 설치했다고 의심되면 즉시 Revoke.cash를 통해 지갑 권한을 확인하세요.
"카나리아" 테스트
금요일 밤에 프로덕션 업데이트를 푸시하지 마세요. 커뮤니티가 며칠 동안 새 라이브러리 버전을 테스트하게 하세요. 공급망 공격은 보통 24-48시간 내에 발견됩니다.

결론
Web3에서 당신은 프로젝트의 모든 코드 한 줄 한 줄에 책임이 있습니다 — 당신이 작성하지 않은 코드까지도요. npm update를 금융 거래만큼 신중하게 다루세요.
관련 기사
돼지 도살 (Pig Butchering): 그들이 당신의 마음과 지갑을 훔치는 법
'번호를 잘못 눌렀네요' 문자로 시작합니다. 은퇴 자금을 잃으며 끝납니다. 심리적 사기 대본 'Sha Zhu Pan' (돼지 도살) 분석.
노는 곳에서 거래하지 마라: 별도의 암호화폐 노트북이 필요한 이유
당신의 게이밍 PC는 구멍 투성이입니다. 당신의 휴대폰은 추적기로 가득 차 있습니다. 별도의 '뱅킹 장치'에 $200를 쓰는 것이 왜 최고의 보험인지 알아보세요.
숨겨진 백도어: 권한을 철회해야 하는 이유
지갑 연결을 끊었지만 해커는 여전히 지갑을 비울 수 있습니다. '무제한 승인'이 어떻게 작동하는지, 그리고 디지털 뒷문을 잠그는 방법을 알아보세요.
