PointBlank: PyPI RAT მალავს C2-ს JSON-Bin სერვისში

PointBlank: სრულად აღჭურვილი Python RAT, რომელიც თავის ბრძანების არხს უფასო ნოტების ჰოსტინგის სერვისის მეშვეობით მართავდა.

სარჩევი

აუცილებლად წასაკითხი პოსტები

საინტერესო უახლესი პოსტები

TL; DR

PyPI პაკეტი სახელწოდებით gcli-კონტროლი მოწოდებული იყო Windows-ის სრული დისტანციური წვდომის ინსტრუმენტი: კლავიშების დაჭერის ჟურნალი, ვებკამერისა და მიკროფონის ჩაწერა, ბუფერში მონიტორინგი, ბრაუზერის ავტორიზაციის წვდომა, ეკრანის კონტროლი, მუდმივი წვდომა, პრივილეგიების ამაღლება და თვითრეკლამირებული „140+ ბრძანება“. ის არ მალავდა, თუ რას წარმოადგენდა: პაკეტის PyPI-ს საკუთარ შეჯამებაში ის აღწერილი იყო, როგორც „დისტანციური წვდომის ინსტრუმენტი npoint.io".

დეტალი, რომელზეც ყურადღების გამახვილება ღირს, ეს ფრაზაა „npoint.io-ს მეშვეობით“. სახლში დარეკვის ნაცვლად, გამოყენებული იმპლანტი npoint[.]io (უფასო, ლეგიტიმური სერვისი მცირე JSON დოკუმენტების ჰოსტინგისთვის) მისი ბრძანებისა და კონტროლის რელედ. ოპერატორი ბრძანებებს JSON ურნაში წერს; იმპლანტი ამოწმებს ამ ბრძანებებს, ასრულებს და შედეგებს უკან წერს. არ არსებობს თავდამსხმელის საკუთრებაში არსებული დომენი დასაბლოკად, არ არსებობს ახალი IP მისამართის მონიშვნისთვის: ტრაფიკი მიდის სერვისზე, რომელსაც დეველოპერები ყოველდღიურად იყენებენ.

დაახლოებით ცამეტი და ნახევარი საათის განმავლობაში ექვსი ვერსია გამოიცა, თითოეული წინაზე უფრო ეფექტური. ყველა მათგანს მუსიკა დაემატა. ml_predicted_safe ავტომატური კლასიფიკატორის მიერ ხელით განხილვამდე ოჯახი ხელახლა კლასიფიცირდა, როგორც მავნე.

შეტევის ანატომია

gcli-კონტროლი იმპორტის პაკეტს აყენებს gcli, 35-მოდულიანი Python-ის კოდური ბაზა. ინსტალაციის დრო არ არის მითითებული. 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-კონტროლი სამაგიეროდ, ეპყრობა უფასო JSON-bin სერვისი, როგორც dead-drop. npoint მოდული კითხულობს და წერს მცირე ზომის JSON დოკუმენტებს. npoint[.]io ჩვეულებრივი HTTPS-ის საშუალებით; crypto/დაშიფროთ მოდულები ახვევენ გაცვლილ დატვირთვებს ისე, რომ ურნის შიგთავსი არ იყოს უბრალო ტექსტური ბრძანებები. შედეგი არის შუამავლობით, დაშიფრული რელე:

  • ოპერატორი (დაშიფრულ) ინსტრუქციას JSON კონტეინერში ყუთში ათავსებს.
  • იმპლანტი, რომელიც მუშაობს მსხვერპლ ჰოსტზე, იმოწმებს ამ bin-ს, გაშიფრავს, ასრულებს მის ერთ-ერთ ბრძანების დამმუშავებელს და უკან იწერს (დაშიფრულ) შედეგს.
  • ქსელის მონიტორისთვის მსხვერპლი უბრალოდ ესაუბრება npoint[.]io — სერვისი, რომელსაც აქვს ლეგიტიმური მიზეზი დეველოპერების ტრაფიკში გამოსაჩენად.

