ПРОГРАММНО-КОМПЬЮТЕРНАЯ ЭКСПЕРТИЗА: МЕТОДОЛОГИЧЕСКИЕ ОСНОВАНИЯ, КЛАССИФИКАЦИЯ ИССЛЕДОВАНИЙ И ПРАКТИЧЕСКАЯ ЗНАЧИМОСТЬ В СОВРЕМЕННОЙ СУДЕБНО-ЭКСПЕРТНОЙ ПРАКТИКЕ

ПРОГРАММНО-КОМПЬЮТЕРНАЯ ЭКСПЕРТИЗА:  МЕТОДОЛОГИЧЕСКИЕ ОСНОВАНИЯ, КЛАССИФИКАЦИЯ ИССЛЕДОВАНИЙ И ПРАКТИЧЕСКАЯ ЗНАЧИМОСТЬ В СОВРЕМЕННОЙ СУДЕБНО-ЭКСПЕРТНОЙ ПРАКТИКЕ

Аннотация.  В статье осуществляется комплексный научный анализ программно-компьютерной экспертизы (ПКЭ) как специализированного и динамично развивающегося направления в рамках судебной экспертной деятельности.  Рассматриваются её теоретические основы, предмет, объекты и система методов.  Детально исследуется процессуальное положение ПКЭ, её отличие и взаимосвязь с компьютерно-технической экспертизой.  Особое внимание уделяется классификации экспертных задач, возникающих при исследовании программного обеспечения, включая вопросы авторства, качества, функционального соответствия, происхождения и дефектности.  Анализируются современные методики статического и динамического анализа кода, реверс-инжиниринга и тестирования.  Выявляются ключевые проблемы, связанные с исследованием сложных, распределенных и обновляемых программных систем, и предлагаются пути их решения.  На основе проведённого исследования формулируются принципы дальнейшего развития методологии ПКЭ для повышения её научной обоснованности и доказательственной ценности.

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

Введение

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

Разрешение таких споров требует специальных познаний, выходящих за рамки компетенции юристов и судей.  В этой связи программно-компьютерная экспертиза (ПКЭ) приобретает роль основного инструмента установления технически сложных фактов, связанных с программными продуктами.  ПКЭ представляет собой род судебной экспертизы, в рамках которого на основе специальных познаний в области программирования, software engineering, алгоритмизации и архитектуры программных систем проводятся исследования объектов, связанных с ПО, для ответа на вопросы, имеющие значение для правоприменения.

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

  1. Теоретико-правовые основы и место программно-компьютерной экспертизы в системе специальных знаний

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

Предметом ПКЭ являются фактические данные (обстоятельства), устанавливаемые на основе исследования свойств, характеристик, функциональности, происхождения и способов взаимодействия программного обеспечения и связанных с ним артефактов.

Объектами ПКЭ выступают:

  1. Исходный код программы:  тексты на языках программирования высокого и низкого уровня.
  2. Исполняемый код (бинарные файлы):  скомпилированные модули (. exe, . dll, . so, . class и др. ).
  3. Скрипты и интерпретируемые программы.
  4. Документация на ПО:  техническое задание (ТЗ), спецификации, руководства пользователя и администратора.
  5. Конфигурационные файлы и файлы данных.
  6. Базы данных и их схемы.
  7. Логи (журналы) работы программы.
  8. Дистрибутивы ПО (инсталляционные пакеты).
  9. Программно-аппаратные комплексы, где ПО является неотъемлемой частью.

Важно разграничить ПКЭ и компьютерно-техническую экспертизу (КТЭ).  Если КТЭ в большей степени фокусируется на аппаратных средствах, носителях информации, файловых системах, сетевых взаимодействиях и восстановлении данных (цифровая криминалистика), то ПКЭ сконцентрирована именно на логической сущности – программе, её внутренней структуре, алгоритмах, качестве кода и функциональных свойствах.  На практике эти два направления тесно переплетаются и часто проводятся в рамках комплексной экспертизы.

  1. Система задач и классификация исследований в программно-компьютерной экспертизе

