Mac OS X

  1. Ключевые особенности системы Mac OS X
  2. Ссылка на систему из систем Mach и BSD
  3. Среда выполнения
  4. Формат исполняемого файла Mach-O
  5. Структура Mach-O
  6. Инструменты анализа программ
  7. Инструменты динамического анализа
  8. Инструменты статического анализа
  9. Анализ вредоносного кода: примеры
  10. IM-Worm.OSX.Leap
  11. Virus.OSX.Macarena
  12. приложение
Константин Сапронов

Год назад пользователями компьютеров Apple были в основном дизайнеры и специалисты DTP, фотографы и музыканты. Однако предыдущий год оказался прорывом в Mac по многим причинам. После того, как Apple объявила, что собирается выпускать компьютеры с процессорами Intel, многие стали задумываться об использовании этих компьютеров дома. Разработчики также заметили рост популярности Mac OS X и начали продавать собственные продукты для этой платформы.

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

Следует отметить, что Mac OS X является операционной системой Unix и имеет множество функций из других систем Unix. По этой причине эта статья будет более доступной для пользователей, имеющих опыт работы с такими системами, как Linux или FreeBSD. Некоторый опыт тестирования программ для любого типа операционной системы также облегчит понимание этой статьи.

Ключевые особенности системы Mac OS X

При анализе программ, в том числе и вредоносных, всегда полезно знать ключевые функции операционной системы. Mac OS X основана на Unix, что проявляется в дизайне OS X и общих принципах работы системы. Эта система приняла межпроцессорное взаимодействие от Маха и сетевой стек от BSD.

Ссылка на систему из систем Mach и BSD

Xnu - ядро ​​Mac OS X - основано на ядрах Mach и FreeBSD, но также содержит функции из MkLinux, NetBSD, OpenBSD и нескольких проектов разработки Mach. Mac OS X поддерживает системные вызовы из систем Mach и BSD. Поскольку ядро ​​OS X в равной степени основано на операционных системах Mach и FreeBSD, ядро ​​Mac OS X - xnu - содержит две системные справочные таблицы (Mach и BSD) и поддерживает API для систем BSD и Mach.

Среда выполнения

Для обеспечения поддержки предыдущих операционных систем Mac OS X имеет среду выполнения с тремя компонентами:

  1. Dyld Runtime Environment, основанная на динамическом загрузчике (динамический загрузчик dyld).
  2. Среда исполнения CFM. Это наследие после OS 9 обеспечивает поддержку приложений, которые не могут быть запущены через dyld, но используют возможности Mac OS X. Это было реализовано в библиотеке Carbon.
  3. Classic Runtime Environment - среда, используемая для запуска старых приложений для OS 9 в OS X.

Благодаря вышеперечисленным функциям в Mac OS X вы можете запускать ряд приложений, в том числе старые версии операционной системы Mac.

Формат исполняемого файла Mach-O

В Mac OS X почти все файлы, которые содержат исполняемый код, включая приложения, библиотеки и модули ядра, имеют формат Mach-O.

Формат Mach-O изначально не был создан Apple; была разработана Open Source Foundation для операционной системы OSF / 1 (которая основана на системе Маха) и адаптирована Apple для архитектуры x86 как часть проекта OpenStep.

Формат файла Mach-O и спецификации Application Binary Interface (ABI) показывают, как исполняемый файл должен загружаться и запускаться ядром. Они предоставляют операционной системе следующую информацию:

  • как работает динамический загрузчик?
  • как загрузить отдельные библиотеки,
  • как организовать адресное пространство процесса,
  • где найти точку входа,
  • и т.д.

Поскольку Mach-O является основным форматом исполняемых файлов в Mac OS X, давайте подробнее рассмотрим его структуру.

Структура Mach-O

Файлы Mach-O можно условно разделить на три части: заголовок, команды загрузки и сегменты, которые могут состоять из нескольких разделов. Команды header и load определяют основные функции файла, а сегмент данных содержит набор байтов, которые подключаются к командам загрузки.

Заголовок Первые четыре байта в заголовке определяют так называемое магическое число, которое идентифицирует файл как 32-битный или 64-битный. Это также помогает определить порядок байтов для процессора. Заголовок определяет архитектуру, для которой был скомпилирован файл. Благодаря этому ядро ​​может гарантировать, что файлы будут запускаться только на той платформе, для которой файл был скомпилирован. Иногда двоичные файлы могут содержать код для более чем одной архитектуры. Этот формат известен как Universal Binaries. В этом случае файл будет начинаться с расширенного заголовка (толстый заголовок).

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

Сегменты и разделы. Исполняемые файлы в формате Mach-O обычно имеют 5 сегментов:

  • __PAGEZERO находится по нулевому виртуальному адресу и не имеет никакой защиты. Этот сегмент не имеет области в файле или на диске.
  • __TEXT содержит данные, которые могут быть доступны только для чтения или выполнения.
  • __DATA содержит данные, к которым вы можете что-то добавить. Этот раздел помечен как копируемый при записи.
  • __OBJC содержит данные, используемые для сред выполнения Objective C.
  • __LINKEDIT содержит данные, используемые для установления динамических соединений.

