Фаззинг протокола Modbus TCP

Определение особенностей протокола Modbus – отсутствия необходимости в специальных интерфейсных контроллерах. Исследование основных функций рассматриваемого протокола. Характеристика принципов общего подхода к фаззингу Modbus Client и ModbusS Server.

Рубрика Программирование, компьютеры и кибернетика
Вид контрольная работа
Язык русский
Дата добавления 23.12.2014
Размер файла 650,2 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Министерство образования и науки Российской Федерации

Санкт-Петербургский государственный политехнический университет

Факультет технической кибернетики

КОНТРОЛЬНАЯ РАБОТА

Фаззинг протокола Modbus TCP

по дисциплине «Операционные системы»

Оглавление

  • modbus контроллер интерфейс
  • Введение
  • 1. Общая информация о протоколе Modbus
    • 1.1 Функции протокола Modbus
    • 1.2 Недостатки Modbus
  • 2. Спецификация протокола Modbus TCP
    • 2.1 Формат пакетов Modbus TCP
    • 2.2 Использование стека TCP/IP при реализации протокола
    • 2.3 Спецификация MODBUS Client
    • 2.4 Спецификация MODBUS Server
  • 3. Фаззинг протокола Modbus TCP
    • 3.1 Фаззинг MODBUS Server
    • 3.2 Фаззинг MODBUS Client
    • 3.3 Общий подход к фаззингу MODBUS Client и MODBUS Server
  • Выводы
  • Использованные источники

Введение

Протокол Modbus является одним из самых распространённых в мире. Он был разработан компанией Modicon (в настоящее время принадлежит Schneider Electric) для использования в её контроллерах с программируемой логикой (программируемых логических контроллерах, ПЛК). Впервые спецификация протокола была опубликована в 1979 году. Это был открытый стандарт, описывающий формат сообщений и способы их передачи в сети, состоящей из различных электронных устройств. С 1979 года он не только не устарел, но и демонстрирует существенно возросшее количество ориентированных на него новых разработок и увеличивающийся объём поддержки протокола. В настоящее время развитием Modbus занимается некоммерческая организация Modbus-IDA.

Одно из главных преимуществ Modbus - отсутствие необходимости в специальных интерфейсных контроллерах, а также простота программной реализации. Это снижает затраты на освоение стандарта как системными интеграторами, так и разработчиками контроллерного оборудования. Высокая степень открытости протокола обеспечивается полностью бесплатными текстами стандартов.

В России Modbus по распространённости конкурирует только с PROFIBUS. Популярность протокола в настоящее время объясняется, прежде всего, совместимостью с большим количеством оборудования. Кроме того, благодаря надёжному методу контроля ошибок, Modbus имеет высокую достоверность передачи информации.

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

1. Общая информация о протоколе Modbus

Контроллеры на шине Modbus взаимодействуют, используя клиент-серверную модель, основанную на транзакциях, состоящих из запроса и ответа.

Обычно в сети есть только один клиент, так называемое, «главное» (master) устройство, и несколько серверов -- «подчиненных» (slaves) устройств. Главное устройство инициирует транзакции (передаёт запросы). Главный может адресоваться индивидуально к подчиненному или инициировать передачу широковещательного сообщения для всех подчиненных устройств. Подчиненное устройство отвечает на запрос, адресованный именно ему. При получении широковещательного запроса ответ не формируется.

Спецификация Modbus описывает структуру запросов и ответов. Их основа -- элементарный пакет протокола, так называемый PDU (Protocol Data Unit). Структура PDU не зависит от типа линии связи и включает в себя код функции и поле данных. Код функции кодируется однобайтовым полем и может принимать значения в диапазоне 1…127. Диапазон значений 128…255 зарезервирован для кодов ошибок. Поле данных может быть переменной длины. Размер пакета PDU ограничен 253 байтами.

Modbus PDU

код функции

данные

1 байт

Не более 252 байт

Для передачи пакета по физическим линиям связи PDU помещается в другой пакет, содержащий дополнительные поля. Этот пакет носит название ADU (Application Data Unit). Формат ADU зависит от типа линии связи.

Существуют три основных реализации протокола Modbus, две для передачи данных по последовательным линиям связи, как медным EIA/TIA-232-E (RS-232), EIA-422, EIA/TIA-485-A (RS-485), так и оптическим и радио:

· Modbus ASCII -- для обмена используются только ASCII символы. Для проверки целостности используется алгоритм контрольного суммирования LRC. Каждое сообщение начинается с символа «:» (двоеточие) и заканчивается символом новой строки.

· Modbus RTU -- сообщение начинает восприниматься как новое после паузы (тишины) на шине длительностью не менее 3.5 шестнадцатеричных символов (14 бит), то есть величина паузы в секундах зависит от скорости передачи.

и для передачи данных по сетям Ethernet поверх TCP/IP:

· Modbus TCP.

Общая структура ADU следующая (в зависимости от реализации, некоторые из полей могут отсутствовать):

адрес ведомого устройства

код функции

данные

блок обнаружения ошибок

Где:

§ адрес ведомого устройства -- адрес подчинённого устройства, к которому адресован запрос. Ведомые устройства отвечают только на запросы, поступившие в их адрес. Ответ также начинается с адреса отвечающего ведомого устройства, который может изменяться от 1 до 247. Адрес 0 используется для широковещательной передачи, его распознаёт каждое устройство, адреса в диапазоне 248…255 -- зарезервированы;

§ код функции -- это следующее однобайтное поле кадра. Оно говорит ведомому устройству, какие данные или выполнение какого действия требует от него ведущее устройство;

§ данные -- поле содержит информацию, необходимую ведомому устройству для выполнения заданной мастером функции или содержит данные, передаваемые ведомым устройством в ответ на запрос ведущего. Длина и формат поля зависит от номера функции;

§ блок обнаружения ошибок -- контрольная сумма для проверки отсутствия ошибок в кадре. Это результат применения алгоритма CRC или LRC к остальным байтам ADU.

Максимальный размер ADU для последовательных сетей RS232/RS485 -- 256 байт, для сетей TCP -- 260 байт.

Одно из типичных применений протокола -- чтение и запись данных в регистры контроллеров. Спецификация протокола определяет четыре таблицы данных:

Таблица

Тип элемента

Тип доступа

Дискретные входы (Discrete Inputs)

один бит

только чтение

Регистры флагов (Coils)

один бит

чтение и запись

Регистры ввода (Input Registers)

16-битное слово

только чтение

Регистры хранения (Holding Registers)

16-битное слово

чтение и запись

Доступ к элементам в каждой таблице осуществляется с помощью 16-битного адреса, первой ячейке соответствует адрес 0. Таким образом, каждая таблица может содержать до 65536 элементов. Спецификация не определяет, что физически должны представлять собой элементы таблиц и по каким внутренним адресам устройства они должны быть доступны. Например, допустимо организовать перекрывающиеся таблицы, В этом случае команды работающие с дискретными данными и с 16-битными регистрами будут фактически обращаться к одним и тем же данным.

1.1 Функции протокола Modbus

В действующей в настоящее время спецификации протокола определяются три категории кодов функций:

· Стандартные команды

Их описание должно быть опубликовано и утверждено Modbus-IDA. Эта категория включает в себя как уже определенные, так и свободные в настоящее время коды.

· Пользовательские команды

Два диапазона кодов (от 65 до 72 и от 100 до 110), для которых пользователь может реализовать произвольную функцию. При этом не гарантируется, что какое-то другое устройство не будет использовать тот же самый код для выполнения другой функции.

· Зарезервированные

В эту категорию входят коды функций, не являющиеся стандартными, но уже используемые в устройствах, производимых различными компаниями. Это коды 9, 10, 13, 14, 41, 42, 90, 91, 125, 126 и 127.

Стандартные функции Modbus

Чтение данных

Для чтения значений из перечисленных выше таблиц данных используются функции с кодами 1--4 (шестнадцатеричные значения 0x01--0x04):

§ 1 (0x01) -- чтение значений из нескольких регистров флагов (Read Coil Status)

§ 2 (0x02) -- чтение значений из нескольких дискретных входов (Read Discrete Inputs)

§ 3 (0x03) -- чтение значений из нескольких регистров хранения (Read Holding Registers)

§ 4 (0x04) -- чтение значений из нескольких регистров ввода (Read Input Registers)

Запрос состоит из адреса первого элемента таблицы, значение которого требуется прочитать, и количества считываемых элементов. Адрес и количество данных задаются 16-битными числами, старший байт каждого из них передается первым.

