Трудно предсказать заранее, когда вас вызовут для срочного сканирования вверенных систем на предмет поиска подозрительных файлов — следов вторжения или взлома. Даже применяя лучшие и своевременно обновляемые антивирусные приложения, нельзя быть абсолютно уверенным, что какая-то угроза не проникнет в охраняемый периметр. В подавляющем большинстве антивирусные обновления остаются актуальными только до появления нового вируса. К сожалению, исправления для нового вируса появляются только после того, как он кого-то успешно поразил, был замечен и попал в зону внимания соответствующих компаний.

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

Но в любом случае полезно иметь под рукой систему, способную просканировать компьютерные системы в случае обнаружения подозрительных файлов, которые могут появиться в системе в результате вирусной атаки, действия червей, хакеров, злоумышленников, вредоносных программ или по какой-то другой причине. Во многих современных компаниях установлены правила соблюдения режима безопасности, которые предусматривают регулярное сканирование компьютеров для выявления подозрительных файлов или сигнатур. Эта мера полезна даже в том случае, если никаких подозрительных симптомов не обнаружено. Но это весьма трудоемкое занятие, часто персонал ИТ-подразделений вынужден вручную запускать сканирование на всех системах компании, так как имеется не так уж много известных и надежных инструментов, позволяющих выполнять автоматическое сканирование всех компьютеров в домене Windows.

Приложение

Предлагаемая система Cyber Threat Scanner представляет собой сценарий VBScript для запуска двух бесплатных утилит, созданных сторонними разработчиками, а также несколько вспомогательных сценариев. Задачу можно было бы решить полностью на VBScript, эти же утилиты используются потому, что исполнение чистого VBScript потребует значительно больше времени.

Первая из утилит — свободно распространяемый пакет Agent Ransac от компании Mythicsoft — поисковый движок решения Cyber Threat Scanner для обнаружения подозрительных файлов в папках компьютера. Его можно загрузить с http://www.mythicsoft.com/agentransack/Page.aspx? page=download. Вторая утилита — общедоступная MD5deep, которая вычисляет контрольные суммы MD5 для файлов и может проверять на совпадение вычисленные контрольные суммы файлов с сигнатурами подозрительных файлов. Вы можете загрузить MD5deep.exe со страницы проекта http://md5deep.sourceforge.net/.

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

Поиск подозрительных файлов по шаблону — довольно трудоемкий и ответственный процесс, поэтому для формирования входных данных и запуска сценария VBScript требуется тщательная подготовка, а именно:

  • задать регулярные выражения для поиска имен интересующих вас подозрительных файлов;
  • создать список компьютеров, которые должны быть просканированы;
  • создать файл со списком контрольных сумм (в виде 32 символьных строк) подозрительных файлов, которые вы ищете.

Чтобы упростить процесс подготовки, было создано приложение CyberScanPrep.hta (HTML Application), которое помогает последовательно выполнить все необходимые действия. На экране показано окно этого вспомогательного приложения. Дополнительно для каждой области ввода данных предлагается собственная детальная контекстно-зависимая подсказка о данных, которые вводятся в данной области.

Подготовка запуска CyberThreatScanner с помощью CyberScanPrep.hta

Ввод данных

В большинстве случаев вам известны имена подозрительных файлов и связанные с ними контрольные суммы MD5, которые могут быть получены из авторитетных источников. Если же известны контрольные суммы (сигнатуры), то гораздо легче определить, что найденный файл действительно является подозрительным, это позволит уменьшить число ложных срабатываний, а после завершения сканирования потребуется значительно меньше усилий для анализа полученных данных. При этом в решении CyberThreatScaner предусмотрена возможность поиска файлов только по именам, без использования сигнатур, для этого достаточно будет просто установить флажок в приложении CyberScanPrep.hta. Но обычно, когда ставится задача поиска подозрительных файлов, сигнатуры этих файлов все же доступны, что позволяет существенно сократить объем работы.

Первое поле ввода программы содержит 32‑символьные контрольные суммы (сигнатуры) и соответствующие им имена файлов. Чтобы избежать ошибки и не допустить очевидных опечаток, при заполнении этого поля следует пользоваться операциями копирования/вставки данных из файла, переданного службой безопасности. В случае необходимости поиска нескольких файлов вводите сигнатуру и имя файла отдельными строками.

