Blue (h/c)at Café
3.02K subscribers
400 photos
9 videos
4 files
145 links
Здесь живут истории о безопасности — искренние, местами хаотичные, с оттенком усталости и самоиронии, но всегда честные и технически точные. Юмор слегка непостижимый, а котики появляются по мере критической необходимости. Без них никак.
Download Telegram
Forwarded from HaHacking
✈️ #offense #mobile #события

Ваш бот принимает оплату звёздами? Этот пост – очередное напоминание вам и всем, почему нужно читать документацию и почему нужно вводить дополнительные проверки; Особенно когда дело касается денег! 💸

ℹ️ Ремарка о том, как работают платежи в Telegram ⬇️

🔗 core.telegram.org/bots/payments
🔗 core.telegram.org/bots/payments-stars


0️⃣ Пользователь запускает процесс оплаты
1️⃣ Telegram на клиентской стороне проверяет баланс пользователя:
▪️не хватает – говорит пополнить
▪️достаточно* – шлёт боту статус pre_checkout_query
2️⃣ Бот обязан ответить на pre_checkout_query в течение 10 секунд, если он готов предоставить товар / услугу, иначе – отмена
3️⃣ Производится оплата
4️⃣ Telegram шлёт боту чек со статусом successful_payment


*Что такое достаточно? Это либо "хватает звёзд", либо "платит картой" (но на этом этапе неизвестно, есть ли деньги на карте)


Есть такой неофициальный Telegram клиент – exteraGram – и он предоставляет пользователям возможность дополнять свою функциональность кастомными плагинами, написанными на Python;

Некоторые такие плагины позволяли рисовать себе любое количество звёзд, генерировать поддельную "успешную" оплату и, если включить специальный режим, автоматически рисовать звёзды обратно после покупок.


💻 Небольшая выдержка из исходного кода одного из таких плагинов:
...
from org.telegram.tgnet.tl import TL_stars
...
StarsController = find_class("org.telegram.ui.Stars.StarsController").getClass()
...
class Plugin(BasePlugin):
DEFAULT_BALANCE = 999999
SETTINGS_INFINITE = "infinite_mode"
...
def _handle_payment(self, response, error):
...
# Create fake success response
TL_payments_paymentResult = find_class("org.telegram.tgnet.TLRPC$TL_payments_paymentResult")
TL_updates = find_class("org.telegram.tgnet.TLRPC$TL_updates")
...
return HookResult(strategy=HookStrategy.MODIFY_FINAL, response=fake_result)
...
...
class _GetBalanceHook(MethodReplacement):
...
def replace_hooked_method(self, param):
...
# Return fake balance
return self._create_stars_amount(self.plugin.balance)

def _create_stars_amount(amount):
# Create StarsAmount object
try:
return TL_stars.StarsAmount.ofStars(int(amount))
...
...


Естественно, нарисованные звёзды не могут быть использованы для успешной оплаты товаров и услуг. Они нужны, чтобы хвастаться перед друзьями, если им не всё равно😊


➡️Но, как это часто бывает, оказалось, что некоторые боты (даже с десятками тысяч пользователей) не ждут статус successful_payment, а отдают товар / услугу уже на этапе pre_checkout_query, несмотря на официальную документацию. Ну а просто действительно, чего мы ждём, если оплата только в звёздах, да и звёзды уже лежат на столе?

Те, кто подсуетились – зачистили магазины и накупили подписок, набрали себе аккаунтов, авторегов и всего подряд на миллионы (!) звёзд, а учитывая, что многие услуги подразумевают также денежные затраты со стороны продавца (например, те же API вызовы к LLM) – на много чужих денег; Благо разработчики ботов тоже подсуетились и многих перебанили.


➡️В конечном итоге эти плагины стали публиковать, чтобы в стресс-формате обратить внимание разработчиков на дыры в их творениях, если кто не докрутил проверки ⚡️


   @HaHacking  🐇
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥83
💎 LLM против уязвимостей, я против шизы

Лирическое отступление:

С праздником всех причастных!



ПРОПАГАНДА LLM 🍌

В классическом AppSec всё просто. у тебя есть код, правила и детектор, который считает совпадения.

Но как только появляется LLM, эта парадигма рушится.

Модели больше не ищут паттерн, они строят причинно-следственные связи - от источника данных до точки использования. Они понимают, где контекст реально опасен, и могут подтвердить это исполняемым доказательством.

SAST размечает текст, LLM проверяет гипотезу. Разные задачи, разные единицы измерения, кто бы мог подумать (ну вы поняли коламбур - "LLM - подумать"... не смешно? Вот и мне чет не смешно 😵‍💫)

Понятно, что можно просто вогнать репозиторий в агент и попросить его найти баги, он найдет... но не все 👀


