Получить уведомление о создании процесса в Mac OS X -- macos поле с участием hook поле с участием kernel-extension пол Связанный проблема

Get process creation notification in Mac OS X


3
vote

проблема

русский

Я пытаюсь написать kext для Mac OS X, который будет уведомлен, когда начнется любой процесс.

В Windows вы можете сделать это, вызывая PSSetloadiMageNotifyROutine (...) и указать обратный вызов, который будет вызываться, когда процесс запускается. Это задокументировано, и он работает во всех окнах, начиная с Win 2K.

Есть что-нибудь подобное для Mac? Похоже, что это можно достичь с использованием прослушивателей Kauth Process, но в ОС X.

Другая альтернатива - зацепить sys_execve и друзей, но это не документировано и неподдерживаемый путь. Я действительно не хочу идти таким образом.

Мне не нужно никакой отмены - просто хочу быть уведомленным, когда процесс запускается, и получить его PID & AMP; путь.

Английский оригинал

I am trying to write kext for Mac OS X which will get notified when any process is started.

In Windows you can do this by calling PsSetLoadImageNotifyRoutine(...) and specify callback which will be called when the process is starting. This is documented way and it works in all Windows starting from Win 2k.

Is there anything similar for Mac? It seems like this is possible to achieve using kauth process listeners, but process scope has never been implemented in OS X.

Another alternative is to hook SYS_execve and friends, but this is undocumented and unsupported way. I really don't want to go this way.

I don't need any cancelling - just want to be notified when process is started, and get it's pid & path.

</div
        

Список ответов

5
 
vote
vote
Лучший ответ
 

Ну, ваш вопрос немного неоднозначен.

"Уведомление, когда любой процесс запущен" imho означает <код> fork syscall, а не <код> execve . Однако я понятия не имею, если вы можете быть уведомлены о fork любым официальным API.

Если execve - это то, что вы заинтересованы, посмотрите на Авторизация ядра (Kauth) API .

Вы можете зарегистрироваться в KAUTH_SCOPE_VNODE и отслеживать для <код> KAUTH_VNODE_EXECUTE , чтобы быть уведомленным до того, как выполняется выполнение (и, возможно, отрицать его, чтобы добиться успеха по возврату от вашего обратного вызова); Или зарегистрируйтесь <Код> .0 и дороже для <код> .1 , чтобы быть уведомленным после того, как .2 выполняется.

 

Well, your question is a bit ambiguous.

Being "notified when any process is started" IMHO means the fork syscall, not execve. However I have no idea if you can be notified on fork by any official API.

If the execve is what you are interested in, take a look at the kernel authorization (kauth) API.

You can register in KAUTH_SCOPE_VNODE and track for KAUTH_VNODE_EXECUTE to be notified before the execve performs (and possibly deny it to succeed by return value from your callback); or register in KAUTH_SCOPE_FILEOP and track for KAUTH_FILEOP_EXEC to be notified after the execve() is performed.

</div
 
 
   
   
1
 
vote

Старый вопрос - но - Ответ, указав SYS_EXECVE CLIPING - это единственный способ, которым можно уведомлять неверно и опасно. Для одного, таблица Sysent не экспортируется (хотя, возможно, его можно легко найти довольно легко). На двоих вам нужно исправить память и убедиться, что это RW.

Намного лучше, в kext, это использовать Mac Framework (это было бы обязательным контролем доступа). Это в источниках XNU, в отделении / безопасности. MAC Framework была разработана для именно такого рода операций - I.E. Уведомления / подключением без фактической функции или адреса перезаписать, но с вычислениями. Это также подробно описано в книге «Mac OS X и IOS Internals», глава 14.

 

Old question - but - The answer stating SYS_execve hooking is the only way to be notified is incorrect and dangerous. For one, the sysent table is not exported (though arguably it can be found fairly easily). For two, you have to patch the memory and ensure it's rw.

A MUCH better way, in a kext, is to use the MAC framework (that would be Mandatory Access Control). That's in the XNU sources, in the /security branch. The MAC Framework was designed for exactly this kind of operations - i.e. notifications/hooking without actual function or address overwrite, but with callouts. This is also detailed in a book titled "Mac OS X and iOS Internals", Chapter 14.

</div
 
 
0
 
vote

sys_execve holling - это единственный способ быть уведомлен, когда любой процесс запускается. Кроме того, вы можете попробовать использовать DTRace и Libdtrace для приема процесса, запущенного уведомления; Я пытался таким образом, но без успеха.

 

SYS_execve hooking is only way to be notified when any process is started. Also, you could try to use DTrace and libdtrace for receiving process started notification; I've been trying that way but without success.

</div
 
 
   
   
0
 
vote

Вот пример с использованием Mac и Kauth.

https: / /www.synack.com/2015/11/17/monitoring-process-creationion-via-the-kernel-part-i/

 

Here's an example using the MAC and KAUTH.

https://www.synack.com/2015/11/17/monitoring-process-creation-via-the-kernel-part-i/

</div
 
 

Связанный проблема

1  Как мне запустить команду во всех файлах в папке (которая имеет подпункты), используя exiftool?  ( How do i run a command on all files in a folder which has sub folders using ex ) 
У меня есть папка, называемая фотографии & amp; Видео . У него есть папки для различных лет, для которых у меня есть фотографии и видео. В течение года пап...

