ChainDrop превърна рутинното инсталиране на софтуер в път за кражба на идентификационни данни. Саморазпространяващият се червей инфектира над 400 npm пакета, излагайки на риск лаптопите на разработчиците, средите за компилация и облачните среди.
Тъй като компрометираните пакети продължават да работят според очакванията, екипите може да не осъзнаят, че дадено обновяване е отворило път към тяхната среда.
Кампанията се разпространява чрез доверени профили за публикуване. Инфектираният пакет се изпълнява по време на инсталацията, търси ценни токени за достъп и използва откраднати идентификационни данни за npm, за да промени и публикува повторно други пакети.
Този автоматизиран цикъл позволява на един компрометиран разработчик или автоматизиран процес за компилация да засегне множество потребители по веригата.
Unit 42 посочи в доклад, споделен с Cyber Security News (CSN), че операцията е засегнала пакети, които се изтеглят стотици милиони пъти всяка седмица.
Изследователите откриха 453 публични хранилища в пет профила, съответстващи на модела за кражба на данни на червея, въпреки че тези профили остават възможни, а не потвърдени жертви.
Инцидентът подчертава опасността от атаки срещу веригата за доставки на софтуер. Вместо да използват фалшиви уебсайтове или имейл примамки, атакуващите злоупотребяват с доверието, което разработчиците гласуват на регистрите за пакети, автоматизацията на версиите и познатите зависимости с отворен код.
Заплахата може да премине от софтуерни проекти към облачни профили и производствени тръбопроводи.
Червеят ChainDrop инфектира над 400 npm пакета
ChainDrop се скрива в иначе легитимни версии на пакети. Изследователите установиха, че инфектираният пакет добавя инструкция по време на инсталацията, дропър и скрит злонамерен код, докато оригиналният код остава непроменен.
Този нископрофилен подход помага на променената версия да изглежда нормална за разработчиците и процесите на преглед на кода.
След инсталирането зловредният софтуер може да работи тихо на работна станция или в рамките на процес за непрекъсната интеграция (CI). Той събира npm и GitHub токени, облачни идентификационни данни, SSH ключове, конфигурационни файлове за средата и данни за инструменти за разработка.
Той също така е насочен към временни тайни, съхранявани в паметта на процесите на GitHub Actions, достигайки до информация, която може никога да не бъде записана като обикновен файл.
Червеят след това използва токени за публикуване, за да идентифицира пакети, които компрометираният профил може да обновява, добавя зловредни компоненти, увеличава версията на корекцията за сигурност и ги публикува отново.
Това наподобява подобни случаи на npm червеи, при които довереният канал за обновяване се превръща в механизъм за доставка, вместо очевидно зловредно изтегляне.
Той също така създава устойчивост в настройките на проектите за редактори на код и инструменти за разработка с изкуствен интелект (AI). Следователно отварянето на проект може да задейства зловредния софтуер след първоначалната инсталация.
Този риск отразява инциденти с бекдори в AI инструменти, при които локалната конфигурация се превръща в неочаквана точка за изпълнение.
Кражба на идентификационни данни и стъпки за ограничаване
ChainDrop прави повече от това просто да събира тайни. Той може да създава публични хранилища под профилите на жертвите като допълнителен път за извличане на откраднати данни.
Той също така извлича адреса за управление чрез смарт договор в Ethereum, което позволява на оператора да променя крайната цел, без да обновява инфектираните пакети. Изследователите наблюдаваха такава промяна на 4 август.
Този дизайн усложнява стандартната реакция от тип „блокиране и продължаване напред“. Дадена организация може да спре един мрежов маршрут, но да пропусне канала, базиран на хранилища, компрометираните lock файлове, кешираните архиви или инфектираните среди за компилация.
Екипите трябва да проверяват за неочаквани промени в публикуването на npm пакети и хранилища, особено след обновяване на зависимости или необичайни автоматизирани версии.
Unit 42 препоръчва намирането и премахването на засегнатите версии на пакети, разследването на машините на разработчиците и CI средите, както и премахването на средите за устойчивост преди подмяната на идентификационните данни.
Екипите по сигурността трябва да анулират и заменят npm, GitHub, облачни, SSH и автоматизационни тайни, изложени на потвърдено инфектирани среди.
Последните събития около компрометирането на пакета Keyv показват защо инсталирането по време на периода на излагане изисква същата спешност, както и инцидентът с компрометиране на идентификационни данни.
Администраторите трябва да генерират отново софтуерните lock файлове от доверени версии и да изчистят старите кешове, огледални сървъри и архиви на пакети. Обновяването само на тага „latest“ може да не защити системи, които вече са внедрили инфектирана версия.
Екипите могат да намалят риска чрез използване на идентификационни данни с кратък жизнен цикъл и ограничени права, еднократни CI среди и строги изходящи мрежови правила за процесите по компилация.
И накрая, защитниците трябва да проверяват промените в пакетите за нови куки за инсталиране (install hooks), променени секции със скриптове и необичайно големи компресирани JavaScript файлове.
Те трябва да търсят в хранилищата и средите за изграждане, а не само в посочените пакети, тъй като червеят се разпространява през всеки профил, в който намери достъп за публикуване.
По-широкото компрометиране на пакети за облачни услуги илюстрира как откраднатите идентификационни данни за публикуване могат да превърнат ограничен пробив в мащабно събитие, засягащо веригата за доставки.