Сегменты __TEXT и __DATA содержат ноль или более разделов. Каждый раздел содержит данные определенного типа, например, исполняемый код, константы, строки и т. Д. Таким образом, исполняемый и неисполняемый код хранится в одном и том же сегменте, но отдельно.

Инструменты анализа программ

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

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

Инструменты динамического анализа

Как и в большинстве систем Unix, Mac OS X предлагает множество инструментов, которые могут быть полезны для динамического анализа приложений и диагностики системы. Многие из них перешли на Mac из Unix, но есть также программы, которые были разработаны исключительно для Mac OS X. Ниже приводится краткое описание нескольких инструментов, которые можно установить из дистрибутива Mac OS X.

Эти инструменты можно разделить на две категории:

  1. Инструменты, используемые для тестирования процессов:
    • fs_usage - предоставляет информацию о системных ссылках, связанных с деятельностью файловой системы;
    • куча - перечисляет все блоки памяти, выделенные динамической памяти отдельным процессом;

    fs_usage - предоставляет информацию о системных ссылках, связанных с деятельностью файловой системы;   куча - перечисляет все блоки памяти, выделенные динамической памяти отдельным процессом;

    • lsof - отображает файлы, открытые различными процессами;

    lsof - отображает файлы, открытые различными процессами;

    • top - отображает статистику использования различных системных ресурсов;
    • vm_stat - отображает статистику использования виртуальной памяти;
    • gdb - отладчик для удаленного удаления ошибок из программ;
    • ddb - отладчик ядра, требующий подключения через последовательный порт;
    • ktrace - отслеживает события системного уровня на уровне ядра для конкретных процессов;
    • kdump - отображает информацию, сгенерированную программой ktrace;
    • sc_usage - отображает статистику для определенного процесса, например, используя процессорное время, системные ссылки и т. д.

    д

  2. Сетевые инструменты.

    Перечисленные ниже системные утилиты хорошо известны в мире Unix.

    • netstat - предоставляет различные данные о сетевой подсистеме;

    netstat - предоставляет различные данные о сетевой подсистеме;

    • tcpdump - отображает сетевой трафик.

Mac OS X также может использовать многие другие сетевые инструменты, хорошо известные пользователям Unix, например, nmap и WireShark.

Следует отметить, что большинство Unix-программ с открытым доступом к исходному коду можно легко адаптировать для работы в Mac OS X. Опытный пользователь Unix сможет создать рабочую среду, практически идентичную известной среде Unix.

Инструменты статического анализа

Относительно часто невозможно запустить анализируемую программу. Иногда по соображениям безопасности лучше не запускать программу.

Поскольку формат исполняемых файлов в Mac OS X - Mach-O, при статическом анализе в этой операционной системе следует учитывать несколько вещей.

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

  • файл - указывает тип файлов;

файл - указывает тип файлов;

  • otool - используется для анализа файлов Mach-O;

otool - используется для анализа файлов Mach-O;

  • xxd - позволяет переводить двоичные файлы в шестнадцатеричный формат и наоборот;
  • ИДАПро - дизассемблер.

С ростом популярности Mac OS X, работающей с процессором Intel, многие компании-разработчики опубликовали версии своих приложений для этой платформы. Список операционных систем, поддерживаемых новой версией Mac OS X 5.1, включает IDAPro.

Это значительно упростит жизнь пользователям, мигрирующим из Windows. Иногда использование IDAPro позволяет выполнять некоторые задачи быстрее и проще, чем при использовании стандартных инструментов Mac OS X.

Анализ вредоносного кода: примеры

Чтобы привести некоторые примеры, мы проанализируем вредителей IM-Worm.OSX.Leap и Virus.OSX.Macarena, используя некоторые из перечисленных выше инструментов. Следует отметить, что исследуемые вредоносные программы являются доказательством концепции; они не имеют вредоносной функции и не представляют серьезной угрозы. Их главная цель - показать, что создание такой программы возможно.

IM-Worm.OSX.Leap

Прыжок не может распространяться через Интернет - для этого используется мессенджер iChat. На первом этапе Leap распространяется с использованием приложения iChat в качестве приложения к файлу в RapidShare, «делая вид», что файл содержит скриншоты последней версии Mac OS X Leopard. Чтобы компьютер был заражен, получатель должен щелкнуть ссылку, подтвердить загрузку файла, распаковать файл и открыть его. После заражения компьютера файл будет отправлен (без каких-либо изменений) во весь список контактов пользователя через Bonjour.

Скачок распространяется в виде файла с именем latestpics.tgz. После распаковки файла в Finder он окажется файлом jpeg.