აქ არ არის მეორე ეტაპის ჩამოტვირთვა და არც დაბნეული ჩამტვირთავი: შესაძლებლობა იგზავნება მთლიანად, წაკითხვად Python-ში და ერთადერთი „დამალვა“ რელეის არჩევანი და გადაცემული დატვირთვების დაშიფვრაა.

ღირს იმის ახსნა, თუ რატომ არის JSON-bin dead-drop ოპერაციულად მიმზიდველი, რადგან ეს ხსნის, თუ რატომ ველოდებით ამ ნიმუშის ხელახლა ნახვას:

  • ოპერატორის საკუთრებაში არსებული საბოლოო წერტილი არ არის. არ არსებობს C2 დომენის რეგისტრაციის, VPS-ის დაქირავების და არც დამცველის ან რეგისტრატორის მიერ ჩამორთმევისთვის არაფერია საჭირო. პაკეტი არ ეხება არხს; მოხსნა არხი ნიშნავს, რომ ზოგადი დანიშნულების SaaS-ს სთხოვო, მილიონობით დოკუმენტიდან ერთი დაიცვას.
  • რეპუტაციის გათეთრება. ცნობილი დეველოპერის სერვისისთვის გამავალი HTTPS არ იწვევს რეპუტაციის ისეთ ზიანს, როგორსაც ახალი დომენი ან ნედლი IP. ბევრი გამავალი ფილტრაციის სისტემა ამას ირიბად უშვებს.
  • ასინქრონულობა და უარყოფა. გამოკითხვის მოდელი — იმპლანტი დოკუმენტს გარკვეული ინტერვალით იღებს და არა ღია სოკეტს ინახავს — წარმოქმნის ტრაფიკს, რომელიც პერიოდულ API გამოკითხვას ჰგავს და არა ინტერაქტიულ სესიას. დოკუმენტის შინაარსის დაშიფვრა ნიშნავს, რომ ანალიტიკოსიც კი, რომელიც ურნას პოულობს, ხედავს დაშიფრულ ტექსტს და არა ბრძანებების სიას.
  • ტრივიალური როტაციასხვა კონტეინერზე ან სრულიად სხვა ჩანაწერის/ჩასმის სერვისზე გადასვლა ოპერატორისთვის კონფიგურაციის ერთი ხაზით შეცვლაა. კონკრეტულ რელეზე მიბმული ნებისმიერი ბლოკის სია გაგზავნისთანავე მოძველებულია.

ოპერატორის მიერ დაშვებული კომპრომისი გამტარუნარიანობასა და შეყოვნებას წარმოადგენს: პირდაპირი კავშირის შემთხვევაში, რელე უფრო ნელია და უფრო დაბალი გამტარუნარიანობისაა. მეთვალყურეობისა და კონტროლის იმპლანტისთვის, რომელიც ძირითადად მოკლე ბრძანებებს გასცემს და შედეგებს დროთა განმავლობაში აგროვებს, ეს კომპრომისი მარტივია.

Timeline

ოჯახური ურთიერთობები სწრაფად დაიძაბა. დროშით მონიშნული ვერსიების ბილეთების შექმნის დროის ნიშნულები მთელ დაკვირვებულ რკალს დაახლოებით ცამეტი საათი-ნახევრის განმავლობაში ათავსებს, ხოლო სკანერის მიერ მონიშნული მტკიცებულებების რაოდენობა კოდის პარალელურად გაიზარდა - პირველ ვერსიაში რამდენიმე დროშით მონიშნული ადგილიდან უახლეს ვერსიაში თოთხმეტიმდე.

მობილურიპირველად ნანახი (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 dead-drop; დაშიფრული დატვირთვები)
მითითებული საცავიgithub[.]com/gcli-control/gcli
ქცევითი თითის ანაბეჭდიერთად განლაგებული სათვალთვალო მოდულები: keylog, webcam, audio, clipboard, browser, პლუს persistence, elevator და client/host/protocol ბრძანების ფენა ერთ პაკეტში
ინსტალაცია hooksარცერთი: შესაძლებლობა მუშაობს ინსტრუმენტის გაშვების დროს და არა ინსტალაციის დროს.