В ответе передаются запрошенные данные. Количество байт данных зависит от количества запрошенных элементов. Перед данными передается один байт, значение которого равно количеству байт данных.

Значения регистров хранения и регистров ввода передаются начиная с указанного адреса, по два байта на регистр, старший байт каждого регистра передаётся первым:

байт 1

байт 2

байт 3

байт 4

байт N-1

байт N

RA,1

RA,0

RA+1,1

RA+1,0

RA+Q-1,1

RA+Q-1,0

Значения флагов и дискретных входов передаются в упакованном виде: по одному биту на флаг. Единица означает включённое состояние, ноль -- выключенное. Значения запрошенных флагов заполняют сначала первый байт, начиная с младшего бита, затем следующие байты, также от младшего бита к старшим. Младший бит первого байта данных содержит значение флага, указанного в поле «адрес». Если запрошено количество флагов, не кратное восьми, то значения лишних битов заполняются нулями:

байт 1

байт N

FA+7

FA+6

FA+5

FA+4

FA+3

FA+2

FA+1

FA

0

0

FA+Q-1

FA+Q-2

Запись одного значения

§ 5 (0x05) -- запись значения одного флага (Force Single Coil)

§ 6 (0x06) -- запись значения в один регистр хранения (Preset Single Register)

Команда состоит из адреса элемента (2 байта) и устанавливаемого значения (2 байта).

Для регистра хранения значение является просто 16-битным словом.

Для флагов значение 0xFF00 означает включённое состояние, 0x0000 -- выключенное, другие значения недопустимы.

Если команда выполнена успешно, ведомое устройство возвращает копию запроса.

Запись нескольких значений

§ 15 (0x0F) -- запись значений в несколько регистров флагов (Force Multiple Coils)

§ 16 (0x10) -- запись значений в несколько регистров хранения (Preset Multiple Registers)

Команда состоит из адреса элемента, количества изменяемых элементов, количества передаваемых байт устанавливаемых значений и самих устанавливаемых значений. Данные упаковываются так же, как в командах чтения данных.

Ответ состоит из начального адреса и количества изменённых элементов. modbus контроллер интерфейсный фаззинг

Ниже приведён пример команды ведущего устройства и ответа ведомого (для Modbus RTU)

Направление передачи

00 адрес подчиненного устройства

01 номер функции

02 Адрес ст. байт

03 Адрес мл. байт

04 Количество флагов ст. байт

05 Количество флагов мл. байт

06 Количество байт данных

07 Данные ст. байт

08 Данные мл. байт

09 CRC мл. байт

0A CRC ст. байт

Master>Slave

0x01

0x0F

0x00

0x13

0x00

0x0A

0x02

0xCD

0x01

0xCB

0x72

Направление передачи

00 адрес подчиненного устройства

01 номер функции

02 Адрес ст. байт

03 Адрес мл. байт

04 Количество флагов ст. байт

05 Количество флагов мл. байт

05 CRC мл. байт

06 CRC ст. байт

Slave>Master

0x01

0x0F

0x00

0x13

0x00

0x0A

0x09

0x24

1.2 Недостатки Modbus

Преимущества данного протокола уже были раскрыты во введении. Обратимся теперь к недостаткам.

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

· Стандарт не позволяет никакой оперативной сигнализации от конечного устройства к мастеру в случае необходимости (прерывания). Нужно ждать своей очереди в опросе. Это существенно ограничивает применимость MODBUS-решений в системах управления реального времени.

· Стандарт не позволяет конечным устройствам обмениваться фиксированными данными друг с другом без участия мастера. Это существенно ограничивает применимость MODBUS-решений в системах регулирования реального времени.

· Стандарт не предлагает никаких решений по начальной инициализации системы. Назначение сетевых адресов и прописывание в системе параметров каждого конкретного устройства выполняются вручную.

· Стандарт выдвигает довольно слабые требования к средствам обеспечения безопасности.

2. Спецификация протокола Modbus TCP

Существует несколько разновидностей протокола Modbus. Например, описание протокола Modbus RTU довольно ёмкое, так как оно содержит спецификации для всех уровней сетевой модели OSI (кроме физического), начиная с порядка передачи бит по проводам, и заканчивая требованиями к приложениям, работающим на клиенте и сервере.