2  Ошибка установки Scipy с использованием PIP3  ( Error installing scipy using pip3 ) 
Я пытаюсь установить Scipy на OS X 10.8.5, используя PIP3 следующим образом: <код> pip3 install scipy Но я получаю следующие ошибки: <код> compile opt...

0  Mac Yosmite: Установите MacPorts Apache в качестве по умолчанию (Opt / local / apache2) на localhost, а не распределение OSX  ( Mac yosmite set macports apache as default opt local apache2 on localhost rat ) 
Я установил Apache через MACPPORTS, он работал нормально, но вдруг по какой-то причине он переключился на использование распределения OSX по умолчанию Apache,...

0  За петлю в Bash просто работает один раз  ( For loop in bash just runs once ) 
Я делаю проверку разрешения в Bash, но этот цикл просто работает один раз и заканчивается без ошибки: <код> for file in *; do WIDTH = $(identify -ping -f...

1  Не удается подключиться к MySQL с помощью HostName WildCard  ( Cant connect to mysql with hostname wildcard ) 
Я установил <код> MySQL на мой Mac (с установщиком MAPP) и иметь проблему. Когда я создаю пользователя с хостом «@%» так: <код> CREATE USER 'test'@'%' IDEN...

0  Как я могу получить доступ к способу DetailViewController от SourceViewController; как внутри NSSPLitViewController (Objective-C)  ( How can i access a detailviewcontroller method from sourceviewcontroller both i ) 
Я новичок, чтобы объектировать - C и почувствовать, что важно учиться. Я дал себе следующую проблему: У меня установка NSSPLITViewController с двумя классам...

31  Включение поддержки PostgreSQL в PHP на Mac OS X  ( Enabling postgresql support in php on mac os x ) 
У меня ужасно трудно получить команду «pg_connect ()», чтобы правильно работать на моем Mac. В настоящее время я пишу PHP-скрипт (для выполнения от консоли), ...

0  Ошибка шины: 10 при попытке доступа к серверу с помощью SSH на MacOS  ( Bus error 10 when trying to access server using ssh on macos ) 
<Р> Я получаю странные ошибки при попытке получить доступ к своему серверу через SSH, используя Macos терминал. Ошибки я получаю Ошибка шины: 10 . Я попытался...

6  Unsync'd git репозиторий в dropbox  ( Unsyncd git repository in dropbox ) 
У меня есть репозиторий Git (и рабочий каталог), который хранится в моем dropbox, поэтому я могу двигаться вперед и назад между компьютерами без необходимости...

3  Установка Django на OSX  ( Django installation on osx ) 
<Сильные> ОС: OS X 10.7.5 У меня есть pyhton 3.3.2 установлен в папке приложений, и я использую простаистых сценариев Python. Я использовал ниже команду дл...

2  Как r локация может быть настроено для Rstudio  ( How can the r location be customized for rstudio ) 
Я ранее использовал доморь, чтобы установить R и установщик пакета для RSTUDIO. Недавно я начал использовать Boxen, который берет на себя доме. Я должен был п...

16  Практическая практика использовать символы Unicode или формы в приложении ?  ( Is it bad practice to use unicode symbols or shapes in a app ) 
Там было несколько раз, когда я использовал символы Unicode вместо небольших иконок в одном из моих приложений какао, либо потому, что легче нарисовать встрое...

1  Смотреть изменения в Mac OS X  ( Watching changes in mac os x ) 
Я работаю в приложении о безопасности для Mac OS X, и мне нужно смотреть любые действия на компьютере, такими как USB, FireWire, сетевые интерфейсы, аудио IO,...

1  Подключение к базе данных DB2 (DB2 / 400) работает на iSeries AS400 через Linux / OSX  ( Connecting to db2 db2 400 database running on an iseries as400 via linux osx ) 
Мое требование простое: у меня есть веб-приложение Rails, которое необходимо прочитать некоторые данные из DB2, работающих на iSeries AS400 . С помощью All...

2  Развертывание нескольких рабов Дженкинса на Mac  ( Deployment of multiple jenkins slaves on a mac ) 
Я много прочитал о запуске нескольких рабов на хост-машине, у которого есть мастер Дженкинса, работающий на нем, я немного запутался тем, как двигаться вперед...

Связанный проблема

1  Как мне запустить команду во всех файлах в папке (которая имеет подпункты), используя exiftool? 
2  Ошибка установки Scipy с использованием PIP3 
0  Mac Yosmite: Установите MacPorts Apache в качестве по умолчанию (Opt / local / apache2) на localhost, а не распределение OSX 
0  За петлю в Bash просто работает один раз 
1  Не удается подключиться к MySQL с помощью HostName WildCard 
0  Как я могу получить доступ к способу DetailViewController от SourceViewController; как внутри NSSPLitViewController (Objective-C) 
31  Включение поддержки PostgreSQL в PHP на Mac OS X 
0  Ошибка шины: 10 при попытке доступа к серверу с помощью SSH на MacOS 
6  Unsync'd git репозиторий в dropbox 
3  Установка Django на OSX 
2  Как r локация может быть настроено для Rstudio 
16  Практическая практика использовать символы Unicode или формы в приложении ? 
1  Смотреть изменения в Mac OS X 
1  Подключение к базе данных DB2 (DB2 / 400) работает на iSeries AS400 через Linux / OSX 
2  Развертывание нескольких рабов Дженкинса на Mac