Атаки на цепочки поставок программного обеспечения остаются одним из наиболее изощрённых и опасных векторов угроз, нацеленных на разработчиков. Если в прошлом году сообщество потряс первый в истории червь для репозитория открытого кода Shai-hulud, то текущий год демонстрирует эволюцию тактик: злоумышленники всё чаще маскируют вредоносные действия под легитимные процессы, чтобы обмануть даже опытных специалистов. Исследовательская группа ReversingLabs обнаружила новую кампанию в репозитории npm, получившую название Ghost, которая использует принципиально новую технику сокрытия: пакеты генерируют в консоли фальшивые логи установки, имитирующие работу менеджера пакетов npm, чтобы скрыть фишинг пароля sudo и загрузку вредоносной полезной нагрузки.
Описание
Кампания была активна с начала февраля и первоначально включала семь пакетов, опубликованных под учётной записью mikilanjillo. Типичным примером является пакет "react-state-optimizer-core", который позиционирует себя как лёгкий инструмент для управления асинхронным состоянием в React-приложениях. Однако его истинная цель далека от заявленной функциональности. Сложность атаки заключается не в финальной полезной нагрузке, представляющей собой стандартный загрузчик, а в механизме обмана жертвы. После установки пакет запускает скрипт, который выводит в терминал правдоподобные, но полностью сфабрикованные сообщения о ходе установки зависимостей, включая названия несуществующих пакетов, случайные задержки и даже индикатор выполнения.
Именно на фоне этого правдоподобного шума и происходит ключевой этап атаки - фишинг. В определённый момент скрипт выводит сообщение об ошибке или необходимости "оптимизации" и запрашивает у пользователя пароль sudo. Поскольку весь процесс выглядит как стандартная установка через npm, у разработчика не возникает подозрений, и он вводит свои привилегированные учётные данные. Полученный пароль впоследствии используется для выполнения финальной стадии атаки, при этом в терминал продолжают выводиться фальшивые логи, создавая иллюзию штатной работы. Исследователи ReversingLabs обнаружили подозрительную активность в пакете "react-state-optimizer-core" с помощью автоматизированной системы обнаружения Spectra Assure, после чего подтвердили его вредоносную природу.
После кражи пароля загрузчик получает доступ к финальной стадии. URL-адрес для загрузки финальной полезной нагрузки и часть ключа для её расшифровки в большинстве обнаруженных пакетов извлекаются из публичного канала в Telegram. Интересное исключение - пакет "coinbase-desktop-sdk@1.5.19", который вместо Telegram использует пост на платформе teletype.in, связанный с технологией Web3, чтобы скрыть необходимые данные. Финальный вредонос представляет собой удалённого трояна (RAT, Remote Access Trojan), предназначенного для кражи данных криптокошельков и другой конфиденциальной информации, а также для выполнения команд с управляющего сервера злоумышленников (C2, Command and Control).
Вопрос о происхождении кампании остаётся открытым. Существует вероятность, что обнаруженные в феврале пакеты являются первой волной более широкой атаки. В пользу этого говорит публикация компании JFrog от 8 марта о новом вредоносном пакете "@openclaw-ai/openclawai", который использует схожие техники фишинга и подделки вывода в консоль, хотя и задействует другую инфраструктуру для доставки. Альтернативная версия предполагает, что исследователи ReversingLabs обнаружили раннюю "тестовую" версию этой кампании. На это указывает наличие отладочных сообщений в некоторых пакетах, например, в "coinbase-desktop-sdk@1.5.14", которые могли бы помочь разработчикам вредоноса в отладке, но при этом демаскируют атаку для жертвы.
Вне зависимости от происхождения, кампания Ghost демонстрирует тревожный тренд: злоумышленники уделяют всё больше внимания социальной инженерии и маскировке внутри самой среды разработки. Имитация привычных процессов установки пакетов значительно повышает шансы на успех атаки, так как снижает бдительность даже технически подкованных пользователей. Этот инцидент в очередной раз подчёркивает критическую важность принципа наименьших привилегий в рабочих средах, необходимости проверки репутации устанавливаемых зависимостей, даже из официальных репозиториев, и использования решений для безопасной разработки (DevSecOps), способных анализировать поведение пакетов после установки. Мониторинг открытых репозиториев на предмет подобных изощрённых кампаний становится обязательным элементом защиты цепочки поставок программного обеспечения.
Индикаторы компрометации
SHA1
- 1ac0d6fac272903eb83a885a40c6ce5b2656b6f3
- 1b4916fd65934f2f9efa7125335a85c104e1e17c
- 1d92c73a859096cf107d11c4acd089f7b4e61a5b
- 22ada4f5a95fd9b5edb76426b7dddb168145fda7
- 2a8c625660ad6bb7d7c953a147c84c0fcc75794b
- 32d6b0b70ba825456471fab82119980de01e57d0
- 34ba816adda6ab74d0f4bbb04fdb8ed49b1137bb
- 43a361eec666edab60f0e95740cf9e51c06106bc
- 4439720f0722d3c92615114f1099471efd280feb
- 46e034baab242c110355eba0937d9e505232e8dc
- 56b78d2027cbf7b40dcbd10f17462cd029d13dda
- 5928e3121f12f3c5d690bc7968b28b2f67835ef5
- 59ca6306e77eb7f93528016dca14964968556310
- 60c88674128680b7e474607ba0fb8020c141ac71
- 6169a0bc69c94f3a5c13d899ac612d2fabe98611
- 63783f6e59d20e2c664123b349f22dd53d1293d4
- 6c17eccf82c7d85a883dfa7feac0be835f827fe3
- 6d115186018b396ea62afce46d6616957bf3d7c0
- 729fbce89101f8f79a57189e89a7e63ee7d61388
- 7562690617de6eafe29c3f1d83c029ee73b9f50b
- 84aab614cf6ad92b5498398e914a8f22056722d8
- 870636bcf3d2c0b9c4c12809a19af153ef154260
- 874919fbd4e23da4f959447acf394a619cc23f72
- 963b79f59fb2c070a06b9a2af9db2b5512c1ed74
- a1cff6b52b7bfc61d08360af364ff7a4b4b2c504
- a5d4a4dbf036e4d7a5453db191f6e4320f604446
- b70a40b199d9a3cbbebfb0c1148b110acf3ec4eb
- b75fc27053819cd2e7f5cfe193a91844c199c285
- bc3c787cf2b768f0a021fc3ca4fde65658a3f9e5
- bdffc2f98ff422db9f9ddc190401cfcb686e3c32
- be10e30cf25d57385c31281219daf87dc7921da6
- befa10ca40c2923390db04eb34391c32aa29e611
- c02624f8cefe790b6dee529c7a0e97f4241d79ed
- c486f9be10e6db40b8c30c8053dd44a6b2ac867e
- cb9208d756dc4d4674801611d8d5f5ba79e76366
- cbe7c87293de7ab5853e2aef3f638d54c45f5c9f
- d1a1f76cce48be58e5d72f31ba54e4e2372848ea
- d22eb34facf13b5c1e820d9e6358eb4cd3797eaa
- d5ade32ac52140e6c25f50780dc4ff4d466faddb
- dc8ee405dd4402addae67ba6546f4f3781d7bdec
- e6cfaef4b50d2a4ddd8453bf5a91e81a092d6e09
- e91baf3d270a21948833c50da1f0345d20ee1ec7
- f579b2d0b65a3a3cb52be535a591bc8d0f1077b7
- f9400843b42f0187e826e4c7a9786b0f09ab8992
- fb147ad540ae975228f8fe7d7fb557ff0670f69f
- fe6ee1104c4b02be39819822ed959039ea313e67
Package
- react-performance-suite 2.0.0
- react-performance-suite 2.0.1
- react-state-optimizer-core 1.0.0
- react-state-optimizer-core 1.0.2
- react-state-optimizer-core 1.0.3
- react-state-optimizer-core 1.0.4
- react-state-optimizer-core 1.0.5
- react-state-optimizer-core 1.0.6
- react-state-optimizer-core 1.0.7
- react-state-optimizer-core 1.0.8
- react-state-optimizer-core 1.0.9
- react-state-optimizer-core 3.0.3
- react-state-optimizer-core 3.0.4
- react-state-optimizer-core 3.0.5
- react-state-optimizer-core 3.0.6
- react-state-optimizer-core 3.0.7
- react-state-optimizer-core 3.0.8
- react-state-optimizer-core 3.0.9
- react-fast-utilsa 2.0.1
- react-fast-utilsa 2.0.2
- react-fast-utilsa 2.0.3
- react-fast-utilsa 2.0.4
- ai-fast-auto-trader 2.2.1
- ai-fast-auto-trader 2.2.2
- ai-fast-auto-trader 2.2.3
- ai-fast-auto-trader 2.2.4
- ai-fast-auto-trader 2.2.5
- ai-fast-auto-trader 2.2.6
- pkgnewfefame1 3.2.1
- carbon-mac-copy-cloner 1.1.0
- carbon-mac-copy-cloner 1.1.1
- carbon-mac-copy-cloner 1.1.10
- carbon-mac-copy-cloner 1.1.2
- carbon-mac-copy-cloner 1.1.3
- carbon-mac-copy-cloner 1.1.4
- carbon-mac-copy-cloner 1.1.5
- carbon-mac-copy-cloner 1.1.6
- carbon-mac-copy-cloner 1.1.7
- carbon-mac-copy-cloner 1.1.8
- carbon-mac-copy-cloner 1.1.9
- carbon-mac-copy-cloner 1.2.1
- coinbase-desktop-sdk 1.5.14
- coinbase-desktop-sdk 1.5.15
- coinbase-desktop-sdk 1.5.16
- coinbase-desktop-sdk 1.5.17
- coinbase-desktop-sdk 1.5.19