지난주, 소나타입은 npm 에서3개의 악성 npm 크립토마이닝 (암호화폐 채굴) 패키지 (klow와 klown, okhsa)를 발견했다고 보고했습니다. 이런 패키지들은 10월12일부터 15일까지 npm 레지스트리를 침해하고 모네로 채굴자를 윈도우즈, macOS와 리눅스 머신에 설치했습니다. 특이하게도 이 패키지 중 최소 1개는 “ua-parser-js”라 불리는 많이 사용되는 검증된 라이브러리를 모방하고 있었습니다.
금요일이 되자, 실제 “ua-parser-js”의 관리자는0.7.29, 0.8.0, 1.0.0 의 패키지가 크립토마이너 (암호화폐채굴자)와 묶인채 프로젝트가 하이잭킹 되었다고 발표했습니다.
소나타입의 보안 연구 팀은 내부 데이터에 Sonatype-2021-1529 하위로 이 버전들을 분류해 두었습니다.
이 발표에 따르면 이 하이잭킹의 원인은 npm계정 탈취로 파악되고 있습니다.
진짜 “ua-parser-js” 지금까지 수십억건 정도 다운로드 되었고, 한주 다운로드 수가 약 7백만건을 넘어섰습니다. 페이스북과 아마존, 마이크로소프트, 구글, 인스타그램, 모질라, Elastic, Intuit, Slack, Reddit 를 포함하는 큰 기술 기업들도 라이브러리에 의존하고 있습니다. 작년 오픈소스 생태계에 대한 일련의 공격들중에서 이런 요소들이 공급망 공격에 대한 우려를 자아내고 있습니다.
예를 들어, 페이스북의 “fbjs” 라이브러리는 주당 약 5백만 다운로드를 기록하는 npm 중에 하나로 “ua-parser-js”를 의존성 있는 것으로 리스트해 두고 있습니다.
동일한 크립토마이너 (암호화폐채굴자)가 패스워드 탈취와 함께 발견
소나타입의 분석에 의하면 하이잭킹된 “ua-parser-js” 버전과 동일한 크립토마이너 (암호화폐채굴자)가 지난 주 채굴자에서 발견된 3개의 악성 패키지의 동일한 파일명(jsextension, jsextension.exe)과 파일 해시를 가지고 있다는 것을 보여줬습니다. 이는 동일한 위험 요소로 연결될 가능성이 있음을 보여줍니다.
이렇게 하이잭킹된 “ua-parser-js”의 코드 구조는 앞에 언급된 3개의 패키지에서 보여진 악성 코드와 매우 유사했습니다. 또, “ua-parser-js” 상의 동일한 “Preinstall” 및 “postinstall” Bash 배치 스크립트 역시 유사한 모습을 보였습니다.
그러나 하이잭킹된 “ua-parser-js” 버전에서 보여지는 몬로 월렛 주소는 지난주 하이잭킹된 3개 패키지와는 차이가 있다는점에 주목할 필요가 있습니다.
3개의 악성 패키지건과 “ua-parser-js” 가로채기의 또 다른 차이점은 후자는 공격받은 윈도우 머신에 추가로 DLL을 떨어뜨리며, 이는 “sdd.dll” 로 불리며 후에 “create.dll” 로 변경됩니다.
BleepingComputer의 추가 분석에 따르면 이 DLL은 파이어폭스, 크롬, 파일질러, 애플 사파리 원격 데스크톱 및 WinVNC 를 포함하여 100여개가 넘는 유명한 윈도우즈 어플리케이션의 크리덴셜을 가로챈다고 발표했습니다.
“위에 명시한 프로그램으로부터 패스워드를 훔치는 것 이외에도, DLL은 PowerShell 스크립트를 실행하여 위도우즈 크리덴셜 매니저로부터 패스워드를 탈취하는 것”이라고 보고서에서 밝혔습니다.
사후 검사를 실행하는 프로젝트는 잠재적 영향을 미리 발견
다행히도 “ua-parser-js” 는 매우 초기에 발견되었습니다. 같은 날 발견되었으며 약 4시간 정도 지속되었습니다. 그러나 이 JavaScrip 라이브러리가 널리 사용된다는 점을 감안하면, 이 공급망 공격에 대한 전체 파급력은 아직 추가 파악이 필요합니다.
JetBrains는 잠재적 영향에 대해 자사의 Kotlin 멀티플랫폼(JS 대상) 사용자와 Krama 테스팅 프레임워크를 사용하는 Kotlin/JS 프로젝트에게 공개하였습니다. Karma 는 “ua-parser-js”를 의존성을 가진것으로 명시하였습니다. 그래서 JetBrains는 Kotlin Multiplafrom 과 공격이 발생한 시간에 Karma 테스트 Kotlin/JS 버전 1.5.0 을 사용하는 사람들에게 자신들의 시스템이 영향을 받았을것으로 간주할 것을 경고하였습니다.
“앞서 언급한 것처럼, Kotlin Multiplatform (JS 대상) 및 Kotlin/JS 버전 1.5.0 또는 이후 버전은 영향받은 패키지에 대해 상관 의존성을 가지고 있습니다. 만약 최초의 Karma 테스트를 2021년 10월 22일 14:15 CEST 와 2021년 10월22일 18:23 CEST 사이에 실행하였다면, 공격 당했을 확률이 매우 높습니다.” 라고 하디 하리리 JebBrains 개발자 어드보커시 부사장이 말했습니다.
깃허브 상의 다른 프로젝트도 사후 검사를 진행하고 있지만 아직 파급력을 다 밝혀내지 못하고 있는 것을 소나타입이 확인했습니다.
Codecov 또는 SolarWinds 공격과 같은 공급망 공격의 충격과 같이, 이번 공격으로 인한 충격의 결과는, 비록 일시적이기는 하지만 밝혀낼때까지 수일이 걸릴 것으로 생각됩니다.
해결방안에 대한 의견
“Ua-parser-js” 의 공격당한 버전은 0.7.29, 0.8.0, 및 1.0.0을 포함합니다. 이 버전들은 본질적으로 악성이기 때문에 다음과 같이 권고합니다.
1. 작업중인 빌드가 이를 호출했다면 완전히 제거해야 합니다. 해당 패키지를 다운로드 받은 모든 호스트가 영향 받았다고 간주하고 적절하게 수정해야 합니다.
2. 암포 도용자로 인해 특히, 윈도우즈 크리덴셜 매니저에 저장된 크리덴셜은 모두 교체되어야 합니다
3. “ua-parser-js”를 포함하여 프로젝트내의 의존성이 정확하게 표기되고 안전한 버전인지 재확인합니다
주의: 버전 번호 앞에 캐럿 또는 물결표가 있는지 여부(해당되는 경우)에 따라 package.json 파일에 안전한 "ua-parser-js" 버전이 지정되어 있어도 애플리케이션이 여전히 감염된 버전을 다운로드했을 수 있습니다.
여기 “ua-parser-js” 공격이 발생한 이벤트의 타임라인입니다:
10월 12일3개의 패키지 (klow, klown, 그리고 okhsa)가 10월12일 “klow” 로 시작되며, 같은 주에 같은 저자로부터 동일하게 npm 에 등장했습니다. 해당 패키지는 릴리스 이후 하루가 되기 전에 소나타입의 자동 말웨어 감지 시스템에 의해 플래그가 지정되었습니다.
10월 13일 - 15일우리의 말웨어 아카이브에서 “klow”를 조사하는 사이에 10월13일에 유사한 “okhsa” 패키지가 npm에 나타난 것을 보았습니다. “Okhsa”최초 버전이 “klow”를 의존성으로 호출하였으며, 이후 “klow”를 npm에서 내린 후에 동일한 패키지인 “klown”이 15일 나타났습니다. “okhsa”의 이후 버전은 “klown”을 의존성으로 사용하기 시작했습니다.
10월15일, 3개 패키지 모두 npm 보안 직원에게 보고되었고 같은날 모두 삭제 되었습니다. 이 패키지의 일부인 예를 들어, klown 은 “ua-parser-js”를 구조, README, 그리고 npm 페이지의 룩앤필(look-and-feel) 을 모방하는 것이 발견되었습니다.
10월 22일신뢰할 수 있는 요소인 “ua-parser-js” 자체도 가로채어졌습니다. “Jsextension.exe” 크립토마이너 (암호화폐채굴자)는 이전 패키지에서 사용되었던 것과 동일한 바이너리를 내부에서 발견했습니다. 소나타입 보안 연구팀은 같은날 이 패키지를 조사하고 딥다이브 연구를 진행하였습니다. 이 이슈의 민감도 때문에, 아주 빠르게 IQ로 배포되었고, Sonatype-2021-1529 로 트래킹 되고 있습니다.
오픈소스 공급망 공격의 진화로 인해 강화된 보호를 요구
다시 한번, 이 발견은 공격자들에게 있어서 개발자가 작성하는 소프트웨어가 새로운 타겟임을 보여줍니다. 소나타입은 소프트웨어 리포지토리에 숨어있는 새로운 브랜드재킹, 타이포스쿼팅, 크립토마이닝 말웨어를 추적해 왔습니다. 우리는 매우 심각한 취약성과 차세대 공급망 공격을 발견했고, 잘 알려진 테크 기업을 목표로 하는 카피캣 패키지도 발견했습니다.
한가지 좋은 소식은, 지난 몇주간 우리의 자동화된 말웨어 감지 시스템이 npm 내의 수천개의 의심스러운 패키지를 발견했다는 것입니다. 이 요소들은 확인된 악성 코드이거나, 악성으로 과거에 알려지거나, 의존성을 혼란시키는 카피캣으로 밝혀졌습니다.
현재 Nexus Intelligence 를 통해 PyPl 과 같은 다른 생태계로 말웨어 감지 지원범위를 확장하고 있습니다.
이 모든 작업은 노력과 행운 이상이 필요합니다. 경험있는 보안 전문가와 수백만 테라바이트의 데이터가 필요합니다. 말웨어 변이의 속도를 따라잡기위해 소나타입은 새로 릴리스된 모든 npm 패키지를 분석하여 개발자를 보호하고 있습니다.
우리는 최신 및 향후 있을 공격으로부터 여러분의 소프트웨어 공급망을 보호하고 안전하게 지키기 위해 노력하고 있습니다. 우리의 AI/ML기반 말웨어 감지 자동 시스템 (Nexus Firewall 의 일부이면서, Neuxs Intelligence 데이터의 지원을 받는), 그리고 보안 전문팀은 협업을 통해 전체 스펙트럼을 보호하고 있습니다. Nexus 는 과거 공급망 공격과 약 60가지 “시그널"을 기반으로 유사 악성 컴포넌트를 결정합니다. 이 인사이트는 보안 연구원이 공격을 발견하기 전에 잠재적 신규 공격에 플래그를 달 수 있도록 합니다.
우리의 시스템이 패키지 혹은 의존성을 “의심스러운"으로 플래그를 달자마자, 패키지는 소나타입 보안 연구팀으로부터 공동 리뷰를 위해 격리 큐로 분리됩니다. Nexus Firewall 사용자는 리뷰가 진행되는 동안 이런 의심스러운 패키지로부터 보호됩니다. 이미 존재하는 요소들은 개발자의 오픈소스 빌드 환경인 “downstream”으로 내려받기 전에 격리됩니다.
또한 “의존성 혼란 정책 (Dependency Confusion Policy)” 기능을 활성화해 둔 사용자는 의존성 혼란 공격으로부터 선제적인 보호를 받을 수 있습니다. 이는 충돌되는 패키지 이름이 퍼블릭 리포지토리 또는 사용자의 프라이빗, 인터널 리포에 존재하는 경우 작동됩니다.
소나타입의 월드 클래스급 보안 연구 데이터는 자동화된 말웨어 감지 기술과 결합되어 개발자, 고객 및 소프트웨어 공급망을 공격으로부터 안전하게 보호합니다.
Tags: vulnerability, featured, Nexus Intelligence Insights