Strapi CMS 플러그인 공격, 36개의 악성 패키지로 데이터 탈취 시도!
Strapi CMS 플러그인 생태계를 겨냥한 36개의 악성 npm 패키지가 발견되었으며, 4개의 계정을 통해 배포됨
Redis RCE(Remote Code Execution), Docker 컨테이너 탈출(Container Escape), 데이터 탈취(Data Theft) 등 다양한 공격 기법 사용
공격자는 초기에는 Redis를 이용한 공격을 시도했으나, 실패 후 직접적인 쉘 실행(Shell Execution) 방식으로 전환
공격 대상은 특정 암호화폐 결제 플랫폼으로, 하드코딩된 자격 증명(Hardcoded Credentials)을 사용하여 데이터베이스에 접근 시도
공격 배후 및 배포 방식 분석
분석 결과, 4개의 npm 계정(umarbek1233, kekylf12, tikeqemif26, umar_bektembiev1)을 통해 36개의 악성 패키지가 배포되었으며, 동일한 3-파일 구조와 공격 패턴을 공유한다. 특히, umarbek1233과 kekylf12 계정은 동일한 이메일 제공업체를 사용하며, Node.js/npm 버전도 일치하는 것으로 확인되었다. 이는 단일 공격자가 여러 계정을 사용하여 공격의 효율성을 높인 것으로 보인다.
다양한 공격 기법 및 페이로드 분석
공격자들은 Redis RCE, Docker 컨테이너 탈출, 데이터 탈취 등 다양한 공격 기법을 사용했다. 초기에는 Redis를 활용하여 crontab 항목 주입, 웹쉘 및 리버스 쉘 생성, SSH 키 주입 등을 시도했다. 기술적으로 보면, Redis CONFIG SET 명령어를 사용하여 임의의 파일을 시스템에 기록하는 방식을 사용했다. 하지만, 이 방식이 실패하자, 직접적인 쉘 실행 방식으로 전환하여, 호스트 이름 기반의 필터링을 통해 특정 환경을 타겟팅했다.
타겟팅된 암호화폐 플랫폼 공격
공격의 최종 목표는 특정 암호화폐 결제 플랫폼의 인프라를 침해하는 것이었다. 공격자들은 하드코딩된 PostgreSQL 자격 증명을 사용하여 데이터베이스에 직접 접근을 시도했으며, guardarian, guardarian_payments, exchange, custody와 같은 데이터베이스를 집중적으로 공격했다. 특히, Strapi 데이터베이스 내에서 암호화폐 관련 테이블(Cryptocurrency-related Tables)을 검색하는 등, 공격 대상에 대한 사전 지식을 바탕으로 공격을 수행했다.
지속적인 접근을 위한 백도어 설치
공격자들은 지속적인 접근을 위해 다양한 백도어를 설치했다. 특히, crontab 항목 추가(Crontab Entry)를 통해 C2 에이전트를 재시작하도록 하거나, 파일리스 리버스 쉘을 사용하여 탐지를 회피했다. 기술적으로 보면, /tmp/.node_gc.js 파일을 생성하여 C2 에이전트를 실행하고, crontab을 통해 해당 파일을 지속적으로 실행하도록 설정했다. 이러한 지속적인 접근 시도는 공격의 장기적인 성공을 위한 전략으로 분석된다.
공격 과정의 진화 및 개발 과정
공격은 초기 Redis RCE 시도에서 시작하여, 쉘 실행, 정보 수집, 데이터베이스 공격, 그리고 지속적인 접근을 위한 백도어 설치로 진화했다. 특히, 공격자는 공격 대상에 대한 정보를 수집하기 위해, 환경 변수, 설정 파일, 그리고 .env 파일 등을 탈취했다. 실제 사례로는, Jenkins CI 파이프라인(CI/CD Pipeline)을 참조하는 등, 공격 대상의 인프라에 대한 깊은 이해를 바탕으로 공격을 수행했다. 이러한 일련의 과정은 공격자의 실시간 개발 과정을 보여주는 것으로 평가된다.