Автоматизация скучной жизни инженера по кибербезопасности: как тратить меньше времени на рутинные задачи

Мой первый профессиональный опыт как специалиста по кибербезопасности состоял в разработке огромного количества документации: отчёты по аудиту, модели угроз, технорабочие проекты на систему защиты, комплекты ОРД и так далее. Тогда на эти задачи у меня уходила уйма времени, но одна из них, как мне казалось, длилась целую вечность. При оформлении работ технического проекта по ГОСТ требовалось делать двойную нумерацию в разделах и сквозную нумерацию страниц всего проекта. После печати документа приходилось шариковой ручкой нумеровать все страницы проекта, а их количество порой превышало несколько сотен.

Именно решение этой проблемы при помощи скрипта в OpenOffice и открыло для меня мир автоматизации работы с текстом. Затем был MS Office, VBA-скрипты и годы практики. Задачи стали решаться быстрее, и я смог больше времени посвящать учебе. Это превратило некогда скучную рутину в творчество. Этим опытом я и хочу поделиться в серии статей об автоматизации различных бумажных задач кибербеза. В этой статье расскажу о базовых идеях автоматизации в Word и Excel на примере классификации и чуть-чуть на примере модели угроз. Советы будут полезны начинающим проектировщикам, аудиторам и аналитикам. Надеюсь, с этими инструментами у вас, как и у меня когда-то, появится время увидеть лес (безопасность) за деревьями (бумагой).

Знать ответ и уметь его доказать — не одно и то жеЗнать ответ и уметь его доказать — не одно и то же

Автоматизация без масштабирования

Есть такие задачи, которые повторялись уже столько раз, что превратились в своеобразную таблицу умножения. Они не требуют творчества и размышлений — это просто рутина. Например, необходимость классифицировать информационные системы персональных данных (ИСПДн), имея все нужные вводные. Ерунда: беру шаблон, подставляю вводные на нужные места, печатаю и передаю на подпись. Засекаю: секундомер показывает 4 минуты 23 секунды. Но руководителю проекта об этом лучше не знать.

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

Пример калькулятора для ускорения классификации ИСПДнПример калькулятора для ускорения классификации ИСПДн

Если задача по классификации приходит не часто или требуется в первую очередь отработать собственное понимание, то на первое место при создании такого калькулятора выходит красота. Вопросы должны соответствовать нормативке, а результат быть наглядным, чтобы было видно и понятно, как его получили, ведь это инструмент для обучения, и ключевое здесь — дизайн. Основной приём — «условное форматирование» ячеек. При этом формула может быть любой, главное, чтобы правильно работала. Например, такой:

=ЕСЛИ (ИЛИ (И (J9; ИЛИ (J5; И (НЕ (J5); J6); И (НЕ (J5); НЕ (J6); НЕ (J7)))); И (J5; J10; J11));1; ЕСЛИ (ИЛИ (И (J9; J7); ИЛИ (И (J5; J8; J10); И (J5; J10; НЕ (J11); НЕ (J8))); И (J10; НЕ (J5); J6); И (J10; НЕ (J5); НЕ (J6); J7; J11; НЕ (J8)); И (J10; НЕ (J5); НЕ (J6); НЕ (J7); J11; НЕ (J8)); И (НЕ (J9); НЕ (J10); J5; J11; НЕ (J8)));2; ЕСЛИ (ИЛИ (И (J10; ИЛИ (И (J7; J8); И (J7; НЕ (J11); НЕ (J8)))); ИЛИ (И (J10; НЕ (J5); НЕ (J6); НЕ (J7); J8); И (J10; НЕ (J5); НЕ (J6); НЕ (J7); НЕ (J8); НЕ (J11))); ИЛИ (И (НЕ (J9); НЕ (J10); J5; J8); И (НЕ (J9); НЕ (J10); J5; НЕ (J11); НЕ (J8))); И (НЕ (J9); НЕ (J10); J6); И (НЕ (J5); НЕ (J6); НЕ (J7); НЕ (J9); НЕ (J10); J11; НЕ (J8)));3;4)))