Следует иметь в виду, что данное приложение ищет не более девяти файлов (максимум, допустимый бесплатным вариантом Agent Ransack). Лично мне никогда не приходилось искать более пары-тройки файлов, но если вам потребуется искать более 9, для поиска дополнительных файлов придется запустить приложение с другого компьютера от имени другой учетной записи.

Если по какой-то причине в списке файлов для поиска нет сигнатур, установите флажок Do not use HashList («Не использовать сигнатуры»). При этом файл HashList.txt с сигнатурами подозрительных файлов не используется, и надо быть готовым к тому, что поиск может выдать значительно больший список подозрительных файлов, поскольку именно сопоставление сигнатур позволяет достаточно точно определить подозрительные файлы.

Ввод регулярных выражений

Следующее поле ввода предназначено для списка файлов, которые нужно искать. Agent Ransack обеспечивает значительную гибкость и позволяет использовать регулярные выражения при указании имен файлов. Для тех, кто хорошо владеет регулярными выражениями, задача не составит большого труда. Просто введите регулярное выражение для обозначения файлов для поиска. Помните, что число элементов для ввода ограничено 9.
Тем же, кто мало знаком с регулярными выражениями, предлагаю изучить примеры регулярных выражений на экране в области над полем ввода списка файлов. Регулярное выражение начинается со знака вставки (^), за которым следует открывающая скобка, имя файла, обратный слэш (), точка, расширение файла, закрывающая скобка и знак доллара. Ничего сложного.

О регулярных выражениях для использования в предлагаемом решении требуется знать следующее:

  • знак вставки означает начало регулярного выражения;
  • в скобки заключено само регулярное выражение для поиска;
  • обратная косая черта является специальным символом, который необходим потому, что символ точки является спецсимволом в регулярных выражениях. Обратная наклонная черта означает, что точку следует интерпретировать просто как символ точки, а не как элемент регулярного выражения
  • знак доллара означает конец регулярного выражения.

В большинстве случаев имена файлов для поиска заданы точно, так что глубокое знание регулярных выражений вам, скорее всего, не потребуется. Просто следуйте приведенному шаблону: знак вставки, круглые скобки, имя файла, обратная косая черта, точка, расширение файла, закрывающая скобка, знак доллара. Если потребуется задать более сложное регулярное выражение, запустите AgentRansack.exe и воспользуйтесь построителем выражений Expression Builder для создания корректного регулярного выражения.

Далее в программу подготовки запуска следует ввести список серверов. После ввода списка серверов щелкните радиокнопку, дабы указать, что вы сделали и это.

Затем щелкните Perform readiness check («Выполнить проверку готовности»). Если введены не все необходимые данные, программа подскажет вам, что следует сделать. Если же все сделано правильно, на экран будет выдано уведомление All Set, после чего вы можете выполнить главный сценарий MultiThreadSearch.vbs, который представлен в листинге 1. Существует две причины, по которым я не запускаю сканирование непосредственно из программы подготовки. Во‑первых, программы HTA плохо приспособлены для выполнения длительных процессов, они блокируют экран, и вы не можете заняться чем-то другим, пока процесс не завершится. Во‑вторых, я предпочитаю проверить ключевые файлы, прежде чем запустить сценарий MultiThreadSearch. Программа подготовки создает файл HashList.txt, который содержит контрольные суммы, и файл SearchList.txt, содержащий регулярные выражения, которые будет использовать Agent Ransack

По умолчанию сценарий настроен на параллельный запуск 20 заданий, то есть одновременное сканирование 20 серверов. Вы можете изменить настройку, отредактировав значение переменной TotalThreads в сценарии MultiThreadSearch.vbs. Рекомендуется использовать значения из интервала от 15 до 30.

Приложение настроено таким образом, чтобы необходимые для работы файлы (доступны для загрузки с http://windowsitpro.com/
Files/103078/103078.zip) и создаваемые файлы размещались в общей родительской папке. Создайте папку для решения Cyber Threat Scanner и убедитесь, что все файлы приложения, а также утилиты AgentRansack.exe и MD5deep.exe сохранены в ту же папку перед тем, как запустить сценарий MultiThreadSearch.vbs.

Как происходит поиск

В первой фазе процесса запускается Agent Ransack для создания списков файлов, размещающихся на всех дисках всех серверов, перечисленных в файле ServerList.txt. Журналы сохраняются в папке RansackLogs. Если на сервере найдены файлы, соответствующие критерию поиска (заданному регулярными выражениями в SearchList.txt), файл журнала будет иметь отличный от нуля размер. Если файлов, соответствующих критерию поиска, на сервере не найдено, соответствующий журнал будет иметь нулевую длину.

