4단계 난독화, 페이로드 은닉, 가짜 캡챠, IP 주소로 지문 탈취
시스템 키링, 브라우저, 인증 서비스에서 사용자 인증 정보 빼돌려
24MB 용량 ‘PyInstaller’ 패키지 기반 인포스틸러 다운로드 유도
“npm 공급망 공격에서 흔히 볼 수 없는 첨단 기법 총망라”
[애플경제 이윤순 기자] 해커들이 악성 npm 패키지로 윈도우, 맥OS, 리눅스 시스템 개발자들을 공격하고 있다. 이로 인해 악성 npm 패키지가 거의 1만회나 다운로드된 것으로 알려졌다.
보안 전문가들은 윈도우, 리눅스, macOS 시스템에서 ‘인포스틸러 악성코드를 유포하는 것으로 확인된 10개의 악성 npm 패키지를 발견했다.
보안업체 ’소켓‘(Socket) 사이버공격 연구팀이 최근 자체 사이트에 공개한 내용에 따르면, 이들 악성코드는 4단계의 난독화 기법을 사용하는 것으로 파악되었다. 이를 통해 페이로드를 숨기고, 가짜 캡챠(CAPTCHA)로 속이며 IP 주소로 피해자의 지문을 수집한다.
이런 수법으로 윈도우, 리눅스, macOS을 망라해 시스템 키링, 브라우저, 인증 서비스로부터 사용자 인증 정보를 탈취한다. 결국 24MB 용량의 ‘PyInstaller’ 패키지 기반 인포스틸러를 다운로드한다.
그야말로 “이 악성코드는 npm 공급망 공격에서 흔히 볼 수 없는 여러 첨단 기법을 보여준다”는 것이다.
‘타이포 스쿼팅’ 이름으로 합법적 라이브러리 위장
이미 10개의 패키지가 7월 4일에 공개되었고, 4개월 이상 활성화되며 모두 9,900건 이상의 다운로드를 기록했다. 연구진은 “향후 피해자가 발생하지 않도록 npm 레지스트리에 해당 패키지들을 삭제해 달라”고 공지했다.
이 패키지들은 합법적인 라이브러리를 모방하기 위해 ‘타이포 스쿼팅’된 이름으로 등록되었다. 여기엔 △TypeScript를 모방한 typescriptjs, △deezcord.js 및 discord.js를 모방한 dezcord.js, △etherdjs, ethesjs, ethetsjs, ethers.js를 모방한 nodemonjs, △nodemon을 모방한 react-router-dom.js, △zustand.js, zustand를 모방한 zustand 등이다.
이들이 설치되면 악성코드는 가짜 캡챠 프롬프트를 표시하게 된다. 그러면 피해자의 운영 체제를 감지하고 난독화된 페이로드를 새 터미널 창에 실행할 수 있다. 즉, 악성코드가 npm 설치 프로세스와 별개로 실행되는 것이다.
연구원들은 “설치 도중 터미널을 확인하는 개발자는 ‘새 창’이 잠시 나타나는 현상을 볼 수 있는데, 악성코드는 의심을 피하기 위해 즉시 창을 지운다”고 공개했다.
네 가지 계층 난독화 기법과 ‘대응 매뉴얼’
이는 네 가지 계층의 난독화 기법을 사용한다. 첫 번째는 ‘자체 디코딩 평가 래퍼(Self-Decoding Eval Wrapper)’다. 이는 전체 페이로드를 즉시 호출되는 함수로 표현하며 감싸면서 스스로를 재구성, 평가해 코드를 피상적으로 검사하는 것을 방지한다.
두 번째 계층은 디코더 함수 자체를 해싱, 동적으로 생성된 키를 사용하는 XOR 암호를 사용한다. 코드를 실행하지 않고는 자동 복호화를 어렵게 만드는 것이다.
세 번째 계층에서는 페이로드 문자열이 URL로 인코딩, XOR 복호화 전에 URI 디코딩이 필요하다. 이는 완전한 자바스크립트 평가를 구현하지 않는 정적 분석 도구로는 ‘장벽’이 아닐 수 없다.
네 번째 계층에선 디코딩된 코드가 16진수 및 8진수 연산을 사용하는 ‘switch-case’ 상태 머신을 사용, 프로그램 흐름을 은폐한다.
그런 다음 피해자의 위치 정보와 시스템 지문 정보를 공격자의 명령이나 제어(C2) 서버로 전송한다. 다운로드를 유도하고, 플랫폼별 데이터 추출기 바이너리를 자동으로 실행한다.
소켓 연구진은 “이런 ‘크로스 플랫폼’ 접근 방식을 통해 모든 운영 체제 개발자는 ‘자격 증명 저장 메커니즘’에 의해 완벽하게 작동하는 정보 탈취 도구의 대상이 된다”고 지적했다. 결국 “윈도우 개발자는 자격 증명 관리자를, macOS 개발자는 키체인을, 리눅스 개발자는 ‘시크릿서비스’(SecretService) 키링을 탈취당할 수 밖에 없다”는 것이다.
그러면 이에 어떻게 대응할 것인가. ‘소켓’에 따르면, 10개의 악성 패키지에 대한 종속성을 즉시 검증, 분석해야 한다. 이 경우 해당 패키지가 설치된 모든 시스템이 완전히 침해되었다고 가정할 필요가 있다.
또한 시스템 키링과 비밀번호 관리자에 저장된 모든 자격 증명을 재설정해야 한다. OAuth, JWT, API키를 포함한 모든 서비스의 인증 토큰을 취소하도록 한다. 모든 계정에서 ‘다중 요소 인증’(MFA)을 활성화하고, 모든 시스템에서 인증된 키를 검토하는 동안 ‘SSH 키’를 순환시켜야 한다. 특히 “연결된 서비스에서 비정상적인 활동이 있는지 조사하고, 액세스 로그를 검증해야 한다”면서 “침해된 시스템에서 프로덕션 인프라로 측면 이동을 하는지도 확인해야 한다”고 강조했다.
또한 저장된 비밀번호에서 자격 증명이 도용될 가능성이 있는지를 브라우저 기록을 통해 검증한다. 저장소, 클라우드 서비스, 내부 시스템에 대한 무단 접근도 모니터링한다. 또한 VPN 및 방화벽 로그를 조사, ‘195[.]133[.]79[.]43’에 대한 연결을 확인하고, 설치되었을 수도 있는 ‘지속성 메커니즘’도 식별, 제거해야 한다.
npm, PyPi 등에서 패키지 다운로드 ‘각별한 주의’
이같은 악성 npm 패키지 사용은 최근 사이버 범죄자들의 핵심 전술로 빠르게 자리 잡고 있다. 보안업체 KnowBe4는 “그럴수록 특히 개발자는 npm 및 PyPi처럼 인기있는 생태계에서 패키지를 다운로드할 때 각별히 주의해야 한다”고 강조했다. 즉 악성 npm 패키지는 개발자들이 “최대한 빨리 기능을 프로덕션 환경에 도입해야겠다”는 압박감을 악용한다. 마치 휴대폰 앱에 빠르게 접근하기 위해 필요한 권한을 무시하거나 건너뛰는 것 또한 위험하다는 경고다.
KnowBe4는 “npm 패키지뿐만 아니라 모든 타사 확장 프로그램과 에이전트를 기본적으로 차단해야 한다”면서 “이런 작업은 격리된 환경에서 실행되어야 하며, 개발자 자격 증명은 프로덕션 관리자 자격 증명과 동일한 수준으로 처리되어야 한다”고 당부했다.