В отличие от Modbus RTU, протокол Modbus TCP (Modbus on TCP/IP, протокол Modbus на основе TCP/IP) позволяет использовать готовые протоколы физического, канального, сетевого и транспортного уровней модели OSI, а именно Ethernet, IP и TCP. Таким образом, протокол Modbus TCP содержит только высокоуровневые спецификации, а надёжную передачу пакетов от компьютера к компьютеру обеспечивает протокол TCP. Протокол Modbus TCP используется для того, чтобы подключить устройство с протоколом Modbus к сети Ethernet или Internet.

Клиент-серверная модель

Как уже было сказано, протокол Modbus использует клиент-серверную модель с транзакциями, где клиентом является главное устройство (master), а серверами - подчинённые (slaves). Инициатором транзакции может быть только клиент. Эта модель основывается на четырёх типах сообщений:

· MODBUS Request - запрос, посылаемый клиентом серверу. Начинает транзакцию. Цель запроса - указать серверу выполнить какую-либо функцию.

· MODBUS Indication - запрос клиента, дошедший до сервера.

· MODBUS Response - сообщение от сервера клиенту в ответ на запрос клиента. Цель ответа - отчитаться перед клиентом о выполнении функции.

· MODBUS Confirmation - ответ сервера, дошедший до клиента.

Система с использованием Modbus TCP может включать в себя не только клиенты и серверы, подключенные к TCP/IP сети. Помимо них могут присутствовать мосты, роутеры и шлюзы, соединяющие данную сеть с подсетью, поддерживающей Modbus, но без поддержки TCP.

2.1 Формат пакетов Modbus TCP

Как уже упоминалось ранее, в любом Modbus-протоколе есть два типа пакетов: PDU (Protocol Data Unit) и ADU (Application Data Unit). PDU содержит непосредственно те полезные данные, которые должно получить другое устройство. Это номер функции и дополнительная информация, необходимая для её выполнения.

ADU включает в себя PDU и служебную информацию - Modbus Application Protocol Header (MBAP Header). Следует отметить, что ADU не содержит никаких контрольных сумм, так как протокол TCP уже обеспечивает надёжную передачу пакетов.

Формат MBAP Header

Название поля

Размер

Описание

Transaction Identifier

2 байта

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

Protocol Identifier

2 байта

Идентификатор протокола. Нужен для того, чтобы отличить пакеты Modbus от других пакетов. Для Modbus всегда равен нулю.

Length

2 байта

Количество ещё оставшихся байт в ADU.

Unit Identifier

1 байт

Идентификатор подчинённого устройства. Если устройство находится в сети TCP/IP, оно уже имеет IP_адрес, и это поле не требуется. В этом случае рекомендуется заполнить его числом 0xFF. Если же нужен обмен пакетами с устройством из другой подсети без TCP, это поле используется для идентификации подчинённого устройства. Клиент записывает в это поле номер сервера-адресата, а сервер при ответе записывает свой собственный номер.

Все пакеты ADU в сети Modbus TCP должны поступать на порт 502. Он зарезервирован под Modbus специальной организацией IANA (Internet Assigned Numbers Authority).

2.2 Использование стека TCP/IP при реализации протокола

Использовать возможности TCP/IP в UNIX можно, например, с помощью сокетов Беркли (BSD-Socket). Для их использования могут быть вызваны специальные функции: socket(), bind(), listen(), connect(), accept() и так далее.

Временная диаграмма взаимодействия клиента с сервером через BSD-Socket.

2.3 Спецификация MODBUS Client

В этом разделе будет описан порядок составления запросов MODBUS Request клиентом и его реакция на ответы MODBUS Confirmation сервера. MODBUS Client - это служебная программа, работающая на устройстве-клиенте. Она обеспечивает связь по протоколу Modbus между пользовательским приложением на этом клиенте и пользовательским приложением на каком-либо сервере.

Порядок составления запроса MODBUS Request

1) Пользовательское приложение на устройстве-клиенте обращается к MODBUS Client для передачи запроса серверу.

2) MODBUS Client создает транзакцию, позволяющую ему запоминать всю информацию, необходимую для установления соответствия между отправленными им запросами и полученными от сервера ответами.

3) Клиент заполняет поля PDU и MBAP, используя предоставленную ему информацию от пользовательского приложения. Затем объединяет их в ADU.

