Большинство инцидентов информационной безопасности и расследований компьютерных преступлений не могут быть достаточно полно и безошибочно исследованы без понимания природы поведения исполняемых двоичных файлов. Для эффективного распространения вредоносных программ злоумышленники используют уязвимости нулевого дня [15], все лучше совершенствуют методы, предотвращающие обнаружение и усложняющие исследование поведения вредоносных программ, тем самым уменьшая шансы существующих антивирусных решений оперативно распознавать вредоносную угрозу, которая может представлять большую опасность для различных компьютерных и автоматизированных систем.
К тому же, практически любое программное обеспечение (ПО) может содержать в себе ряд различных уязвимостей, таких как переполнение буфера или использование слабых и самописных криптографических алгоритмов. Одним из эффективных способов исследовать ранее неизвестные вредоносные программы и обнаруживать критические уязвимости ПО является реверс-инжиниринг.
Под формальным определением реверс-инжиниринга понимается процесс анализа системы для определения ее компонент и их взаимосвязи и создания представления системы в другой форме или на более высоком уровне абстракции. Это позволяет визуализировать структуру программного обеспечения, способы работы и функции, управляющие поведением ПО.
Конкретизируем главные сферы применения реверс-инжиниринга:
• Поиск вредоносного кода. Множество техник детектирования вредоносных программ используют реверс-инжиниринг для того, чтобы понять структуру и поведение вредоносного кода. Очень
часто вредоносный код бывает запакован и обфусцирован, что в разы увеличивает сложность анализа. При успешном осуществлении реверс-инжиниринга вредоносной программы могут улучшаться эвристические алгоритмы поиска вредоносного кода и пополняться новыми сигнатурами антивирусные базы данных.
• Обнаружение программных ошибок. Даже самые хорошо спроектированные системы могут иметь уязвимости, которые почти всегда вызваны человеческим фактором. Реверсинжиниринг может помочь обнаружить уязвимости, прежде чем это станет критичным для безопасности всей системы.
• То, что непосредственно не связано с информационной безопасностью - поиск нелегально используемого кода, создание открытого аналога программы с закрытым исходным кодом (Windows - ReactOs).
Целью данной работы является реверс-инжиниринг различных исполняемых файлов, в том числе анализ вредоносной программы типа шифровальщик-вымогатель, а также эксплуатация уязвимости переполнения буфера посредством техники возвратно-ориентированного программирования преимущественно с помощью фреймворка Radare.
В ходе бакалаврской работы стояла задача реверс-инжиниринга различных исполняемых файлов и эксплуатации уязвимости стекового буфера на примере тестового сервера в современных Linux системах.
Необходимость проведения такой работы диктуется тем, что большинство инцидентов информационной безопасности так или иначе связаны с исполняемыми файлами, и понимание происходящих низкоуровневых процессов позволяет своевременно реагировать на инциденты безопасности и разрабатывать безопасное программное обеспечение.
Поэтому в этой работе при помощи фреймворка для реверсинжиниринга Radare2 производится анализ исполняемых файлов, в том числе и анализ вредоносной программы типа шифровальщик-вымогатель Princess Locker 2, описывается полный ход ее работы в атакованной системе.
Также, на примере тестового сервера и уязвимости переполнения стекового буфера демонстрируется техника возвратно-ориентированного программирования. Это важно, потому что все современные операционные системы, в том числе и рассматриваемая система Linux, обладают различными методами защиты от атак переполнения и обход защитных мер является достаточно нетривиальной задачей. К тому же, данная часть работы позволяет понять, как работают различные программные уязвимости и способствует разработке безопасного программного обеспечения.