დამცველის შენიშვნა: ყველაზე ძლიერი და გამძლე სიგნალი არ არის დომენი (რელე ჰოსტი ტრივიალურად ბრუნავს), არამედ განსაზღვრავენერთი პაკეტი, რომელიც აერთიანებს სამ ან მეტ განსხვავებულ მასპინძელი მეთვალყურეობის პრიმიტივს. მდე ბრძანების/პასუხის ციკლს საჯარო კონტენტის ჰოსტინგის სერვისის მეშვეობით აგზავნის. დაბლოკვა npoint[.]io პირდაპირი გამოყენება არაპრაქტიკულია მაღაზიების უმეტესობისთვის; მოულოდნელი პროცესის შესახებ გაფრთხილება, რომელიც როგორც შეყვანის მოწყობილობებს იჭერს, ასევე JSON-bin სერვისთან კომუნიკაციას ახდენს, გაცილებით საიმედოა.

დაკვირვებული ქცევა და ჩარჩოები

ორი რამ ხდის ამ ნიმუშს უჩვეულოს და ორივე დაკვირვებადი ფაქტია და არა მოტივის შესახებ დასკვნები.

თავის თავს უწევდა რეკლამას. PyPI-ზე გავრცელებულ პაკეტის შეჯამებაში მარტივი ენით იყო ჩამოთვლილი შესაძლებლობები - დისტანციური წვდომა, სამუშაო მაგიდის კონტროლი, მომხმარებლის მართვა, ვებკამერა, აუდიო, კლავიშების ჟურნალი, მუდმივი მუშაობა, ბრაუზერის მონაცემები, WiFi, რეესტრი, „140+ ბრძანება“. არ ყოფილა მცდელობა, კოდი გადაეცათ როგორც build helper, CLI wrapper ან AI-agent უტილიტა, რაც უფრო გავრცელებული შენიღბვაა, რომელსაც საჯარო რეესტრებში ვხედავთ. ასახავს თუ არა ეს ღიაობა წვდომის კონტროლის გარეშე გამოქვეყნებულ red-team ინსტრუმენტს თუ სხვა რამეს, ეს კითხვა მხოლოდ პაკეტის შინაარსით ვერ წყდება; რაც დანამდვილებით შეიძლება ითქვას არის ის, რომ მოქმედი, ზოგადი დანიშნულების დისტანციური წვდომისა და თვალთვალის ინსტრუმენტების ნაკრების ინსტალაცია შეეძლო ნებისმიერს, ვისაც ჰქონდა... pip.

ეს კეთილსინდისიერი სამსახურისადმი ნდობას ეყრდნობოდა. გამოყენება npoint[.]io რადგან რელე განმსაზღვრელი ტექნიკაა. ეს უფრო ფართო ნიმუშის მაგალითია — C2-ის მარშრუტიზაცია ლეგიტიმური SaaS-ის მეშვეობით (ჩასმის საიტები, JSON ბინები, ჩატის ვებhooks, ღრუბლოვანი დოკუმენტები) ისე, რომ მავნე ტრაფიკი შეერწყას დეველოპერის ნორმალურ საქმიანობას და არ არსებობდეს ოპერატორის საკუთრებაში არსებული საბოლოო წერტილი, რომლის ხელში ჩაგდებაც შესაძლებელი იქნებოდა. რელეზე არსებული დატვირთვები დაშიფრული იყო, ამიტომ ურნის შიგთავსი შემთხვევითი დამკვირვებლისთვის ბრძანებებად არ წაიკითხავდა.

