PointBlank: PyPI RAT가 JSON-Bin 서비스에 C2를 숨겼습니다.

PointBlank: 무료 노트 호스팅 서비스를 통해 명령 채널을 실행하는, 모든 기능을 갖춘 Python 기반 RAT(원격 접속 트로이목마)

TL; DR

PyPI 패키지 이름 gcli-control 키 입력 로깅, 웹캠 및 마이크 캡처, 클립보드 모니터링, 브라우저 자격 증명 접근, 화면 제어, 지속성 유지, 권한 상승, 그리고 "140개 이상의 명령어"를 포함한 완벽한 Windows 원격 접속 도구를 배포했습니다. 이 도구의 정체를 숨기지 않았으며, PyPI 패키지 설명에서도 "Windows 원격 접속 도구"라고 명시했습니다. npoint.io".

잠시 멈춰서 살펴볼 만한 세부 사항은 바로 그 구절입니다. "npoint.io를 통해." 전용 서버에 접속하는 대신, 임플란트는 다음과 같은 방식을 사용했습니다. npoint[.]io (작은 JSON 문서를 호스팅하는 무료의 합법적인 서비스)를 명령 및 제어 중계기로 사용합니다. 운영자는 JSON 저장소에 명령어를 입력하고, 악성 프로그램은 해당 저장소를 주기적으로 확인하고 실행한 후 결과를 다시 저장소에 기록합니다. 공격자가 소유한 도메인을 차단할 필요도 없고, 새로운 IP 주소를 플래그할 필요도 없습니다. 트래픽은 개발자들이 매일 사용하는 서비스로 전송됩니다.

약 13시간 30분에 걸쳐 6가지 버전이 출시되었으며, 각 버전은 이전 버전보다 더 완성도가 높았습니다. 모든 버전에는 악보가 포함되어 있습니다. ml_예측_안전 자동 분류기가 수동 검토 전에 해당 패밀리를 악성으로 재분류했습니다.

공격 해부학

gcli-control 가져오기 패키지를 설치합니다. gcli35개 모듈로 구성된 파이썬 코드베이스입니다. 설치 시간이 필요하지 않습니다. hooks — 동안에는 아무것도 실행되지 않습니다 핍 설치해당 기능은 모듈 자체에 내장되어 있으며, 도구가 실행될 때 호출되고, 모듈 구성은 제품 사양서와 유사합니다.

역량 영역모듈
호스트 감시keylog, webcam, audio, clipboard, desktop, monitoring
자격 증명 및 데이터 접근browser, forensics, fileops, transfer, users
발판 및 확대persistence, elevator, registry, security
호스트 및 네트워크 정찰system, processes, network_config, wifi, bluetooth, netutils
명령 및 제어client, host, session, protocol, npoint, crypto, encrypt

명령 채널이 흥미로운 부분입니다. 대부분의 원격 접속 도구는 운영자가 제어하는 ​​서버, 즉 신고를 통해 접속을 차단할 수 있는 IP 주소, 도메인, 호스팅 제공업체에 연결됩니다. gcli-control 대신에 치료합니다 무료 JSON-bin 서비스를 데드 드롭으로 이용하세요. 그만큼 n포인트 이 모듈은 작은 JSON 문서를 읽고 씁니다. npoint[.]io 일반 HTTPS를 통해; 암호화는/암호화 모듈은 교환되는 페이로드를 래핑하여 바이너리 내용이 평문 명령이 되지 않도록 합니다. 결과적으로 중개되고 암호화된 릴레이가 구현됩니다.

  • 운영자는 (암호화된) 명령어를 JSON 빈에 넣습니다.
  • 피해자 호스트에서 실행되는 악성 프로그램은 해당 바이너리 파일을 주기적으로 확인하고, 암호를 해독한 후, 그 안에 있는 명령 처리기 중 하나를 실행하고, (암호화된) 결과를 다시 파일에 기록합니다.
  • 네트워크 모니터링 시스템의 관점에서 보면, 피해자는 단순히 통신하고 있는 것일 뿐입니다. npoint[.]io — 개발자 트래픽에 나타날 만한 정당한 이유가 있는 서비스입니다.

여기에는 2단계 다운로드나 난독화된 로더가 없습니다. 기능은 읽기 쉬운 Python 코드로 완벽하게 제공되며, 유일한 "숨김"은 릴레이 선택과 릴레이되는 페이로드의 암호화뿐입니다.