🥳 Что реально делает LLM - пишет рецепт мяса с маслом

1️⃣ Контекст уровня репозитория, не файла.

LLM не ограничивается функцией - он восстанавливает цепочку input -> обёртки -> санитайзеры -> sink -> 🗿

То, что статанализ режет границами файла, модель собирает через вызовы, импорт, конфиги и тесты. Именно поэтому простые бенчмарки больше ничего не показывают - реальная сила LLM раскрывается в межпроцедурном анализе, где нужны связи между коммитами и файлами.

2️⃣ Нейро-символический подход.

На практике работает гибридно:
🔵 LLM формирует предположения о потоках данных
🔵 статанализ подтверждает путь
🔵 автотест или PoC доказывает эксплуатируемость

Такой конвейер (по типу IRIS) позволяет вылавливать то, что статике недоступно - уязвимости, скрытые на стыках модулей.

3️⃣ Агентный анализ.

Модель с ReAct-петлёй делает то, что SAST не умеет: строит гипотезу и проверяет её тестом (взял отсюда - ТЫК).

Если тест падает до фикса и проходит после - это не FP, это факт. Без такой верификации всё остальное - просто красивая эвристика.


Почему метрики SAST больше не работают

🔵 У SAST - “сработало правило”. У LLM - "построена и подтверждена гипотеза". Это не предупреждение, а артефакт с доказательством - тест, PoC или патч - ТЫК

🔵 SAST живёт на уровне функции, LLM работает на уровне репозитория и цепочек данных. Метрики “на файле” теряют смысл, если дефект живёт на границе микросервиса

🔵 Золотые наборы устаревают. LLM сталкивается с живыми багами и часто находит те, что отсутствуют в датасете

🔵 В безопасности важнее минимизировать FN, чем "косметически улучшать precision", как дизайнерский ремонт в халупе с тараканами. FP можно фильтровать, а вот пропущенные RCE - нет

🔵 Рост вайб-кодеров пораждает говно код, который в парадигме хуже, чем у мидла


🔍 Exploit-Backed Evaluation (EBE)

Вместо "сработало правило"
➡️
"доказано исполнением"


EBE оценивает не совпадение, а факт, что дефект можно подтвердить и безопасно устранить.

Ключевые метрики:
- EVP (Exploit-Validated Precision) - доля находок с воспроизводимым тестом или PoC
- AVR (Attack-surface Validated Recall) - доля найденных и подтверждённых уязвимостей из тестируемого набора
- PVR (Patch Verification Rate) - тесты падают до фикса, проходят после
- EBC (Evidence Bundle Completeness) - полнота доказательной цепочки
- TCI (Triage Cost Index) - сколько шагов нужно, чтобы воспроизвести баг


Ограничения

🟣 EBE требует инфраструктуры
🟣 Ценник 💲
🟣 Не всё можно автоматизировать (особенно сложные инпуты и API)
🟣 Но PoC-подтверждение сокращает стоимость триажа на порядок - ложных алертов почти не остаётся


📕 Итог

LLM не заменяет SAST - он поднимает уровень анализа

Попробовать - ТЫК

Exploit-Backed Evaluation превращает уязвимость из абстрактного предупреждения в проверенный факт. И если у вас всё ещё измеряют качество “количеством алертов”, - значит, вы всё ещё живёте в мире статических правил, а не исполняемых доказательств.
Please open Telegram to view this post
VIEW IN TELEGRAM
3🔥3🤔1
Для важных задач
😁20🤔2
🔥9😁7🤔5
😁21
18😁5
Forwarded from ZeroNights
Мерч ZeroNights — уже на сайте!

Посмотреть можно в нашей карусели или на странице сайта. А купить — в день конференции в Маркете 💸

До конференции 🟩 всего 2 дня🟩
Приобрести билеты онлайн ➡️ тут
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7
Разговоры о важном

Всем привет, я опять ненадолго пропал с постами и ресерчами. На это было достаточно много причин: и понимание, что делаю что-то бесполезное, и объём работы, и синдром самозванца (да, такое тоже бывает), и LLM уже всех конкретно заебал, хотя он действительно может упростить жизнь. Ну ладно, можно перестать ныть, ведь у меня сегодня мини-праздник - День Рождения🥳

Тут бы стоило поделиться ресерчами или чем-то интересным, но мне прям грустно вести канал, который нужен, кажется, только второму админу (где мемы, Лебовски?!)

Я хочу показать вам мою частичку души и отдушину от работы. То, что помогает мне сосредоточиться, отвлечься или просто хорошо провести время. Музыка. Да, именно музыка следует за мной всю мою сознательную жизнь и всегда сопровождает меня в любых ситуациях (возможно, не во всех, но вы меня поняли) И вот, давно было интернет-радио 44.wave, которое дарило мне эмоции, но по стечению обстоятельств было закрыто...