Многообразие объектов и целей исследования позволяет структурировать задачи ПКЭ по нескольким основным типам, каждый из которых требует специфических методических подходов.

  1. 1. Идентификационные и диагностические задачи. Установление авторства и происхождения ПО.
    Данная группа задач направлена на установление индивидуальных или групповых признаков ПО, позволяющих отнести его к определенному классу, источнику или автору.  Сюда относятся:
  • Установление авторства программы (автороведческое исследование).  Анализ стилистических особенностей кода:  именования переменных и функций, использования языковых конструкций, структурирования программы, комментирования.  Проводится аналогично лингвистической или почерковедческой экспертизе, но в отношении программного текста.
  • Выявление фактов заимствования (плагиата) и нарушений авторских прав.  Сравнительный анализ двух программных продуктов для установления степени их схожести на уровне архитектуры, алгоритмов, структуры кода или пользовательского интерфейса.  Применяются методы сравнения абстрактных синтаксических деревьев (AST), анализа control flow graph, хеширования кода (нахождение hash-совпадений).
  • Идентификация типа, версии и компонентов ПО.  Определение используемых библиотек, фреймворков, компиляторов, что может быть важно для установления факта использования нелицензионных компонентов или уязвимых версий.
  1. 2. Задачи исследования функциональных свойств и соответствия.
    Эта группа задач является одной из самых востребованных в арбитражных и гражданских спорах по договорам подряда на разработку ПО.
  • Исследование соответствия программного обеспечения техническому заданию (ТЗ) или договору.  Комплексный анализ, включающий:  проверку полноты реализованных функций, корректности работы алгоритмов, соответствия интерфейса требованиям, производительности и надежности.  Это требует глубокого понимания software requirements и методик тестирования (unit-тесты, интеграционные тесты, нагрузочное тестирование).
  • Анализ функциональности и назначения программы.  Установление, какие конкретные действия выполняет программа, каким образом она обрабатывает данные, с какими внешними системами взаимодействует.  Особую важность это имеет при исследовании вредоносного ПО (malware) для определения его деструктивного потенциала.
  1. 3. Задачи исследования качества и дефектности ПО.
    Связаны с установлением недостатков программного продукта, которые могут привести к ущербу.
  • Выявление программных ошибок (багов), уязвимостей и недекларированных возможностей.  Проведение аудита безопасности и качества кода, статического и динамического анализа на наличие уязвимостей (SQL-инъекции, переполнение буфера, ошибки логики).
  • Диагностика причин сбоев и некорректной работы ПО.  Реконструкция условий, приведших к отказу программы, анализ логов, дампов памяти (core dump) для установления точки сбоя.
  1. 4. Исследование алгоритмической логики и бизнес-процессов.
    Актуально для споров, связанных с автоматизированными системами управления (АСУ), торговыми роботами, алгоритмическими системами принятия решений.
  • Реконструкция и анализ алгоритмов работы программы.  Понимание логики принятия решений, последовательности действий, математических моделей, заложенных в программу.
  • Исследование корректности реализации бизнес-логики.  Установление соответствия работы программы регламентированным бизнес-процессам (например, в системах «1С» или банковском ПО).
  1. Методологический аппарат программно-компьютерной экспертизы