Конечно, оформление — это дело вкуса, но если подходить к вопросу по уму, то стоит уделить внимание теоретической части. От себя советую книгу Нэнси Дуартэ «Slide: ology».

Инструмент «Условное форматирование». Уверен, что всё это может быть сильно проще, но кто видит?Инструмент «Условное форматирование». Уверен, что всё это может быть сильно проще, но кто видит?

Когда рутины слишком много, автоматизация — это масштабирование

В моей практике был случай, когда требовалось выпустить 10 000 актов классификации для идентичных ИСПДн, но с разными названиями. Вот как могло выглядеть решение этой задачи, если бы я делал её вручную: сначала мне потребовалось бы потратить 6 минут на подготовку одного типового акта, затем еще 72 секунды на сохранение копии и внесение наименования. Поскольку всего систем было 10 000, мне бы пришлось непрерывно работать со стабильной производительностью без перерывов на сон и еду 200 часов и 6 минут. Я решил, что так не пойдёт и начал искать масштабируемое решение.

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

Word → Вставка → Посмотреть экспресс-блоки → Поле → DocVariableWord → Вставка → Посмотреть экспресс-блоки → Поле → DocVariable

Для работы с переменными в MS Word можно использовать объект «поле» типа DocVariable — это удобный способ подставлять данные, но для того, чтобы он работал, такие переменные надо объявлять. Через интерфейс ленты «Вставка» это происходит автоматически, но подобный подход занимает слишком много времени.

Выбираем DocVariable и пишем имя переменнойВыбираем DocVariable и пишем имя переменной

Переменную можно добавить через горячие клавиши Сtrl+F9, а отображение текста включить по Alt+F9. Самое главное — не забывать обновлять значения по F9, ведь MS Word этого не делает, вспомнить хотя бы постоянные косяки с оглавлением. Ну, и связку Ctrl+C — Ctrl+V никто не отменял. Так шаблон создавать быстрее, особенно если переменных очень много, но такие переменные будут невидимы для VBA. Проблема легко лечится, но об этом чуть позже.

Нет особой разницы, где писать скрипт, VBA будет работать одинаково в любом приложении из состава MS Office, с поправкой на подключаемую объектную модель. Однако, в рамках данной задачи проще хранить скрипты в книге Excel, а не в созданном шаблоне или шаблоне по умолчанию.

VBA хорош тем, что он всегда под рукой, нужно просто включить отображение видимости ленты разработчикаVBA хорош тем, что он всегда под рукой, нужно просто включить отображение видимости ленты разработчика

Интерфейс не самый «дружелюбный». Сами скрипты работают очень медленно (выключайте на время работы скрипта автообновление ячеек и вообще всякое обновление), визуализация оставляет желать лучшего, но эта штука прекрасно работает. Её легко освоить, хотя я бы всё-таки рекомендовал пройти курсы по VBA. Займут они неделю с небольшим, зато со знаниями об объектной модели MS Office и основных фишечках оптимизации и с практикой решения простых задач справиться с любой проблемой можно будет без многодневного зависания на форумах программистов.

Главное преимущество VBA — она всегда под рукойГлавное преимущество VBA — она всегда под рукой

Теперь перейду к написанию скрипта. Что для этого нужно:

  • написать цикл перебора строк таблицы с входными данными (сколько строк, столько потребуется выгрузить актов);

  • скопировать и переименовать файл шаблона;

  • присвоить переменой шаблона значение из таблицы входных данных.

Баг или фича VBA, не знаю: чтобы скопировать читаемый текст скрипта, нужно переключить раскладку, иначе получится, как в этом примере:

'Â ñëåäóþùèé ðàç ðàññêàæó ïðî RibbonMenu

В зависимости от ваших навыков программирования, в итоге у вас может получиться что-то, похожее на это:

Sub АктыПоСписку() #Название процедуры
Dim i As Long #Счётчик для цикла
Dim objWrdApp As Object, objWrdDoc As Object #Для работы с Word из Excel
Dim LastRow As Long #Число переменных в БД

LastRow = Sheets("БД.ИСПДн").Cells(Rows.Count, 1).End(xlUp).Row #Определяем число строк в БД