4) Клиент отправляет ADU по TCP/IP сети серверу, используя, например, сокеты BSD. Для отправки ADU нужно знать IP-адрес сервера или шлюза. Этот адрес клиенту должно предоставить пользовательское приложение. ADU отправляется на порт 502.

Пример ADU, содержащего запрос на чтение регистра номер 5:

Описание поля

Размер

Значение

MBAP Header

Transaction Identifier

2 байта

0x0F01

Protocol Identifier

2 байта

0x0000

Length

2 байта

0x0006

Unit Identifier

1 байт

0xFF

PDU

Номер функции

1 байт

0x03

Адрес первого регистра

2 байта

0x0004

Количество регистров

2 байта

0x0001

Порядок обработки ответа MODBUS Confirmation

Обработка MBAP Header:

1) Клиент получает MODBUS Confirmation от какого-либо сервера или от моста/роутера/шлюза. В первом случае он знает, от какого именно сервера пришёл ответ. Во втором случае ему необходимо это выяснить с помощью поля Unit Identifier.

2) Считывает значение поля Transaction Identifier полученного пакета. Проверяет, есть ли неудовлетворённый запрос с таким же значением идентификатора транзакций. Если нет, то ответ не обрабатывается.

3) Клиент проверяет значение поля Protocol Identifier. Оно должно быть равно нулю. Иначе ответ игнорируется.

4) Проверяет значение Unit Identifier. Если все устройства Modbus взаимодействуют только через TCP, это значение должно быть равно 0xFF. Если же MODBUS Confirmation пришёл из другой сети без TCP, то Unit Identifier используется для того, чтобы узнать, от какого именно сервера пришёл пакет.

Обработка PDU:

Клиент проверяет значение поля Function Code. Здесь возможно три случая:

1) Код функции MODBUS Request равен коду функции в соответствующем MODBUS Confirmation. Это означает, что функция на сервере выполнена успешно. В этом случае клиент возвращает пользовательскому приложению результат транзакции Positive Confirmation.

2) Код функции в MODBUS Confirmation равен коду функции в MODBUS Request, но старший бит в ответе установлен в единицу. Это означает, что при выполнении функции на сервере произошла ошибка. Но ошибок на уровне протокола Modbus при этом не произошло. Поэтому пользовательское приложение получает результат Positive Confirmation.

3) Ни первый, ни второй варианты не сработали. Код функции не совпадает ни с одним из них. Формат ответа некорректен, и пользовательское приложение получает ответ Negative Confirmation.

4) Транзакция завершается.

2.4 Спецификация MODBUS Server

MODBUS Server работает на устройствах-серверах. Сервер должен обрабатывать запросы клиента MODBUS Indication и отвечать на них MODBUS Response.

Порядок обработки запроса MODBUS Indication

1) Сервер проверяет значение поля Protocol Identifier. Оно должно быть равно нулю. Иначе запрос игнорируется.

2) Сервер может уже обрабатывать другие транзакции. Максимальное число одновременных транзакций ограниченно сервером. Если свободных транзакций нет, сервер отсылает MODBUS Response клиенту с ответом Exception code 6: Server Busy. О том, как именно составляется MODBUS Response, будет сказано ниже.

3) Если есть свободная транзакция, сервер её инициализирует и запоминает IP клиента, а также поля Transaction ID и Unit ID из MBAP Header полученного ADU.

4) Если в PDU указан номер несуществующей функции, отсылается ответ с ошибкой Exception code 1: Invalid Function.

5) Если указан номер существующей функции, запускается модуль MODBUS Service Processing, выполняющий данную функцию.

Порядок составления ответа MODBUS Response

Составление PDU:

1) Заполняется поле Function code. Если функция выполнена успешно, в это поле помещается номер выполненной функции.

2) В противном случае, в поле Function code записывается код функции, увеличенный на 80h, то есть с установленным старшим битом.

3) Заполняется поле данных. Если функция выполнена успешно, это поле - пустое, то есть его длина равна нулю. Если во время выполнения функции произошла ошибка, код этой ошибки записывается в поле данных.

Составление MBAP Header:

1) Поля Transaction ID и Unit ID восстанавливаются из сохранённых значений данной транзакции.

2) Поле Protocol ID устанавливается равным нулю.