Вторая фаза — просмотр файлов журналов Agent Ransack ненулевой длины, проверяет имена файлов и с помощью утилиты MD5deep вычисляет контрольные суммы, которые сравниваются с сигнатурами из файла HashList.txt. В случае совпадения сигнатуры выполняется запись сведений о файле (размер, сигнатура, имя файла) в журнал в папке HashLogs.

После того как все файлы журналов Agent Ransack прочитаны, все контрольные суммы для найденных файлов вычислены и скопированы в файл, финальная стадия проверки считывает и обрабатывает все журналы из папки HashLogs и создает файл результатов Result.txt. Этот файл позволит вам определить, были ли найдены подозрительные файлы. Если такие файлы были найдены, в результирующем файле будут показаны имена серверов и полный путь к файлам.

При завершении процессов создаются копии исходных файлов данных для поиска и файлов результатов с расширением .sav. Если быть точным, копирование выполняется для следующих файлов:

  • ServerList.txt;
  • SearchList.txt;
  • HashList.txt;
  • MD5batch.cmd;
  • ErrorFile.txt;
  • Results.txt.

Когда основной процесс запускается для выполнения нового поиска, файлы .sav перемещаются в архивные папки вместе с основными файлами журналов из папок HashLogs и RansackLogs от предыдущего запуска. В результате создается архив с результатами выполнения всех сканирований.
Архивные папки именуются с использованием даты выполнения сканирования. До сих пор не рассматривалось, каким образом формируется список серверов ServerList.txt. Его можно создать вручную, но я использую для этого вспомогательный сценарий CreateServerList.vbs, представленный на листинге 2.

Следует отметить, что создаваемый сценарием файл ServerList.txt включает в себя кластерные серверы, но не включает ресурсы кластеров; включает в себя контроллеры домена (DC); собирает данные из перечисленных в коде сценария организационных единиц (OU), так что для запуска сценария вашей среде потребуется исправить список OU. Наконец, он собирает сведения о компьютерах Active Directory (AD), для которых атрибут operatingSystem содержит слово Server.

Сценарий CreateServerList.vbs создает также файл с именем NoPingResponseServers.txt, в котором содержится список серверов, недоступных в данный момент. Эти серверы не включаются в файл ServerList.txt. Главный процесс MultiThreadSearch.vbs также создает файл ErrorFile.txt, в котором отмечаются имена серверов, оказавшихся недоступными во время выполнения сценария.

Если по каким-то причинам вы не хотите использовать вспомогательное приложение, то особое внимание следует обратить на файл MD5batch.cmd и изменить его соответствующим образом перед началом поиска. Файл .cmd содержит подробные комментарии, поясняющие, какие строки должны быть закомментированы, а с каких комментарии должны быть сняты. Проще говоря, командный файл может создать файл с контрольными суммами любого переданного ему в качестве параметра файла. Но в файлe .cmd содержится команда для сравнения вычисленной сигнатуры файла с имеющимся списком сигнатур подозрительных файлов из HashList.txt. Другая команда пропускает данное сравнение сигнатуры. Следует использовать только один из этих вариантов — одну из команд нужно оставить, а другую закомментировать.

Если командный файл MD5batch настроен на использование файла сигнатур HashList.txt, убедитесь, что список сигнатур не содержит посторонние данные. Каждая строка файла должна начинаться с 32‑символьной контрольной суммы, за которой следуют два символа пробела и имя файла, ассоциированное с этой сигнатурой.

Обратите внимание: если файл сигнатур HashList.txt используется в командном файле MD5deep.cmd, файл результатов Results.txt будет содержать сведения только о тех файлах, для которых сигнатура совпадает со списком. Другими словами, если имя файла совпало с именем подозрительного файла, но сигнатуры файлов отличаются, в файл Results.txt этот файл записан не будет. Если же файл HashList.txt не используется, в список результатов сканирования попадут все файлы с именами, удовлетворяющими критерию поиска.

Если вы решили не использовать подготовительное приложение, потребуется создать файл SearchList.txt вручную или другим способом. Этот файл должен содержать список имен файлов, которые нужно искать, причем имена должны быть представлены в форме регулярных выражений. При этом имеется ограничение — таких имен должно быть не более девяти.

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

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

Джим Тернер (jturnervbs@gmail.com) — системный администратор и разработчик приложений в компании Computer Sciences Corporation

Сценарий MultiThreadSearch.vbs
Сценарий CreateServerList.vbs