Санкт-Петербург, г. Санкт-Петербург и Ленинградская область, Россия
Санкт-Петербург, г. Санкт-Петербург и Ленинградская область, Россия
Санкт-Петербург, г. Санкт-Петербург и Ленинградская область, Россия
Санкт-Петербург, г. Санкт-Петербург и Ленинградская область, Россия
ГРНТИ 12.09 Развитие науки
В данной статье ставится задача разработать программно-аппаратную систему контроля и управления доступом на основе аппаратных платформ Arduino Uno и Raspberry Pi. Разработанная программно-аппаратная система предназначена для сбора данных и хранения их в базе. Представленный комплекс можно переносить и использовать в любом месте, что объясняет его высокую мобильность.
Arduino, Raspberry Pi, RFID, NFC, информационная безопасность, система контроля и управления доступом.
Введение
Проблема сбора, хранения и обработки больших объёмов данных в настоящее время стоит наиболее остро. С развитием Интернета человечество получило доступ к информации со всего Земного шара; количество уникальных пользователей Всемирной сети растет стремительными темпами, равно как и техническая оснащенность различных организаций и предприятий. Современные методы ведения коммерческой, учебной и других видов деятельности всё чаще и чаще включают в себя использование информационных технологий. В каждой из сфер деятельности непременно задействованы люди – а, как известно, самой серьёзной уязвимостью в любой системе безопасности является человек – и чтобы избежать несанкционированного доступа каждому пользователю необходимо пройти процедуры регистрации в информационной системе – аутентификацию и идентификацию. Для этой цели в организациях внедряются системы контроля и управления доступом.
Постановка задачи
Необходимо спроектировать и разработать устройство системы контроля и управления доступом на базе устройств Raspberry Pi и Arduino Uno. Устройство должно иметь модуль ввода данных и систему хранения этих данных. Ввод данных должен осуществляться посредством бесконтактного считывания информации со смарт-карты. Хранение должно осуществляться при помощи программного обеспечения Raspberry Pi. Также система должна иметь графический пользовательский интерфейс для просмотра и отслеживания введенной информации: веб-приложение, имеющее серверную часть, взаимодействующую с базой данных и обслуживающую клиентские запросы. Приложение, равно как и операционная система устройства, должно быть защищено от распространенных угроз безопасности информационных систем [5].
Для реализации проекта были использованы устройства: Arduino Uno, Raspberry Pi 3, RFID/NFC модуль.
Raspberry Pi 3 – это полноценный компьютер с 64-х битным четырехъядерным процессором ARM Cortex-A53 на однокристальном чипе Broadcom BCM2837 [9]. Основной операционной системой является Linux [6].
Плата Arduino Uno–платформа для разработки на базе микроконтроллера ATmega328P [8].Имеет 14 цифровых и 6 аналоговых пинов для подключения разнообразных датчиков, светодиодов и других внешних устройств.
RFID – беспроводное бесконтактное использование радиочастотных волн для передачи данных [10].
Схема соединений устройств представлена на рисунке 1.RFID/NFC-считыватель соединяется с Arduino для передачи данных с NFC-метки, для соединения используются три трехпиновых шлейфа. Затем Arduino соединяется с Raspberry Pi посредством USB-кабеля для дальнейшей передачи считанных данных через последовательный интерфейс.
Рис. 1. Схема соединения устройств
Программная часть устройства включает в себя:
- Программу для Arduino, принимающую данные со считывателя и передающую их на Raspberry Pi;
- База данных, хранящая считанные данные;
- Скрипт, принимающий данные, передаваемые с Arduino, и пополняющий ими базу данных;
- Веб-приложение, соединенное с базой данных, предоставляющее доступ к записям в базе данных.
Программа для Arduino
Для взаимодействия со считывателем используется библиотека Adafruit PN532. К Raspberry Pi для передачи данных Arduino подключается с помощью USB-кабеля, программа использует последовательный интерфейс обмена данными. Реализация программы представлена на листинге 1.
Листинг 1.
Adafruit_PN532 nfc(PN532_IRQ, 100);
void setup(void) {
Serial.begin(9600);
nfc.begin();
int versiondata = nfc.getFirmwareVersion();
if (!versiondata) {
while(1) {}
}
nfc.SAMConfig();
}
void loop(void)
{
uint8_t success;
uint8_t uid[8];
uint8_t uidLength;
success = nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, uid, &uidLength);
if (success) {
nfc.PrintHex(uid, uidLength);
Serial.println("");
delay(1000);
}
}
База данных
Для хранения данных используется реляционная СУБД MySQL. В базе данных создана таблица, имеющая структуру, описанную в табл. 1.
Таблица 1. Структура таблицы записей
Название столбца |
Тип столбца |
id |
INT |
data |
VARCHAR(255) |
time |
DATETIME |
Таким образом, каждая запись имеет уникальный идентификатор, считанные данные карты и время создания записи. Скрипт, описывающий модель таблиц в базе данных в виде классов языка Python представлен в листинге 2.
Листинг 2.
db = peewee.MySQLDatabase('raspdb', user='www', password='www')
class User(peewee.Model):
username = peewee.CharField(unique=True)
password = peewee.CharField(default='')
class Meta:
database = db
class Record(peewee.Model):
data = peewee.TextField()
time = peewee.DateTimeField(default=datetime.now)
class Meta:
database = db
Считывающий скрипт
Для взаимодействия с USB-портом через последовательный интерфейс используется модуль pyserial. При помощи данного модуля производится прием и разбор данных, затем производится добавление записи в базу данных. Соединение с базой данных происходит при помощи модуля peewee. Код скрипта представлен на листинге 3.
Листинг 3.
serial = pyserial.Serial('/dev/ttyACM0', 9600)
while True:
line = serial.readline()
if line:
line = line.decode(‘utf-8’)
db.Record.create(data=line, time=datetime.now())
Веб-приложение
Веб-приложение реализуется на основе фреймворка Flask. Взаимодействие с базой данных также происходит при помощи модуля peewee.
В целях обеспечения безопасности веб-интерфейса [4] в приложении реализован механизм защиты от несанкционированного доступа путем идентификации и аутентификации пользователя по логину и паролю, а также защита от таких актуальных угроз, как прослушивание канала связи атакой «человек посредине» [7].
На уровне ОС с использованием метода, изложенного в [2], реализована защита от угроз типа rootkit.
Код приложения представлен на листинге 4.
Листинг 4.
context = SSL.Context(SSL.TLSv1_2_METHOD)
context.use_privatekey_file('server.key')
context.use_certificate_file('server.crt')
app = Flask(__name__)
bcrypt = Bcrypt(app)
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
if not 'username' in request.form or not 'password' in request.form:
return render_template('login.html')
user = db.User.get_or_none(username=request.form['username'])
if user is None or not bcrypt.check_password_hash(user.password, request.form['password']):
return render_template('login.html')
session['username'] = user.username
return redirect(url_for('index'))
return render_template('login.html')
Таким образом, как показано на рисунке 2, считывая данные со смарт-карты, скрипт, слушающий последовательный порт, снабжает базу данных записями, которые в свою очередь, получает веб-приложение, которое затем отображает данные записи в виде HTML-страницы.
На рисунке 3 представлено собранное переносное устройство.
Рис. 2. Схема взаимодействия программных элементов на базе Raspberry Pi
Представленное на рисунке 3 устройство является рабочей системой контроля и управления доступом.В дополнение к этому, устройство защищено от некоторых актуальных угроз безопасности. Тем не менее, многие уязвимости остаются открытыми, поэтому в долгосрочной перспективе целесообразно провести аудит и устранить выявленные слабые места системы [3]. Дальнейшей задачей является рассмотрение методов устранения уязвимостей [1].
Рис. 3. Собранное устройство
Заключение
Разработанное устройство протестировано
на практике. Малые размеры и масса используемых элементов позволяют легко переносить устройство, тем самым давая возможность развернуть портативную считывающую станцию для организации сбора и учета данных в любом месте, в отличие от других систем контроля и управления доступом.
Аппаратная часть комплекса включает в себя вышеупомянутые устройства Arduino Uno и Raspberry Pi 3, а также RFID/NFC-считыватель. Последний подключается к Arduino Uno и передает данные по протоколу I2C. Arduino Uno, в свою очередь, соединяется с Raspberry Pi 3 посредством USB-кабеля и передает данные через последовательный интерфейс передачи данных.
Программная часть комплекса включает в себя исполняемый код, загружаемый в Arduino Uno, скрипт на языке программирования Python для считывания данных, передаваемых с Arduino Uno на Raspberry Pi 3, и помещения их в базу данных, непосредственно базу данных, хранящую данные, и веб-приложение также на языке Python, предоставляющее удобный графический интерфейс пользователя для просмотра хранимых данных в базе данных.
1. Аверченков, В.И. Междисциплинарные аспекты анализа тенденций развития интернета вещей (обзор российских и зарубежных исследований) / В.И. Аверченков, К.В. Герасимов, Н.А. Слесаренко // Эргодизайн. - 2019. - №3(05). - С. 106-114. DOI:https://doi.org/10.30987/article_5d25e4dcc73a24.98125589.
2. Кирилова, К.С. Анализ существующих методов реализации rootkit / К.С. Кирилова, А.Ю. Цветков // Актуальные проблемы инфотелекоммуникаций в науке и образование. VIII Международная научно-техническая и научно-методическая конференция: сб. науч. ст. СПб.: СПбГУТ, 2019. С. 492-497.
3. Пестов, И.Е. Выявление угроз безопасности информационных систем / И.Е. Пестов, Д.В. Сахаров, И.Ю. Сергеева, И.С. Чернобородов // Актуальные проблемы инфотелекоммуникаций в науке и образование. VIII Международная научно-техническая и научно-методическая конференция: сб. науч. ст. СПб. : СПбГУТ, 2017. С. 525-527.
4. Таргонская, А.И. Разработка защищенного веб-интерфейса для управления устройствами в сети / А.И. Таргонская, А.Ю. Цветков // Актуальные проблемы инфотелекоммуникаций в науке и образование. VIII Международная научно-техническая и научно- методическая конференция: сб. науч. ст. СПб. : СПбГУТ, 2019. С. 734-739.
5. Темченко, В.И. Проектирование модели информационной безопасности в операционной системе / В.И. Темченко, А.Ю. Цветков // Актуальные проблемы инфотелекоммуникаций в науке и образование. VIII Международная научно-техническая и научно-методическая конференция: сб. науч. ст. СПб.: СПбГУТ, 2019. С. 740-745.
6. Цветков, А.Ю. Исследование существующих механизмов защиты операционных систем семейства Linux / А.Ю. Цветков // Актуальные проблемы инфотелекоммуникаций в науке и образование. VII Международная научно-техническая и научно-методическая конференция: сб. науч. ст. в 4-х т. СПб. : СПбГУТ, 2018. С. 657-662.
7. Цветков А.Ю. Обеспечение безопасности в клиент-серверном Java приложении для учета и автоматической проверки лабораторных работ / А.Ю. Цветков, М.Е. Шалаева, М.А. Юрченко // Актуальные проблемы инфотелекоммуникаций в науке и образование. VIII Международная научно-техническая и научно-методическая конференция: сб. науч. ст. СПб.: СПбГУТ, 2019. С. 756-761.
8. Arduino Reference [Электронный ресурс]. URL:https://www.arduino.cc/reference/en/ (дата обращения 02.12.2019).
9. Raspberry Pi 3 Model B [Электронный ресурс]. URL:https://www.raspberrypi.org/products/raspberry-pi-3-model-b/ (дата обращения 02.12.2019).
10. RFID/NFC-сканер [Амперка / Вики] [Электронный ресурс]. URL:http://wiki.amperka.ru/продукты:nfc (дата обращения 02.12.2019).