공급망
타이포스쿼팅이란?
타이포스쿼팅은 인기 있는 이름과 비슷한 이름을 등록해 두고 누군가 잘못 입력하기를 기다리는 공격입니다. 웹사이트 도메인에서 시작되었습니다. 소프트웨어에서는 공격자가 cross-env 대신 crossenv 같은 이름으로 악성 패키지를 게시하며, 설치 명령의 오타 하나로 개발자 머신이나 CI 파이프라인에서 공격자의 코드가 실행됩니다.
업데이트
패키지 타이포스쿼팅의 작동 방식
- 대상 선정. 공격자는 작은 오타 비율로도 피해가 누적되는 인기 패키지를 고릅니다.
- 비슷한 이름 등록. 글자 하나, 빠진 하이픈, 바뀐 문자, 그럴듯한 접미사 정도만 다른 이름입니다.
- 페이로드 숨기기. 이 패키지는 흔히 진짜 패키지를 감싸므로 모든 것이 정상 작동하고 이상해 보이지 않습니다.
- 설치 시 실행. 패키지 관리자는 설치 중에 스크립트를 실행할 수 있으므로, 코드는 누군가 호출하기도 전에 환경 변수와 토큰에 접근한 상태로 실행됩니다.
- 탈취와 확산. 탈취한 자격 증명으로 공격자는 패키지를 추가로 게시하거나 다른 시스템에 접근합니다.
일반적인 타이포스쿼팅 기법
| 기법 | 실제 패키지 | 유사 패키지 |
|---|---|---|
| 구분자 누락 | cross-env |
crossenv |
| 접미사 추가 | jquery |
jquery.js |
| 글자 순서 바꿈 | ffmpeg |
ffmepg |
| 글자 누락 | mongoose |
mongose |
| 접두사 추가 | sqlite |
node-sqlite |
위의 유사 패키지는 모두 다음에 설명할 하나의 실제 캠페인에서 나왔습니다.
실제 사례: crossenv
2017년, hacktask라는 npm 사용자가 crossenv를 게시했습니다. 인기 패키지
cross-env를 모방한 것이었습니다. 이 패키지는 진짜 패키지의 동작을 유지하면서, 설치한 사람의 환경
변수를 공격자의 서버로 전송했습니다. 빌드에서 토큰이 저장되는 곳이 바로 환경 변수입니다.
Snyk의 분석에 따르면 이는 같은 계정에서
나온 30개 이상의 악성 패키지 중 하나였으며, 한 엔지니어가 발견할 때까지 약 2주 동안 눈에 띄지 않았습니다.
AI 코딩 어시스턴트가 상황을 악화시키는 이유
AI 어시스턴트는 존재하지 않는 패키지를 제안할 수 있습니다. 공격자가 그 이름을 등록하면, 다음에 그 제안을 받아들이는 사람이 악성코드를 설치하게 됩니다. 이를 슬롭스쿼팅(slopsquatting)이라고도 합니다. 사람이 이름을 읽지 않고 종속성을 설치하는 자동화 에이전트는 위험을 더욱 키웁니다.
타이포스쿼팅과 종속성 혼동 비교
둘 다 패키지 이름이 해석되는 방식을 악용하지만, 실수의 종류가 다릅니다.
| 타이포스쿼팅 | 종속성 혼동 | |
|---|---|---|
| 누구의 실수인가 | 사람이 이름을 잘못 입력 | 빌드 시스템이 잘못된 레지스트리를 선택 |
| 이름 | 공개 패키지와 비슷함 | 비공개 내부 패키지와 동일함 |
| 성공하는 방식 | 누군가 실수로 설치 | 더 높은 버전 번호의 공개 버전이 우선 적용 |
| 주요 방어 수단 | 잠금 파일과 새 종속성 검토 | 스코프 패키지와 내부 이름을 비공개로 유지하는 레지스트리 구성 |
종속성 혼동은 2021년 연구자 Alex Birsan이 버그 바운티 프로그램 또는 허가를 받아 Apple, Microsoft, PayPal을 포함한 35개 이상의 조직 내부에서 코드를 실행시키면서 널리 알려졌습니다.
타이포스쿼팅을 방지하는 방법
-
CI에서 잠금 파일로 설치하세요.
npm ci와 그에 상응하는 명령을 사용하세요. 그러면 오타는 검토된 변경을 통해서만 들어올 수 있습니다. 잠금 파일이 하는 일과 하지 않는 일을 참조하세요. - 풀 리퀘스트에서 새 종속성을 검토하세요. 이름 자체를 확인하고, 잠금 파일의 diff를 건너뛰지 말고 읽으세요.
- 설치 전에 확인하세요. 이름을 프로젝트 자체 문서와 비교하고, 다운로드 수가 적거나 최초 게시가 최근이거나 리포지토리 링크가 없는 패키지는 주의하세요.
- 설치 스크립트를 제한하세요. 빌드가 허용하는 곳에서는 비활성화하세요.
- 새 패키지는 기다렸다가 도입하세요. 악성 패키지는 등장 직후 발견되어 삭제되는 경우가 많습니다.
- 빌드가 접근할 수 있는 범위를 제한하세요. 알려진 호스트와만 통신할 수 있는 빌드는 악성 패키지가 실행되더라도 시크릿을 공격자에게 보낼 수 없습니다. GitHub Actions 이그레스 정책을 참조하세요.
- 모든 AI 제안을 확인하세요. 설치하기 전에 패키지가 존재하는지, 의도한 패키지가 맞는지 확인하세요.
타이포스쿼팅 패키지는 등장한 당일에는 CVE가 없으므로, 권고에 기반한 SCA 스캔으로는 탐지되지 않는다는 점에 유의하세요. 자세한 내용은 소프트웨어 공급망 보안 모범 사례를 참조하세요.
도메인 타이포스쿼팅
URL 하이재킹이라고도 하는 이 공격의 원래 형태는 철자를 틀리게 쓴 은행이나 로그인 페이지 같은 도메인을 등록하는 것입니다. 주소를 잘못 입력한 방문자는 자격 증명을 탈취하거나 악성코드를 배포하도록 만들어진 복제 사이트에 도달합니다. 방어 방법은 다릅니다. 자사 도메인의 흔한 오타를 등록하고, 유사 도메인 등록을 모니터링하며, 잘못된 도메인에서는 자동 입력하지 않는 비밀번호 관리자를 사용하세요.
CRACI가 피해를 제한하는 방법
CRACI는 동작이나 평판을 기준으로 새로운 악성 패키지를 탐지하지 않으므로, 이를 위해서는 패키지 방화벽이나 동작 분석 도구를 사용하세요. CRACI가 하는 일은 그 피해를 가두는 것입니다. GitHub Actions 러너로서 CRACI는 빌드에 필요하지 않은 연결을 차단하는 이그레스 정책을 적용하므로, 시크릿을 탈취하는 패키지는 아무도 본 적 없는 공격이라도 시크릿을 보낼 곳이 없습니다. 작업이 가져온 모든 패키지가 기록에 남으므로, 공격이 알려지면 어떤 빌드가 그 패키지를 가져왔는지 확인할 수 있으며, CVE가 게시된 릴리스는 표시되고 정책 게이트로 차단할 수 있습니다. 공급망 공격이란 무엇인가를 참조하세요.
타이포스쿼팅: 자주 묻는 질문
타이포스쿼팅을 쉽게 설명하면 무엇입니까?
패키지나 웹사이트처럼 인기 있는 이름과 거의 같아 보이는 이름을 등록해 두고 누군가 잘못 입력하기를 기다리는 것입니다. 그러면 유사 이름이 악성코드를 전달하거나 자격 증명을 탈취합니다.
타이포스쿼팅의 사례로는 무엇이 있습니까?
2017년, npm 패키지 crossenv는 인기 패키지 cross-env를 모방했습니다. 진짜 패키지처럼 작동하면서 사용자의 환경 변수를 공격자의 서버로 전송했습니다.
타이포스쿼팅과 종속성 혼동의 차이는 무엇입니까?
타이포스쿼팅은 사람이 공개 패키지 이름을 잘못 입력하는 것에 의존합니다. 종속성 혼동은 비공개 패키지의 정확한 이름을 사용하며, 빌드 시스템이 대신 공개 버전을 가져오는 것에 의존합니다.
타이포스쿼팅은 불법입니까?
악성코드를 게시하거나 자격 증명을 탈취하는 것은 대부분의 지역에서 불법입니다. 도메인 타이포스쿼팅은 미국의 Anticybersquatting Consumer Protection Act 같은 상표법을 위반할 수도 있습니다.
슬롭스쿼팅이란 무엇입니까?
AI 어시스턴트가 지어내기 쉬운 패키지 이름을 공격자가 등록하는 변형입니다. 제안된 패키지를 설치하는 사람은 누구나 공격자의 코드를 받게 됩니다.
타이포스쿼팅은 어떻게 탐지합니까?
새 종속성을 이름과 메타데이터로 검토하고, 패키지 이름을 인기 패키지와 비교하거나 동작을 분석하는 도구를 사용하세요. 권고 기반 스캐너는 패키지가 보고된 이후에만 도움이 됩니다.