diff --git a/dokogen/dictionaries/threats_fstec.json b/dokogen/dictionaries/threats_fstec.json index f1335e3..9736b65 100644 --- a/dokogen/dictionaries/threats_fstec.json +++ b/dokogen/dictionaries/threats_fstec.json @@ -1,229 +1,229 @@ [ - "Угроза автоматического распространения вредоносного кода в грид-системе", - "Угроза агрегирования данных, передаваемых в грид-системе", - "Угроза использования слабостей криптографических алгоритмов и уязвимостей в программном обеспечении их реализации", - "Угроза аппаратного сброса пароля BIOS", - "Угроза внедрения вредоносного кода в BIOS", - "Угроза внедрения кода или данных", - "Угроза воздействия на программы с высокими привилегиями", - "Угроза восстановления и/или повторного использования аутентификационной информации", - "Угроза восстановления предыдущей уязвимой версии BIOS", - "Угроза выхода процесса за пределы виртуальной машины", - "Угроза деавторизации санкционированного клиента беспроводной сети", - "Угроза деструктивного изменения конфигурации/среды окружения программ", - "Угроза деструктивного использования декларированного функционала BIOS", - "Угроза длительного удержания вычислительных ресурсов пользователями", - "Угроза доступа к защищаемым файлам с использованием обходного пути", - "Угроза доступа к локальным файлам сервера при помощи URL", - "Угроза доступа/перехвата/изменения HTTP cookies", - "Угроза загрузки нештатной операционной системы", - "Угроза заражения DNS-кеша", - "Угроза злоупотребления возможностями, предоставленными потребителям облачных услуг", - "Угроза злоупотребления доверием потребителей облачных услуг", - "Угроза избыточного выделения оперативной памяти", - "Угроза изменения компонентов информационной (автоматизированной) системы", - "Угроза изменения режимов работы аппаратных элементов компьютера", - "Угроза изменения системных и глобальных переменных", - "Угроза искажения XML-схемы", - "Угроза искажения вводимой и выводимой на периферийные устройства информации", - "Угроза использования альтернативных путей доступа к ресурсам", - "Угроза использования вычислительных ресурсов суперкомпьютера «паразитными» процессами", - "Угроза использования информации идентификации/аутентификации, заданной по умолчанию", - "Угроза использования механизмов авторизации для повышения привилегий", - "Угроза использования поддельных цифровых подписей BIOS", - "Угроза использования слабостей кодирования входных данных", - "Угроза использования слабостей протоколов сетевого/локального обмена данными", - "Угроза использования слабых криптографических алгоритмов BIOS", - "Угроза исследования механизмов работы программы", - "Угроза исследования приложения через отчёты об ошибках", - "Угроза исчерпания вычислительных ресурсов хранилища больших данных", - "Угроза исчерпания запаса ключей, необходимых для обновления BIOS", - "Угроза конфликта юрисдикций различных стран", - "Угроза межсайтового скриптинга", - "Угроза межсайтовой подделки запроса", - "Угроза нарушения доступности облачного сервера", - "Угроза нарушения изоляции пользовательских данных внутри виртуальной машины", - "Угроза нарушения изоляции среды исполнения BIOS", - "Угроза нарушения процедуры аутентификации субъектов виртуального информационного взаимодействия", - "Угроза нарушения работоспособности грид-системы при нетипичной сетевой нагрузке", - "Угроза нарушения технологии обработки информации путём несанкционированного внесения изменений в образы виртуальных машин", - "Угроза нарушения целостности данных кеша", - "Угроза неверного определения формата входных данных, поступающих в хранилище больших данных", - "Угроза невозможности восстановления сессии работы на ПЭВМ при выводе из промежуточных состояний питания", - "Угроза невозможности миграции образов виртуальных машин из-за несовместимости аппаратного и программного обеспечения", - "Угроза невозможности управления правами пользователей BIOS", - "Угроза недобросовестного исполнения обязательств поставщиками облачных услуг", - "Угроза незащищённого администрирования облачных услуг", - "Угроза некачественного переноса инфраструктуры в облако", - "Угроза неконтролируемого копирования данных внутри хранилища больших данных", - "Угроза неконтролируемого роста числа виртуальных машин", - "Угроза неконтролируемого роста числа зарезервированных вычислительных ресурсов", - "Угроза неконтролируемого уничтожения информации хранилищем больших данных", - "Угроза некорректного задания структуры данных транзакции", - "Угроза некорректного использования прозрачного прокси-сервера за счёт плагинов браузера", - "Угроза некорректного использования функционала программного и аппаратного обеспечения", - "Угроза некорректной реализации политики лицензирования в облаке", - "Угроза неопределённости в распределении ответственности между ролями в облаке", - "Угроза неопределённости ответственности за обеспечение безопасности облака", - "Угроза неправомерного ознакомления с защищаемой информацией", - "Угроза неправомерного/некорректного использования интерфейса взаимодействия с приложением", - "Угроза неправомерных действий в каналах связи", - "Угроза непрерывной модернизации облачной инфраструктуры", - "Угроза несанкционированного восстановления удалённой защищаемой информации", - "Угроза несанкционированного выключения или обхода механизма защиты от записи в BIOS", - "Угроза несанкционированного доступа к активному и (или) пассивному виртуальному и (или) физическому сетевому оборудованию из физической и (или) виртуальной сети", - "Угроза несанкционированного доступа к аутентификационной информации", - "Угроза несанкционированного доступа к виртуальным каналам передачи", - "Угроза несанкционированного доступа к гипервизору из виртуальной машины и (или) физической сети", - "Угроза несанкционированного доступа к данным за пределами зарезервированного адресного пространства, в том числе выделенного под виртуальное аппаратное обеспечение", - "Угроза несанкционированного доступа к защищаемым виртуальным машинам из виртуальной и (или) физической сети", - "Угроза несанкционированного доступа к защищаемым виртуальным машинам со стороны других виртуальных машин", - "Угроза несанкционированного доступа к защищаемым виртуальным устройствам из виртуальной и (или) физической сети", - "Угроза несанкционированного доступа к локальному компьютеру через клиента грид-системы", - "Угроза несанкционированного доступа к сегментам вычислительного поля", - "Угроза несанкционированного доступа к системе по беспроводным каналам", - "Угроза несанкционированного доступа к системе хранения данных из виртуальной и (или) физической сети", - "Угроза несанкционированного доступа к хранимой в виртуальном пространстве защищаемой информации", - "Угроза несанкционированного изменения аутентификационной информации", - "Угроза несанкционированного использования привилегированных функций BIOS", - "Угроза несанкционированного копирования защищаемой информации", - "Угроза несанкционированного редактирования реестра", - "Угроза несанкционированного создания учётной записи пользователя", - "Угроза несанкционированного удаления защищаемой информации", - "Угроза несанкционированного удалённого внеполосного доступа к аппаратным средствам", - "Угроза несанкционированного управления буфером", - "Угроза несанкционированного управления синхронизацией и состоянием", - "Угроза несанкционированного управления указателями", - "Угроза несогласованности политик безопасности элементов облачной инфраструктуры", - "Угроза несогласованности правил доступа к большим данным", - "Угроза обнаружения открытых портов и идентификации привязанных к ним сетевых служб", - "Угроза обнаружения хостов", - "Угроза обхода некорректно настроенных механизмов аутентификации", - "Угроза общедоступности облачной инфраструктуры", - "Угроза опосредованного управления группой программ через совместно используемые данные", - "Угроза определения типов объектов защиты", - "Угроза определения топологии вычислительной сети", - "Угроза отказа в загрузке входных данных неизвестного формата хранилищем больших данных", - "Угроза отказа в обслуживании системой хранения данных суперкомпьютера", - "Угроза отключения контрольных датчиков", - "Угроза ошибки обновления гипервизора", - "Угроза перебора всех настроек и параметров приложения", - "Угроза перегрузки грид-системы вычислительными заданиями", - "Угроза передачи данных по скрытым каналам", - "Угроза передачи запрещённых команд на оборудование с числовым программным управлением", - "Угроза перезагрузки аппаратных и программно-аппаратных средств вычислительной техники", - "Угроза переполнения целочисленных переменных", - "Угроза перехвата вводимой и выводимой на периферийные устройства информации", - "Угроза перехвата данных, передаваемых по вычислительной сети", - "Угроза перехвата привилегированного потока", - "Угроза перехвата привилегированного процесса", - "Угроза перехвата управления гипервизором", - "Угроза перехвата управления средой виртуализации", - "Угроза повреждения системного реестра", - "Угроза повышения привилегий", - "Угроза подбора пароля BIOS", - "Угроза подделки записей журнала регистрации событий", - "Угроза подключения к беспроводной сети в обход процедуры аутентификации", - "Угроза подмены беспроводного клиента или точки доступа", - "Угроза подмены действия пользователя путём обмана", - "Угроза подмены доверенного пользователя", - "Угроза подмены резервной копии программного обеспечения BIOS", - "Угроза подмены содержимого сетевых ресурсов", - "Угроза подмены субъекта сетевого доступа", - "Угроза получения предварительной информации об объекте защиты", - "Угроза получения сведений о владельце беспроводного устройства", - "Угроза потери доверия к поставщику облачных услуг", - "Угроза потери и утечки данных, обрабатываемых в облаке", - "Угроза потери информации вследствие несогласованности работы узлов хранилища больших данных", - "Угроза потери управления облачными ресурсами", - "Угроза потери управления собственной инфраструктурой при переносе её в облако", - "Угроза преодоления физической защиты", - "Угроза приведения системы в состояние «отказ в обслуживании»", - "Угроза привязки к поставщику облачных услуг", - "Угроза приостановки оказания облачных услуг вследствие технических сбоев", - "Угроза программного выведения из строя средств хранения, обработки и (или) ввода/вывода/передачи информации", - "Угроза программного сброса пароля BIOS", - "Угроза пропуска проверки целостности программного обеспечения", - "Угроза прямого обращения к памяти вычислительного поля суперкомпьютера", - "Угроза распространения несанкционированно повышенных прав на всю грид-систему", - "Угроза сбоя автоматического управления системой разграничения доступа хранилища больших данных", - "Угроза сбоя обработки специальным образом изменённых файлов", - "Угроза сбоя процесса обновления BIOS", - "Угроза сканирования веб-сервисов, разработанных на основе языка описания WSDL", - "Угроза удаления аутентификационной информации", - "Угроза усиления воздействия на вычислительные ресурсы пользователей при помощи сторонних серверов", - "Угроза установки уязвимых версий обновления программного обеспечения BIOS", - "Угроза утраты вычислительных ресурсов", - "Угроза утраты носителей информации", - "Угроза физического выведения из строя средств хранения, обработки и (или) ввода/вывода/передачи информации", - "Угроза форматирования носителей информации", - "Угроза «форсированного веб-браузинга»", - "Угроза хищения средств хранения, обработки и (или) ввода/вывода/передачи информации", - "Угроза чрезмерного использования вычислительных ресурсов суперкомпьютера в ходе интенсивного обмена межпроцессорными сообщениями", - "Угроза эксплуатации цифровой подписи программного кода", - "Угроза перехвата исключения/сигнала из привилегированного блока функций", - "Угроза распространения состояния «отказ в обслуживании» в облачной инфраструктуре", - "Угроза включения в проект не достоверно испытанных компонентов", - "Угроза внедрения системной избыточности", - "Угроза заражения компьютера при посещении неблагонадёжных сайтов", - "Угроза «кражи» учётной записи доступа к сетевым сервисам", - "Угроза наличия механизмов разработчика", - "Угроза неправомерного шифрования информации", - "Угроза скрытного включения вычислительного устройства в состав бот-сети", - "Угроза распространения «почтовых червей»", - "Угроза «спама» веб-сервера", - "Угроза «фарминга»", - "Угроза «фишинга»", - "Угроза нарушения технологического/производственного процесса из-за временны́х задержек, вносимых средством защиты", - "Угроза неподтверждённого ввода данных оператором в систему, связанную с безопасностью", - "Угроза несанкционированного использования системных и сетевых утилит", - "Угроза несанкционированной модификации защищаемой информации", - "Угроза отказа подсистемы обеспечения температурного режима", - "Угроза перехвата одноразовых паролей в режиме реального времени", - "Угроза физического устаревания аппаратных компонентов", - "Угроза перехвата управления автоматизированной системой управления технологическими процессами", - "Угроза агрегирования данных, обрабатываемых с помощью мобильного устройства", - "Угроза несанкционированного изменения параметров настройки средств защиты информации", - "Угроза внедрения вредоносного кода через рекламу, сервисы и контент", - "Угроза несанкционированного воздействия на средство защиты информации", - "Угроза подмены программного обеспечения", - "Угроза маскирования действий вредоносного кода", - "Угроза внедрения вредоносного кода за счет посещения зараженных сайтов в сети Интернет", - "Угроза внедрения вредоносного кода в дистрибутив программного обеспечения", - "Угроза использования уязвимых версий программного обеспечения", - "Угроза утечки информации за счет применения вредоносным программным обеспечением алгоритмов шифрования трафика", - "Угроза несанкционированного использования привилегированных функций мобильного устройства", - "Угроза удаленного запуска вредоносного кода в обход механизмов защиты операционной системы", - "Угроза контроля вредоносной программой списка приложений, запущенных на мобильном устройстве", - "Угроза хищения аутентификационной информации из временных файлов cookie", - "Угроза скрытной регистрации вредоносной программой учетных записей администраторов", - "Угроза перехвата управления мобильного устройства при использовании виртуальных голосовых ассистентов", - "Угроза хищения информации с мобильного устройства при использовании виртуальных голосовых ассистентов", - "Угроза утечки пользовательских данных при использовании функций автоматического заполнения аутентификационной информации в браузере", - "Угроза несанкционированной установки приложений на мобильные устройства", - "Угроза утечки информации с неподключенных к сети Интернет компьютеров", - "Угроза несанкционированного изменения вредоносной программой значений параметров программируемых логических контроллеров", - "Угроза нарушения работы компьютера и блокирования доступа к его данным из-за некорректной работы установленных на нем средств защиты", - "Угроза отказа в работе оборудования из-за изменения геолокационной информации о нем", - "Угроза несанкционированного доступа к параметрам настройки оборудования за счет использования «мастер-кодов» (инженерных паролей)", - "Угроза нецелевого использования вычислительных ресурсов средства вычислительной техники", - "Угроза несанкционированного доступа к защищаемой памяти \r\nядра процессора", - "Угроза нарушения работы информационной системы, вызванного обновлением используемого в ней программного обеспечения", - "Угроза использования непроверенных пользовательских данных при формировании конфигурационного файла, используемого программным обеспечением администрирования информационных систем", - "Угроза перехвата управления информационной системой", - "Угроза обхода многофакторной аутентификации", - "Угроза несвоевременного выявления и реагирования компонентами информационной (автоматизированной) системы (в том числе средствами защиты информации) на события безопасности информации", - "Угроза несанкционированного доступа к системе при помощи сторонних сервисов", - "Угроза получения несанкционированного доступа к приложениям, установленным на Smart-картах", - "Угроза использования скомпрометированного доверенного источника обновлений программного обеспечения", - "Угроза раскрытия информации о модели машинного обучения", - "Угроза хищения обучающих данных", - "Угроза нарушения функционирования («обхода») средств, реализующих технологии искусственного интеллекта", - "Угроза модификации модели машинного обучения путем искажения («отравления») обучающих данных", - "Угроза подмены модели машинного обучения", - "Угроза несанкционированного доступа к контейнерам, предоставляющего пользователям расширенные привилегии", - "Угроза нарушения целостности (подмены) контейнеров", - "Угроза нарушения изоляции контейнеров", - "Угроза внедрения вредоносного программного обеспечения в контейнеры", - "Угроза модификации (подмены) образов контейнеров" + "УБИ.001 Угроза автоматического распространения вредоносного кода в грид-системе", + "УБИ.002 Угроза агрегирования данных, передаваемых в грид-системе", + "УБИ.003 Угроза использования слабостей криптографических алгоритмов и уязвимостей в программном обеспечении их реализации", + "УБИ.004 Угроза аппаратного сброса пароля BIOS", + "УБИ.005 Угроза внедрения вредоносного кода в BIOS", + "УБИ.006 Угроза внедрения кода или данных", + "УБИ.007 Угроза воздействия на программы с высокими привилегиями", + "УБИ.008 Угроза восстановления и/или повторного использования аутентификационной информации", + "УБИ.009 Угроза восстановления предыдущей уязвимой версии BIOS", + "УБИ.010 Угроза выхода процесса за пределы виртуальной машины", + "УБИ.011 Угроза деавторизации санкционированного клиента беспроводной сети", + "УБИ.012 Угроза деструктивного изменения конфигурации/среды окружения программ", + "УБИ.013 Угроза деструктивного использования декларированного функционала BIOS", + "УБИ.014 Угроза длительного удержания вычислительных ресурсов пользователями", + "УБИ.015 Угроза доступа к защищаемым файлам с использованием обходного пути", + "УБИ.016 Угроза доступа к локальным файлам сервера при помощи URL", + "УБИ.017 Угроза доступа/перехвата/изменения HTTP cookies", + "УБИ.018 Угроза загрузки нештатной операционной системы", + "УБИ.019 Угроза заражения DNS-кеша", + "УБИ.020 Угроза злоупотребления возможностями, предоставленными потребителям облачных услуг", + "УБИ.021 Угроза злоупотребления доверием потребителей облачных услуг", + "УБИ.022 Угроза избыточного выделения оперативной памяти", + "УБИ.023 Угроза изменения компонентов информационной (автоматизированной) системы", + "УБИ.024 Угроза изменения режимов работы аппаратных элементов компьютера", + "УБИ.025 Угроза изменения системных и глобальных переменных", + "УБИ.026 Угроза искажения XML-схемы", + "УБИ.027 Угроза искажения вводимой и выводимой на периферийные устройства информации", + "УБИ.028 Угроза использования альтернативных путей доступа к ресурсам", + "УБИ.029 Угроза использования вычислительных ресурсов суперкомпьютера «паразитными» процессами", + "УБИ.030 Угроза использования информации идентификации/аутентификации, заданной по умолчанию", + "УБИ.031 Угроза использования механизмов авторизации для повышения привилегий", + "УБИ.032 Угроза использования поддельных цифровых подписей BIOS", + "УБИ.033 Угроза использования слабостей кодирования входных данных", + "УБИ.034 Угроза использования слабостей протоколов сетевого/локального обмена данными", + "УБИ.035 Угроза использования слабых криптографических алгоритмов BIOS", + "УБИ.036 Угроза исследования механизмов работы программы", + "УБИ.037 Угроза исследования приложения через отчёты об ошибках", + "УБИ.038 Угроза исчерпания вычислительных ресурсов хранилища больших данных", + "УБИ.039 Угроза исчерпания запаса ключей, необходимых для обновления BIOS", + "УБИ.040 Угроза конфликта юрисдикций различных стран", + "УБИ.041 Угроза межсайтового скриптинга", + "УБИ.042 Угроза межсайтовой подделки запроса", + "УБИ.043 Угроза нарушения доступности облачного сервера", + "УБИ.044 Угроза нарушения изоляции пользовательских данных внутри виртуальной машины", + "УБИ.045 Угроза нарушения изоляции среды исполнения BIOS", + "УБИ.046 Угроза нарушения процедуры аутентификации субъектов виртуального информационного взаимодействия", + "УБИ.047 Угроза нарушения работоспособности грид-системы при нетипичной сетевой нагрузке", + "УБИ.048 Угроза нарушения технологии обработки информации путём несанкционированного внесения изменений в образы виртуальных машин", + "УБИ.049 Угроза нарушения целостности данных кеша", + "УБИ.050 Угроза неверного определения формата входных данных, поступающих в хранилище больших данных", + "УБИ.051 Угроза невозможности восстановления сессии работы на ПЭВМ при выводе из промежуточных состояний питания", + "УБИ.052 Угроза невозможности миграции образов виртуальных машин из-за несовместимости аппаратного и программного обеспечения", + "УБИ.053 Угроза невозможности управления правами пользователей BIOS", + "УБИ.054 Угроза недобросовестного исполнения обязательств поставщиками облачных услуг", + "УБИ.055 Угроза незащищённого администрирования облачных услуг", + "УБИ.056 Угроза некачественного переноса инфраструктуры в облако", + "УБИ.057 Угроза неконтролируемого копирования данных внутри хранилища больших данных", + "УБИ.058 Угроза неконтролируемого роста числа виртуальных машин", + "УБИ.059 Угроза неконтролируемого роста числа зарезервированных вычислительных ресурсов", + "УБИ.060 Угроза неконтролируемого уничтожения информации хранилищем больших данных", + "УБИ.061 Угроза некорректного задания структуры данных транзакции", + "УБИ.062 Угроза некорректного использования прозрачного прокси-сервера за счёт плагинов браузера", + "УБИ.063 Угроза некорректного использования функционала программного и аппаратного обеспечения", + "УБИ.064 Угроза некорректной реализации политики лицензирования в облаке", + "УБИ.065 Угроза неопределённости в распределении ответственности между ролями в облаке", + "УБИ.066 Угроза неопределённости ответственности за обеспечение безопасности облака", + "УБИ.067 Угроза неправомерного ознакомления с защищаемой информацией", + "УБИ.068 Угроза неправомерного/некорректного использования интерфейса взаимодействия с приложением", + "УБИ.069 Угроза неправомерных действий в каналах связи", + "УБИ.070 Угроза непрерывной модернизации облачной инфраструктуры", + "УБИ.071 Угроза несанкционированного восстановления удалённой защищаемой информации", + "УБИ.072 Угроза несанкционированного выключения или обхода механизма защиты от записи в BIOS", + "УБИ.073 Угроза несанкционированного доступа к активному и (или) пассивному виртуальному и (или) физическому сетевому оборудованию из физической и (или) виртуальной сети", + "УБИ.074 Угроза несанкционированного доступа к аутентификационной информации", + "УБИ.075 Угроза несанкционированного доступа к виртуальным каналам передачи", + "УБИ.076 Угроза несанкционированного доступа к гипервизору из виртуальной машины и (или) физической сети", + "УБИ.077 Угроза несанкционированного доступа к данным за пределами зарезервированного адресного пространства, в том числе выделенного под виртуальное аппаратное обеспечение", + "УБИ.078 Угроза несанкционированного доступа к защищаемым виртуальным машинам из виртуальной и (или) физической сети", + "УБИ.079 Угроза несанкционированного доступа к защищаемым виртуальным машинам со стороны других виртуальных машин", + "УБИ.080 Угроза несанкционированного доступа к защищаемым виртуальным устройствам из виртуальной и (или) физической сети", + "УБИ.081 Угроза несанкционированного доступа к локальному компьютеру через клиента грид-системы", + "УБИ.082 Угроза несанкционированного доступа к сегментам вычислительного поля", + "УБИ.083 Угроза несанкционированного доступа к системе по беспроводным каналам", + "УБИ.084 Угроза несанкционированного доступа к системе хранения данных из виртуальной и (или) физической сети", + "УБИ.085 Угроза несанкционированного доступа к хранимой в виртуальном пространстве защищаемой информации", + "УБИ.086 Угроза несанкционированного изменения аутентификационной информации", + "УБИ.087 Угроза несанкционированного использования привилегированных функций BIOS", + "УБИ.088 Угроза несанкционированного копирования защищаемой информации", + "УБИ.089 Угроза несанкционированного редактирования реестра", + "УБИ.090 Угроза несанкционированного создания учётной записи пользователя", + "УБИ.091 Угроза несанкционированного удаления защищаемой информации", + "УБИ.092 Угроза несанкционированного удалённого внеполосного доступа к аппаратным средствам", + "УБИ.093 Угроза несанкционированного управления буфером", + "УБИ.094 Угроза несанкционированного управления синхронизацией и состоянием", + "УБИ.095 Угроза несанкционированного управления указателями", + "УБИ.096 Угроза несогласованности политик безопасности элементов облачной инфраструктуры", + "УБИ.097 Угроза несогласованности правил доступа к большим данным", + "УБИ.098 Угроза обнаружения открытых портов и идентификации привязанных к ним сетевых служб", + "УБИ.099 Угроза обнаружения хостов", + "УБИ.100 Угроза обхода некорректно настроенных механизмов аутентификации", + "УБИ.101 Угроза общедоступности облачной инфраструктуры", + "УБИ.102 Угроза опосредованного управления группой программ через совместно используемые данные", + "УБИ.103 Угроза определения типов объектов защиты", + "УБИ.104 Угроза определения топологии вычислительной сети", + "УБИ.105 Угроза отказа в загрузке входных данных неизвестного формата хранилищем больших данных", + "УБИ.106 Угроза отказа в обслуживании системой хранения данных суперкомпьютера", + "УБИ.107 Угроза отключения контрольных датчиков", + "УБИ.108 Угроза ошибки обновления гипервизора", + "УБИ.109 Угроза перебора всех настроек и параметров приложения", + "УБИ.110 Угроза перегрузки грид-системы вычислительными заданиями", + "УБИ.111 Угроза передачи данных по скрытым каналам", + "УБИ.112 Угроза передачи запрещённых команд на оборудование с числовым программным управлением", + "УБИ.113 Угроза перезагрузки аппаратных и программно-аппаратных средств вычислительной техники", + "УБИ.114 Угроза переполнения целочисленных переменных", + "УБИ.115 Угроза перехвата вводимой и выводимой на периферийные устройства информации", + "УБИ.116 Угроза перехвата данных, передаваемых по вычислительной сети", + "УБИ.117 Угроза перехвата привилегированного потока", + "УБИ.118 Угроза перехвата привилегированного процесса", + "УБИ.119 Угроза перехвата управления гипервизором", + "УБИ.120 Угроза перехвата управления средой виртуализации", + "УБИ.121 Угроза повреждения системного реестра", + "УБИ.122 Угроза повышения привилегий", + "УБИ.123 Угроза подбора пароля BIOS", + "УБИ.124 Угроза подделки записей журнала регистрации событий", + "УБИ.125 Угроза подключения к беспроводной сети в обход процедуры аутентификации", + "УБИ.126 Угроза подмены беспроводного клиента или точки доступа", + "УБИ.127 Угроза подмены действия пользователя путём обмана", + "УБИ.128 Угроза подмены доверенного пользователя", + "УБИ.129 Угроза подмены резервной копии программного обеспечения BIOS", + "УБИ.130 Угроза подмены содержимого сетевых ресурсов", + "УБИ.131 Угроза подмены субъекта сетевого доступа", + "УБИ.132 Угроза получения предварительной информации об объекте защиты", + "УБИ.133 Угроза получения сведений о владельце беспроводного устройства", + "УБИ.134 Угроза потери доверия к поставщику облачных услуг", + "УБИ.135 Угроза потери и утечки данных, обрабатываемых в облаке", + "УБИ.136 Угроза потери информации вследствие несогласованности работы узлов хранилища больших данных", + "УБИ.137 Угроза потери управления облачными ресурсами", + "УБИ.138 Угроза потери управления собственной инфраструктурой при переносе её в облако", + "УБИ.139 Угроза преодоления физической защиты", + "УБИ.140 Угроза приведения системы в состояние «отказ в обслуживании»", + "УБИ.141 Угроза привязки к поставщику облачных услуг", + "УБИ.142 Угроза приостановки оказания облачных услуг вследствие технических сбоев", + "УБИ.143 Угроза программного выведения из строя средств хранения, обработки и (или) ввода/вывода/передачи информации", + "УБИ.144 Угроза программного сброса пароля BIOS", + "УБИ.145 Угроза пропуска проверки целостности программного обеспечения", + "УБИ.146 Угроза прямого обращения к памяти вычислительного поля суперкомпьютера", + "УБИ.147 Угроза распространения несанкционированно повышенных прав на всю грид-систему", + "УБИ.148 Угроза сбоя автоматического управления системой разграничения доступа хранилища больших данных", + "УБИ.149 Угроза сбоя обработки специальным образом изменённых файлов", + "УБИ.150 Угроза сбоя процесса обновления BIOS", + "УБИ.151 Угроза сканирования веб-сервисов, разработанных на основе языка описания WSDL", + "УБИ.152 Угроза удаления аутентификационной информации", + "УБИ.153 Угроза усиления воздействия на вычислительные ресурсы пользователей при помощи сторонних серверов", + "УБИ.154 Угроза установки уязвимых версий обновления программного обеспечения BIOS", + "УБИ.155 Угроза утраты вычислительных ресурсов", + "УБИ.156 Угроза утраты носителей информации", + "УБИ.157 Угроза физического выведения из строя средств хранения, обработки и (или) ввода/вывода/передачи информации", + "УБИ.158 Угроза форматирования носителей информации", + "УБИ.159 Угроза «форсированного веб-браузинга»", + "УБИ.160 Угроза хищения средств хранения, обработки и (или) ввода/вывода/передачи информации", + "УБИ.161 Угроза чрезмерного использования вычислительных ресурсов суперкомпьютера в ходе интенсивного обмена межпроцессорными сообщениями", + "УБИ.162 Угроза эксплуатации цифровой подписи программного кода", + "УБИ.163 Угроза перехвата исключения/сигнала из привилегированного блока функций", + "УБИ.164 Угроза распространения состояния «отказ в обслуживании» в облачной инфраструктуре", + "УБИ.165 Угроза включения в проект не достоверно испытанных компонентов", + "УБИ.166 Угроза внедрения системной избыточности", + "УБИ.167 Угроза заражения компьютера при посещении неблагонадёжных сайтов", + "УБИ.168 Угроза «кражи» учётной записи доступа к сетевым сервисам", + "УБИ.169 Угроза наличия механизмов разработчика", + "УБИ.170 Угроза неправомерного шифрования информации", + "УБИ.171 Угроза скрытного включения вычислительного устройства в состав бот-сети", + "УБИ.172 Угроза распространения «почтовых червей»", + "УБИ.173 Угроза «спама» веб-сервера", + "УБИ.174 Угроза «фарминга»", + "УБИ.175 Угроза «фишинга»", + "УБИ.176 Угроза нарушения технологического/производственного процесса из-за временны́х задержек, вносимых средством защиты", + "УБИ.177 Угроза неподтверждённого ввода данных оператором в систему, связанную с безопасностью", + "УБИ.178 Угроза несанкционированного использования системных и сетевых утилит", + "УБИ.179 Угроза несанкционированной модификации защищаемой информации", + "УБИ.180 Угроза отказа подсистемы обеспечения температурного режима", + "УБИ.181 Угроза перехвата одноразовых паролей в режиме реального времени", + "УБИ.182 Угроза физического устаревания аппаратных компонентов", + "УБИ.183 Угроза перехвата управления автоматизированной системой управления технологическими процессами", + "УБИ.184 Угроза агрегирования данных, обрабатываемых с помощью мобильного устройства", + "УБИ.185 Угроза несанкционированного изменения параметров настройки средств защиты информации", + "УБИ.186 Угроза внедрения вредоносного кода через рекламу, сервисы и контент", + "УБИ.187 Угроза несанкционированного воздействия на средство защиты информации", + "УБИ.188 Угроза подмены программного обеспечения", + "УБИ.189 Угроза маскирования действий вредоносного кода", + "УБИ.190 Угроза внедрения вредоносного кода за счет посещения зараженных сайтов в сети Интернет", + "УБИ.191 Угроза внедрения вредоносного кода в дистрибутив программного обеспечения", + "УБИ.192 Угроза использования уязвимых версий программного обеспечения", + "УБИ.193 Угроза утечки информации за счет применения вредоносным программным обеспечением алгоритмов шифрования трафика", + "УБИ.194 Угроза несанкционированного использования привилегированных функций мобильного устройства", + "УБИ.195 Угроза удаленного запуска вредоносного кода в обход механизмов защиты операционной системы", + "УБИ.196 Угроза контроля вредоносной программой списка приложений, запущенных на мобильном устройстве", + "УБИ.197 Угроза хищения аутентификационной информации из временных файлов cookie", + "УБИ.198 Угроза скрытной регистрации вредоносной программой учетных записей администраторов", + "УБИ.199 Угроза перехвата управления мобильного устройства при использовании виртуальных голосовых ассистентов", + "УБИ.200 Угроза хищения информации с мобильного устройства при использовании виртуальных голосовых ассистентов", + "УБИ.201 Угроза утечки пользовательских данных при использовании функций автоматического заполнения аутентификационной информации в браузере", + "УБИ.202 Угроза несанкционированной установки приложений на мобильные устройства", + "УБИ.203 Угроза утечки информации с неподключенных к сети Интернет компьютеров", + "УБИ.204 Угроза несанкционированного изменения вредоносной программой значений параметров программируемых логических контроллеров", + "УБИ.205 Угроза нарушения работы компьютера и блокирования доступа к его данным из-за некорректной работы установленных на нем средств защиты", + "УБИ.206 Угроза отказа в работе оборудования из-за изменения геолокационной информации о нем", + "УБИ.207 Угроза несанкционированного доступа к параметрам настройки оборудования за счет использования «мастер-кодов» (инженерных паролей)", + "УБИ.208 Угроза нецелевого использования вычислительных ресурсов средства вычислительной техники", + "УБИ.209 Угроза несанкционированного доступа к защищаемой памяти \r\nядра процессора", + "УБИ.210 Угроза нарушения работы информационной системы, вызванного обновлением используемого в ней программного обеспечения", + "УБИ.211 Угроза использования непроверенных пользовательских данных при формировании конфигурационного файла, используемого программным обеспечением администрирования информационных систем", + "УБИ.212 Угроза перехвата управления информационной системой", + "УБИ.213 Угроза обхода многофакторной аутентификации", + "УБИ.214 Угроза несвоевременного выявления и реагирования компонентами информационной (автоматизированной) системы (в том числе средствами защиты информации) на события безопасности информации", + "УБИ.215 Угроза несанкционированного доступа к системе при помощи сторонних сервисов", + "УБИ.216 Угроза получения несанкционированного доступа к приложениям, установленным на Smart-картах", + "УБИ.217 Угроза использования скомпрометированного доверенного источника обновлений программного обеспечения", + "УБИ.218 Угроза раскрытия информации о модели машинного обучения", + "УБИ.219 Угроза хищения обучающих данных", + "УБИ.220 Угроза нарушения функционирования («обхода») средств, реализующих технологии искусственного интеллекта", + "УБИ.221 Угроза модификации модели машинного обучения путем искажения («отравления») обучающих данных", + "УБИ.222 Угроза подмены модели машинного обучения", + "УБИ.223 Угроза несанкционированного доступа к контейнерам, предоставляющего пользователям расширенные привилегии", + "УБИ.224 Угроза нарушения целостности (подмены) контейнеров", + "УБИ.225 Угроза нарушения изоляции контейнеров", + "УБИ.226 Угроза внедрения вредоносного программного обеспечения в контейнеры", + "УБИ.227 Угроза модификации (подмены) образов контейнеров" ] \ No newline at end of file diff --git a/dokogen/fstec_threats.py b/dokogen/fstec_threats.py index 2b39a70..9ada83c 100644 --- a/dokogen/fstec_threats.py +++ b/dokogen/fstec_threats.py @@ -49,29 +49,42 @@ def _fetch(url, timeout=30): return None +def _normalize_ubi(code): + """«УБИ. 001» / «УБИ.001» → «УБИ.001» (без пробела после точки).""" + m = re.search(r'(УБИ\.?)\s*([\d.]+)', code or '', re.I) + if m: + return f"{m.group(1).replace('.', '').upper()}.{m.group(2)}" + return (code or '').strip() + + def _parse_threats(html): - """Извлекает названия угроз из HTML-таблицы БДУ. + """Извлекает пары (код УБИ, название) из HTML-таблицы БДУ. Строки вида: ...УБИ. 001Угроза ...... - Возвращает список названий (без кода). + Возвращает список строк: «УБИ.001 Угроза ...» (код + название). """ - names = [] + items = [] if not html: - return names + return items for row in re.findall(r']*>(.*?)', html, re.S): cells = re.findall(r']*>(.*?)', row, re.S) cleaned = [re.sub(r'<[^>]+>', '', c).strip() for c in cells] - # формат: [код, название, ...] — берём ячейку, которая не похожа на код УБИ - for cell in cleaned: - if not cell: - continue - if re.fullmatch(r'УБИ\.?\s*[\d.]+', cell): - continue - if cell in ('№', 'Идентификатор', 'Наименование', 'Дата', 'Уровень опасности'): - continue - names.append(cell) - break - return names + if not cleaned: + continue + # первая ячейка — код (УБИ.001), вторая — название + code = _normalize_ubi(cleaned[0]) if cleaned else '' + name = '' + for cell in cleaned[1:]: + if cell and cell not in ('№', 'Идентификатор', 'Наименование', 'Дата', 'Уровень опасности'): + name = cell + break + if not name: + continue + if code.startswith('УБИ.'): + items.append(f"{code} {name}") + else: + items.append(name) + return items def download_fstec_threats(dict_dir=None, max_pages=8, page_size=100): diff --git a/dokogen/threat_rules.py b/dokogen/threat_rules.py new file mode 100644 index 0000000..392c106 --- /dev/null +++ b/dokogen/threat_rules.py @@ -0,0 +1,168 @@ +# -*- coding: utf-8 -*- +"""DokoGen — автоматический подбор угроз безопасности информации (236 приказ). + +Логика программы: по характеристикам объекта КИИ (тип, сеть, нарушитель) +подбирает актуальные угрозы из перечня БДУ ФСТЭК (threats_fstec.json). +Если перечень не скачан — использует базовый threats.json. + +Правила эвристические; при наличии методического документа (например, +«Методика оценки угроз безопасности информации» ФСТЭК) — адаптируются под него. +""" + +import os +import json + + +def load_threats(dict_dir=None): + """Список угроз: сначала скачанный с ФСТЭК (с кодами УБИ), иначе базовый.""" + if dict_dir is None: + dict_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'dictionaries') + fstec = os.path.join(dict_dir, 'threats_fstec.json') + if os.path.exists(fstec): + try: + with open(fstec, encoding='utf-8') as f: + data = json.load(f) + if data: + return data + except Exception: + pass + base = os.path.join(dict_dir, 'threats.json') + try: + with open(base, encoding='utf-8') as f: + return json.load(f) + except Exception: + return [] + + +# --------------------------------------------------------------- +# Ключевые слова (в названии угрозы) по признакам объекта +# --------------------------------------------------------------- +# Базовый набор — актуален для любого объекта КИИ +BASE_KEYWORDS = [ + 'вредоносн', 'несанкционированн', 'утечк', 'перехват', 'модификац', + 'уничтожен', 'отказ в обслуживании', 'нсд', 'биос', 'пароль', + 'криптографическ', 'шифрован', 'аутентификац', +] + +# Объект имеет подключение к сети Интернет / сеть электросвязи +INTERNET_KEYWORDS = [ + 'удалённ', 'удаленн', 'сетев', 'фишинг', 'ddos', 'отказ в обслуживании', + 'веб', 'электронн', 'почт', 'беспроводн', 'wi-fi', 'wifi', 'vpn', + 'маршрутизац', 'протокол', 'интернет', +] + +# Объект изолирован (нет подключения к Интернету) +ISOLATED_KEYWORDS = [ + 'съёмн', 'съемн', 'физическ', 'локальн', 'инсайд', 'носител', + 'биос', 'желез', 'аппаратн', +] + +# АСУ / технологический процесс +ASU_KEYWORDS = [ + 'технологическ', 'асутп', 'промышленн', 'scada', 'датчик', + 'исполнительн', 'технологическ', 'производств', 'процесс', +] + +# ИТКС / сети связи +NETWORK_KEYWORDS = [ + 'сеть', 'канал', 'протокол', 'маршрутизац', 'связ', 'передач', + 'коммутац', 'трафик', +] + +# Внутренний нарушитель +INSIDER_KEYWORDS = [ + 'инсайд', 'сотрудник', 'привилегированн', 'администратор', + 'внутренн', 'персонал', +] + +# Внешний нарушитель +EXTERNAL_KEYWORDS = [ + 'внешн', 'удалённ', 'удаленн', 'дистанционн', +] + + +def _is_asu(isys) -> bool: + t = (getattr(isys, 'object_type', '') or '').lower() + return 'асу' in t or 'автоматизированн' in t or 'технологическ' in t + + +def _is_network(isys) -> bool: + t = (getattr(isys, 'object_type', '') or '').lower() + return 'телекоммуникац' in t or 'сеть' in t + + +def _has_internet(isys) -> bool: + """Есть ли подключение к сети Интернет / внешним сетям.""" + if getattr(isys, 'is_internet', False): + return True + # По описанию / сетям: «отсутствует подключение к сети Интернет» → нет + desc = ((getattr(isys, 'description', '') or '') + ' ' + + (getattr(isys, 'net_operator', '') or '')).lower() + if 'отсутств' in desc and ('интернет' in desc or 'подключ' in desc): + return False + net_category = (getattr(isys, 'net_category', '') or '').lower() + if net_category: + return True + # По умолчанию считаем, что сеть есть (осторожная оценка) + return True + + +def _is_insider(isys) -> bool: + a = (getattr(isys, 'attacker_category', '') or '').lower() + return 'внутрен' in a + + +def _score(threat_lower, keywords): + """Сколько ключевых слов встретилось в названии угрозы.""" + return sum(1 for kw in keywords if kw in threat_lower) + + +def suggest_threats_program(isys, threats=None, limit=15): + """Подбор угроз по характеристикам объекта КИИ. + + Возвращает список строк (с кодами УБИ, если они есть в перечне). + """ + if threats is None: + threats = load_threats() + if not threats: + return [] + + has_internet = _has_internet(isys) + is_asu = _is_asu(isys) + is_network = _is_network(isys) + insider = _is_insider(isys) + + # Собираем активные наборы ключевых слов + active = list(BASE_KEYWORDS) + if has_internet: + active += INTERNET_KEYWORDS + else: + active += ISOLATED_KEYWORDS + if is_asu: + active += ASU_KEYWORDS + if is_network: + active += NETWORK_KEYWORDS + if insider: + active += INSIDER_KEYWORDS + else: + active += EXTERNAL_KEYWORDS + + scored = [] + for t in threats: + tl = str(t).lower() + s = _score(tl, active) + if s > 0: + scored.append((s, t)) + + # Сортировка: больше совпадений — выше; убираем дубликаты, сохраняя порядок + scored.sort(key=lambda x: -x[0]) + result = [] + seen = set() + for s, t in scored: + if t in seen: + continue + seen.add(t) + result.append(t) + if len(result) >= limit: + break + return result diff --git a/dokogen/ui.py b/dokogen/ui.py index 36fbf26..9c2f476 100644 --- a/dokogen/ui.py +++ b/dokogen/ui.py @@ -944,13 +944,37 @@ class DokoGenApp: # ===== Вкладка «Безопасность» ===== sec_tab = ttk.Frame(nb2) nb2.add(sec_tab, text="Безопасность") - sec_frame = ttk.Frame(sec_tab, padding=8) + sec_frame = ttk.Frame(sec_tab, padding=6) sec_frame.pack(fill=tk.BOTH, expand=True) - # --- Категория нарушителя (словарик) --- - ttk.Label(sec_frame, text="Категория нарушителя:").grid(row=0, column=0, sticky=tk.W, pady=2) - self.is_attacker_category_combo = ttk.Combobox(sec_frame, width=68, state='readonly') - self.is_attacker_category_combo.grid(row=0, column=1, padx=8, sticky=tk.EW, pady=1) + # --- Панель действий (сверху, всегда видна) --- + sec_actions = ttk.Frame(sec_frame) + sec_actions.pack(fill=tk.X, pady=(0, 6)) + ttk.Button(sec_actions, text="⬇️ Загрузить угрозы ФСТЭК", + command=self._download_fstec_threats).pack(side=tk.LEFT, padx=2) + ttk.Button(sec_actions, text="⚙️ Подобрать угрозы (программа)", + command=self._suggest_threats_program_click).pack(side=tk.LEFT, padx=2) + ttk.Button(sec_actions, text="🤖 Подобрать угрозы (ИИ)", + command=self._suggest_threats_ai_click).pack(side=tk.LEFT, padx=2) + ttk.Button(sec_actions, text="⚖️ Сравнить", + command=self._compare_threats).pack(side=tk.LEFT, padx=2) + ttk.Button(sec_actions, text="🤖 Проверить безопасность через ИИ", + command=self._check_security_ai).pack(side=tk.LEFT, padx=2) + self._threats_date_label = ttk.Label(sec_actions, text="", foreground='gray') + self._threats_date_label.pack(side=tk.LEFT, padx=8) + + # --- Две колонки: слева нарушитель+угрозы, справа остальное --- + sec_cols = ttk.Frame(sec_frame) + sec_cols.pack(fill=tk.BOTH, expand=True) + sec_left = ttk.Frame(sec_cols) + sec_left.pack(side=tk.LEFT, fill=tk.BOTH, expand=True, padx=(0, 6)) + sec_right = ttk.Frame(sec_cols) + sec_right.pack(side=tk.LEFT, fill=tk.BOTH, expand=True) + + # ===== Левая колонка ===== + ttk.Label(sec_left, text="Категория нарушителя:").pack(anchor=tk.W) + self.is_attacker_category_combo = ttk.Combobox(sec_left, state='readonly') + self.is_attacker_category_combo.pack(fill=tk.X, pady=(2, 4)) try: import json as _json _ac = os.path.join(os.path.dirname(__file__), 'dictionaries', 'attacker_categories.json') @@ -959,25 +983,27 @@ class DokoGenApp: except Exception: pass - # --- Характеристика нарушителя --- - ttk.Label(sec_frame, text="Характеристика нарушителя:").grid(row=1, column=0, sticky=tk.NW, pady=2) - self.is_attacker_characteristics_listbox = tk.Listbox(sec_frame, height=3, exportselection=False) - self.is_attacker_characteristics_listbox.grid(row=1, column=1, sticky=tk.EW, padx=(8, 4), pady=1) - sec_char_btn = ttk.Frame(sec_frame) - sec_char_btn.grid(row=1, column=2, sticky=tk.N, padx=(4, 0)) - ttk.Button(sec_char_btn, text="+ Добавить", - command=lambda: self._add_sw_item(self.is_attacker_characteristics_listbox)).pack(fill=tk.X, pady=1) - ttk.Button(sec_char_btn, text="- Удалить", - command=lambda: self._del_sw_item(self.is_attacker_characteristics_listbox)).pack(fill=tk.X, pady=1) - ttk.Button(sec_char_btn, text="✏️ Редактировать", - command=lambda: self._edit_sw_item(self.is_attacker_characteristics_listbox)).pack(fill=tk.X, pady=1) + ttk.Label(sec_left, text="Характеристика нарушителя:").pack(anchor=tk.W) + sec_char_row = ttk.Frame(sec_left) + sec_char_row.pack(fill=tk.X, pady=(2, 4)) + self.is_attacker_characteristics_listbox = tk.Listbox(sec_char_row, height=2, exportselection=False) + self.is_attacker_characteristics_listbox.pack(side=tk.LEFT, fill=tk.BOTH, expand=True) + sec_char_btn = ttk.Frame(sec_char_row) + sec_char_btn.pack(side=tk.RIGHT, padx=(4, 0)) + ttk.Button(sec_char_btn, text="+", width=2, + command=lambda: self._add_sw_item(self.is_attacker_characteristics_listbox)).pack(pady=1) + ttk.Button(sec_char_btn, text="-", width=2, + command=lambda: self._del_sw_item(self.is_attacker_characteristics_listbox)).pack(pady=1) + ttk.Button(sec_char_btn, text="✏️", width=3, + command=lambda: self._edit_sw_item(self.is_attacker_characteristics_listbox)).pack(pady=1) - # --- Основные угрозы БИ (словарик + загрузка с ФСТЭК) --- - ttk.Label(sec_frame, text="Основные угрозы БИ:").grid(row=2, column=0, sticky=tk.W, pady=2) - self.is_threats_listbox = tk.Listbox(sec_frame, height=5, exportselection=False) - self.is_threats_listbox.grid(row=2, column=1, sticky=tk.EW, padx=(8, 4), pady=1) - sec_thr_btn = ttk.Frame(sec_frame) - sec_thr_btn.grid(row=2, column=2, sticky=tk.N, padx=(4, 0)) + ttk.Label(sec_left, text="Основные угрозы БИ:").pack(anchor=tk.W) + sec_thr_row = ttk.Frame(sec_left) + sec_thr_row.pack(fill=tk.BOTH, expand=True, pady=(2, 4)) + self.is_threats_listbox = tk.Listbox(sec_thr_row, height=7, exportselection=False) + self.is_threats_listbox.pack(side=tk.LEFT, fill=tk.BOTH, expand=True) + sec_thr_btn = ttk.Frame(sec_thr_row) + sec_thr_btn.pack(side=tk.RIGHT, padx=(4, 0)) ttk.Button(sec_thr_btn, text="+ Добавить", command=lambda: self._add_sw_item(self.is_threats_listbox)).pack(fill=tk.X, pady=1) ttk.Button(sec_thr_btn, text="- Удалить", @@ -986,90 +1012,38 @@ class DokoGenApp: command=lambda: self._edit_sw_item(self.is_threats_listbox)).pack(fill=tk.X, pady=1) ttk.Button(sec_thr_btn, text="📚 Из словаря", command=lambda: self._select_sw_from_dict(self.is_threats_listbox, 'threats_fstec.json')).pack(fill=tk.X, pady=1) - ttk.Button(sec_thr_btn, text="⬇️ Загрузить угрозы ФСТЭК", - command=self._download_fstec_threats).pack(fill=tk.X, pady=1) - self._threats_date_label = ttk.Label(sec_frame, text="", foreground='gray') - self._threats_date_label.grid(row=3, column=1, sticky=tk.W, padx=8, pady=(0, 2)) - # --- Типы компьютерных инцидентов (словарик) --- - ttk.Label(sec_frame, text="Типы компьютерных инцидентов:").grid(row=4, column=0, sticky=tk.W, pady=2) - self.is_incidents_listbox = tk.Listbox(sec_frame, height=4, exportselection=False) - self.is_incidents_listbox.grid(row=4, column=1, sticky=tk.EW, padx=(8, 4), pady=1) - sec_inc_btn = ttk.Frame(sec_frame) - sec_inc_btn.grid(row=4, column=2, sticky=tk.N, padx=(4, 0)) - ttk.Button(sec_inc_btn, text="+ Добавить", - command=lambda: self._add_sw_item(self.is_incidents_listbox)).pack(fill=tk.X, pady=1) - ttk.Button(sec_inc_btn, text="- Удалить", - command=lambda: self._del_sw_item(self.is_incidents_listbox)).pack(fill=tk.X, pady=1) - ttk.Button(sec_inc_btn, text="✏️ Редактировать", - command=lambda: self._edit_sw_item(self.is_incidents_listbox)).pack(fill=tk.X, pady=1) - ttk.Button(sec_inc_btn, text="📚 Из словаря", - command=lambda: self._select_sw_from_dict(self.is_incidents_listbox, 'incidents.json')).pack(fill=tk.X, pady=1) + # ===== Правая колонка ===== + def _sec_row(parent, label, attr, dict_name=None, height=2): + """Ряд: label + listbox + кнопки (+/-/✏️/📚).""" + ttk.Label(parent, text=label).pack(anchor=tk.W) + row = ttk.Frame(parent) + row.pack(fill=tk.X, pady=(2, 4)) + lb = tk.Listbox(row, height=height, exportselection=False) + lb.pack(side=tk.LEFT, fill=tk.BOTH, expand=True) + setattr(self, attr, lb) + btns = ttk.Frame(row) + btns.pack(side=tk.RIGHT, padx=(4, 0)) + ttk.Button(btns, text="+", width=2, + command=lambda l=lb: self._add_sw_item(l)).pack(pady=1) + ttk.Button(btns, text="-", width=2, + command=lambda l=lb: self._del_sw_item(l)).pack(pady=1) + ttk.Button(btns, text="✏️", width=3, + command=lambda l=lb: self._edit_sw_item(l)).pack(pady=1) + if dict_name: + ttk.Button(btns, text="📚", width=3, + command=lambda l=lb, d=dict_name: self._select_sw_from_dict(l, d)).pack(pady=1) - # --- Показатели критериев значимости (словарик) --- - ttk.Label(sec_frame, text="Показатели критериев значимости:").grid(row=5, column=0, sticky=tk.W, pady=2) - self.is_criteria_values_listbox = tk.Listbox(sec_frame, height=4, exportselection=False) - self.is_criteria_values_listbox.grid(row=5, column=1, sticky=tk.EW, padx=(8, 4), pady=1) - sec_crit_btn = ttk.Frame(sec_frame) - sec_crit_btn.grid(row=5, column=2, sticky=tk.N, padx=(4, 0)) - ttk.Button(sec_crit_btn, text="+ Добавить", - command=lambda: self._add_sw_item(self.is_criteria_values_listbox)).pack(fill=tk.X, pady=1) - ttk.Button(sec_crit_btn, text="- Удалить", - command=lambda: self._del_sw_item(self.is_criteria_values_listbox)).pack(fill=tk.X, pady=1) - ttk.Button(sec_crit_btn, text="✏️ Редактировать", - command=lambda: self._edit_sw_item(self.is_criteria_values_listbox)).pack(fill=tk.X, pady=1) - ttk.Button(sec_crit_btn, text="📚 Из словаря", - command=lambda: self._select_sw_from_dict(self.is_criteria_values_listbox, 'criteria_indicators.json')).pack(fill=tk.X, pady=1) - - # --- Обоснование значений показателей --- - ttk.Label(sec_frame, text="Обоснование значений показателей:").grid(row=6, column=0, sticky=tk.NW, pady=2) - self.is_criteria_justification_listbox = tk.Listbox(sec_frame, height=3, exportselection=False) - self.is_criteria_justification_listbox.grid(row=6, column=1, sticky=tk.EW, padx=(8, 4), pady=1) - sec_just_btn = ttk.Frame(sec_frame) - sec_just_btn.grid(row=6, column=2, sticky=tk.N, padx=(4, 0)) - ttk.Button(sec_just_btn, text="+ Добавить", - command=lambda: self._add_sw_item(self.is_criteria_justification_listbox)).pack(fill=tk.X, pady=1) - ttk.Button(sec_just_btn, text="- Удалить", - command=lambda: self._del_sw_item(self.is_criteria_justification_listbox)).pack(fill=tk.X, pady=1) - ttk.Button(sec_just_btn, text="✏️ Редактировать", - command=lambda: self._edit_sw_item(self.is_criteria_justification_listbox)).pack(fill=tk.X, pady=1) - - # --- Организационные меры (словарик) --- - ttk.Label(sec_frame, text="Организационные меры:").grid(row=7, column=0, sticky=tk.W, pady=2) - self.is_org_measures_listbox = tk.Listbox(sec_frame, height=3, exportselection=False) - self.is_org_measures_listbox.grid(row=7, column=1, sticky=tk.EW, padx=(8, 4), pady=1) - sec_org_btn = ttk.Frame(sec_frame) - sec_org_btn.grid(row=7, column=2, sticky=tk.N, padx=(4, 0)) - ttk.Button(sec_org_btn, text="+ Добавить", - command=lambda: self._add_sw_item(self.is_org_measures_listbox)).pack(fill=tk.X, pady=1) - ttk.Button(sec_org_btn, text="- Удалить", - command=lambda: self._del_sw_item(self.is_org_measures_listbox)).pack(fill=tk.X, pady=1) - ttk.Button(sec_org_btn, text="✏️ Редактировать", - command=lambda: self._edit_sw_item(self.is_org_measures_listbox)).pack(fill=tk.X, pady=1) - ttk.Button(sec_org_btn, text="📚 Из словаря", - command=lambda: self._select_sw_from_dict(self.is_org_measures_listbox, 'org_measures.json')).pack(fill=tk.X, pady=1) - - # --- Технические меры (словарик) --- - ttk.Label(sec_frame, text="Технические меры:").grid(row=8, column=0, sticky=tk.W, pady=2) - self.is_tech_measures_listbox = tk.Listbox(sec_frame, height=3, exportselection=False) - self.is_tech_measures_listbox.grid(row=8, column=1, sticky=tk.EW, padx=(8, 4), pady=1) - sec_tech_btn = ttk.Frame(sec_frame) - sec_tech_btn.grid(row=8, column=2, sticky=tk.N, padx=(4, 0)) - ttk.Button(sec_tech_btn, text="+ Добавить", - command=lambda: self._add_sw_item(self.is_tech_measures_listbox)).pack(fill=tk.X, pady=1) - ttk.Button(sec_tech_btn, text="- Удалить", - command=lambda: self._del_sw_item(self.is_tech_measures_listbox)).pack(fill=tk.X, pady=1) - ttk.Button(sec_tech_btn, text="✏️ Редактировать", - command=lambda: self._edit_sw_item(self.is_tech_measures_listbox)).pack(fill=tk.X, pady=1) - ttk.Button(sec_tech_btn, text="📚 Из словаря", - command=lambda: self._select_sw_from_dict(self.is_tech_measures_listbox, 'tech_measures.json')).pack(fill=tk.X, pady=1) - - # --- Кнопка ИИ-проверки --- - ttk.Button(sec_frame, text="🤖 Проверить безопасность через ИИ", - command=self._check_security_ai).grid( - row=9, column=0, columnspan=3, sticky=tk.W, pady=(10, 0)) - - sec_frame.columnconfigure(1, weight=1) + _sec_row(sec_right, "Типы компьютерных инцидентов:", + 'is_incidents_listbox', 'incidents.json', height=2) + _sec_row(sec_right, "Показатели критериев значимости:", + 'is_criteria_values_listbox', 'criteria_indicators.json', height=2) + _sec_row(sec_right, "Обоснование значений показателей:", + 'is_criteria_justification_listbox', None, height=2) + _sec_row(sec_right, "Организационные меры:", + 'is_org_measures_listbox', 'org_measures.json', height=2) + _sec_row(sec_right, "Технические меры:", + 'is_tech_measures_listbox', 'tech_measures.json', height=2) # ===== Вкладка «Средства защиты» ===== def_tab = ttk.Frame(nb2) @@ -1800,6 +1774,132 @@ class DokoGenApp: text="⚠ Список угроз ещё не скачан — нажмите «⬇️ Загрузить угрозы ФСТЭК»", foreground='#c62828') + def _suggest_threats_program_click(self): + """Подобрать угрозы логикой программы по характеристикам объекта.""" + if self._current_is_idx is None: + messagebox.showinfo("Угрозы", "Сначала выберите объект КИИ в списке слева") + return + self._collect_is() + isys = self.model.information_systems[self._current_is_idx] + try: + from .threat_rules import suggest_threats_program + threats = suggest_threats_program(isys, limit=20) + except Exception as e: + messagebox.showerror("Ошибка", str(e)) + return + if not threats: + messagebox.showinfo("Угрозы", "Не удалось подобрать угрозы.\n" + "Скачайте перечень ФСТЭК: кнопка «⬇️ Загрузить угрозы ФСТЭК».") + return + lb = self.is_threats_listbox + lb.delete(0, tk.END) + for t in threats: + lb.insert(tk.END, t) + self.log(f"⚙️ Угрозы подобраны программой: {len(threats)} шт.") + + def _suggest_threats_ai_click(self): + """Подобрать угрозы через ИИ по характеристикам объекта.""" + if self._current_is_idx is None: + messagebox.showinfo("Угрозы", "Сначала выберите объект КИИ в списке слева") + return + settings = load_api_settings() + if not settings.get('ai_api_key'): + messagebox.showwarning("Настройки", "Не задан API-ключ ИИ.\nМеню «Файл → Настройки»") + return + self._collect_is() + isys = self.model.information_systems[self._current_is_idx] + from .threat_rules import _has_internet + data = { + 'name': isys.name or '', + 'description': isys.description or '', + 'object_type': isys.object_type or '', + 'sphere': isys.sphere or '', + 'architecture': isys.architecture or '', + 'net_category': isys.net_category or '', + 'attacker_category': isys.attacker_category or '', + 'has_internet': _has_internet(isys), + } + self.log(f"🤖 Запрос к ИИ: подбор угроз для «{isys.name}»") + self._verify_log("Подбор угроз через ИИ…") + + def _run(): + try: + from .verify import suggest_threats_ai + threats, err = suggest_threats_ai( + data, settings['ai_api_key'], settings.get('ai_model'), settings.get('ai_base_url')) + self.root.after(0, lambda: self._suggest_threats_ai_done(threats, err)) + except Exception as e: + self.root.after(0, lambda: self._suggest_threats_ai_done(None, str(e))) + + threading.Thread(target=_run, daemon=True).start() + + def _suggest_threats_ai_done(self, threats, err): + if err: + self._verify_log(f"❌ {err}") + self.log(f"❌ Подбор угроз ИИ: {err}") + return + if not threats: + self._verify_log("❌ ИИ не вернул угрозы") + return + lb = self.is_threats_listbox + lb.delete(0, tk.END) + for t in threats: + lb.insert(tk.END, t) + self.log(f"🤖 ИИ подобрал угроз: {len(threats)}") + self._verify_log(f"🤖 ИИ: {len(threats)} угроз") + + def _compare_threats(self): + """Сравнить угрозы, подобранные программой и ИИ.""" + if self._current_is_idx is None: + messagebox.showinfo("Сравнение", "Сначала выберите объект КИИ в списке слева") + return + self._collect_is() + isys = self.model.information_systems[self._current_is_idx] + from .threat_rules import suggest_threats_program + program = suggest_threats_program(isys, limit=20) + current = [str(self.is_threats_listbox.get(i)) for i in range(self.is_threats_listbox.size())] + if not current: + messagebox.showinfo("Сравнение", "Сначала подберите угрозы (программой или ИИ).") + return + + # Показываем окно: слева подобрано программой, справа текущий список + dlg = tk.Toplevel(self.root) + dlg.title("Сравнение угроз: программа ↔ ИИ/текущий") + dlg.geometry("760x420") + dlg.transient(self.root) + + frm = ttk.Frame(dlg, padding=8) + frm.pack(fill=tk.BOTH, expand=True) + + left = ttk.Frame(frm) + left.pack(side=tk.LEFT, fill=tk.BOTH, expand=True) + ttk.Label(left, text="⚙️ Программа", font=('Arial', 9, 'bold')).pack(anchor=tk.W) + lb_p = tk.Listbox(left, height=14) + lb_p.pack(fill=tk.BOTH, expand=True, pady=4) + for t in program: + lb_p.insert(tk.END, t) + + right = ttk.Frame(frm) + right.pack(side=tk.LEFT, fill=tk.BOTH, expand=True, padx=(8, 0)) + ttk.Label(right, text="🤖 ИИ / текущий список", font=('Arial', 9, 'bold')).pack(anchor=tk.W) + lb_c = tk.Listbox(right, height=14) + lb_c.pack(fill=tk.BOTH, expand=True, pady=4) + for t in current: + lb_c.insert(tk.END, t) + + # Подсветка совпадений + pset = set(program) + for i in range(lb_p.size()): + if lb_p.get(i) in set(current): + lb_p.itemconfig(i, bg='#c8e6c9') + for i in range(lb_c.size()): + if lb_c.get(i) in pset: + lb_c.itemconfig(i, bg='#c8e6c9') + + info = ttk.Label(frm, text="Зелёным выделены совпавшие угрозы.", + foreground='gray') + info.pack(anchor=tk.W, pady=(4, 0)) + def _check_security_ai(self): """Проверка вкладки «Безопасность» через ИИ (DeepSeek/OpenAI-совместимый API).""" if self._current_is_idx is None: @@ -1943,7 +2043,7 @@ class DokoGenApp: """Открывает окно с чекбоксами для выбора элементов из списка.""" dialog = tk.Toplevel(self.root) dialog.title(title) - dialog.geometry("400x500") + dialog.geometry("720x680") dialog.transient(self.root) dialog.grab_set() @@ -1952,6 +2052,13 @@ class DokoGenApp: ttk.Label(frame, text=title, font=('Arial', 10, 'bold')).pack(anchor=tk.W, pady=(0, 5)) + # Поиск (важно для большого перечня угроз ФСТЭК) + search_var = tk.StringVar() + search_entry = ttk.Entry(frame, textvariable=search_var) + search_entry.pack(fill=tk.X, pady=(0, 5)) + search_entry.insert(0, "") + search_entry.focus_set() + # Уже выбранные элементы existing = set(listbox.get(0, tk.END)) @@ -1973,6 +2080,17 @@ class DokoGenApp: vars[item] = var items_map[item] = (var, cb) + # Фильтр по поиску: скрываем неподходящие чекбоксы + def _apply_search(*_): + q = search_var.get().strip().lower() + for item, (var, cb) in items_map.items(): + if q and q not in item.lower(): + cb.pack_forget() + else: + cb.pack(anchor=tk.W, pady=1) + + search_var.trace_add('write', _apply_search) + btn_frame = ttk.Frame(dialog, padding=10) btn_frame.pack(fill=tk.X) diff --git a/dokogen/verify.py b/dokogen/verify.py index 3a48ab2..dec8cef 100644 --- a/dokogen/verify.py +++ b/dokogen/verify.py @@ -474,6 +474,35 @@ def compare_company_values(old_data, new_data): return diffs +def suggest_threats_ai(security_data, api_key, model='deepseek-chat', base_url=None): + """ИИ предлагает актуальные угрозы БИ для объекта КИИ по его характеристикам. + + security_data — dict: name, description, object_type, sphere, architecture, + attacker_category, has_internet (True/False), etc. + Возвращает (список_угроз, ошибка). + """ + if not api_key: + return None, "Не задан API-ключ ИИ (Файл → Настройки → API)" + internet = 'да' if security_data.get('has_internet', True) else 'нет' + system = ( + "Ты — эксперт ФСТЭК по безопасности критической информационной инфраструктуры " + "(187-ФЗ, приказ ФСТЭК № 236). На основе характеристик объекта КИИ составь " + "перечень АКТУАЛЬНЫХ угроз безопасности информации из БДУ ФСТЭК " + "(перечень угроз УБИ.xxx). Верни ТОЛЬКО JSON: " + '{"threats": ["УБИ.xxx Название угрозы", ...]} — от 8 до 15 угроз, ' + "без пояснений и комментариев." + ) + user = json.dumps(security_data, ensure_ascii=False) + js, err = _ai_json(api_key, model, base_url, system, user) + if err: + return None, err + threats = js.get('threats') or [] + if isinstance(threats, str): + threats = [threats] + threats = [str(t).strip() for t in threats if str(t).strip()] + return threats, None + + def check_security_ai(security_data, api_key, model='deepseek-chat', base_url=None): """ИИ-проверка заполненной вкладки «Безопасность» объекта КИИ (236 приказ).