feat: вкладка «Безопасность» — коды УБИ, автоподбор угроз (программа/ИИ), сравнение, новый UI
- угрозы ФСТЭК теперь с кодами: «УБИ.001 Угроза …» (парсинг кода из БДУ, 227 шт) - threat_rules.py — логика программы: по характеристикам объекта (тип ИС/АСУ/ИТКС, интернет да/нет, нарушитель внутр./внешн.) фильтрует перечень по ключевым словам - verify.py: suggest_threats_ai — ИИ предлагает актуальные угрозы по описанию объекта - вкладка перестроена: компактная 2-колоночная раскладка, панель действий сверху: «⬇️ Загрузить угрозы ФСТЭК» | «⚙️ Подобрать (программа)» | «🤖 Подобрать (ИИ)» | «⚖️ Сравнить» | «🤖 Проверить безопасность через ИИ» - окно выбора из словаря: 720x680 + поле поиска (фильтр по тексту, важно для 227 угроз) - сравнение программа↔ИИ: окно с двумя списками, совпавшие подсвечены зелёным
This commit is contained in:
@@ -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 Угроза модификации (подмены) образов контейнеров"
|
||||
]
|
||||
+28
-15
@@ -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-таблицы БДУ.
|
||||
|
||||
Строки вида: <tr>...<td>УБИ. 001</td><td>Угроза ...</td>...</tr>
|
||||
Возвращает список названий (без кода).
|
||||
Возвращает список строк: «УБИ.001 Угроза ...» (код + название).
|
||||
"""
|
||||
names = []
|
||||
items = []
|
||||
if not html:
|
||||
return names
|
||||
return items
|
||||
for row in re.findall(r'<tr[^>]*>(.*?)</tr>', html, re.S):
|
||||
cells = re.findall(r'<t[dh][^>]*>(.*?)</t[dh]>', 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):
|
||||
|
||||
@@ -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
|
||||
+224
-106
@@ -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)
|
||||
|
||||
|
||||
@@ -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 приказ).
|
||||
|
||||
|
||||
Reference in New Issue
Block a user