Следующая новость
Предыдущая новость

Secure Coding. Пишем приложения, устойчивые к ботнетам

23.04.2019 17:14
Secure Coding. Пишем приложения, устойчивые к ботнетам

Содержание статьи

  • Проще простого
  • Чуть сложнее: фокус с функциями JS
  • Сложно: фокусы с запросами AJAX
  • Запросы AJAX с непредсказуемыми задержками времени
  • Смешиваем фальшивые данные с асинхронными запросами POST
  • Симметричное шифрование в запросах POST

Самая привлекательная цель для злоумышленника — это онлайновый банкинг, и решающую роль в успехе вирусных атак на него играют ботнеты. Но чтобы выудить из перехваченных с их помощью данных ценную информацию, злоумышленнику нужно потрудиться. Сегодня я расскажу, как усложнить жизнь ботоводам и защитить свое приложение от нападок.

Чтобы превратить перехваченный трафик в коммерчески привлекательные списки конфиденциальных данных, ботоводу приходится применять разные техники майнинга. Одна из простейших техник — искать в запросах POST переменные с именами вроде username и password и считывать их значения. Или искать имена переменных, характерных для номеров кредитных карт, вроде cc_number, которые обычно используются в приложениях онлайн-банкинга.

Чтобы извлекать и собирать эти данные, ботоводу требуются значительные вычислительные ресурсы. Ему приходится раскошеливаться на аренду серверов. Выгоду он оценивает по соотношению X/Y, где X — стоимость конфиденциальных данных, а Y — стоимость аренды серверов. Когда это соотношение пересекает определенный нижний порог, ботоводу твое веб-приложение становится неинтересным.

Поэтому суть кодинга, устойчивого к ботнетам: разрабатывать веб-приложения, в которых соотношение X/Y держится на стабильно низком уровне. Я предлагаю три метода такого кодинга: простой, средний и сложный. Эта градация установлена исходя из накладных расходов на сервер, где обитает твое веб-приложение, и сложности реализации метода.

Проще простого

Самый простой метод направлен на обман парсера ботнета:

  • заменить распространенные имена переменных вроде CVV, username, password и address на неочевидные;
  • добавить в форму скрытые поля с выдуманными данными.

Обычный пользователь эти поля даже не увидит, а ботовода они заставят попотеть.

Пример такого метода

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

Чуть сложнее: фокус с функциями JS

Методы этой категории предполагают использование модулей JS для создания путаницы в запросах POST. Многие популярные ботнеты, например ZeuS и его преемники, сканируют только запросы POST. Запросы GET их не заботят. Это можно использовать для передачи через GET ключей шифрования и функций обфускации JS, не попадая при этом под радар ботнета.

Когда пользователь зараженного компьютера, заполнив какую-нибудь форму, нажимает «отправить», все параметры формы запутываются при помощи функции обфускации, доставленной через GET, и затем отправляются на сервер через POST в скрытом поле формы. Остальные поля формы остаются незаполненными, либо в них вносятся фальшивые данные.

Такое запутывание значительно усложняет серверу C&C извлечение конфиденциальных данных. С этим методом тебе придется вставить в серверную часть своего веб-приложения функцию деобфускации, которая будет оттягивать на себя часть вычислительных ресурсов твоего сервера.

Используя простейшие функции обфускации, ты превратишь конфиденциальные данные, проходящие через твое веб-приложение, в «движущуюся цель». Ботоводу будет намного сложнее извлекать их. Особенно если функции обфускации генерируются твоим сервером динамически при каждом сеансе.

Secure Coding. Пишем приложения, устойчивые к ботнетам
Пример такой функции

В следующем листинге представлен еще более изощреннный пример обфускации: цифра 5 заменяется символом #, а цифра 2 — символом %.

Теперь, когда у тебя есть несколько функций обфускации, тебе надо активировать их при отправке формы. Соответствующий код будет запускаться в обработчике события onclick для кнопки отправки формы.

Secure Coding. Пишем приложения, устойчивые к ботнетам

Первый запрос POST запутывает данные. Затем он берет поле с именем cc_number и вставляет туда произвольную строку, которая для ботовода оказывается бесполезной.

У такого метода есть некоторые накладные расходы на стороне сервера: на деобфускацию и хранение функций обфускации, однако они невелики. А вот ботоводу для их преодоления приходится затрачивать непропорционально большее количество вычислительных ресурсов. Добавление поддельных данных раздувает логи, собираемые ботоводом, и создает ему больше проблем. Соответственно, рентабельность его усилий понижается.

Продолжение доступно только подписчикам

Материалы из последних выпусков можно покупать отдельно только через два месяца после публикации. Чтобы продолжить чтение, необходимо купить подписку.

Подпишись на «Хакер» по выгодной цене!

Подписка позволит тебе в течение указанного срока читать ВСЕ платные материалы сайта. Мы принимаем оплату банковскими картами, электронными деньгами и переводами со счетов мобильных операторов. Подробнее о подписке

1 год

7490 р.

Экономия 1400 рублей!

1 месяц

720 р.

25-30 статей в месяц

Уже подписан?

Источник

Последние новости