1.14M
Категория: ПрограммированиеПрограммирование

Lektsia_5

1.

Зашита программ
от исследования

2.

Зашита программ
от исследования
Технологии противодействия заметно
обгоняют эволюцию систем защиты.
Крис Касперски. «Техника и философия
хакерских атак». 1999 г.

3.

Средства исследования программ
Основными инструментами для исследования
программ являются
• дизассемблеры и
• отладчики.

4.

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

5.

Средства исследования программ
Отладчик - программа, предназначенная
для анализа поведения другой программы,
обеспечивающая остановку в указанных точках и
позволяющая просматривать (редактировать)
содержимое ячеек памяти, регистров процессора
и команды программы.
Эмулирующий отладчик - отладчик,
который самостоятельно интерпретирует и
выполняет команды программы (без
использования реального процессора).

6.

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

7.

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

8.

Защита программ от
дизассемблирования
Универсальным методом противодействия
дизассемблированию программы
является шифрование.
Очевидно, что дизассемблирование
зашифрованного кода бесполезно.
Применяя шифрование кода программы для
противодействия дизассемблированию, следует
учитывать распространенные ошибки
реализации данного метода.

9.

Методы защиты программ от
дизассемблирования
1. Динамическое шифрование и многопроходная
расшифровка кода.
2. Методы, использующие вместе с шифрованием
архивирование программного кода. К
достоинствам данного метода относят и
уменьшение размера исполняемого файла.
3. Методы, основанные на динамическом
изменении кода программы в процессе
выполнения.

10.

Защита программ от работы под
контролем отладчика
Существует два отладочных механизма:
1) контрольные точки останова и
2) трассировка программы.

11.

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

12.

Трассировка кода программы
Трассировка - это пошаговое выполнение
программы.
Установка специального флага трассировки
(TF) приводит к генерированию после каждой
команды исключительной ситуации прерывания int 1, называемого трассировочным
прерыванием.
Для усиления защиты от пошагового
выполнения программы успешно используют
значение флага трассировки (в совокупности с
другими параметрами) для расшифровки
критических участков или, что еще сложнее для
взлома, в арифметических выражениях.

13.

Аппаратная отладка
Современные операционные системы и
отладчики позволяют установить аппаратные
точки останова.
Аппаратная отладка основана на
использовании специальных отладочных
регистров (их всего 8 регистров) и возможности
простановки четырех контрольных
точек останова.
Аппаратные точки останова никак не
модифицируют код и, следовательно, не
могут быть обнаружены
традиционными средствами.

14.

Эмулирующие отладчики
Для взлома механизмов защиты применяются
мощные эмулирующие отладчики. Они
самостоятельно (без помощи процессора)
интерпретируют и выполняют команды
исследуемой программы.
Существуют отладчики с неполной эмуляцией.
Эти отладчики интерпретируют только некоторые
команды, а остальные выполняют на реальном
процессоре.
Очевидно, что против таких отладчиков
бессильны любые приемы противодействия.

15.

Применение отладчиков и
дизассемблера (например
OllyDbg, WinDbg, IdaPro)
Для чего нужен дизассемблер?
Чаще всего дизассемблер используют для
анализа программы (или её части), исходный
текст которой неизвестен — с целью
модификации, копирования или взлома.
Реже — для поиска ошибок (багов) в
программах и компиляторах, а также для анализа
и оптимизации создаваемого компилятором
машинного кода.

16.

Реверс-инжиниринг
программного обеспечения
Обра́тная разрабо́тка (обратное
проектирование, обратный инжиниринг,
реверс-инжиниринг; англ. reverse engineering) —
исследование некоторого готового устройства или
программы, а также документации на него с целью
понять принцип его работы;
например, чтобы
обнаружить недокументированные возможности (в
том числе программные закладки), сделать
изменение или воспроизвести устройство, программу
или иной объект с аналогичными функциями, но без
прямого копирования.

17.

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

18.

Основные технологии
реверс-инжиниринга
1. Дизассемблирование
2. Декомпиляция
3. Дебаггинг
4. Статический анализ
5. Динамический анализ
6. Системы виртуализации
7. Машинное обучение
8. Инструменты для работы с форматами
файлов

19.