3) Поле Length равно размеру PDU, увеличенному на размер поля Unit ID, то есть на единицу.

4) Из MBAP Header и PDU составляется ADU и отправляется серверу через TCP по адресу, сохранённому в данной транзакции.

5) Транзакция завершается.

3. Фаззинг протокола Modbus TCP

Термин Fuzzing появился еще в 1988 году в работе "The Fuzz Generator", опубликованной Бартом Миллером. Главная идея фаззинга - «подсовывать» программе заведомо некорректные и зачастую вообще случайные данные, отлавливая ситуации, когда она не сможет их обработать и выдаст ошибку. Эффективность такого подхода до сих пор велика. Точки ввода данных в программу могут быть самые разные: текстовая строка, введенная через графический интерфейс, бинарные данные из файла или, например, значение поля в каком-нибудь сетевом запросе. В той или иной мере фаззинг сейчас является одним из наиболее эффективных средств выявления проблем безопасности кода.

В зависимости от интеллекта, фаззеры бывают глупые и умные:

· Глупый (dump) фаззер ничего не знает о структуре файлов. Если говорить о сетевых протоколах, то единственное, что он может сделать -- это изменить несколько байтов в исходном пакете и отправить его в надежде, что это может вызвать сбой.

· Умный (smart) фаззер имеет некоторое представленные о структуре данных. Вместо того, чтобы полностью надеяться на удачу, он может играться только с теми данными, которые отвечают, например, за размер буфера. Или подставлять в поля такие значения, которые заведомо, с учетом известного формата, будут некорректными.

В этой работе будет составлен алгоритм умного фаззера на основе вышеописанной спецификации протокола.

Объектом фаззинга является программа. В данной спецификации были описаны две основные программы - MODBUS Client и MODBUS Server. Их и будем тестировать. Для того чтобы тестировать именно протокол Modbus, нам нужно, чтобы ADU доходили до адресата по протоколу TCP. Пакеты TCP/IP должны быть правильными. Поэтому будем составлять пакеты на уровне Modbus. Подразумевается, что эти пакеты должны передаваться по TCP-протоколу с помощью уже готовых сервисов, например, сокетов. Нас же будет интересовать непосредственно содержание пакетов ADU.

3.1 Фаззинг MODBUS Server

Фаззер работает на устройстве-клиенте и посылает серверу некорректные пакеты. Сервер получает некорректные MODBUS Indication. Способы проверки реакции сервера:

1) Проверка поля Protocol ID. Составить любой правильный пакет и заполнить поле Protocol ID ненулевым числом. Никакого ответа от сервера прийти не должно. Желательно перебрать все варианты поля Protocol ID от 0x0001 до 0xFFFF.

2) Проверка несуществующих функций. Можно взять список всех несуществующих функций и последовательно заполнять их кодами поле Function code. В ответ должны приходить сообщения об ошибке Exception code 1: Invalid Function. Поле Protocol ID должно заполняться нулём.

3) Проверка поля Function code для значений больше 127. Эти значения зарезервированы под коды ошибок, чтобы сервер мог установить старший бит. Но как сервер может установить старший бит, если он уже установлен? Для проверки реакции сервера на такие сообщения можно перебрать все коды функций от 128 до 255. Плохая реализация MODBUS Server может привести к серьёзной ошибке. Допустим, сервер хранит массив из 128 указателей на точки входа функций. Тогда при указании номера функции, например, 200, будет выход за границы массива, и неизвестно, куда будет передано управление на сервере.

4) Поэкспериментировать с полем данных. Все остальные поля должны быть верными, в поле Function Code заносится номера существующих функций. Сначала перебрать все значения поля данных размером 1 и 2. Затем сгенерировать достаточно много пакетов со случайным полем данных размером 3,4 и 5 байт. Во всех случаях сервер должен прислать ответ об успешном выполнении функции или о неверных параметрах. Сервер не должен «упасть».

3.2 Фаззинг MODBUS Client

Фаззер работает на устройстве-сервере, прослушивает порт 502, принимает от клиента запросы и посылает ему некорректные ответы.

1) Перебрать все ненулевые значения поля Protocol ID при правильных значениях всех остальных полей. Клиент должен отклонить эти пакеты.