გამომცემლის სიგნალები სუსტი და ზოგადია. პაკეტში გამოცხადდა, რომ ავტორი „gcli-ის კონტრიბუტორების“ და MIT-ის ლიცენზიის მქონე და მისი მთავარი გვერდისა და საცავის ველები მიუთითა github[.]com/gcli-control/gcliეს ყველაფერი ვერიფიკაციას არ წარმოადგენს: ავტორის სტრიქონი თავისუფალი ტექსტია, MIT ლიცენზიის სათაური არაფერი ღირს, ხოლო პაკეტის მეტამონაცემებში საცავის URL არის მტკიცება და არა წარმომავლობის დასტური. ნიმუში - სრულიად ახალი სახელი, ზოგადი კოლექტიური ავტორი და პაკეტის გარშემო შექმნილი თვითრეფერენციული ორგანიზაცია/საცავი - ასახავს, ​​თუ როგორ გამოიყურება პროექტი, როდესაც ის სპეციალურად კოდის გადასატანად არის შექმნილი და არა როგორც უკვე დამკვიდრებული ინსტრუმენტი, რომელსაც დისტანციური მართვის ფუნქცია აქვს შექმნილი. ჩვენ ამას დაკვირვებებად აღვნიშნავთ; ისინი თავსებადია, მაგრამ თავისთავად არ ადგენენ, სპეციალურად შექმნილ დისტრიბუციას.

ჩვენ განკარგულებას ავთვისებიანად აღვწერთ შესაძლებლობებისა და მიწოდების საფუძველზე: სრული, გასაშვებად ხელმისაწვდომი დისტანციური წვდომისა და თვალთვალის იმპლანტი, რომელიც გავრცელებულია საჯარო პაკეტის ინდექსზე ფარული რელეით. ჩვენ არ ვასახელებთ სამიზნეს ან მოტივს.

გავლენა, ტენდენციები და რა შეუძლიათ დამცველებს გააკეთონ

შენიღბვაზე ორიენტირებული ტრიაჟისთვის ბრმა წერტილი. პაკეტების დახარისხების გასაღებები ძალიან ავტომატიზირებულია შენიღბვას სიგნალები ტიპიური რეესტრის მავნე პროგრამა — დაბინდული ლაქები, ინსტალაციის დრო hooks, სერთიფიკატების მოპოვების ერთსტრიქონიანი ფრაზები. პაკეტი, რომელიც უბრალოდ ღიად RAT, სუფთა, წასაკითხი კოდით და ინსტალაციის კაუჭის გარეშე, არ წარმოადგენს ამ მინიშნებებიდან არცერთს და შეიძლება გვერდი აუაროს ევრისტიკას, რომელიც დამალვას ელოდება. სიგნალები, რომლებიც საიმედოდ იჭერენ ამ კლასს, სტრუქტურულია და არა შენიღბვაზე დაფუძნებული: შესაძლებლობების აღწერა (რამდენი განსხვავებული ჰოსტის მეთვალყურეობის პრიმიტივი თანაარსებობს ერთ პაკეტში) და C2-ფორმის ანალიზი (ბრძანების/პასუხის ციკლი, რომელიც გადის ზოგადი დანიშნულების კონტენტის ჰოსტინგის სერვისის მეშვეობით). ეს შემოწმებები აქტიურდება მიუხედავად იმისა, თუ რამდენად გულწრფელი ან... obfuscated შეფუთვა არის.

SaaS-as-C2 ტენდენცია. ლეგიტიმური ჰოსტინგის სერვისის, როგორც „ჩიხ-დროპის“, ბოროტად გამოყენება სიახლე არ არის, თუმცა ის კვლავაც მუშაობს, რადგან სერვისის დაბლოკვის თავდაცვითი ღირებულება მაღალია, ხოლო სერვისების გადართვის თავდაცვითი ღირებულება ნულთან ახლოსაა. ველით მეტს. კონკრეტულ არასწორ დომენებზე ორიენტირებული ქსელური დაცვა მყისიერად ძველდება; ქცევითი წესები („ეს პროცესი კითხულობს ბუფერს და ვებკამერას და შემდეგ ურთიერთობს ჩანაწერების ჰოსტინგის API-სთან“) - არა.