JSON-bin 데드 드롭이 운영상 매력적인 이유를 명확히 설명할 필요가 있습니다. 왜냐하면 이러한 패턴이 다시 나타날 것으로 예상되는 이유를 설명해 주기 때문입니다.

  • 운영자 소유의 엔드포인트가 없습니다. 등록해야 할 C2 도메인도 없고, 임대해야 할 VPS도 없으며, 방어자나 등록기관이 압수할 것도 없습니다. 삭제 완료 꾸러미 채널을 건드리지 않습니다. 삭제 채널 이는 범용 SaaS에 수백만 개의 문서 중 하나를 관리하도록 요청하는 것을 의미합니다.
  • 평판 세탁. 잘 알려진 개발자 서비스로 향하는 아웃바운드 HTTPS 연결은 신규 도메인이나 미사용 IP 주소로 연결할 때 발생하는 평판 저하를 초래하지 않습니다. 많은 송신 필터링 설정에서 이를 암묵적으로 허용합니다.
  • 비동기성과 부인 가능성. 폴링 모델(임플란트가 소켓을 계속 열어두는 대신 일정 간격으로 문서를 가져오는 방식)은 주기적인 API 폴링처럼 보이는 트래픽을 생성하며, 대화형 세션처럼 보이지 않습니다. 문서 내용을 암호화하면 해당 파일을 발견한 분석가조차도 명령 목록이 아닌 암호화된 텍스트를 보게 됩니다.
  • 사소한 회전다른 보관함으로 이동하거나 완전히 다른 메모/붙여넣기 서비스를 사용하는 것은 운영자가 한 줄의 설정만 변경하면 됩니다. 특정 중개 서비스에 연결된 차단 목록은 발송되는 순간 효력을 잃습니다.

운영자가 감수해야 하는 절충점은 처리량과 지연 시간입니다. 데드드롭 릴레이는 직접 연결보다 속도가 느리고 대역폭이 낮습니다. 주로 짧은 명령을 내리고 시간에 따라 결과를 수집하는 감시 및 제어 임플란트의 경우, 이러한 절충은 쉽게 감수할 수 있습니다.

연혁

가족 구성원 간의 갈등은 빠르게 확산되었습니다. 신고된 버전의 티켓 생성 타임스탬프를 보면 관찰된 전체 기간이 약 13시간 30분 이내이며, 스캐너 자체의 증거 개수도 코드와 함께 증가하여 첫 번째 버전에서는 몇 개에 불과했던 신고 사이트가 최신 버전에서는 14개로 늘어났습니다.

버전최초 목격 (UTC)주의 사항
0.1.02026-07-21 12:59초기 업로드; 최소한의 플래그 표면
0.5.02026-07-21 18:01기능이 확장됩니다
0.2.02026-07-21 18:03(버전 번호는 업로드 순서에 따라 단조롭게 증가하지 않습니다.)
0.6.02026-07-22 00:44더 넓은 모듈 세트
0.7.02026-07-22 01:58거의 완성된 툴킷
0.7.12026-07-22 02:28최신 버전; 35개 모듈, 완벽한 기능

버전 번호는 엄격한 순서대로 게시되지는 않았지만 방향은 분명합니다. 소규모 초기 버전을 출시한 후, 완전한 기능을 갖춘 0.7.1 버전을 향해 빠르게 개선해 나가는 것입니다. 이는 한 번에 모든 기능을 공개하는 것이 아니라, 활발하게 개발 중인 프로젝트가 성장함에 따라 공개 레지스트리에 배포되는 방식입니다.

타협의 지표

아래의 모든 지표는 디스크에 저장된 패키지 내용 및 버전 0.7.1의 확정적 지표 스캔을 통해 확인되었으며, 추측에 의한 것은 없습니다.

타입지시자
패키지(PyPI)gcli-control버전 0.1.0, 0.2.0, 0.5.0, 0.6.0, 0.7.0, 0.7.1
패키지 가져오기gcli
C2 릴레이npoint[.]io (JSON-bin 데드 드롭; 암호화된 페이로드)
명시된 저장소github[.]com/gcli-control/gcli
행동적 지문동일 위치에 설치된 감시 모듈: keylog, webcam, audio, clipboard, browser또한, 영구 저장소, 엘리베이터, 클라이언트/호스트/프로토콜 명령 계층이 하나의 패키지에 포함되어 있습니다.
설치 hooks없음: 해당 기능은 설치 과정이 아닌 도구 실행 중에 실행됩니다.