2) Заменить значение поля Transaction ID правильно составленного пакета случайным значением, не равным исходному. Клиент должен отклонить все пакеты.

3) Перебрать все значения Function code, не равные исходному и исходному со старшим битом. Клиент должен вернуть пользовательскому приложению результат транзакции Negative Confirmation.

3.3 Общий подход к фаззингу MODBUS Client и MODBUS Server

Некоторые методы применимы и к клиенту, и к серверу:

1) Попытаться передать большие пакеты (больше 260 байт) с полностью случайными байтами, не обязательно соответствующие формату.

2) Указать число в поле Length, не соответствующее реальной длине сообщения. Сгенерировать достаточно большое количество пакетов со случайными значениями поля Length.

3) Значение поля Length соответствует действительности, но сам пакет ADU большого размера.

Все эти методы нацелены на выявление уязвимости к переполнению буфера.

Выводы

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

Использованные источники

1) http://ru.wikipedia.org

2) MODBUS Messaging on TCP/IP Implementation Guide

3) MODBUS Application Protocol Specification

4) Протоколы и сети Modbus и Modbus TCP, Виктор Денисенко

5) http://www.xakep.ru

Размещено на Allbest.ru


Подобные документы

  • Особенности работы с последовательным портом в среде Visual Studio. Тестирование работы протокола Modbus RTU в режиме Slave. Описание и технические характеристики программируемого логического контроллера Овен 100. Построение диаграммы передачи фреймов.

    отчет по практике [2,1 M], добавлен 19.07.2015

  • Анализ проблематики построения объектно-ориентированного канала связи. Основные понятия протокола Modbus. Возможности CodeSys для реализации объектно-ориентированного подхода. Разработка методики кроссплатформенной библиотеки для интеграции устройств.

    курсовая работа [38,6 K], добавлен 15.06.2013

  • Организация связи между электронными устройствами. Коммуникационный протокол, основанный на архитектуре "клиент-сервер". Чтение флагов, дискретных входов, регистров хранения и регистров ввода. Запись регистра хранения. Обработка прерываний и запроса.

    курсовая работа [1,4 M], добавлен 07.07.2011

  • Функция протокола и структура пакета разрабатываемого протокола. Длина полей заголовка. Расчет длины буфера на приеме в зависимости от длины пакета и допустимой задержки. Алгоритмы обработки данных на приеме и передаче. Программная реализация протокола.

    курсовая работа [1,0 M], добавлен 18.05.2014

  • Общие сведения о протоколе передачи данных FTP. Технические процессы осуществления соединения с помощью протокола FTP. Программное обеспечение для осуществления соединения с помощью протокола FTP. Некоторые проблемы FTP-серверов. Команды FTP протокола.

    реферат [766,6 K], добавлен 07.11.2008

  • Определение IP-протокола, передающего пакеты между сетями без установления соединений. Структура заголовка IP-пакета. Инициализация TCP-соединения, его этапы. Реализация IP на маршрутизаторе. Протокол надежной доставки сообщений ТСР, его сегменты.

    контрольная работа [86,1 K], добавлен 09.11.2014

  • Описания сетевых протоколов прикладного уровня, позволяющих производить удалённое управление операционной системой. Основные характеристики протокола CMIP. Изучение особенностей Telnet, сетевого протокола для реализации текстового интерфейса по сети.

    реферат [47,0 K], добавлен 24.01.2014

  • Уровни архитектуры IP-телефонии. Особенности передачи речевой информации по IP–сетям. Влияние операционной системы. Количество передаваемых в пакете кадров. Взаимодействие модулей УШ и модуля протокола RTP. Информация конфигурации и контроля модуля УШ.

    отчет по практике [128,4 K], добавлен 22.07.2012

  • Разработка и использование протокола маршрутизации RIP в небольших и сравнительно однородных сетях. Причины неустойчивой работы по протоколу, их устранение. Применения протокола Hello для обнаружения соседей и установления с ними отношений смежности.

    курсовая работа [264,0 K], добавлен 06.06.2009

  • Понятие о протоколе Secure Sockets Layer. "Безопасный канал", основные свойства. Использование протокола, его недостатки. Интерфейс программы EtherSnoop. Фазы протокола диалога. Публичные ключи, особенности распространения. Обмен данными в Интернете.

    реферат [1,4 M], добавлен 31.10.2013

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.