Set objWrdApp = CreateObject("Word.Application") #Запускаем Word
objWrdApp.Visible = True #Делаем окно видимым

For i =1 To LastRow #Перебираем все строки в БД

#Создаём документ из шаблона
    sFileName = ThisWorkbook.path & "\template\Акт ИСПДн.docx" #Полное имя файла шаблона
    sNewFileName = ThisWorkbook.path & "\doc\"Акт классификации ИСПДн" & i & ".docx" #Полное имя файла акта
    Set objWrdApp = GetObject(, "Word.Application") #переключаемся на Word
    FileCopy sFileName, sNewFileName #Создаём очередной экземпляр Акта
    Set objWrdDoc = objWrdApp.Documents.Open(sNewFileName) #Открываем очередной Акт

    objWrdDoc.Variables(CustomerName).Value = Sheets("БД.ИСПДн").Cells(i, 3).Value #Присваиваем значение переменной
    objWrdDoc.Fields.Update #Обновляем все поля в документе
    objWrdDoc.Close True #Закрываем документ. (True - С сохранением, False - Без сохранения)
Next i

End Sub

По умолчанию связка Excel-Word работать не будет. Нужно отдельно подключить объектную модель WordПо умолчанию связка Excel-Word работать не будет. Нужно отдельно подключить объектную модель Word

Итого, если отключить обновление ячеек и визуализацию, то на каждый акт понадобится примерно 6 секунд. На всю пачку актов уйдет около полутора часов работы. А дальше её можно отсылать на печать и только следить за наличием расходников в принтере, попивая чаёк на соседнем диване. И да, бедные-бедные руки членов комиссии по классификации. Подписи ведь надо ставить шариковыми ручками.

Этот подход легко масштабируется: на вход скрипту можно подсунуть таблицу любой длины и не ограничиваться одной переменной.

Тайм-менеджмент 3.0: автоматизация разработки документов

При помощи описанных выше инструментов — создания шаблона и выгрузки данных из Excel в Word — можно решить огромное число задач. Что мешает нам создать универсальный инструмент под множество постоянно меняющихся задач?

Например, мы в «Solar Интеграция» делаем много комплексных проектов по кибербезопасности, и у нас бытует такая мудрость: делай чуть больше, чтобы завтра работать меньше. Иногда это ещё называют тайм-менеджментом 3.0. Его центральная идея заключается в создании времени. Можно сделать работу сейчас за 10 минут, а можно написать скрипт за 6 часов. Первое быстрее, но, когда задача вернётся много-много раз, скрипт полностью себя окупит.

Внедрять подобную автоматизацию можно для любой документальной работы при условии, что она не является творчеством. То есть алгоритм получения результата понятен и отработан. И тут мне волей-неволей вспоминается еще один рутинный документ: модель угроз и нарушителя (МУиН).

Нет ничего постоянного, кроме изменений. Решив сложную задачу автоматизации, завтра получишь ещё более сложную задачу автоматизацииНет ничего постоянного, кроме изменений. Решив сложную задачу автоматизации, завтра получишь ещё более сложную задачу автоматизации

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

Самый распространённый подход вычислений — экспертная оценка. Мы верим, что эксперт обладает экспертизой в нужной области. Но кого я обманываю: перечень угроз в БДУ ФСТЭК России настолько разнообразен, что на накопление экспертизы в нужном объеме по каждому направлению уйдут годы, а без этого ценность вычислений падает и скатывается в субъективизм. Есть вариант уйти от субъективизма одного специалиста в сторону комиссионного решения, но это точно не наш путь, ведь мы стремимся сократить трудозатраты, а не кратно их увеличить. Поэтому нужна более-менее объективная однозначная модель оценки.

Для автоматизации оценки угроз нужно лишь нарисовать графы связей предпосылок угроз. Ну или, другими словами, строить модель угроз на основе сценариев.

Для моделирования систем, как правило, используют две сущности: объект (список значений) и связь (таблица). В этом примере показана маленькая часть гигантской таблицы вероятностных оценок связи предпосылок реализации с угрозамиДля моделирования систем, как правило, используют две сущности: объект (список значений) и связь (таблица). В этом примере показана маленькая часть гигантской таблицы вероятностных оценок связи предпосылок реализации с угрозами