Для решения перечисленных задач ПКЭ опирается на широкий спектр методов, заимствованных из computer science и адаптированных к экспертной практике.

  1. 1. Методы статического анализа.
    Исследование программы без её выполнения.
  • Лексический, синтаксический и семантический анализ исходного кода.  Позволяет понять структуру программы, выявить шаблоны кода, потенциальные ошибки.
  • Метрический анализ кода.  Вычисление количественных характеристик:  сложность цикломатики (цикломатическая сложность МакКейба), связанность модулей, объем кода, что косвенно свидетельствует о его качестве и поддерживаемости.
  • Анализ графов вызовов и потоков данных (Control Flow Graph, Data Flow Graph).  Визуализация логической структуры программы для понимания взаимосвязей между компонентами.
  • Сравнительный анализ кода с применением специализированного ПО (например, Simian, CodeCompare).  Автоматизированное выявление дублирующихся или схожих фрагментов кода.
  1. 2. Методы динамического анализа.
    Исследование программы в процессе её выполнения.
  • Инструментирование кода и отладка (debugging).  Пошаговое выполнение программы с отслеживанием значений переменных, точек останова.
  • Трассировка и профайлинг.  Замер времени выполнения функций, анализ использования памяти, выявление «узких мест».
  • Анализ в изолированных средах (песочницах) и эмуляторах.  Безопасное выполнение подозрительного или вредоносного ПО с мониторингом его активности:  системные вызовы, изменения в файловой системе, сетевая активность.
  • Фаззинг-тестирование.  Автоматическая подача на вход программы некорректных, неожиданных или случайных данных для выявления скрытых ошибок и уязвимостей.
  1. 3. Метод реверс-инжиниринга (обратной разработки).
    Критически важный метод для исследования бинарных (исполняемых) файлов, исходный код которых недоступен.
  • Дисассемблирование.  Преобразование машинного кода в ассемблерные листинги.
  • Декомпиляция.  Попытка восстановления исходного кода на языке высокого уровня (C, C++, Java) из исполняемого файла.  Часто дает приблизительный, но информативный результат.
  • Анализ упаковщиков и обфускаторов.  Вредоносное ПО часто защищено от анализа с помощью упаковки и запутывания кода, которые необходимо преодолеть.
  1. Актуальные проблемы и перспективы развития программно-компьютерной экспертизы

Практика ПКЭ сталкивается с рядом сложностей, требующих научного и организационного разрешения.

  1. Проблема «черного ящика» и проприетарного ПО.  Большинство коммерческих программ поставляются только в виде бинарных дистрибутивов.  Проведение полноценной экспертизы без исходных кодов крайне затруднено и сводится в основном к реверс-инжинирингу и динамическому анализу, которые не всегда дают полную картину.
  2. Проблема объема и сложности современных программных систем.  Исследование крупных проектов с миллионами строк кода, микросервисной архитектурой и зависимостями от сотен внешних библиотек требует колоссальных временных и вычислительных ресурсов, а также высокого уровня экспертизы.
  3. Проблема субъективности в оценке качества и соответствия.  Требования ТЗ часто носят расплывчатый характер («удобный интерфейс», «высокая производительность»).  Эксперту необходимо опираться на объективные метрики и стандарты (ISO/IEC 25010 «Качество программного обеспечения»), но их применение не всегда однозначно.
  4. Проблема быстро меняющейся технологической базы.  Появление новых языков (Go, Rust), парадигм (функциональное программирование, low-code) и платформ требует постоянного обучения экспертов и разработки новых методик.
  5. Проблема процессуального оформления и взаимодействия.  Представление в качестве доказательства объемных исходных кодов, логов, сложных технических отчетов требует разработки специальных процессуальных форм их приобщения и ознакомления сторон, не обладающих техническими познаниями.

Перспективы развития ПКЭ лежат в следующих направлениях:

  • Разработка и стандартизация формальных метрик и методик для оценки соответствия, качества и авторства ПО.
  • Широкое внедрение инструментов автоматизированного анализа (SAST, DAST) и машинного обучения для обработки больших объемов кода и выявления паттернов.
  • Углубление междисциплинарных связей с software engineering, теорией программирования и cybersecurity для обогащения методического аппарата.
  • Создание репозиториев эталонных образцов кода и артефактов для сравнительных исследований.
  • Развитие института специализированных экспертных центров, фокусирующихся исключительно на исследованиях ПО, с привлечением практикующих разработчиков высшей квалификации.

Заключение

Программно-компьютерная экспертиза представляет собой сложную, высокотехнологичную и научно интенсивную область судебно-экспертной деятельности.  Её роль в современном правосудии, особенно в сфере защиты интеллектуальной собственности и разрешения ИТ-споров, невозможно переоценить.  Успешное проведение ПКЭ требует от эксперта уникальной комбинации знаний:  глубокого понимания computer science, владения современными методами анализа, навыков программирования, а также четкого знания процессуальных норм.

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

Похожие статьи

Бесплатная консультация экспертов

Как спорить категорию годности?
Expertiza - 2 месяца назад

Как спорить категорию годности?

Может ли военкомат сам сменить категорию годности?
Expertiza - 2 месяца назад

Может ли военкомат сам сменить категорию годности?

Как изменить категорию годности в военном билете?
Expertiza - 2 месяца назад

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

Задавайте любые вопросы

15+14=