npm 패키지 관리 도구로 공개되는 UAParser.js는 사용자 에이전트 판정 처리를 실행하는 자바스크립트 라이브러리로 페이스북과 마이크로소프트, 아마존, 구글 등 초 거대기업을 포함한 1,000개 이상 프로젝트에 채택되어 있다. 이런 UAParser.js가 해커에 의해 납치되어 리눅스와 윈도 장치를 대상으로 암호화 자산 채굴, 비밀번호 도용을 하는 트로이 목마를 심었다는 걸 발견했다고 한다.
UAParser.js는 웹사이트를 방문한 사용자를 대상으로 사용자 에이전트 문자열을 분석해 브라우저 종류와 렌더링 엔진, 운영체제, CPU 장치 종류와 모델을 식별하는데 사용되는 라이브러리다. 유용하기 때문에 페이스북과 마이크로소프트, 아마존, 구글, 인스타그램, 슬랙, 모질라, 디스코드 등 유명 기업을 포함한 많은 프로젝트에 사용되고 있으며 일주일에 수백만 회 다운로드될 만큼 인기가 높다. 보도에 따르면 2021년 10월 다운로드 수는 10월 23일 기준 2,400만 회를 초과할 정도라고 한다.
그런데 10월 22일 npm에 배포된 UAParser.js 새 버전은 다운로드한 리눅스와 윈도 장치에 악성코드를 설치하는 트로이목마가 심어져 있던 게 발견됐다. 개발자인 파이살 살만(Faisal Salman)은 버그 보고서에서 사과를 하며 수백 개 웹사이트에서 대량 스팸 메일일 쇄도했을 때 뭔가가 바뀐 걸 깨달았다면서 누군가 자신의 npm 계정을 하이재킹하고 일부 결함이 있는 패키지 0.7.29,0.8.0,1.0.0을 출시한 것 같다고 밝혔다. 이는 이전 버전과의 차이에서 알 수 있듯 악성코드를 설치한다고 덧붙였다.
해커가 침해된 UAParser.js를 설치하면 preinstall.js 스크립트가 장치에 사용되는 운영체제 종류를 확인하고 이에 따라 리눅스 쉘 스크립트 또는 윈도 배치 파일을 실행한다. 장치가 리눅스인 경우 preinstall.sh 스크립트가 실행되어 사용자가 러시아, 우크라이나, 벨라루스, 카자흐스탄 여부를 확인해 jsextension 프로그램을 실행한다. jsextension 프로그램은 암호화 자산 모네로를 채굴하는 도구인 XMRig를 설치하고 사용자로부터 검출되기 어려운 CPU 50%만 사용해 모네로를 채굴한다고 한다.
장치가 윈도인 경우 XMRig를 jsextension.exe로 저장하는 것 외에도 배치파일 sdd.dll 파일을 다운로드해 create.dll로 저장한다. 다운로드한 DLL을 장치에 저장되어 있는 암호를 훔치려는 트로이목마이며 아마도 DanaBot이 아닐까 보여지고 있다. DLL이 로딩되면 메시지 응용 프로그램, 브라우저, FTP 클라이언트, VNC 게임 응용 프로그램 등 프로그램과 윈도 자격 증명 관리자도 암호를 훔치는 것으로 보고되고 있다.
이번 공격을 한 해커는 다른 npm 라이브러리에 유사 공격을 한 해커와 동일하다고 추측되고 있다. 개발자는 npm 계정 해킹을 알게 된 몇 시간 뒤 문제를 해결한 깨끗한 UAParser.js 버전 0.7.30,0.8.1,1.0.1을 출시했다. 현재 결함이 있는 패키지 0.7.29,0.8.0,1.0.0은 npm 지원을 통해 비공개로 되어 있으며 다운로드할 수 없는 상태가 되어 있다.
보도에선 UAParser.js를 통한 공급망 공격 영향을 광범위해 모든 사용자는 프로젝트에 악성 버전이 포함되어 있지 않은지 확인해야 한다고 지적했다. jsextension과 jsextension.exe이 있는 경우 이를 제거하고 윈도 사용자의 경우 create.dll을 빠르게 제거해야 한다.
또 비밀번호를 훔치는 트로이목마에 감염된 건 윈도 사용자 뿐이라고 생각되지만 리눅스 사용자도 자신의 장치가 위험에 노출되어 있다고 가정하는 게 현명하다는 것. 트로이목마에 감염된 모든 윈도와 리눅스 사용자는 암호와 토큰을 변경할 필요가 있다는 조언이다. 관련 내용은 이곳에서 확인할 수 있다.