수비수 참고 사항: 가장 강력하고 지속적인 신호는 도메인(릴레이 호스트는 쉽게 교체됨)이 아니라 형성세 개 이상의 서로 다른 호스트 감시 기본 요소를 묶은 단일 패키지 공용 콘텐츠 호스팅 서비스를 통해 명령/응답 루프를 라우팅합니다. 차단 npoint[.]io 대부분의 상점에서 직접적인 알림 방식은 비현실적입니다. 입력 장치를 캡처하고 JSON-bin 서비스와 통신하는 예상치 못한 프로세스에 대해 알림을 보내는 것이 훨씬 더 안정적입니다.

관찰된 행동 및 프레임

이 표본을 특이하게 만드는 두 가지 요소가 있는데, 둘 다 동기에 대한 추론이 아니라 관찰 가능한 사실입니다.

그것은 스스로를 홍보했다. PyPI에 배포된 패키지 요약에는 원격 접속, 데스크톱 제어, 사용자 관리, 웹캠, 오디오, 키로거, 지속성 저장, 브라우저 데이터, Wi-Fi, 레지스트리, "140개 이상의 명령어" 등 기능이 명확하게 나열되어 있었습니다. 흔히 공개 레지스트리에서 볼 수 있는 위장처럼 빌드 헬퍼, CLI 래퍼 또는 AI 에이전트 유틸리티로 위장하려는 시도는 없었습니다. 이러한 개방성이 접근 제어 없이 배포된 레드팀 도구를 의미하는지 아니면 다른 의도를 가진 것인지는 패키지 내용만으로는 알 수 없습니다. 확실한 것은 누구나 일반적인 용도의 원격 접속 및 감시 툴킷을 설치할 수 있었다는 점입니다. 삐악 삐악 울다.

그것은 온화한 서비스에 대한 신뢰에 기반을 두고 있었습니다. 사용 npoint[.]io 릴레이가 핵심 기술입니다. 이는 더 광범위한 패턴의 한 예입니다. 즉, 합법적인 SaaS(페이스트 사이트, JSON 저장소, 채팅 웹)를 통해 C2를 라우팅하는 것입니다.hooks(클라우드 문서 등)을 이용하여 악성 트래픽이 일반 개발자 활동에 섞이도록 하고, 운영자가 소유한 엔드포인트를 압수할 수 없도록 했습니다. 릴레이 서버의 페이로드는 암호화되어 있어 일반적인 관찰자는 바이너리 파일의 내용을 명령어로 인식하지 못했습니다.

퍼블리셔 신호는 빈약하고 일반적입니다. 패키지에는 다음과 같이 명시되어 있습니다. 저자 "gcli 기여자"와 MIT 라이선스를 명시하고 홈페이지와 저장소 필드를 다음과 같이 지정했습니다. github[.]com/gcli-control/gcli이 모든 것은 검증이 아닙니다. 작성자 문자열은 자유 텍스트이고, MIT 라이선스 헤더는 비용이 들지 않으며, 패키지 메타데이터의 저장소 URL은 출처 증명이 아닌 주장일 뿐입니다. 완전히 새로운 이름, 일반적인 공동 작성자, 그리고 패키지를 중심으로 생성된 자체 참조적인 조직/저장소는 기존 도구에 원격 제어 기능이 추가된 것이 아니라, 코드를 배포하기 위해 특별히 만들어진 프로젝트의 전형적인 모습입니다. 우리는 이러한 점들을 관찰 결과일 뿐이며, 이러한 특징들이 목적에 맞게 구축된 배포판이라는 것을 입증하는 것은 아닙니다.

우리는 해당 공격이 악의적이라고 판단하는데, 이는 공격 방식과 전달 방식에 근거합니다. 즉, 실행 가능한 완전한 원격 접속 및 감시 악성 프로그램이 은밀한 중계기를 통해 공개 패키지 인덱스에 배포되었다는 점입니다. 우리는 특정 대상이나 동기를 지목하지 않습니다.

영향, 트렌드 및 수비수들이 할 수 있는 일

