Самый легкий способ взлом

Взлом программ для чайников

Disclaimer: всё ниженаписанное написано исключительно с просветительскими и исследовательскими целями, а также понимания механизмов защиты от взлома. Автор ни в коем случае не рекомендует использовать данную информацию для взлома программ.

В данной статье я хочу рассказать про три с половиной основных способа взлома программ на .NET, цель, которую я преследую — помочь разработчикам лучше понять механизмы защиты своих программ, т.е. выяснить наиболее очевидные угрозы и предпринять соответствующие меры (или не принимать).

Я не буду углубляться в детали и использовать сложные инструменты для взлома. Всё будет расписано «для чайников», т.е. все инструменты будут простыми, легкодоступными и бесплатными. А основным будет Reflector, декомпилятор программ под .NET

В качестве подопытного кролика я выбрал Expresso — анализатор регулярных выражений. Данная программа бесплатная, в лицензии вроде бы ничего не указано про взлом, но при этом без регистрации она будет работать всего 60 дней. Другими словами, вред от взлома данной программы минимальный, к тому же внутреннее её устройство очень уж хорошо подходит для тренировки. Буду надеяться, что автор данной программы не обидится на меня.

Для начала краткий ликбез по структуре .NET программы, для тех кто не знаком с разработкой под данный Framework: весь код, написанный на любом .NET языке (C#, Visual Basic, F#, Delphi.NET) компилируется в особый Intermediate Language, называемый обычно IL или MSIL. Это что-то типа ассемблера, только весьма умного и обладающего весьма мощными инструкциями. И это, в принципе, такой же равноправный язык как и C#, только синтаксис похуже (а возможности больше). Кроме того, в программе на .NET активно используются метаданные, т.е. вся информация о классах, метода, пропертях, атрибутах и всём остальном сохранена в исполняемом файле.

Т.е. на самом деле, декомпиляция программы не очень верное понятие в данном случае. Она и так вся в открытом виде лежит, а инструменты в виде Reflector’а занимаются тем, что приводят конструкции MSIL к соответствующим конструкциям C# или другого языка, повышая читабельность кода.

Перейдём, собственно, к взлому.

0. Обнуление триала

Собственно, это даже не взлом, а полулегальный способ продлить срок использования неактивированной программы. Заключается он в том, что находится место, где хранится дата первого запуска и меняется/уничтожается. После этого всё можно пользоваться программой до следующего срока.

Посмотрим на нашего подопытного рефлектором. Немного погуляв по коду, находим интересную строчку в конструкторе MainForm:

Открываем редактор реестра, идём в HKEY_CURRENT_USER\Software\Ultrapico\Expresso и видим следующие ключи:

Удаляем их и получаем ещё 60 дней работы.

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

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

1. Написание keygen’а

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

Открываем рефлектор и ищем код на предмет классов содержащих License или Registration, видим:

Читайте также:  Как подразделяются налоги по способу взимания

При вводе имени и кода по имени вычисляется некий хеш, который и сравнивается с кодом.

Данный хеш использует DES и всякие префиксы

Байты конвертятся в строку с помощью данного метода.

Теперь всё выяснилось, открываем IDE и копируем все необходимые куски кода (или сами реализовываем). Осталось только выяснить, какие значения у Prefix, Suffix и параметры реализации MyDES. Я их приводить не буду, это уже технические детали.

В результате генерируем ключ на любое имя и видим:

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

2. Использование враппера

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

  1. Указать программе, что лицензия уже проверена
  2. Указать программе, что лицензия корректна

Как это сделать? Я уже упоминал о наличии метаданных в исполняемых файлах в начале, этим и воспользуемся. Посмотрим как запускается программа и как проверяется лицензия:

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

Воспользуемся этим. Сделаем новый проект, добавим Reference на Expresso.exe и запустим его через себя:

Смотрим, что получилось:

Ну кто бы сомневался.

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

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

Но все эти защиты приведут к тому, что злоумышленник будет использовать

3. Физический взлом программы

Тут уже всё серьёзно. Программа целиком декомилируется в MSIL а из него уже собирается обратно (помните, я писал, что MSIL это такой же язык как и C#?). Для декомпиляции нам понадобится утилита из SDK под названием ildasm, а для компиляции компилятор из .NET Framework ilasm.

Запускаем ildasm, открываем Expresso.exe и сохраняем дамп в .il файл. Находим уже рассмотренный метод IsRegistered и добавляем немножко своего кода (без меток):

Потом берём ilasm и собираем всё назад (не забыв подключить ресурсы).

Что делает данный код: устанавливает нужное имя для регистрации (не обязательно), и возвращает статус, что всё хорошо.

Чтобы было понятнее, так это выглядит в рефлекторе, в C#

Т.е. вполне очевидно, что теперь всё будет хорошо:

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

При этом некоторые вещи в MSIL можно сделать очень красиво, например поменять две переменные местами — 4 симпатичных строчки (на C# меньше, но некрасиво).

Чем жертвует злоумышленник: подписью программы, теперь она уже не автора, а его. В некоторых случаях это проблема, если в программе используется множество библиотек. Тогда злобному хакеру придётся разбирать их все и собирать их заново, но если он с этим справится, то у него будет «своя» версия программы подписанная его ключом.

Читайте также:  Способ приобретения российского гражданства

Защиты от всего этого безобразия собственно немного: проводить обфускацию или выносить часть логики/проверки защиты в нативный код.

Источник

Взлом сайта: простые советы по безопасности

Активность хакеров никогда не сходит на нет. Например, только по данным одного хакерского сайта zone-h.org (см. раздел Onhold), взламываются ежедневно сотни сайтов. Вашего сайта там точно нет?

Для взлома не надо быть профессиональным хакером, речь в статье о так называемых «кулхацкерах», использующих плоды чужих «трудов» и самых простых случаях взлома. Статья ни в коей мере не howto, как взломать сайт. Цель — показать, насколько просто осуществляется взлом и рекомендовать меры по защите сайта и действия, в случае взлома «косовскими албанцами».
Приведён пример успешного розыска хакера российскими правоохранительными органами.

Как осуществляется взлом сайта?

Наиболее распространённые пути проникновения на сайт:

  • перебор простых паролей доступа к админке/ftp («имя домена», 12345, admin, test и т.п.) — большое число взломов, как ни странно, происходит именно так;
  • использование уязвимостей скриптов (CMS и модулей).

Поясню на примере Joomla + CKForms. Чтобы не вводить в искушение, не публикую ссылку на описание, слишком уж просто им воспользоваться, но и найти несложно. Уязвимости в модуле CKForms позволяют выполнить SQL-инъекцию или PHP-инклюдинг, и, путём несложных манипуляций, получить доступ к админке. Использование уязвимости осуществляется через простой запрос в адресной строке браузера.

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

Я принимал меры, но как взломали сайт?

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

Ограничимся одним случаем. Серьёзную опасность представляет запуск скриптов под модулем Apache, например mod_perl. Запуск скрипта в этом случае осуществляется под пользователем Apache, который имеет доступ к данным пользователей сайтов.
Хакер, как описано выше, получает доступ к площадке одного сайта. Затем осуществляется размещение консольного скрипта, например cgi-telnet. И если права на конфигурационные файлы сайтов других пользователей выставлены в 644 (или тем более 777!), из консоли несложно прочитать содержимое файлов с паролями. Но! Только если запуск perl-скрипта осуществляется под пользователем Apache, т.е. под mod_perl (аналогичная ситуация с mod_php). При работе, например, под FastCGI — такой способ не даст доступа к файлам. Защититься от этого можно, устанавливая на критически важные файлы права 600 и используя FastCGI.

Как можно получить доступ к управлению самим сервером?

Приведу один распространённый пример для Linux-систем. Аналогично, сначала необходим доступ на площадку одного сайта.
Есть несколько уязвимостей в ядре через нулевой указатель, которым подвержены десятки Linux-систем, например: Linux Kernel ‘sock_sendpage()’ NULL Pointer Dereference Vulnerability. Там же описаны и эксплоиты (осторожнее, это работает!).
Несмотря на то, что данная проблема известна давно, есть множество непропатченных серверов, в том числе и в России. Самый простой способ защиты описан, например, здесь.
Это не гарантирует 100% защиту, т.к. например при установке wine параметр mmap_min_addr может быть сброшен обратно в 0. Настоятельно рекомендуется использовать патчи, которые можно взять на странице, указанной выше, или в официальных источниках.
Обсуждение по этому вопросу велось и на хабре.
Ответственность за защиту от данных эксплоитов лежит на администраторе сервера.

Читайте также:  Бессоюзное сложное предложение способы цитирования теория

Последовательность действий по устранению последствий

«Лечения» восстановлением из бекапа недостаточно, один раз взломав сайт, к Вам ещё вернутся. Что же делать владельцу сайта?

  • Постарайтесь сразу определить, какие именно файлы были заменены, это может быть как index.php, так и файлы шаблонов, изображений и т.п.;
  • Сделайте скриншоты последствий;
  • Обязательно оповестите хостинг-провайдера и согласуйте свои дальнейшие действия;
  • Сохраните в отдельный каталог файлы сайта, время модификации файлов в дальнейшем поможет Вам определить злоумышленика;
  • Восстановите из резервной копии сайт или обратитесь для этого к хостеру;
  • Скачайте логи ошибок и доступа к сайту или попросите хостера их предоставить, лучше скопировать их в отдельный каталог, чтобы не удалились при ротации логов;
  • Анализ времени изменения файлов и сопоставления с записями в логах позволяют определить характер используемой уязвимости и IP-адрес злоумышленника;
  • Обновите скрипты или (если это невозможно) откажитесь от использования уязвимых модулей;
  • Обязательно смените все пароли доступа.

Преступление и наказание

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

Отделом К города N возбуждено уголовное дело по ст.272 УК РФ «Неправомерный доступ к охраняемой законом компьютерной информации. » в отношении гражданина РФ по заявлению юридического лица (владельца сайта). В феврале 2010-го года был выполнен взлом сайта производства одной из российских дизайн-студий («самописный» скрипт), через найденную злоумышленником уязвимость в коде сайта. Целью взлома являлось размещение рекламных баннеров. Злоумышленник принёс свои письменные извинения владельцу сайта с просьбой досудебного урегулирования — кроме уголовной статьи ему грозит и отчисление из ВУЗа. Так сказать — в интересах следствия подробности не разглашаются.

Если ущерб значительный, а IP-адрес «местный» (даже динамический и принадлежит Интернет-провайдеру), а не «китайского прокси» — можно с заявлением и имеющимися материалами обратиться по месту жительства в правоохранительные органы, а конкретно в отдел К. Следователи сами запросят у хостинг-провайдера официальное письмо с журналами и пояснениями ситуации, у Интернет-провайдера — кому был выделен IP-адрес. Компании обязаны предоставить эти сведения по запросу правоохранительных органов.
Взломщику общение с правоохранительными органами доставит много неприятных часов, особенно если на компьютере остались следы противоправной деятельности, не говоря уже о возможном судебном преследовании.

Краткие выводы

Безопасность Вашего сайта — задача не только разработчика и хостера, который обязан обеспечить максимальную защищённость серверов, но и администратора сайта.
Тривиальные советы владельцу сайта:

  • нигде не хранить учётные данные доступа;
  • использовать длинные комплексные пароли и нестандартные логины, периодически выполнять их смену;
  • своевременно обновлять скрипты с выходом обновлений;
  • при выборе компонента проверять на наличие незакрытых уязвимостей;
  • следить за правами на файлы скриптов и особенно критические файлы конфигурации;
  • средствами веб-сервера (например, .htaccess и .ftpaccess) разрешить доступ только с Вашего IP;
  • да, сохранять копирайты авторов скриптов надо, но по ним, а так же фрагментам адресной строки модулей, злоумышленники и ищут уязвимые сайты — смените хотя бы стандартные адреса обращения к скриптам;
  • периодически, в том числе внешними сервисами, проверять доступность конкретных разделов сайта;
  • иметь локальные бекапы сайтов.

Оценив шансы по розыску злоумышленника — можно и нужно обратиться в правоохранительные органы.

PS: статья не претендует на абсолютную полноту изложения и ориентирована не на IT-гуру, разумеется, при целенаправленном взломе конкретного сервера или сайта могут применяться другие средства. Рад буду дополнить по комментариям хабрасообщества, в том числе и другими примерами.
И вкратце о действиях при взломе сайта.

Источник

Оцените статью
Разные способы