Для каждой угрозы необходимо построить граф вероятностных оценок предпосылок с логикой И/ИЛИ. Это совсем чуть-чуть сложнее булевых функций. Предпосылками в данном случае являются объектная модель ИТ-инфраструктуры, модель оценки ценности активов, данные аудита ИБ и модель нарушителя. В нашем случае, когда мы только подступались к задаче, это казалось не очень сложным. В итоге спустя 30 рабочих дней трех ведущих инженеров у нас получилось следующее:

Вполне рабочий инструмент с более-менее объективной моделью оценкиВполне рабочий инструмент с более-менее объективной моделью оценки

Теперь для разработки модели угроз и нарушителя инженеру требуется лишь провести экспресс-аудит (без регистрации свидетельств аудита) и занести всё это в табличку Excel, после чего нажать кнопку «Выгрузить выбранный отчёт». В итоге нам удалось сократить разработку документа с восьми до трех рабочих дней. Затраты окупились уже на двадцатой МУиН, правда, по бумагам. В реальности, скорее, на тридцатой, потому что инструмент постоянно приходится дорабатывать.

Пакетная выгрузка документации

У вас может возникнуть вопрос, зачем изобретать велосипед и почему бы для подобных задач не использовать готовый инструмент, например, системы класса SGRC, которые как будто для этого и созданы. Но не всё так просто. Дело в том, что в таких продуктах не всё есть «из коробки», решения нужно кастомизировать и дорабатывать под конкретные «хотелки», а иногда использовать дорогостоящие продукты попросту нецелесообразно. Так что вернемся пока к Excel.

Буквально сразу же после первой разработанной таким образом МУиН у нас появилось непреодолимое желание выгрузить весь набор типовых организационно-распорядительных и внутренних документов для типовой ИСПДн. Все инструменты уже есть. Размножать шаблоны, подставлять значения переменных в текст и вставлять таблицы (об этом в другой раз) скрипт уже умеет, а в БД есть все необходимые вводные.

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

Для выгрузки комплекта документов на ИСПДн инженеру нужно набрать из библиотеки шаблонов нужные, положить их в папку скрипта и проверить, все ли переменные подтянулись из БД. Для этого скрипт сканирует каждый документ в папке на наличие в нём переменных или тегов вставки значений и выводит их перечень. А дальше — выгрузка и печать.

Как уже писал выше, чтобы VBA видел переменные DocVariable, их надо объявлять, то есть создавать через интерфейс. Если работать через горячие клавиши (Ctrl+F9, Alt+F9), то создавать переменные можно быстрее. А объявить их можно скриптом:

Dim fld As Field
Dim TestVar As Boolean
Dim WorkString As String
For Each fld In objWrdDoc.Fields
            If Left(fld.Code, 12) = " DOCVARIABLE" Then
                WorkString = Left(Right(fld.Code, Len(fld.Code) - 14), InStr(Right(fld.Code, Len(fld.Code) - 14), "  \*") - 1)
                
                TestVar = False
                For Each var In objWrdDoc.Variables
                    If var.Name = WorkString Then TestVar = True
                Next
                If TestVar = False Then objWrdDoc.Variables.Add Name:=WorkString
            End If
        Next

Есть ещё один ленивый вариант для работы с переменными. Можно их не объявлять, а заключать в придуманные теги. Например, так: {{{{{{ИмяПеременной}}}}}}. Я этот способ не рекомендую, поскольку работа с такими текстовыми строками предполагает использование медленного механизма поиска, да и опечатки пропустить легче. В 200-страничном документе пропущенная переменная будет заменена на её значение, то есть на ничего, ведь она пропущенная, а вот такой тег так и останется тегом.

Чем же занимается инженер, если всю работу за него делают скрипты? Ответ: интересными проектами, а простые задачи за него решает «армия роботов».

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

Автор: Алексей Матвеев, ведущий консультант по информационной безопасности направления «Solar Интеграция» компании «Ростелеком-Солар»

© Habrahabr.ru