Поэтому я немного отойду от формата и представлю свой мааааленький пет-проект - интернет-радио. Да, радио, где нельзя переключать песни, которые не нравятся, где нет рекомендательных технологий и прочего ИИ-шлака (кроме UI, каюсь, навайбкодил херню, но это было моей мечтой, и вы не в праве судить меня!). Я придерживаюсь концепции, что практически каждая песня достойна внимания, какой херовой она бы ни была для большинства. Если бы не подобный подход, мы, может, никогда не услышали бы Tardigrade Inferno, Lead Horizon, Lida и подобные группы.


Ссылка на частичку моей души — ТЫК


Прочитать о проекте и стать частью — ТЫК


Да, в нём будут баги, проблемы, перезапуски, но я старался, наверно, как никогда за свои годики.


Проблемы, о которых я знаю:

🔵 Переключение качества вызывает проблемы (из-за особенностей Icecast и фронта)

🔵 FLAC не воспроизводится на мобильных с iOS (проблема с айфонами; узнаю, как решить проблему - решу)

🔵 FLAC урезается HTML5, так что пока только часть песен в данном формате

🔵 Долгая загрузка потока (китайские боты и отсутствие распределенных CDN вызывают проблемки)

🔵Некоторые песни не попадают в тематику плейлистов и время относительно (бывают задержки 2-6 минут перед переходом в некст тематику)


Мне правда приятно, что есть 300–400 человек, которые читают мои посты. Пожалуйста, пришлите в комментариях вашу любимую или самую запоминающуюся песню, или ту, которая вызывает больше всего эмоций - соберу для вас отдельный плейлист

В заключение хочется сказать вам спасибо, что читаете и поддерживаете ❤️
Please open Telegram to view this post
VIEW IN TELEGRAM
3628🔥7🤔1
😁10🤔1
🧠 Агенты - это микросервисы на максималках, только без TLS и совести

Чем больше я работаю с агентными системами, тем отчётливее понимаю, что пытаться применять к ним классические AppSec-подходы - брехня. Агент - это не очередной микросервис и не "LLM с ручками". Это автономный субъект, который принимает решения, меняет состояние, мутирует память и вызывает инструменты, иногда с правами, которые человек бы не получил (все помним истории с удаление БД)

И вот, OWASP наконец-то оформил это в +- нормальный документ - Agentic Top 10. Не маркетинговую брошюру, не "памятку про промпт-инъекции", а живую таксономию реальных угроз. И да, документ пока сырой, но - впервые за долгое время - честный (ПОМИМО МОЕГО ДОКУМЕНТА)

👀 Почему этот стандарт вообще важен

Если у вас есть продовый агент, будь то ассистент разработчика, внутренняя автоматизация или пет-проект, вы уже сталкивались с тем, что:
🔵 агент "дрейфует" из-за случайной записи в память
🔵 инструменты живут своей жизнью
🔵 planner принимает решения, которых в требованиях нет
🔵 RAG превращается в новый источник атак
🔵 цепочки действий ломают IAM быстрее, чем обычные уязвимости

OWASP наконец-то нам говорит:

проблема не в LLM - проблема в автономии, состоянии и цепочках действий


Когда я строил всё эту ai лабуду, я видел это каждый день. И да, это было одной из причин, что вдохновило меня завести своё радио - как антистресс от всех этих архитектурных перекосов. Иногда спасает больше, чем кофе ☕️

💎 Главные положения Agentic Top 10

1️⃣ Агент - это автономный исполнитель со своим состоянием и правами, поэтому его нужно защищать как полноценный сервис, а не как чат-интерфейс

2️⃣ Основная угроза - Action Injection, когда атакуют не текст, а действия, добиваясь выполнения нежелательных операций от имени агента

3️⃣ У агента собственный supply chain, где инструменты, схемы и внешние источники становятся такими же точками компрометации, как зависимости backend

4️⃣ Коммуникация между агентами - новый канал атак, в котором подмена намерений и семантический spoofing возможны из-за отсутствия криптографической верификации

5️⃣ Intent Firewall обязателен, потому что агент может генерировать любые планы, но выполнять он должен только разрешённые политикой действия

6️⃣ Инструменты должны быть доверенными и ограниченными, иначе они превращаются в открытый вектор supply-chain-компрометации

7️⃣ Память агента должна быть управляемой - без аудита, версий и изоляции невозможно предотвратить дрейф состояния и отравление контекста

8️⃣ Kill Switch и rollback - обязательная функция, потому что агент без контролируемой остановки и отката неизбежно приводит к инцидентам уровня P1

Чем это полезно лично мне и вам