Поскольку Leap использует Spotlight, он будет работать только в версии Tiger (версия Mac OS X 10.4.x). Для запуска Leap требуется InputManager, хотя он не работает в системах x86. Более того, двоичный файл содержит код только для PowerPC. В результате Leap работает только на компьютерах PowerPC.

Чтобы начать анализ, нам нужно определить фактический формат файла последних изображений. Сначала мы запускаем файловую утилиту с аргументом latestpics: #file latestpics. Оказывается, что файл на самом деле является файлом Mach-O.

Оказывается, что файл на самом деле является файлом Mach-O

Далее мы используем otool для просмотра заголовка двоичного файла: #otool -h latestpics.

Далее мы используем otool для просмотра заголовка двоичного файла: #otool -h latestpics

Тогда вы можете увидеть точку входа в прыжок. Точку входа в формате файла Mach-O можно найти с помощью #: otool -l latestpics, который отображает команды загрузки. В этом случае интересной командой является LC_UNIXTHREAD, которая отображает начальное состояние основного потока процесса. В PowerPC вы захотите найти содержимое регистра srr0 - это точка входа.

В PowerPC вы захотите найти содержимое регистра srr0 - это точка входа

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

  • _copySelf
  • _infect
  • _infectApps

Теперь мы можем более подробно рассмотреть код с помощью инструмента otool -vt, который позволит нам просматривать содержимое раздела в сегменте __TEXT, где находится исполняемый код файла latestpics:

Строки отправляются системным функциям, но они шифруются с помощью функции _xor:

После декодирования строк мы получаем следующий результат:

/ usr / bin / tar -zxf / tmp / hook -C / tmp
/ Library / InputManagers
/ bin / rm -rf / Library / InputManagers / apphook
/ bin / mv -f / tmp / apphook / Библиотека / InputManagers
~ / Library / InputManagers
/ bin / rm -rf ~ / Библиотека / InputManagers / apphook
/ bin / mv -f / tmp / apphook ~ / Библиотека / InputManager
% s / Contents / MacOS /% s / bin / cp '% s' '% s / .. namedfork / rsrc'
/ bin / cp -f "% s" "% s"
(kMDItemKind == 'Приложение') (kMDItemLastUsedDate> = $ time.this_month) <wbr> / usr / bin / ditto% s / tmp / latestpics / usr / bin / gzip -f -q / tmp / latestpics

Анализ этих строк показывает, что на самом деле делает IM-Worm.OSX.Leap:

  • Копирует в / tmp как последние картинки;
  • Затем создает файл tgz;
  • Он извлекает менеджер ввода с именем apphook.bundle и копирует его в / tmp;
  • Если идентификатор равен 0, создается папка / Library / InputManagers /; все существующие apphoook удаляются, а новый apphook копируется из / tmp;
  • Если идентификатор имеет форму, отличную от 0, создается ~ / Library / InputManagers /;
  • Теперь, когда новое приложение Mac OS X было запущено, новый apphook будет загружен в адресное пространство;
  • При каждом запуске приложения будет делаться попытка отправить latestpics.tgz через мессенджер iChat.

Virus.OSX.Macarena

Чтобы начать анализ, вам необходимо определить формат файла. Как и выше, мы будем использовать файловый инструмент.

Результаты показывают, что это формат файла Mach-O.

Далее мы используем otool для просмотра заголовка файла и определения точки входа:

Далее мы используем otool для просмотра заголовка файла и определения точки входа:

Детальная проверка указывает на нетипичную точку входа в ноль адреса. Следующим шагом должен стать анализ кода, начиная с точки входа. Однако мы сталкиваемся с небольшой проблемой. Мы не можем разобрать эту часть файла Mach-O с помощью инструмента otool, потому что он может использоваться только для анализа кода в текстовом разделе сегмента __TEXT.

В этой ситуации мы можем использовать IDAPro. Однако сначала нам нужно загрузить файл в инструмент IDA в виде двоичного файла. Затем файл можно разобрать.

Macarena - первый вирус, заражающий файлы Mach-O в текущей папке.

Анализируя зараженный файл, вы заметите следующее:

Вирус меняет точку входа на ноль адреса. Вот где сегмент __PAGEZERO загружается в формате Mach-O. Как мы уже отмечали выше, при анализе файловой структуры Mach-O __PAGEZERO не имеет места в файле на диске. Вот почему код записывает в конец файла на диске. Этот метод может привести к неожиданному результату: такие приложения, как gdb, IDA и otool, не будут отображать код вируса.

Макарена - это относительно простой вирус. После запуска он заражает файлы в формате Mach-O для архитектуры x86. Существуют также более новые версии этого вируса, которые также заражают PPC-файлы, но эти варианты сильно отличаются от оригинальных.

Этот вирус не имеет другой вредной функции.

приложение

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

К счастью, в Mac OS X есть много инструментов, которые можно использовать для анализа других программ, а также для общей диагностики системы. Более того, появляется все больше и больше программ от «третьих лиц», которые могут использовать как ИТ-специалисты, так и любители-исследователи.