변장 여부에 따른 응급 분류의 사각지대. 자동화된 패키지 분류 키에는 많은 항목이 있습니다. 가장 의 신호 일반적인 레지스트리 악성코드 — 모호한 덩어리, 설치 시간 hooks자격 증명을 수집하는 데 유용한 짧은 문구들. 간단히 말해서, 패키지 그 자체입니다. 대놓고 배신자깔끔하고 읽기 쉬운 코드와 설치 후크가 없는 이 유형은 그러한 단서를 전혀 제공하지 않으므로 은폐를 예상하는 휴리스틱을 교묘하게 피해갈 수 있습니다. 이러한 유형을 확실하게 잡아내는 신호는 위장 기반이 아니라 구조적인 것입니다. 즉, 기능 조사(하나의 패키지에 얼마나 많은 서로 다른 호스트 감시 기본 요소가 공존하는지)와 C2 형태 분석(범용 콘텐츠 호스팅 서비스를 통해 라우팅되는 명령/응답 루프)입니다. 이러한 검사는 해당 유형이 얼마나 정직하든 아니든 상관없이 실행됩니다. 난독 화 된 포장은 그렇습니다.

SaaS를 C2로 활용하는 트렌드. 합법적인 호스팅 서비스를 악용하여 파일을 안전하게 전달하는 수단으로 사용하는 것은 새로운 수법이 아니지만, 이러한 수법이 계속 통하는 이유는 해당 서비스를 차단하는 데 드는 방어 비용이 높은 반면, 다른 서비스로 전환하는 데 드는 공격 비용은 거의 없기 때문입니다. 앞으로 이러한 행태는 더욱 심화될 것으로 예상됩니다. 특정 악성 도메인에 맞춰 구축된 네트워크 방어 체계는 즉시 효력을 잃지만, "이 프로세스는 클립보드와 웹캠을 읽은 후 메모 호스팅 API와 통신합니다"와 같은 행동 규칙은 그렇지 않습니다.

구체적인 탐지 개략도. 내구성 규칙은 이름을 지정하지 않습니다. npoint[.]io 전혀 그렇지 않습니다. 이는 개별적으로는 흔하지만 일반 개발자 또는 CI 호스트에서는 동시에 발생하기 드문 두 가지 현상을 결합한 것입니다.

alert when a single process, within one session, both:
(A) accesses a host-surveillance primitive — input device (keyboard/mouse hook), camera, microphone, screen capture, clipboard read-loop, or a browser credential store ("Login Data" / "Local State" / DPAPI); AND
(B) makes outbound requests to a public content-hosting / paste / JSON-bin / chat-webhook service then raise for review, regardless of the specific service in (B).

어느 한쪽만 놓고 보면 의심스러운 건 아닙니다. 합법적인 도구로 스크린샷을 찍는 경우도 많고, 호스팅 API에 JSON 데이터를 전송하는 경우도 많으니까요. 문제는 짧은 시간 동안 진행되는 하나의 프로세스 안에서 여러 요소가 결합되어 나타나는 현상이며, 이는 어떤 중개자 교체 과정에서도 살아남는다는 점입니다.

팀을 위한 실질적인 단계:

  • 개발자 및 CI 호스트에 공개 패키지를 설치할 때는 편의를 위한 것이 아니라 실행 경계로 간주해야 합니다. 빌드 에이전트에 RAT(원격 접근 트로이 목마)가 설치되면 사용자의 비밀 정보를 탈취한 RAT가 되는 것과 마찬가지입니다.
  • 허용 목록에 있는 내부 미러를 우선적으로 사용하십시오. 원격 제어를 의미하는 이름이고 키로거를 설명하는 패키지는 회사 인덱스에서 절대로 확인되어서는 안 됩니다.
  • 알림이 표시됩니다 결합 입력 장치 또는 화면 캡처와 콘텐츠/붙여넣기/JSON 저장 서비스로의 외부 트래픽을 결합한 형태로, 개별적인 용도가 없는 단일 기본 요소에 의존하는 것이 아니라, 여러 기본 요소를 종합적으로 고려해야 합니다.
  • 광범위한 호스트 접근 권한을 가진 패키지의 경우, 자동화된 "안전" 점수만을 최종 판단 기준으로 삼지 말고, 사람이 직접 검토하도록 하십시오.

해당 패키지 제품군은 악성으로 분류되어 레지스트리에서 삭제될 예정입니다. 릴레이 기반 C2는 운영자 소유 호스트를 싱크홀링할 여지를 남기지 않으므로, 지속적인 방어 효과는 특정 차단 목록 항목이 아니라 위의 동작 특징에 있습니다.

sca-tools-software-composition-analysis-tools
소프트웨어 위험을 우선순위화하고, 해결하고, 보호하십시오.
무료 계정을 만드세요.
신용 카드가 필요하지 않습니다.

소프트웨어 개발 및 제공을 안전하게 보호하세요

Xygeni 제품군과 함께