Денис Легезо
Компания: Яндекс
В прошлом году Денис говорил о том, как выглядит ваш код на С++ в скомпилированных исполняемых файлах. В этом году он предлагает посмотреть на position-independent code (PIC).
Вряд ли средним прикладным программистам часто приходится писать код, выполнение которого никак не зависит от итогового расположения инструкций в памяти. Системщики с таким встречаются чаще, но в этом докладе Денис подойдет к PIC с более знакомой лично ему стороны — такой код часто применяется во вредоносах. Нам даже не придется искать зло на зараженных машинах: на GitHub есть много довольно развитых и популярных фреймворков, которые сгенерируют нам импланты. Что ж, тем лучше: вы сможете посмотреть на исходный код фреймворка, а при желании сгенерировать имплант сами.
Зачем имплантам PIC? Для обхода защит в таких программах разработчики часто решают не пользоваться стандартными «сервисами» ОС или компиляторов. Они могут подменять своим кодом работу, которую обычно выполняет загрузчик исполняемых файлов. Или же вместо линкера заняться определением адресов API-функций, нужных для работы с примитивами ОС. Например, с сокетами для связи с контрольным сервером — так, чтобы в списке импортируемых вредносом функций не было видно ничего про сеть. Еще один связанный с API ОС-пример, не относящийся напрямую к PIC, — это снятие установленных защитными решениями хуков или расстановка собственных на системные вызовы, с помощью которых ОС ведет журналы и регистрирует события. Так что польза для злого кода в независимости от расположения в памяти есть. Чтобы ее получить, разработчику нужно использовать немного «ненормативные» техники, которые редко встречаются в легитимном ПО. Вот на них и посмотрим на примере живых имплантов.
Компания: Яндекс
Компания: Huawei