From 8438125bd114f2394db800bd99e3828905d26fa3 Mon Sep 17 00:00:00 2001 From: prog1764 Date: Tue, 4 Aug 2026 19:52:18 +0400 Subject: [PATCH] =?UTF-8?q?feat:=20=D0=BD=D0=B0=D1=80=D1=83=D1=88=D0=B8?= =?UTF-8?q?=D1=82=D0=B5=D0=BB=D0=B8=20=D0=BF=D0=BE=20=D0=9C=D0=B5=D1=82?= =?UTF-8?q?=D0=BE=D0=B4=D0=B8=D0=BA=D0=B5=20=D0=A4=D0=A1=D0=A2=D0=AD=D0=9A?= =?UTF-8?q?=20=D0=BE=D1=82=2005.02.2021=20(=D0=B1=D0=B5=D0=B7=20=D0=B2?= =?UTF-8?q?=D1=8B=D0=B4=D1=83=D0=BC=D0=BE=D0=BA)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - attacker_categories.json: 2 категории (внешний/внутренний) с формулировками п. 5.1.6 - attacker_levels.json: 4 уровня возможностей Н1-Н4 (Приложение 8): базовые, базовые повышенные, средние, высокие — с полным описанием и видами нарушителей по каждому уровню - attacker_types.json: 13 видов нарушителей (п. 5.1.3) — спецслужбы ИГ, террористические группировки, преступные группы, хакеры, конкуренты, разработчики ПО, поставщики, персонал, пользователи, сисадмины, бывшие работники - вкладка «Безопасность»: категория (combobox) + уровень Н1-Н4 (combobox) + виды нарушителей (listbox с кнопками 📚 из словаря) - модель: attacker_level, attacker_types; маппинги collect/select/copy/import; генератор: item.attacker_level, item.attacker_types --- dokogen/dictionaries/attacker_categories.json | 11 +++-- dokogen/dictionaries/attacker_levels.json | 43 +++++++++++++++++++ dokogen/dictionaries/attacker_types.json | 15 +++++++ dokogen/models.py | 2 + dokogen/ui.py | 38 +++++++++++++++- dokogen/variables.py | 2 + 6 files changed, 106 insertions(+), 5 deletions(-) create mode 100644 dokogen/dictionaries/attacker_levels.json create mode 100644 dokogen/dictionaries/attacker_types.json diff --git a/dokogen/dictionaries/attacker_categories.json b/dokogen/dictionaries/attacker_categories.json index 08b757b..aae19c1 100644 --- a/dokogen/dictionaries/attacker_categories.json +++ b/dokogen/dictionaries/attacker_categories.json @@ -1,5 +1,10 @@ [ - "внешний нарушитель", - "внутренний нарушитель", - "внешний и внутренний нарушитель" + { + "name": "Внешний нарушитель", + "description": "Нарушитель, не имеющий прав доступа в контролируемую (охраняемую) зону (территорию) и (или) полномочий по доступу к информационным ресурсам и компонентам систем и сетей, требующим авторизации" + }, + { + "name": "Внутренний нарушитель", + "description": "Нарушитель, имеющий права доступа в контролируемую (охраняемую) зону (территорию) и (или) полномочия по автоматизированному доступу к информационным ресурсам и компонентам систем и сетей. К внутренним нарушителям относятся пользователи, имеющие как непривилегированные (пользовательские), так и привилегированные (административные) права доступа" + } ] diff --git a/dokogen/dictionaries/attacker_levels.json b/dokogen/dictionaries/attacker_levels.json new file mode 100644 index 0000000..e859daa --- /dev/null +++ b/dokogen/dictionaries/attacker_levels.json @@ -0,0 +1,43 @@ +[ + { + "level": "Н1", + "name": "Базовые возможности", + "description": "Нарушитель, обладающий базовыми возможностями. Имеет возможность использовать только известные уязвимости, скрипты и инструменты, свободно распространяемые в сети «Интернет» и разработанные другими лицами. Обладает базовыми компьютерными знаниями и навыками на уровне пользователя. Имеет возможность реализации угроз за счет физических воздействий на технические средства обработки и хранения информации, линии связи и обеспечивающие системы при наличии физического доступа к ним. Может реализовывать только известные угрозы, направленные на известные (документированные) уязвимости, с использованием общедоступных инструментов.", + "types": [ + "Отдельные физические лица (хакеры)", + "Лица, обеспечивающие поставку программных, программно-аппаратных средств, обеспечивающих систем", + "Лица, обеспечивающие функционирование систем и сетей или обеспечивающих систем (администрация, охрана, уборщики и т.д.)", + "Авторизованные пользователи систем и сетей", + "Бывшие работники (пользователи)" + ] + }, + { + "level": "Н2", + "name": "Базовые повышенные возможности", + "description": "Обладает всеми возможностями нарушителей с базовыми возможностями. Хорошо владеет средствами и инструментами, понимает, как они работают, и может вносить изменения в их функционирование для повышения эффективности реализации угроз. Оснащен фреймворками и наборами средств для реализации угроз и использования уязвимостей. Имеет навыки самостоятельного планирования и реализации сценариев угроз. Обладает практическими знаниями о функционировании систем и сетей, операционных систем, а также знаниями защитных механизмов. Может реализовывать угрозы, в том числе направленные на неизвестные (недокументированные) уязвимости, с использованием специально созданных инструментов. Не имеет возможностей реализации угроз на физически изолированные сегменты систем и сетей.", + "types": [ + "Преступные группы (два лица и более, действующие по единому плану)", + "Конкурирующие организации", + "Поставщики вычислительных услуг, услуг связи", + "Лица, привлекаемые для установки, настройки, испытаний, пусконаладочных и иных видов работ", + "Системные администраторы и администраторы безопасности" + ] + }, + { + "level": "Н3", + "name": "Средние возможности", + "description": "Обладает всеми возможностями нарушителей с базовыми повышенными возможностями. Имеет возможность приобретать информацию об уязвимостях, размещаемую на специализированных платных ресурсах (биржах уязвимостей), приобретать дорогостоящие средства и инструменты для реализации угроз, самостоятельно разрабатывать средства (инструменты), необходимые для реализации угроз (атак). Имеет возможность получения доступа к встраиваемому программному обеспечению аппаратных платформ, системному и прикладному программному обеспечению, телекоммуникационному оборудованию для проведения их анализа. Обладает знаниями и практическими навыками проведения анализа программного кода для получения информации об уязвимостях. Имеет возможность реализовывать угрозы в составе группы лиц. Не имеет возможностей реализации угроз на физически изолированные сегменты систем и сетей.", + "types": [ + "Террористические, экстремистские группировки", + "Разработчики программных, программно-аппаратных средств" + ] + }, + { + "level": "Н4", + "name": "Высокие возможности", + "description": "Обладает всеми возможностями нарушителей со средними возможностями. Имеет возможность получения доступа к исходному коду встраиваемого программного обеспечения аппаратных платформ, системного и прикладного программного обеспечения, телекоммуникационного оборудования для получения сведений об уязвимостях «нулевого дня». Имеет возможность внедрения программных (программно-аппаратных) закладок или уязвимостей на различных этапах поставки программного обеспечения или программно-аппаратных средств. Имеет возможность создания методов и средств реализации угроз с привлечением специализированных научных организаций, создания и применения специальных технических средств для добывания информации. Имеет возможность долговременно и незаметно для операторов систем и сетей реализовывать угрозы. Обладает исключительными знаниями и практическими навыками о функционировании систем и сетей. Имеет практически неограниченные возможности реализовывать угрозы, в том числе с использованием недекларированных возможностей, программных, программно-аппаратных закладок, встроенных в компоненты систем и сетей.", + "types": [ + "Специальные службы иностранных государств" + ] + } +] diff --git a/dokogen/dictionaries/attacker_types.json b/dokogen/dictionaries/attacker_types.json new file mode 100644 index 0000000..67b0ef4 --- /dev/null +++ b/dokogen/dictionaries/attacker_types.json @@ -0,0 +1,15 @@ +[ + "Специальные службы иностранных государств", + "Террористические, экстремистские группировки", + "Преступные группы (криминальные структуры)", + "Отдельные физические лица (хакеры)", + "Конкурирующие организации", + "Разработчики программных, программно-аппаратных средств", + "Лица, обеспечивающие поставку программных, программно-аппаратных средств, обеспечивающих систем", + "Поставщики услуг связи, вычислительных услуг", + "Лица, привлекаемые для установки, настройки, испытаний, пусконаладочных и иных видов работ", + "Лица, обеспечивающие функционирование систем и сетей или обеспечивающих систем оператора (администрация, охрана, уборщики и др.)", + "Авторизованные пользователи систем и сетей", + "Системные администраторы и администраторы безопасности", + "Бывшие (уволенные) работники (пользователи)" +] diff --git a/dokogen/models.py b/dokogen/models.py index 2c00049..7a76111 100644 --- a/dokogen/models.py +++ b/dokogen/models.py @@ -71,6 +71,8 @@ class InformationSystem: # Безопасность (236 приказ) attacker_category: str = "" # Категория нарушителя (внешний/внутренний) + attacker_level: str = "" # Уровень возможностей нарушителя (Н1-Н4, Методика ФСТЭК 05.02.2021) + attacker_types: str = "" # Виды нарушителей (\n — разделитель, п. 5.1.3 Методики) threats: str = "" # Основные угрозы безопасности информации (\n — разделитель) incidents: str = "" # Типы компьютерных инцидентов (\n — разделитель) criteria_values: str = "" # Показатели критериев значимости (\n — разделитель) diff --git a/dokogen/ui.py b/dokogen/ui.py index f6d8d9d..5a598d2 100644 --- a/dokogen/ui.py +++ b/dokogen/ui.py @@ -993,15 +993,41 @@ class DokoGenApp: # ===== Левая колонка ===== 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)) + self.is_attacker_category_combo.pack(fill=tk.X, pady=(2, 2)) try: import json as _json _ac = os.path.join(os.path.dirname(__file__), 'dictionaries', 'attacker_categories.json') with open(_ac, encoding='utf-8') as _f: - self.is_attacker_category_combo['values'] = [''] + _json.load(_f) + _cats = _json.load(_f) + self.is_attacker_category_combo['values'] = [''] + [c['name'] for c in _cats] except Exception: pass + ttk.Label(sec_left, text="Уровень возможностей нарушителя:").pack(anchor=tk.W) + self.is_attacker_level_combo = ttk.Combobox(sec_left, state='readonly') + self.is_attacker_level_combo.pack(fill=tk.X, pady=(2, 2)) + try: + import json as _json + _al = os.path.join(os.path.dirname(__file__), 'dictionaries', 'attacker_levels.json') + with open(_al, encoding='utf-8') as _f: + _levels = _json.load(_f) + self.is_attacker_level_combo['values'] = [''] + [ + f"{l['level']} — {l['name']}" for l in _levels] + except Exception: + pass + + ttk.Label(sec_left, text="Виды нарушителей:").pack(anchor=tk.W) + sec_at_row = ttk.Frame(sec_left) + sec_at_row.pack(fill=tk.X, pady=(2, 4)) + self.is_attacker_types_listbox = tk.Listbox(sec_at_row, height=3, exportselection=False) + self.is_attacker_types_listbox.pack(side=tk.LEFT, fill=tk.BOTH, expand=True) + sec_at_btn = ttk.Frame(sec_at_row) + sec_at_btn.pack(side=tk.RIGHT, padx=(4, 0)) + ttk.Button(sec_at_btn, text="-", width=2, + command=lambda: self._del_sw_item(self.is_attacker_types_listbox)).pack(pady=1) + ttk.Button(sec_at_btn, text="📚", width=3, + command=lambda: self._select_sw_from_dict(self.is_attacker_types_listbox, 'attacker_types.json')).pack(pady=1) + 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)) @@ -1321,6 +1347,10 @@ class DokoGenApp: ('is_os_sw_listbox', 'os_sw'), ('is_app_sw_listbox', 'app_sw'), ('is_attacker_category_combo', 'attacker_category'), + ('is_attacker_level_combo', 'attacker_level'), + ('is_attacker_types_listbox', 'attacker_types'), + ('is_attacker_level_combo', 'attacker_level'), + ('is_attacker_types_listbox', 'attacker_types'), ('is_threats_listbox', 'threats'), ('is_incidents_listbox', 'incidents'), ('is_criteria_values_listbox', 'criteria_values'), @@ -1634,6 +1664,8 @@ class DokoGenApp: app_sw=src.app_sw, balance_value=src.balance_value, attacker_category=src.attacker_category, + attacker_level=src.attacker_level, + attacker_types=src.attacker_types, threats=src.threats, incidents=src.incidents, criteria_values=src.criteria_values, @@ -2825,6 +2857,8 @@ class DokoGenApp: app_sw=is_data.get('app_sw', ''), balance_value=is_data.get('balanceValue', is_data.get('balance_value', '')), attacker_category=is_data.get('attacker_category', ''), + attacker_level=is_data.get('attacker_level', ''), + attacker_types=is_data.get('attacker_types', ''), threats=is_data.get('threats', ''), incidents=is_data.get('incidents', ''), criteria_values=is_data.get('criteria_values', ''), diff --git a/dokogen/variables.py b/dokogen/variables.py index abd2e2f..7322e9c 100644 --- a/dokogen/variables.py +++ b/dokogen/variables.py @@ -329,6 +329,8 @@ def _build_loop_data(company: Company, is_list: List) -> Dict[str, List[Dict]]: 'app_sw': getattr(isys, 'app_sw', '') or '—', 'balance_value': getattr(isys, 'balance_value', '') or '—', 'attacker_category': getattr(isys, 'attacker_category', '') or '—', + 'attacker_level': getattr(isys, 'attacker_level', '') or '—', + 'attacker_types': getattr(isys, 'attacker_types', '') or '—', 'threats': getattr(isys, 'threats', '') or '—', # Алиасы под шаблон «Сведения о результатах категорирования» (ФСТЭК) 'objective': getattr(isys, 'purpose', '') or '—',