Дизассемблирование
- процесс преобразования машинного кода в
ассемблерный код, более читаемый для человека.
Дизассемблер (от англ. Disassembler —
транслятор, преобразующий машинный
код, объектный файл или библиотечные модули в
текст программы на языке ассемблера.

20.

Ассемблер
Язы́к ассе́мблера (англ. assembly
language) — представление команд процессора в
виде, доступном для чтения человеком.
Язык ассемблера считается языком
программирования низкого уровня в
противовес высокоуровневым языкам, не
привязанным к конкретной реализации
вычислительной системы.

21.

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

22.

Применение отладчиков и
дизассемблера
По режиму работы с пользователем
дизассемблеры делятся на автоматические и
интерактивные.
Интерактивные дизассемблеры генерируют
готовый листинг, который можно затем править в
текстовом редакторе.
Пример интерактивного — IDA. Он позволяет
изменять правила дизассемблирования и
является весьма удобным инструментом
для исследования программ.

23.

Дизассемблирование
Инструменты:
IDA Pro,
Ghidra,
Hopper,
objdump,
дизассемблеры от компиляторов.

24.

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

25.

Дизассемблирование
Ghidra: Бесплатный и открытый дизассемблер
и декомпилятор, разработанный Агентством
национальной безопасности (NSA). Ghidra
предлагает богатый набор функций, включая
поддержку декомпиляции, отладки и анализа
кода.
Hopper: Еще один мощный дизассемблер и
декомпилятор, который предлагает интуитивно
понятный интерфейс и поддержку различных
форматов файлов.

26.

Декомпиляция
- процесс преобразования машинного кода в
исходный код высокого уровня (например, C++,
Java).
Инструменты:
Jad,
JD-GUI,
decompiler от компиляторов,
IDA Pro (частично).

27.

Дебаггинг
- процесс пошагового выполнения кода с целью
анализа его работы.
Инструменты: GDB, LLDB, WinDbg,
интегрированные отладчики в IDE.
WinDbg: Отладчик, используемый для отладки
программ, работающих под управлением
Windows, который можно использовать для
анализа аварийных дампов, отладки
динамического пользовательского режима и кода
в режиме ядра, а также проверки регистров ЦП и
памяти.

28.

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

29.

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

30.

Динамический анализ
Анализ программного обеспечения во время его
выполнения, например, с помощью мониторинга
ресурсов, трассировки кода, записи событий и
анализа трафика.
Инструменты: Wireshark, профайлеры
(например, VTune Amplifier), системы
виртуализации (например, VirtualBox)
Wireshark: Инструмент для анализа сетевого
трафика. Он используется для захвата и анализа
сетевых пакетов, что позволяет увидеть, как
программы взаимодействуют друг с другом и с
сетью.

31.

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

32.

Машинное обучение: Применение
алгоритмов машинного обучения для
автоматизации анализа кода и поиска
уязвимостей.
Инструменты: TensorFlow, PyTorch,
специализированные инструменты для анализа
кода.
Инструменты для работы с форматами
файлов: Анализ форматов файлов, с которыми
работает программное обеспечение.
Инструменты: File, hex-редакторы (например,
HxD), специализированные анализаторы
форматов файлов.

33.

Положительные цели применения
инструментов реверс-инжиниринга
Исправление ошибок
Cоздание совместимости:
Улучшение производительности
Добавление новых функций
Образование
Анализ безопасности

34.

Отрицательные цели применения
инструментов реверс-инжиниринга
Незаконное копирование
Взлом
Кража интеллектуальной собственности
Вредные модификации
Технологии реверс-инжиниринга постоянно
развиваются, поэтому важно быть в курсе
последних тенденций и инструментов.

35.

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

36.

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

37.

Типы ВПО
программы-вымогатели,
шпионское ПО
ВПО для удаленного управления
Загрузчики (downloader)
Майнеры (miner)
Банковские трояны (banking trojan)
Рекламное ПО (adware).

38.

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

39.

Способы распространения ВПО
Существует несколько наиболее популярных у
злоумышленников способов доставки вредоносных
программ в сети организаций для дальнейшего
развития атаки. В 2023 году чаще всего ВПО
доставляли через электронную почту (больше
половины успешных случаев атак с
использованием вредоносов).
Наиболее распространенным (46% успешных
атак) методом доставки вредоносного
программного обеспечения на устройства частных
лиц является использование интернетсайтов.

40.

Вредоносное программное
обеспечение (ВПО)
Рекомендуется
• использовать технические средства для
фильтрации и обнаружения вредоносных
вложений,
• обучать сотрудников распознавать
подозрительные письма,
• применять механизмы двухфакторной
аутентификации для защиты учетных записей,
• использовать специальные средства для
тестирования защищенности почты.

41.

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

42.

Определение вредоносного кода
Бэкдор - вредоносная программа для
получения доступа к рабочей станции, серверу,
устройству или сети путем обхода
аутентификации, а также других стандартных
методов и технологий безопасности.

43.

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

44.

Действия вредоносного кода
Вредоносный код способен манипулировать
любым программируемым компонентом
компьютерной системы.
С его помощью можно воздействовать как на
масштабные компоненты системы (например,
сетевую инфраструктуру), так и на более мелкие,
такие как приложения и программы для
компьютеров и мобильных устройств.
Веб-сервисы, такие как веб-сайты и онлайнсерверы, также могут стать мишенями для атаки.
Вредоносным кодом можно заразить любое
компьютерное устройство,

45.

Схема атаки вредоносного кода
Большинство атак с помощью вредоносного
кода происходит по следующей схеме:
• поиск и изучение уязвимостей;
• написание кода для эксплуатации
уязвимостей;
• проникновение вредоносного кода в
компьютерную систему;
• активация кода с помощью сопутствующей
программы или без нее.

46.

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

47.

Распространение вредоносного
кода
Угроза может распространяться практически
через любой канал передачи данных:
• онлайн-сети: внутренние сети, пиринговые
файлообменники, часто посещаемые веб-сайты
и т. д.;
• средства общения: электронную почту,
SMS-сообщения, пуш-уведомления, мобильные
мессенджеры и т. д.;
• беспроводные каналы связи – Bluetooth
и т. д.;
• интерфейсы для подключения устройств
– USB и т. д.

48.

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

49.

Разновидности вредоносного кода
Вирус
Черви
Троянские программы
Межсайтовый скриптинг (XSS)
Бэкдоры
Бэкдор – это вредоносный код, который
позволяет киберпреступникам получить
удаленный доступ к атакуемой системе. С его
помощью они могут не только похитить
конфиденциальную информацию (например,
корпоративные базы данных), но и организовать
целевую продолжительную атаку повышенной
сложности.

50.

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

51.

Файервол
(от английского firewall, «огненная /
противопожарная стена») — это программа,
которая защищает компьютер от атак из Cети.
Ее также называют брандмауэром и
межсетевым экраном, потому что система как
бы экранирует вредоносные действия из
интернета.
Если она видит подозрительный трафик, то
блокирует его.
English     Русский Правила