TECHNOLOGICAL SUPPORT FOR THE RELIABILITY OF OPERATION OF CYLINDERS FOR THE STORAGE AND TRANSPORTATION OF GASES AND GAS MIXTURES
A.N. Shishlenin, M.V. Penev, V.S. Belugin, S.A. Voinash
A cylinder is a shell of a certain shape (vessel), which has one, sometimes two necks, for installing various fittings, valves, as well as flanges for transporting, storing or dispensing liquefied gases, gases dissolved under pressure or compressed gases. Industrial and medical gases are widely used: oxygen, nitrogen, helium, hydrogen, ammonia, nitrous oxide, propane, argon and many others. High-pressure cylinders are manufactured for their transportation and storage. Since the volume of gases required for production purposes must be significant, they are pumped into cylinders under pressure. For this reason, special design requirements are imposed on containers.
Key words: mechanical engineering technology, non-destructive testing, reliability, deformation, destruction.
Shishlenin Alexander Nikolaevich, chief engineer, [email protected], Russia, St. Petersburg, LLC NEVA-TAFT, '
Penev Maxim Viktorovich, deputy director, Russia, St. Petersburg, LLC NEVA-TAFT,
Belugin Vladimir Sergeevich, deputy head of workshop, Russia, St. Petersburg, LLC NEVA-TAFT,
Voinash Sergey Alexandrovich, junior researcher, [email protected], Russia, Rubtsovsk, Rubtsovsk Industrial Institute (branch) of Polzunov Altai State Technical University
УДК 004.492.3
DOI: 10.24412/2071-6168-2023-3-502-506
АНАЛИЗ МЕТОДОВ РЕАЛИЗАЦИИ И ПРЕДОТВРАЩЕНИЯ УЯЗВИМОСТЕЙ
CWE (567, 820)
И.Д. Крылов, Д.П. Яковлев, В.А. Селищев
Рассматривается уязвимость отсутствующей синхронизации (СШЕ-{567, 820}) как наиболее часто встречающаяся угроза при доступе к ресурсам. Изложены основные методы защиты.
Ключевые слова: информационная безопасность, злоумышленник, связанные уязвимости, анализ кода, сервлет.
Уязвимости по каталогу CWE (CWE 567, 820). CWE-567 - несинхронизированный доступ к общим данным в многопоточном контексте.
Продукт неправильно синхронизирует общие данные, такие как статические переменные между потоками, что может привести к неопределённому поведению и непредсказуемым изменениям данных.
Это происходит, когда несколько потоков обращаются к общему ресурсу и изменяют его без надлежащей синхронизации, что приводит к непредсказуемым результатам, таким как условия гонки, взаимоблокировки и повреждение данных. В сервлетах (небольших резидентных серверных программах, которые обычно запускаются автоматически в ответ на действия пользователя) общие статические переменные не защищены от одновременного доступа, но сервлеты являются многопоточными. Это типичная ошибка программирования в J2EE-приложениях, поскольку многопоточность обрабатывается фреймворком. Когда злоумышленник может повлиять на общую переменную, один поток может изменить эту переменную, чтобы она содержала данные, недопустимые для другого потока, который также использует данные внутри переменной [1].
Последствия наступают в следующем случае: если общая переменная содержит конфиденциальные данные, она может быть обработана или отображена в другом пользовательском сеансе. Если эти данные используются для управления приложением, их значением можно манипулировать, чтобы вызвать сбой или снижение производительности приложения.
CWE-820 - отсутствующая синхронизация. Продукт использует общий ресурс одновременно, но не пытается синхронизировать доступ к ресурсу.
Если доступ к общему ресурсу не синхронизирован, ресурс может находиться не в состоянии, ожидаемом продуктом. Это может привести к неожиданному или небезопасному поведению, особенно если злоумышленник может повлиять на общий ресурс [2].
502
Последствиями могут быть технические воздействия (изменение данных приложения, чтение данных приложения, изменение логики выполнения).
Связанные уязвимости:
CWE-567 - дочерняя от CWE-820.
CWE-567 может предшествовать CWE-488 - воздействие элемента данных на неправильный
сеанс.
Данные могут «перетекать» из одного сеанса в другой через переменные - члены одноэлементных объектов, таких как сервлеты и объекты из общего пула.
В случае с сервлетами разработчики иногда не догадываются, что если сервлет не реализует интерфейс 'SingleThreadModel', сервлет является одноэлементным. Существует только один экземпляр сервлета. Этот единственный экземпляр повторно используется для обработки нескольких запросов, которые обрабатываются одновременно разными потоками. Общим результатом является то, что разработчики используют поля - члены сервлета таким образом, что один пользователь может непреднамеренно увидеть данные другого пользователя. Другими словами, хранение пользовательских данных в полях -членах сервлета приводит к состоянию гонки за доступом к данным.
Анализ и обнаружение CWE (567, 820). CWE (567, 820) - тип уязвимости программного обеспечения, который возникает, когда несколько потоков или процессов пытаются одновременно получить доступ к общему ресурсу без надлежащей синхронизации. Это может привести к неожиданному и неопределенному поведению, таким как условия гонки, взаимоблокировки и повреждения памяти.
Чтобы обнаружить CWE-({567, 820}), можем выполнить проверку кода и использовать инструменты статического анализа, которые сканируют исходный код на наличие потенциальных проблем с синхронизацией. Вот некоторые из признаков отсутствия синхронизации в коде:
1) общие ресурсы не защищены должным образом блокировками, семафорами или другими механизмами синхронизации;
2) несколько потоков или процессов одновременно обращаются к общим ресурсам без надлежащей координации;
3) код, который обращается к общим ресурсам, не использует атомарные операции или барьеры памяти для обеспечения надлежащего порядка и синхронизации;
4) код, использующий небезопасные для потоков API или библиотеки, которые могут вызвать проблемы с синхронизацией.
Чтобы смягчить CWE (567, 820), следует убедиться, что общие ресурсы должным образом защищены механизмами синхронизации, такими как блокировки или семафоры. Также необходимо использовать атомарные операции и барьеры памяти, чтобы обеспечить правильный порядок и синхронизацию одновременных доступов. Кроме того, важно использовать потокобезопасные API и библиотеки, чтобы избежать потенциальных проблем с синхронизацией.
Средства анализа для обнаружения CWE (567,820). Инструменты статического и динамического анализов обычно используются для обнаружения известных уязвимостей. Приведем обзор обоих типов анализа.
Статический анализ: инструменты статического анализа анализируют код, фактически не запуская его. Они сканируют исходный код или скомпилированный код на наличие известных уязвимостей и ошибок программирования. Некоторые инструменты статического анализа для обнаружения CWE-567 включают [3]:
1) RustBelt: инструмент статического анализа для проверки защищенности кода Rust от гонок данных и взаимоблокировок.
2) Анализ безопасности потоков Clang: инструмент для обнаружения нарушений безопасности потоков в коде C++.
3) Coverity: коммерческий инструмент, который выполняет статический анализ кодах C, C++ и Java для обнаружения проблем с безопасностью потоков.
Динамический анализ: инструменты динамического анализа выполняют код и отслеживают его поведение во время выполнения. Они могут обнаруживать проблемы параллелизма, которые трудно или невозможно обнаружить с помощью статического анализа. Некоторые инструменты динамического анализа для обнаружения CWE-567 включают:
1) Helgrind: инструмент динамического анализа для обнаружения гонок данных и других ошибок синхронизации в кодах C и C++.
2) ThreadSanitizer: инструмент динамического анализа, который обнаруживает гонки данных и другие ошибки синхронизации в кодах C, C++ и Go.
3) Rustacean: инструмент динамического анализа, обнаруживающий гонки данных в коде
Rust[4].
Как статический, так и динамический анализы имеют свои преимущества и ограничения. Статический анализ является быстрым, масштабируемым и может обнаруживать широкий спектр уязвимо-стей, но он может давать ложные срабатывания и пропускать некоторые проблемы, требующие информации во время выполнения. Динамический анализ дает более точные результаты, но он может быть медленным, трудно масштабируемым и может упустить некоторые проблемы, возникающие только при определенных условиях.
Таким образом, использование комбинации инструментов статического и динамического анализов может помочь обнаружить и предотвратить уязвимости CWE-({567,820}) и другие проблемы мно-гопоточности в программном обеспечении.
Пример программы с CWE-({567, 820}). Одним из примеров программы с этой уязвимостью может быть веб-сервер, который одновременно обслуживает запросы от нескольких клиентов. Если код сервера не синхронизирует доступ к общим структурам данных, таким как база данных, несколько потоков могут пытаться одновременно читать или записывать одни и те же данные, что приведёт к неправильным результатам (рис. 1) [5].
use std::sync::Arc;
use std::sync::atoaic::{AtoaicUsize, Ordering}; use std::thread;
- fn main() {
let shared_data = Arc:: new(Atomicllsize: :new(u) ) j let nut handles = vec![];
for _i in 9..10 {
let data * shared_data.clone();
let handle = thread::spawn(bove || { for _j I« 9..ie&ee {
let value = data.load(Orderingi¡SeqCst); data.store(value + 1, Ordering:;SeqCst);
>
handles.push(handle);
}
for handle in handles {
handle. jolnO.unwrapO ;
}
printlni("ftesult: {}N, ahared.datat\oad(Ordering:;SeqCst));
> I
Рис. 1. Пример кода программы на языке Rust
В данном коде создается общая переменная А^т1сШ11е' и запускается десять потоков, каждый из которых увеличивает значение переменной на 1 (десять тысяч раз). Однако, поскольку не синхронизируется доступ к общей переменной, несколько потоков могут попытаться изменить ее одновременно, что приведет к гонкам данных и неопределенному поведению.
Приведем результаты нескольких запусков (рис. 2, 3).
V** *tdi
ии «Hi itteaK; :(AwKtiHu, OfdiriniJi ни std;:tiirc«di
• fil {
l>t shared.data ■ Are: :nee(AtûeicUs-ljej ]пм(п|) ; 1« wt handle* • v*cl[l;
fer .1 id в, „IE (
let data ■ *hared_data,clone()t let • || (
tor in ^ {
let value « data.toad(Ordering::SeqCst)1 data.storefvalw * 1, Ordering::Seqtst)t
)
_ш_
Execution
Ceefill playground vft.CM (/plJiygreured) FlftHhtd tfcv Lunopt1*<Kd * debug t*foJ Edrgct{s) in 1.02a Running ' target/debHg/plrtyground'
«МОП; Т95в4
Рис. 2. Результат запуска программы
Изредка получались правильные ответы, но зачастую - случайные числа. Пробовали взять разные числа: от 10 до 10000. Чем меньше число, тем выше шанс правильного ответа, и наоборот (рис. 3).
u» ^td::ьупс: : Are;
ни stdï ¡syncs futoeie! Ordering}i
и** itdïîïhr««!-
fi» Hin{> с
let shi'rdJICi e Art; ¡n««r(AttmleUllJ*: :r>ew( )) ; let nut handle* > v«cl(];
fer In e^.ie ( let dat* ■
let handle ■ threat} :: ^pawnfeewe ]| { fer J in O..IM00 {
let value « data.load(Ordering;:SeqCst); dita,itor»(vlu» * 1. Ordti1n[!!S«iH)i
ill
Execution
СоарШщ р1&уЦГОШМ» V0.0,x (/playground)
Finished dev (unoptifHfcd * de-tuj^lnfo} u>tci(i) In e.№ Running 'target^deftugyplayground"
sevuU: 6W46
Рис. 3. Результат запуска программы 504
Предотвращение уязвимости CWE (567, 820). Чтобы решить эту проблему, можно использовать мьютекс для синхронизации доступа к общим данным (рис. 4).
use std::sync::CArc, MutexJ: use std::thread;
fn :' ■> i 'i ( ) {
let shared.data ■ Arc::newtMutox::new(Q)); tat mut handles =
for -in fl+ , X0 {
let data = shared_data.clone(); let handle " thread::spawn(inov* |\ i for in n, +1680© {
"let But value ■ data.locM) ^unwrapO: "value += 1;
}
J):
handles.pushihandlej;
for handle In handles (
handle.jolni).unwrap();
>
pr-totin: ("Result: O", shared, data. lock().unhrapt)l;
Рис. 4. Исправление уязвимости
В исправленной версии кода заменяем переменную 'AtomicUsize' целым числом, заключенным в 'Mutex', получаем внутри потока блокировку мьютекса с помощью метода 'lock', который возвращает защиту, обеспечивающую монопольный доступ к данным (рис. 5). Затем обновляем значение, разыменовывая защиту с помощью оператора *[6].
us* £td::synt:¡(Arc, Mutex); us* std::thread;
■ fn main() {
let shared_data - Arc;: new[Hutex: :nevj(c;)); let nut handles = vecl[3;
for _1 In ft..19 {
let data " shared,data.eloTie()i let handle ■ thread::spavn{»ove |! { f&r In {
let mut value - data.lock().unwrapfj; •value :;
)
}>;
handles, pu sti (hand le >;
Compiling playground vS.3.1 (/playground) finished deu [unoptimized ' debuginfol target(s) in 1,29s Running "target/debug/playground"
Result:
Рис. 5. Исполнение кода без уязвимости
Итак, используя мьютекс, гарантируем, что только один поток может получить доступ к общим данным в любой момент времени, предотвращая гонки данных и гарантируя детерминированный результат.
Список литературы
1. The official CWE website maintained by MITRE Corporation. [Электронный ресурс] URL: https://cwe.mitre.org (дата обращения: 03.04.2023).
2. The NIST National Vulnerability Database (NVD). [Электронный ресурс] URL: https://nvd.nist.gov (дата обращения: 01.04.2023).
3. The CERT Coordination Center. [Электронный ресурс] URL: https://www.cert.org (дата обращения: 05.04.2023).
4. The SANS Institute. [Электронный ресурс] URL: https://www.sans.org (дата обращения: 04.04.2023).
5. Common Weakness Enumeration Specification. [Электронный ресурс] URL: https://cwe.mitre.org/about/cwe specification v4.2.pdf (дата обращения: 01.04.2023).
6. OWASP (Open Web Application Security Project). [Электронный ресурс] URL: https://owasp.org (дата обращения: 06.04.2023).
Крылов Илья Дмитриевич, студент, [email protected], Россия, Санкт-Петербург, Национальный исследовательский университет ИТМО,
Яковлев Дмитрий Павлович, студент, [email protected], Россия, Санкт-Петербург, Национальный исследовательский университет ИТМО,
Селищев Валерий Анатольевич, канд. техн. наук, доцент, [email protected], Россия, Тула, Тульский государственный университет
ANALYSIS OF METHODS FOR IMPLEMENTING AND PREVENTING CWE VULNERABILITIES (567, 820)
I.D. Krylov, D.P. Yakovlev, V.A. Selishchev
The vulnerability of missing synchronization (CWE-{567, 820}) is considered as the most common threat when accessing resources. The main methods of protection are described..
Key words: information security, attacker, related vulnerabilities, code analysis, servlet.
Krylov Ilya Dmitrievich, student, [email protected], Russia, Saint Petersburg, ITMO National Research University,
Yakovlev Dmitry Pavlovich, student, dimok-payk2@mail. ru, Russia, Saint Petersburg, ITMO National Research University,
Selishev Valeryi Anatolievich, сandidate of technical sciences, docent, [email protected], Russia, Tula, Tula State University
УДК 004.056
DOI: 10.24412/2071-6168-2023-3-506-509
ЗАЩИТА БЕСПРОВОДНЫХ СЕТЕЙ ОТ УГРОЗ
А.А. Квасников
В статье рассматривается проблема защиты беспроводных сетей, установлены угрозы и методы их устранения. Беспроводные сетевые технологии приема и передачи информации на основе стандартов IEEE 802.11 занимают важное место. Однако стоит отметить, что высокий уровень угроз приводит к необходимости искать методы защиты, позволяющие системно обеспечить информационную безопасность.
Ключевые слова: беспроводная сеть, локальная сеть, интернет, соединение, маршрутизатор,
данные.
Беспроводные локальные сети уже давно стали привычными. Но стоит отметить, что применение беспроводных сетей - это не только приобретение новых возможностей и выгоды, но и рождение новых рисков. Новое поколение взломщиков возникло в результате практически вездесущего использования Wi-Fi. Их цель - изобретение свежих возможностей взлома беспроводных сетей и проведение атак пользователей, а также общей инфраструктуры. Прогноз, данный Gаrtner в 2004 году, сбылся. надежность WLAN делается одной из основных проблем.
Исследованием защиты беспроводных сетей занимается довольно большое количество людей. Назовем некоторые имена и статьи, которые освещают предоставленную проблему.
Так в 2020 году выходит статья А. Кухта «Анализ методов защиты беспроводных сетей». В статье перечислены протоколы, которые могут обеспечить шифрование данных. Приведены технологии защиты и некоторые способы взлома беспроводных сетей закрытого типа. Дополнительно перечислены недостатки любой технологии защиты Wi-Fi.
Годом ранее вышла статья А. Скрыпникова «Защита данных при передаче по беспроводным каналам связи», где он с командой молодых ученых поочередно описывает особенности беспроводной связи, типовые стандарты защиты, их уязвимости, а так же приводит способы обхода методов шифрования и определяет возможности защиты от популярных методов взлома.
Отметим, что Wi-Fi-доступ содержит ряд уязвимостей, среди которых наиболее распространенными специалисты считают:
Клонирование точки доступа;
Атаки на отказ в обслуживании (DoS-атаки);
Подключение неавторизованных клиентов;
Подбор ключей.