ბეტონის აღმოჩენის ესკიზი. გამძლეობის წესი არ ასახელებს npoint[.]io საერთოდ. ის აერთიანებს ორ დაკვირვებას, რომლებიც ინდივიდუალურად ხშირია, მაგრამ ერთობლივად იშვიათია ჩვეულებრივ დეველოპერზე ან CI ჰოსტზე:

გაფრთხილება, როდესაც ერთი პროცესი, ერთი სესიის ფარგლებში, ორივე:
(ა) წვდომა აქვს მასპინძლის მეთვალყურეობის პრიმიტივზე — შეყვანის მოწყობილობაზე (კლავიატურა/მაუსის კაუჭი), კამერაზე, მიკროფონზე, ეკრანის ანაბეჭდზე, ბუფერში წაკითხვის ციკლზე ან ბრაუზერის ავტორიზაციის საცავზე ("Login მონაცემები" / "ადგილობრივი სახელმწიფო" / DPAPI); და
(B) აკეთებს გამავალ მოთხოვნებს საჯარო კონტენტის ჰოსტინგის / ჩასმის / JSON-bin / chat-webhook სერვისზე, შემდეგ კი აგზავნის განსახილველად, (B)-ში მითითებული კონკრეტული სერვისის მიუხედავად.

არც ერთი ნახევარი არ არის საეჭვო დამოუკიდებლად: უამრავი ლეგიტიმური ინსტრუმენტის ეკრანის ანაბეჭდი და უამრავი JSON-ის ჰოსტინგის API-ზე განთავსება. ერთ ხანმოკლე პროცესის შიგნით კავშირი სიგნალია და ის ნებისმიერ რელეს როტაციას უძლებს.

პრაქტიკული ნაბიჯები გუნდებისთვის:

  • დეველოპერსა და CI ჰოსტებზე საჯარო პაკეტების ინსტალაცია შესრულების საზღვრად და არა მოხერხებულობად მიიჩნიეთ — build agent-ზე განთავსებული RAT თქვენი საიდუმლოებებით სავსე RAT-ია.
  • უპირატესობა მიანიჭეთ დაშვებულთა სიის შიდა სარკეებს; პაკეტი, რომლის სახელიც სიტყვასიტყვით დისტანციური მართვისთვისაა და რომელიც კლავიშების ჟურნალს აღწერს, არასდროს უნდა გადაწყდეს კორპორატიულ ინდექსზე.
  • გაფრთხილება კომბინაცია — შეყვანის მოწყობილობა ან ეკრანის ანაბეჭდი პლუს გამავალი ტრაფიკი content/paste/JSON-bin სერვისზე — და არა რომელიმე ერთ პრიმიტივზე, რომელსაც იზოლირებულად კეთილთვისებიანი გამოყენება აქვს.
  • ფართო ჰოსტზე წვდომის შესაძლებლობის მქონე პაკეტებისთვის საბოლოო განაჩენად ნუ დაეყრდნობით ავტომატურ „უსაფრთხო“ ქულას; გადაამისამართეთ ისინი ადამიანის მიერ განხილვისთვის.

პაკეტების ოჯახი კლასიფიცირებულია, როგორც მავნე და გადამისამართებულია რეესტრის წასაშლელად. რადგან რელეზე დაფუძნებული C2 არ ტოვებს ოპერატორის საკუთრებაში არსებულ ჰოსტს ჩაკეტილ სივრცეში, მდგრადი თავდაცვითი ღირებულება ზემოთ მოცემულ ქცევით ანაბეჭდშია და არა ბლოკების სიის რომელიმე ცალკეულ ჩანაწერში.

sca-tools-software-composition-analysis-tools
თქვენი პროგრამული უზრუნველყოფის რისკების პრიორიტეტიზაცია, გამოსწორება და დაცვა
მიიღეთ თქვენი უფასო ანგარიში.
საკრედიტო ბარათი არ არის საჭირო.

უზრუნველყავით თქვენი პროგრამული უზრუნველყოფის შემუშავება და მიწოდება

Xygeni Product Suite-თან ერთად