Особенности OS X

Троянская индустрия для Мака пока развита слабо. Для троянов нет необходимости изобретать концептуальные техники, так как успешно работают простые и документированные. Поэтому поиск трояна на Маке не должен составить труда или занять много времени.
Для статического анализа файловой системы OS X загружаемся в Single User Mode ( при загрузке системы) и монтируем корневой раздел ('mount - wu /'). Как вариант, можно загрузить систему с заведомо чистого загрузочного диска и работать с GUI. Если системный раздел зашифрован (legacy FileVault, FileVault2), обращаемся к соответствующим инструментам для его дешифровки (см., например, VileFaultHlibfvde).
Пользователи в OS X ограничены в привилегиях по умолчанию. Поэтому наиболее велика вероятность того, что троян установился в один из пунктов автозагрузки, доступных для обычного пользователя. С этих пунктов и начинаем анализ:
/Library/LaunchAgents/ - приблизительный эквивалент ключа реестра HKCU\...Run в Windows;
/Library/Preferences/ - настройки меню, виджетов и многое другое + ссылки на соответствующие исполнимые модули; /var/at/tabs/, /usr/lib/cron/tabs/ и тому подобное - файлы планировщика.
При анализе автозагрузок нас интересуют все ссылки на файлы, указанные в стандартных для OS X (plist) или UNIX-нативных (например, crontab) конфигурационных файлах. На троянский исполнимый модуль может ссылаться как его собственный файл настроек plist, так и модифицированный ptist легитимного приложения (хотя вторая техника не встречалась мне in the wild). Чтобы не усложнять анализ, мы просто получаем ссылки на файлы из всех подряд директорий автозагрузки в порядке приоритета и оцениваем их на предмет подозрительности. Пример - мои автозагрузки:
MacBook - Air - Alisa:~ user$ plutil - convert xmll Library/ -
LaunchAgents/.plist - о -| grep "/"
/System/Library/Frameworks/AddressBook.framework/ -
Resources/Address8ookSourceSyncScheduleHelper

/Applications/VirtualBox.app/Contents/MacOS/- vboxwebsrv
Выдача предыдущей команды отфильтрована по сигнификатору абсолютного пути "/", поэтому надо проверить, что модуль трояна не прописался в текущую директорию: MacBook - Air - Alisa:~ user$ Is Library/- LaunchAgents/ | grep - v ",plist$"
Анализируем ссылки на файлы примерно так:
Устанавливала ли я это приложение? Если нет:
Что знают в интернете о модуле с таким именем? Если ничего или ничего хорошего:
Что я могу узнать об этом модуле за пять минут? (strings , psaux i grep и тому подобное)
Подозрительные к этому моменту файлы складываем в отдельную папку и позднее анализируем более детально или отправляем на анализ любимому производителю антивирусов.
Если предположить, что трояну удалось повысить привилегии, список и его анализ усложняются. Ниже перечислены некоторые наиболее вероятные глобальные автозагрузки.
Точки старта системных демонов, приложений, заданий планировщика для всех пользователей:
/Library/Startupl terns
/Library/Launch Agents
/Library/Launch Daemons
/System/Library/Launch Agents
/System/Library/Launch Daemons
/Library/Preferences/
/etc/crontab
Модули ядра, загружаемые kextd при старте системы:
/System/Library/Extensions
Устаревшие директории:
/etc/гс. local
/etc/mach_init.d/
/etc/mach_init_per_login_session.d/
/etc/mach_init_per_Liser.d/
Отмечу, что известные на сегодняшний день трояны для Мака используют всего несколько пунктов из этого списка.
Пример: получаю перечень загружаемых при старте системы модулей ядра не от Apple (никаких kextstat, мы же работаем в статике) и немного исследую модуль, вызвавший подозрение:
MacBook - Air - Alisa:~ user$ cat 'find /System/Library/Extensions/name Info.plist' | grep "CFBundleldentifier"->A 1 I grep - v com.apple ( grep - P ".\..\." | awk 'a !-& $U (а=ЯГ
com.hp.hpio.hp_psa640_io_enabler com.hp.hpio.hp_psa530_630_io_enabler com.jmicron.3MicronATA com.promise.driver.stex com.silabs.driver.CP210xVCPDriver com.silabs.driver.CP210xVCPDriver64 com.softraid.driver.SoftRAID com.MosChip.driver.MCS7840 MacBook - Air - Alisa:~ user$ Is /System/Library/Extensions/ & I grep promise
MacBook - Air - Alisa:~ user$ mdfind - onlyin /System/Library/ Extensions/ "promise"
/System/Library/Extensions/PromiseSTEX.kext MacBook - Air - Alisa: Chrome> google "com.promise.driver.stex'
About 45 results (0.23 seconds)
MacBook - Air - Alisa:~ user$ cat /System/Library/Extensions/- - PromiseSTEX.kext/Contents/Info.plist


BuildMachineOSBuild
HA511CFBundleDevelopmentRegion
English
CFBundleExecutable
Promise5TEX
CFBundle6et!nfoString
Version: 5.0.62, Copyright (c)
2010 Promise Technologies, Inc.

MacBook - Air - Alisa: Chrome> google "Promise Technologies. Promise Technologies, Inc. | ATA RAID controllers and subsystems... www.motionmedia.com > Hardware
Напоследок немного исследовательского вдохновения. Все знают, что система OS X основана на FreeBSD и Mach и наследует некоторые их особенности. Менее известно, что эти особенности унаследованы бессистемно, наряду с устаревшими функциями проприетарной части системы. Например, стандартный для UNIX загрузочный скрипт rc.local отсутствует по умолчанию. А вот цитата из Mac Developer Library про него: «You can put these two commands in your /etc/rc.local file to execute at startup time». Читай: точки старта кода, унаследованные из старых версий OS X и ее предшественников, с большой вероятностью могут поддерживаться в последних версиях OS X, даже если отсутствуют в стандартной инсталляции. Тему нестандартных автозагрузок на Маке предоставим исследовать читателю. Рекомендуемая литература: Mac Developer Library Technical Note TN2083, раздел Deprecated Daemonomicon |goo.gl/qG8Pol.