Способ обнаружения скрытого программного обеспечения в вычислительной системе, работающей под управлением POSIX-совместимой операционной системы
DETECTION METHOD OF THE HIDDEN SOFTWARE IN THE COMPUTING SYSTEM, RUNNING UNDER THE POSIX-COMPATIBLE OPERATING SYSTEM

Область техники, к которой относится изобретение
Предлагаемое изобретение относится к вычислительной технике и, в частности, к способам обнаружения скрытого программного обеспечения в вычислительных системах, работающих под управлением POSIX-совместимых операционных систем, например Solaris, Android и др.
Уровень техники
В современных вычислительных системах, работающих под управлением POSIX-совместимых операционных систем (ОС), возможно появление программ, предназначенных для сокрытия в системе определенных объектов либо активностей (руткитов). Чаще всего такая активность связана с работой вредоносного программного обеспечения (ПО). Сокрытию, как правило, подвергаются ключи реестра (например, отвечающие за автозапуск объектов), файлы, процессы в памяти зараженного компьютера, сетевая активность.
Существуют решения, направленные на обнаружение процессов или активностей в вычислительной системе и способные выявлять скрытые процессы, но не уведомлять об этом пользователя.
Так, например, в составе ОС Android имеются штатные программные средства Activity Manager, Package Manager и Procfs [1, 2, 3].
Activity Manager является системным вызовом, обрабатывающим все активности, запущенные в системе. Простые приложения состоят из одной активности. Более сложные приложения могут иметь несколько окон, т.е. они состоят из нескольких активностей, которыми надо уметь управлять и которые могут взаимодействовать между собой. Работает Activity Manager следующим образом: после запроса пользователя на запуск приложения, например, нажатием на соответствующую иконку в меню, срабатывает onClick() событие, вызывающее метод startActivity() у объекта Activity Manager. Поскольку приложение не может напрямую вызвать обработчик, оно формирует и отправляет запрос на Binder, который, в свою очередь, перенаправляет запрос на Service Manager и отправляет обработчик приложению. Таким образом, использование Activity Manager дает возможность контролировать список запущенных приложений, их имена и идентификаторы процессов.
Недостатком Activity Manager является возможность использование фоновых процессов, не имеющих активностей, что позволяет обойти контроль.
Package Manager работает следующим образом: информация об установленном приложении записывается в XML файл [4], затем Package Manager контролирует этот файл, добавляя и удаляя строки по мере установки и удаления пакетов. Получение списка процессов происходит путем чтения файла. Таким образом, использование Package Manager дает возможность контролировать список установленных приложений, а также просмотреть имя приложения, состояние и набор предоставленных приложению разрешений.
Недостатком Package Manager является возможность модификация XML файла, что также позволяет обойти контроль.
Программа Proсfs позволяет получить доступ к информации о системных процессах, обрабатываемых в ядре ОС. При запуске Procfs создает двухуровневое представление пространств процессов. На верхнем уровне процессы представляют собой директории, именованные в соответствии с их идентификатором - pid. Также на верхнем уровне располагается ссылка на директорию, соответствующую процессу, выполняющему запрос; ссылка может иметь различное имя в различных ОС.
Недостатком Procfs является возможность модификация прошивки с целью внесения приложения в список системных, что позволяет обеспечить сокрытие приложения.
Описанные способы приняты за прототип.
Раскрытие изобретения
Техническим результатом является повышение защищенности вычислительной системы.
Для этого предлагается способ обнаружения скрытого программного обеспечения в вычислительной системе, работающей под управлением POSIX-совместимой операционной системы, причем операционная система, помимо ядра, включает следующие программные средства:
- 1-е средство, выполненное с возможностью определять количество инсталлированных приложений в вычислительной системе,
- 2-е средство, выполненное с возможностью определять количество запущенных процессов в вычислительной системе,
- 3-е средство, выполненное с возможностью определять для процессов статусы pid, name, uid, groups, state,
- 4-е средство, выполненное с возможностью сравнивать результаты работы 1-го, 2-го и 3-го средств;
способ, заключающийся в том, что
- получают с помощью 1-го средства количество инсталлированных приложений в вычислительной системе;
- получают с помощью 2-го средства количество запущенных процессов в вычислительной системе;
- получают с помощью 3-го средства значения статусов pid, name, uid, groups, state каждого процесса;
- выполняют с помощью 4-го средства для каждого процесса, список которых получен с помощью 3-го средства, следующие действия:
○ сравнивают значение статуса groups, полученное из 3-го средства, с нулем; если значение статуса groups равно нулю - приложение считается скрытым и сведения о приложении заносятся в отчет о наличии скрытых приложений и процессов;
○ сравнивают значения статусов uid и name, полученные из 3-го средства, с соответствующими значениями uid и name, полученными из 1-го средства; если хотя бы одно из значений одноименных статусов не существует или не совпадает - приложение считается скрытым и сведения о приложении заносятся в отчет о наличии скрытых приложений и процессов;
○ сравнивают значения статусов pid, name и state, полученные из 3-го средства, с соответствующими значениями pid, name и state, полученными из 2-го средства; если хотя бы одно из значений одноименных статусов не существует или не совпадает - процесс считается скрытым и сведения о процессе заносятся в отчет о наличии скрытых приложений и процессов;
- предоставляют отчет о наличии скрытых приложений и процессов.
Для работы способа необходимо обеспечить наличие в системе четырех средств:
- 1-е средство, выполненное с возможностью определять количество инсталлированных приложений в вычислительной системе,
- 2-е средство, выполненное с возможностью определять количество запущенных процессов в вычислительной системе,
- 3-е средство, выполненное с возможностью определять для процессов статусы pid, name, uid, groups, state,
- 4-е средство, выполненное с возможностью сравнивать результаты работы 1-го, 2-го и 3-го средств.
В основе способа лежит последовательный анализ полей каждого из приложений, список которых получен при помощи механизма, используемого в штатном программном средстве типа Proсfs.
Опытным путем установлено, что приложения, которые были установлены неофициальным путем (в обход официальных центров дистрибуции), имеют нулевое значение статуса groups. Механизм Procfs позволяет определить значение этого статуса. В случае, если значение статуса groups равно нулю - приложение считается скрытым, а факт сокрытия заносится в отчет.
Механизм Package Manager отслеживает установленные приложения. Если приложение было удалено - то есть отсутствует в списках Package Manager - оно не должно встретиться в Procfs. Для определения необходимо сравнить значения статусов name и uid.
В случае, если значения статусов name и uid существуют и совпали - приложение считается скрытым, а факт сокрытия заносится в отчет.
Activity Manager отслеживает запущенные активности. На этом этапе происходит две проверки:
- во-первых, запущенное приложение должно быть установлено, следовательно, имеет uid, что может быть проверено путем сравнения пары name-uid, полученной с помощью механизма Activity Manager, с парой name-uid, полученной с помощью механизма procfs;
- во-вторых, запущенное приложение должно иметь активность, следовательно, имеет pid и состояние «Running», что может быть проверено путем сравнения группы name-pid-state, полученной с помощью механизма Activity Manager с группой name-pid-state, полученной с помощью механизма Procfs.
В случае если хотя бы одна из проверок неуспешна (т.е. соответствующие поля не совпали или хотя бы одно из них не определено), то приложение считается скрытым, а факт сокрытия заносится в отчет.
Таким образом, предложенный способ позволяет выявить скрытые приложения, которые известными способами не могут быть выявлены, и, при необходимости, предпринять меры по удалению (нейтрализации) этих приложений, что повышает защищенность вычислительной системы.
Осуществление изобретения
Реализация предложенного способа может быть осуществлена в вычислительной системе, работающей под управлением любой POSIX-совместимой ОС, например Solaris, Android и др.
Рассмотрим осуществление способа на примере ОС Android 4.2.
В качестве 1-го средства, способного определять количество инсталлированных приложений в вычислительной системе, может быть использована штатная программа Activity Manager.
В качестве 2-го средства, способного определять количество запущенных процессов в вычислительной системе, может быть использована штатная программа Package Manager.
В качестве 3-го средства, способного определять для процессов статусы pid, name, uid, groups, state, может быть использована штатная программа Procfs.
Для подготовки к использованию предлагаемого способа необходимо сформировать 4-е средство, позволяющее сравнивать результаты работы 1-го, 2-го и 3-го средств. Это средство представляет собой программу, которую, зная ее назначение и выполняемые функции, может сформировать специалист в области программирования (программист). Подготовленное 4-е средство после сформирования устанавливается (инсталлируется) в вычислительную систему.
Затем вычислительная система начинает работу в обычном режиме. В ходе ее работы
- получают с помощью 1-го средства количество инсталлированных приложений в вычислительной системе,
- получают с помощью 2-го средства количество запущенных процессов в вычислительной системе,
- получают с помощью 3-го средства значения статусов pid, name, uid, groups, state каждого процесса.
Получение сведений осуществляется 4-м средством путем выполнения запросов ко всем остальным средствам. Все полученные сведения передаются в 4-е средство и образуют текущий список (таблицу).
После этого выполняют с помощью 4-го средства для каждого процесса из текущего списка следующие действия:
○ сравнивают значение статуса groups, полученное из 3-го средства, с нулем; если значение статуса groups равно нулю - приложение считается скрытым и сведения о приложении заносятся в отчет о наличии скрытых приложений и процессов;
○ сравнивают значения статусов uid и name, полученные из 3-го средства, с соответствующими значениями uid и name, полученными из 1-го средства; если хотя бы одно из значений одноименных статусов не существует или не совпадает - приложение считается скрытым и сведения о приложении заносятся в отчет о наличии скрытых приложений и процессов;
○ сравнивают значения статусов pid, name и state, полученные из 3-го средства, с соответствующими значениями pid, name и state, полученными из 2-го средства; если хотя бы одно из значений одноименных статусов не существует или не совпадает - процесс считается скрытым и сведения о процессе заносятся в отчет о наличии скрытых приложений и процессов.
В результате формируется отчет (например, в виде текстового файла), в котором будут содержаться сведения о скрытых приложениях и процессах в вычислительной системе. Этот отчет может предоставляться администратору вычислительной системы и/или пользователям по выбору.
Реализацию способа можно производить в ходе работы вычислительной системы однократно, в заданные моменты времени или, что более предпочтительно, периодически.
В общем случае, отчет может содержать перечень скрытых приложений и процессов. В этом случае администратор вычислительной системы и/или пользователь, имеющий достаточную квалификацию, будет осведомлен о наличии потенциально вредоносных программ в системе и может, при необходимости, предпринять меры по удалению (нейтрализации) этих приложений и процессов одним из известных методов. Если же отчет пустой, то работа вычислительной системы может продолжаться в обычном режиме.
Источники информации
1. Google Inc. Activity [Электронный ресурс] - Режим доступа к ресурсу: http://developer.android.com/reference/android/app/Activity.html (дата обращения: 27.04.2016).
2. Google Inc. PackageManager [Электронный ресурс] - Режим доступа к ресурсу: http://developer.android.com/reference/android/content/pm/PackageManager.html (дата обращения: 27.04.2016).
3. Devyn С. Johnson. Procfs and the Proc Directory [Электронный ресурс] - Режим доступа к ресурсу: http://www.linux.org/threads/procfs-and-the-proc-directory.4928 (дата обращения: 27.04.2016).
4. Ketan Parmar. In Depth: Android Package Manager and Package Installer. [Электронный ресурс] - Режим доступа к ресурсу: https://dzone.com/articles/depth-android-package-manager (дата обращения: 27.04.2016).