Аналитики по кибербезопасности Linux проводят бесчисленные часы, выискивая вредоносные программы, чтобы понять их функциональность, происхождение и влияние.
Вот шесть команд Linux, которые помогают мне в этом процессе и которые, как я считаю, должен иметь в своем арсенале каждый профессионал в этой области.
1. strings
Команда strings
– спаситель на начальных этапах анализа вредоносного ПО. С ее помощью я извлекаю из двоичного файла печатаемые строки, которые часто дают ценные сведения о функциональности вредоносной программы.
Например, я находил доменные имена, IP-адреса, сообщения об ошибках или названия функций, которые помогали мне лучше понять назначение вредоносной программы.
На скриншоте выше показан результат применения команды strings к двоичному файлу сборщика BetaBot. В нем содержится информация о программе, включая номера версий и сведения о разработчике.
2. file
Команда file
– моя палочка-выручалочка для определения типа любого файла. Это простой, но эффективный инструмент, который позволяет определить исполняемые файлы, скрипты, архивы и даже некоторые типы документов. Эта команда помогла мне получить базовое представление о файле, с которым я имею дело, что является важнейшим первым шагом в анализе вредоносного ПО.
Хотите узнать тип файла, с которым вы имеете дело? Инструмент file полезен на начальном этапе анализа. После этого аналитики могут принять решение о следующем шаге.
Например, здесь команда file показывает, что данный файл является исполняемой программой, предназначенной для запуска в системах Microsoft Windows Технические характеристики указывают на то, что это исполняемый файл формата PE32, обычного формата для программ Windows, а метка (GUI) указывает на наличие графического интерфейса для взаимодействия с пользователем.
Интересно, что, хотя это исполняемый файл Windows, дополнительная информация показывает, что это также сборка Mono/.Net. Mono – это фреймворк, позволяющий запускать приложения .NET, обычно предназначенные для Windows, на других операционных системах.
Видите, команда выглядит просто, но она весьма полезна.
3. xxd
Команда xxd
– это универсальный инструмент, который я использую для создания шестнадцатеричного дампа файла или для выполнения обратной операции.
Шестнадцатеричные дампы незаменимы, когда мне нужно изучить необработанные байты файла, например, при поиске определенных шаблонов или сигнатур. Это также удобный инструмент для изучения содержимого бинарных файлов непосредственно в терминале.
Здесь вы можете увидеть магические байты „MZ“, которые являются сигнатурой для исполняемых файлов в операционной системе Windows
4. objdump
Команда objdump
– это мощный инструмент, который я использую для отображения информации об одном или нескольких объектных файлах. Она может дизассемблировать исполняемые файлы, предоставляя низкоуровневое представление о коде, который выполняет вредоносная программа.
Это было особенно полезно при работе с обфусцированными или зашифрованными вредоносными программами, а также с вредоносными программами, разработанными специально для Linux. Помогает понять, как работают программы.
Например, на скриншоте мы можем увидеть и изучить скомпилированный двоичный файл.
Здесь я использую objdump для дизассемблирования функции с именем «main» в объектном файле. На выходе вы видите ассемблерные инструкции вместе с соответствующими им адресами памяти и машинным кодом.
Эти инструкции связаны с установкой окружения функции в стеке, выделением места для локальных переменных и их инициализацией. Заключительная инструкция перехода перенаправляет поток программы в другую часть функции.
5. nm
Команда nm
– это инструмент, который я использую для получения списка символов из объектных файлов. Она полезна для определения функций и переменных, используемых в программе, что может дать мне ценные подсказки о функциональности вредоносного ПО. Эта команда помогла мне понять структуру вредоносной программы и ее потенциальные возможности.
Приведенная здесь команда nm раскрывает информацию о символах (функциях и переменных) в файле с именем «a.out». Она показывает адрес памяти, по которому символ находится в памяти программы, код, указывающий на его тип (функция, переменная данных и т. д.), и, наконец, имя символа.
Например, одна строка показывает функцию _init по адресу 0×40, вероятно, внутреннюю функцию для инициализации программы. Таблица символов, отображаемая nm, является ценным инструментом для программистов. Она позволяет понять структуру программы, идентифицировать конкретные части по именам символов и адресам памяти, а также помогает при отладке или обратном проектировании.
6. gdb
GNU Debugger (gdb
) позволяет мне запускать программы в контролируемой среде, устанавливать точки остановки, исследовать память и многое другое. Этот инструмент был незаменим при глубоком анализе вредоносных программ, помогая мне понять их внутреннее устройство.
На скриншоте видно, как GDB можно использовать для изучения реверс-инжиниринга. Я показываю разборку функции main() простой программы «Hello, world», устанавливаю на ней точку останова и запускаю программу. После этого я проверяю значение указателя инструкций (EIP).
Анализ киберугроз Linux в ANY.RUN
ANY.RUN – это «облачная» песочница, позволяющая быстро обнаруживать угрозы. Она предоставляет виртуальные среды Windows и Linux, в которых можно безопасно детонировать и анализировать вредоносные файлы и URL-адреса. Интерактивность – краеугольный камень ANY.RUN, поскольку она позволяет контролировать процесс анализа, взаимодействуя с системой, в том числе запуская программы, открывая документы и загружая файлы из Интернета.
Некоторые из ключевых особенностей ANY.RUN включают:
- Быстрое обнаружение угроз менее чем за 40 секунд.
- Глубокая информация о вредоносной сетевой активности, изменениях в реестре, процессах и т. д.
- Подробные отчеты, содержащие конфигурации вредоносных программ, индикаторы компрометации (IOC) и TTP.
Комментарии (0)