Этот документ - наконец-то база, которую можно положить:
🟢 в архитектурное ревью новых ai-фич
🟢 в appsec-требования
🟢 в threat modeling
🟢 в MSP/MCP-дорожную карту
🟢 в обучение разработчиков

Он закрывает ту самую дыру, которую мы ощущали, но не могли формализовать агенты - это не продукт, не библиотека и не API. Это новый класс систем, который ломается по-другому.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥91
😁205🔥1
Разговоры о важном

Ну, наверное, это самое долгое преодоление круглой отметки на канале. В частности, это из-за меня, но а кто спрашивает или обвиняет меня в чём-то? Мне даже не хотелось писать лонгрид, т.к. его чтение будет вызывать либо скуку, либо понимание, что у меня какой-то вид затянувшейся депрессии. Но раз я снова расчехляю перо не по технической теме, то пора высказываться про что-то такое, что всех тронет (не по голове)

Поговорим про успех, синдром самозванца и то, как всех бесят успешные успехи и как не стать говорящей головой

Хм, давайте с вами начнём путешествие в начало этого канала - 2023 год. За спиной ничего, идея сделать что-то прикольное и "не как у всех". 2 года и 3000 человек (100 человек и 2900 ботов) - вроде успех, но чувство незаслуженности или несправедливости с каждой из сторон. У вас - "что за фигня, видел, знаю, опять ллм…", от меня - "и нафига я это делал, опять 30 часов впустую, лучше б блечил…". И вроде это базовая ситуация, которая знакома каждому из админ-каналов, но всё ещё неприятно. Может, я был большего мнения о своих писательских способностях, о своих знаниях или интересах, может, нужно было вообще завести канал о музыке… Вот такое меня преследует каждый раз, возвращаясь к написанию поста в канал. Я вас всех ценю, но руки опускаются делать контент, который не будет принят/понят/обсуждён аудиторией уже, повторюсь, в три тысячи человек. Да, проблема во мне, как принято говорить парням, которые нравятся как друзья, и решать её тоже мне. Буду решать тем, что мне нравится, и так, чтобы нравилось мне: побуду эту 1000 человек эгоистом, который делает контент для себя

А с чего начать - наверное, с чего-то нового: музыка, коллекции и чуть меньше технического материала, который и так читают. Разве вам не понравится иногда отвлекаться от нудной работы, дедлайнов, задач на квартал и подобной шушеры, которой мы себя окружили, чтобы не чувствовать себя бездарями, которые тыкают по клавиатуре, изображая гениев индустрии? Материал останется на канале, как и мемы - куда же без них в этом сером мире, где никто не смеётся со слова "фуфырник". Но он будет разбавлен авторскими постами, рассказами об обыденности и проблемах, о которых не принято говорить синьорами-помидорами и подобными специалистами

Так что теперь абзац про поговорить о таком. А что будет первой темой… Собесы?! Дааа, давайте про них. Особенно про то, как чатгпт собесит "чатгпт, невидимый для собеседующего". Ну да, все собесы, не записанные ради чего-то, - это соревнование по типу "Что? Где? Когда?" ради удобного места под солнышком и зп побольше. Это уже не интересный разговор об интересных победах или сражениях, а обычное описание похода в бордель с мамзелями из низшего общества. Искусственный интеллект составляет вопросы, а потом в другом диалоге отвечает на них - дожили)))

И вроде окей, да, рыночек порешал, но я стал за собой замечать, что забываю базу. Может, я, конечно, глуп и стар (относительно массы современной ибешечки), но это массовость, от которой становится страшно. Почему люди боятся прямо на собесе сказать: "Я не помню" или "я в душе не чаю"? Вместо быстрого тыканья по клавишам я лучше бы услышал фразу и задал немного другой вопрос, чтобы привести человека к ответу, но сталкиваюсь с определением или ответом от нейронки. Спасибо, насобесился такого. Ну и обратная тема, со стороны собеседуемого: "а чего вас тут 5 человек?". Бывало же, что вас собесят не 1–2 человека, а будто весь отдел пришёл посмотреть на попаданца? У меня - да, впечатления не очень: я и так человек достаточно закрытый, но это уже перебор. А ситуация, когда начинают спрашивать аппсека про внутрянку винды, что меня приводит в смех. Знаешь, как вытащить ключи, кукисы и т.п. - собесь пентестеров, чего ты тут со мной забыл. Простите, но будет грустно видеть, что за система сейчас развивается. Главная задача со стороны кандидата - наебать HR, а там "прорвёмся", задача собеседующего - найти человека-оркестра, чтоб и жнец, и дудец, и певец, и чтоб не блечил в свободное время

Отмена засеров: 4000 символов - предел, спасибо за 3000, увидимся совсем скоро 🐾
Please open Telegram to view this post
VIEW IN TELEGRAM
3925🤔5🔥1😁1