StepSecurity, Socket, Nextron Systems 소속 보안 연구진이 arrayref, internment, append-only-vec 등 널리 쓰이는 러스트 크레이트 세 개를 겨냥한 공급망 공격을 찾아냈다. 이 패키지들에 의존하는 솔라나 생태계 프로젝트들도 직접적인 노출 위험에 놓였다. 감염된 버전은 arrayref 0.3.10, internment 0.8.7, append-only-vec 0.1.9였고, 각각 0.3.9, 0.8.6, 0.1.8 이전 버전을 그대로 쓰던 개발자는 화를 피했다.
공격 방식은 이랬다. 정상적이고 널리 신뢰받는 proc-macro2 라이브러리를 흉내 낸 타이포스쿼팅 패키지 proc-macro1에 대한 의존성을 몰래 심어 넣는 식이었다. 악성 코드가 패키지의 빌드 스크립트 안에 자리 잡고 있었던 탓에, 감염된 버전을 컴파일하는 순간 별도의 함수 호출 없이도 자동으로 실행됐다.
페이로드는 이렇게 작동했다
일단 트리거되면 빌드 시점의 드로퍼가 공격자가 통제하는 인프라에서 플랫폼별 바이너리를 내려받았는데, 이때 TLS 인증서 검증은 꺼둔 채였다. 그런 다음 개발자 컴퓨터에서 그 바이너리를 실행시켰다. StepSecurity의 분석에 따르면 2단계 페이로드는 호스트 시스템을 프로파일링하고, 설치된 브라우저 목록을 뒤져 로그인 출처와 사용자 이름을 수집했으며, 리눅스 시스템에서는 systemd 서비스를 통해 지속성을 확보한 것으로 알려졌다. 동시에 추가 명령을 원격 실행할 수 있는 명령제어(C2) 인프라와도 연결을 유지했다.
arrayref 크레이트 하나만 놓고 봐도 누적 다운로드 수가 약 2억 4,500만 건에 달한다. 이런 저수준 유틸리티 패키지가 러스트 생태계 전반에 얼마나 깊이 파고들어 있는지 보여주는 수치이자, GUI 프레임워크부터 블록체인 툴링까지 이어지는 의존성 체인 곳곳에 걸쳐 있다는 뜻이기도 하다. 바로 이 파급력이 흔한 유틸리티 크레이트 하나의 감염을 사소한 버그가 아니라 진짜 공급망 리스크로 끌어올린 요인이다.
같이 보면 좋은 기사: 만트라 체인, 원인 불명 사고로 네트워크 전면 중단…토큰 급락
빠른 탐지, 더 빠른 정리
대응 속도는 공급망 공격치고는 이례적으로 빨랐다. Socket의 자동 스캐너는 악성 proc-macro1 패키지가 등록된 지 약 18분 만에 이를 잡아냈고, 한 연구자는 8월 20일 UTC 기준 07시 54분—악성 패키지 게시 39분 만에—러스트 보안대응팀(Rust Security Response Team)에 독자적으로 이를 신고했다. crates.io에 공격자 계정이 만들어진 시점부터 감염된 패키지가 레지스트리에서 완전히 제거되기까지, 전 과정은 하루 아침 사이에 끝났다. 악성 버전은 모두 UTC 09시 25분까지 삭제됐다.
솔라나 개발자들에게 왜 중요한가
감염된 크레이트 세 개 모두 솔라나 전용 패키지는 아니지만, 범용 러스트 툴링에서 워낙 인기가 많다 보니 러스트가 주 언어인 솔라나 프로그램 개발을 포함해 폭넓은 프로젝트에서 전이 의존성으로 등장한다. 이번 사고는 블록체인 생태계의 보안 경계가 스마트 컨트랙트나 검증인 수준에서 끝나지 않는다는 사실을 다시 일깨운다. 개발자들이 기본값처럼 가져다 쓰고, 모든 전이 의존성을 일일이 감사하지는 않는 오픈소스 공급망 전체가 그 경계 안에 들어 있다는 뜻이다.