Как да се изгради детектор на чук

Представете си днешния свят без безжични комуникации. Без мобилни телефони, без Wi-Fi у дома, без GPS, без Bluetooth клавиатура / мишка / слушалки и т.н. и т.н. и т.н. Ясно е, че ние зависим от безжичната свързаност много повече, отколкото сме наясно. И така, какво ще стане, ако тези безжични сигнали могат да бъдат засегнати по начин, който стават безполезни и комуникацията е напълно загубена? Това би било възможно дори? Е, в някои случаи това е и е доста лесно да се постигне ... но за щастие има начини да идентифицирате тези видове заплахи и ще ви покажа един от тях.

заглушаване

Както казахме, доста зависим от безжичните мрежи. Безжичната комуникация е като двама души да говорят. Единият от тях говори и след това слуша и обратно. Какво става, ако трети човек се приближи до тях и започне да крещи толкова силно, че другите двама вече не могат да се слушат? В началото те ще се опитат да продължат разговора, но скоро ще разберат, че това не е възможно и ще спрат да говорят, очаквайки лудия да млъкне. Това се случва с много комуникационни протоколи. Когато забележат, че каналът е зает, те се оттеглят. По този начин обменът на съобщения между тези устройства е спрян. Дори и да се опитат да комуникират, когато носителят не е свободен, както правят някои други протоколи, ако шумът е твърде висок, тогава съобщенията няма да бъдат получени правилно от другата страна и никаква комуникация не би била възможна. Това наричаме безжично заглушаване.

Има голям брой злонамерени безжични устройства, които имат за цел да причинят умишлена намеса в безжичната мрежа. Те са явно незаконни, но в днешно време могат да бъдат закупени онлайн за умерена цена.

Тези чукове работят по следния начин. Те генерират силен безжичен сигнал, който влияе на физическия слой на безжичния комуникационен протокол, който се използва. Това означава, че те са в състояние да засегнат всеки протокол в дадена честотна лента. Те засягат първия слой от стека на OSI, средата. В резултат на това всеки горен слой, използван за комуникация, ще бъде засегнат. Wifi, bluetooth, 3G, 4G, GSM, GPS, вие го наречете. Това е като лудия човек, който започва да вика в средата на разговора. Няма нищо против, ако високоговорителите говорят на английски или на руски, те вече няма да могат да говорят един с друг.

Има различни видове сигнали за заглушаване, но най-често използваните са тези четири:

Непрекъсната вълна: синусоидален теснолентов сигнал с постоянна амплитуда и постоянна честота

Модулиран по честота: синусоидален сигнал с постоянна амплитуда и променлива честота, който помества честотите на обхвата на услугата

Широколентов обхват: предава честотна лента, която е голяма по отношение на честотната лента на един емитер

Импулсни сигнали: прекъсващ сигнал, който има няколко хармонични компонента, разделени в целия обхват на услугата

Има няколко типа сигнали, които могат да бъдат използвани за въздействие върху безжичните комуникации. Въпреки това, търговските чукове, които лесно бихме могли да купим през интернет, използват импулсни, тъй като това е най-евтиният начин за постигане на мощен и широколентов джамър в дадена лента.

И така, какво правим по този въпрос? Как можем да открием, че има някакво злонамерено устройство, което се опитва да засегне редовните безжични мрежи? Е, едно от решенията би било да се изгради детектор на чук. Просто, нали? :)

DoS Sensing - детектор на чук

Днес (денят, в който започнах да пиша тази публикация в блога) минаха 2 години, откакто се присъединих към Worldsensing. Това е IoT компания, която се развива много напоследък и лично за мен беше страхотно преживяване досега да работя тук. Аз съм част от екип, който работи главно по иновационни проекти, основан обикновено от Европейския съюз. В контекста на един от тези проекти, наречен CIPSEC, ние бяхме помолени да разработим инструмент, който да ни позволи да открием безжични атаки на Denial of Service (DoS). След като анализирахме проблема и направихме много изследвания, решихме да изградим DoS Sensing, устройство за детектор на чук IoT. В края на краищата ние сме IoT компания!

Идеята беше да има устройство, което да може да защитава всяка безжична мрежа, независимо от честотната лента. Това означава, че е трябвало да може да открива аномалии на физическия слой и да информира кога е извършена атака. Това ще ни позволи да използваме едно-единствено устройство за подобряване на сигурността на разнородни устройства, като например WiFi рутери, мобилни телефони или дори Lologsense на данни от Worldsensing, които комуникират чрез LoRa.

В резултат на това това, което искахме, е интелигентен сензор, който няма да пречи на безжичните сигнали, а просто ще ги слуша пасивно и ще ги анализира, за да открие аномалия. В случай, че е имало такова нещо, той трябва да информира за атаката, за да може да се предприемат някои действия. Това би помогнало, разбира се, да има визуален инструмент, който да вижда силата на атакуващия сигнал в реално време, тъй като атаката ще се осъществи.

Архитектура на решението

Но как да изградим такова нещо? Е, за начало, ако желаете да проявите агресивност на комуникационния протокол и ще анализирате физическия слой, най-добрият вариант би бил да използвате SDR (Software Defined Radio) модул. Тези модули са главно многолентово радио, докато всички други компоненти, които обикновено се прилагат в хардуера (филтри, модулатори, миксери и т.н.), се изпълняват на софтуер. Това ни позволява да превърнем безжичен сигнал от неговата аналогова форма в цифров, без значение какъв е протоколът за комуникация. След това, всичко, което трябва да направим, е да анализираме вида на сигнала и да се уверим, че той съответства на един от добре познатите сигнали за заглушаване. Това е като да сравняваме подписа на сигнала с подписите, които знаем.

Тогава всичко, от което се нуждаем, е SDR модул? Е, само SDR модулът няма да ви позволи да направите анализа. Той просто ще преобразува вашите аналогови данни в цифрови проби. О, между другото, ние също се нуждаем от антена, разбира се. Как ще заснемем безжичните сигнали без него? Точно така. Но антените зависят от честотата. Не можете да използвате една и съща антена за всички честоти. Точно така, но има някои антени, които покриват широк диапазон от честоти, които можем да използваме.

Добре, ще ни трябва антена, SDR модул и нещо, за да обработим генерираните от него данни. Това ще състави нашия сензор, нашето IoT устройство. Той трябва да може да улавя безжичния спектър и да го трансформира в събития за откриване. Тези събития трябва да бъдат от типа „наистина има задръстване“ или „тук няма задръстване“ и това трябва да се съобщава периодично, тъй като ние искаме решението да работи в реално време. Тези събития могат да включват информация като вида на атаката, която се осъществява, силата на сигнала на атакуващия сигнал, честотата, където е открита атаката и, разбира се, времева марка.

Добре. Към този момент остава само един софтуер, който ще ни позволи да визуализираме тези атаки в реално време. Обикновено приложения като това се стартират в Облака и предоставят уеб интерфейс за достъп до него. Освен това софтуерът, работещ в облака, също трябва да осигурява средства за съхраняване на данни, в случай че искаме да видим исторически събития.

Добре тогава! Нашата архитектура е нещо подобно:

Безжичните сигнали се приемат от антената. След това се трансформира в цифрови проби от SDR модула. Те се обработват от обработващия съвет и след като съветът реши дали има атака или не, резултатът се съобщава на сървъра за наблюдение, който получава и съхранява данните. Тогава инструментът за визуализация може да се използва за показване на тези събития в реално време и исторически.

Сензорът (хардуер)

Сега трябва да изградим сензора. Да започнем с антената Знаем, че има някои антени, които покриват множество ленти, например тази, която всъщност тествахме с добри резултати. Бихме могли да използваме нещо подобно, за да покрием няколко честотни диапазона и да защитим множество протоколи. Независимо от това, за начало се съсредоточихме основно върху прототипа, който да защити Wifi обхвата, така че 2,4 Ghz - 2,5 Ghz антена беше достатъчен. Ще видим защо по-късно.

Нуждаем се и от SDR модул. Кое? На пазара има няколко продукта. След няколко изследвания и дискусии с експерти, решихме, че за този прототип ще изберем HackRF One. Това устройство предлага добро съотношение цена-качество и покрива честоти от 1 MHz до 6 GHz! Драйверите му са с отворен код и можете лесно да ги инсталирате чрез мениджър на пакети за повечето Linux дистрибуции.

Добре, това започва да се оформя. Сега се нуждаем от машина, която е в състояние да обработва цифровите проби, генерирани от SDR модула, нашия процесор. Тук нещата стават малко трудни. Ако искаме да анализираме потока от данни в реално време, тогава трябва да имаме значителна мощност за обработка. Наличието на прилична честота на дискретизация (като 5 Msps) ни дава общо над 300 Mbps скорост на предаване на данни! Това е много данни, ако искахме да анализираме всичко. За щастие не е нужно наистина да обработваме всичко, а поне няколко групи данни в секунда, за да имаме решение в реално време. В този случай лаптопът би бил чудесен, но не можете да създадете IoT устройство с лаптоп. Определено имате нужда от нещо по-малко. Тогава си помислихме за Raspberry Pi, но дори и версия 3 в някои случаи може да не е достатъчна за нашите цели (въпреки че може да работи, ако нямате нищо против закъснение на резултатите). Ето защо решихме да отидем за Odroid C2. Този съвет е доста мощен за цената си и може да работи ubuntu-minimal, което помага много. Зависимостите са наистина лесни за инсталиране, ако искате да свържете HackRF One към него и това е доста здрава дъска.

Perfect. Нещо друго? Е да. Ако искате да изградите IoT устройство и искате да изглежда хубаво, ще ви трябва кутия. Освен това, ако искате да инсталирате това устройство на открито, по-добре се уверете, че кутията е водоустойчива! Нека използваме нещо, което вече знаем. Worldsensing разполага с продукт, наречен Bitcarrier, който има вградена антена на кутията си и служи перфектно за нашите цели в случай, че ще отидем до детектора на лентата Wifi. Ето защо решихме да използваме отново полето Bitcarrier и да се съсредоточим главно върху откриването на атаки в тази лента.

Сензорът (фърмуер)

Това е може би най-сложната част от процеса на изграждане. Софтуерът, който се използва на вграденото устройство (наричаме го фърмуер), трябва да обработва цифровите проби, идващи от SDR модула, и да взема решение за наличието на засядане или без задръстване. За щастие има инструменти, които опростяват работата много и дори са с отворен код! За тази цел използваме GNU Radio.

GNU Radio е безплатен инструментариум за разработка на софтуер, който ни позволява да използваме блокове за обработка на сигнали от различни видове, за да внедряваме системи за обработка на сигнали и радио-дефинирани радиостанции. Можете да използвате блоковете, които обработват сигнала в софтуер и да ги свързвате помежду си, за да трансформирате сигнала и да генерирате изход. Има много предварително дефинирани функции, като филтри, еквалайзери, декодери и т.н. И най-хубавото е, че можете също да разработвате свои собствени блокове и да ги използвате, за да се свържете с останалите. Приложенията могат да бъдат писани на C ++ или Python. GNU Radio ви позволява да използвате SDR модул за визуализиране на готини неща като този:

Това е FFT на сигнал. Което означава, че на компютъра ви работи собствен спектрален анализатор!

От друга страна, можете да правите и други неща като свързване на източник на сигнал към различни блокове, които трансформират пробите в нещо друго. Има графичен потребителски интерфейс за това наречено GNU Radio Companion и изглежда така:

Този инструмент в крайна сметка генерира Python скрипт, който свързва блоковете заедно и стартира приложението, генерирайки някакъв изход. В този случай това, което искаме да изградим, е поток от проби, който преминава през някои персонализирани блокове, които могат да ги анализират, така че върху сигнала да се намери определен шаблон или подпис. Ако това се случи, изпращаме съобщение, в което се казва, че сме го намерили, ние идентифицираме джамер. Архитектурата на SDR Jammer Detection (SDRJD) в приложението за обработка е следната:

Цифровите проби идват от източник, който е SDR модулът. Благодарение на GNU Radio и неговата блокова ориентирана архитектура, SDR модулът като източник може да бъде заменен от други възможни източници, стига да има блок за него. Например източникът може да бъде файл. Това е много полезно, тъй като ни позволява да запишем сигнал (джамер например), да го изхвърлим във файл (използвайки блок за мивка, който записва във файл) и след това да го използваме толкова пъти, колкото искаме за тестване.

Ще използваме също и сигнален кондиционер, за да подготвим пробите, които да бъдат анализирани чрез алгоритмите за откриване на засядане. Има четири от тях (по един за тип джамър) и те обработват данните паралелно (всъщност всеки GNU Radio блок работи на своя собствена нишка). След като алгоритмите решат, те съобщават това решение на приемника на съобщения на детектора, който агрегира решенията, взема окончателното решение кой джамър присъства или не, и поставя съобщение в опашката на Linux.

Приложението SDRJD има много завършен конфигурационен файл, който ни позволява да конфигурираме честотата на дискретизация, входните усилвания, източника на сигнал, централната честота и много други параметри. Има дори някои параметри за настройка и калибриране на всеки алгоритъм за откриване, тъй като те могат да се променят в зависимост от средата, в която е инсталиран сензорът. В много шумни среди може да се наложи корекция на праговете и параметрите на алгоритъма на Тонг.

Алгоритъмът Tong е интересна процедура, която е разработена с цел подобряване на фалшиви положителни резултати и прецизиране на решенията, взети от всеки алгоритъм за откриване на джамера. Състои се от вземане на няколко решения, за да се стигне до заключение. Започваме с брояч K = B. Ако решението е положително, увеличаваме K. Ако K е равно на A, тогава резултатът е положителен. Ако решението е отрицателно, ние декрементираме K. Ако K се равнява на 0, тогава резултатът е отрицателен. Тъй като бихме могли да повтаряме безкрайно, ние отчитаме и максимален брой повторения, докато не обявим отрицателен резултат.

Всички описани тук фърмуери са с отворен код и могат да бъдат намерени тук.

Както казахме, съобщенията за откриване се поставят в опашка за Linux. Друг процес е отговорен за четенето на съобщенията от опашката и прехвърлянето им в софтуера за наблюдение, работещ в облака.

Софтуер за наблюдение

Що се отнася до софтуера, ние проучвахме различни инструменти, които могат да бъдат използвани за представяне на данни в реално време и биха били лесни за използване при подготовката на табла за управление. Открихме, че комбинацията от InfluxDB, Kapacitor, Grafana беше страхотна, за да задоволим нашите нужди. Архитектурата на софтуера за мониторинг изглежда така:

Сензорът комуникира със скрипт на python, който вмъква данните в базата данни InfluxDB. Тук е мястото, където Kapacitor прави някаква магия, за да усъвършенства съобщенията за откриване, идващи от сензора, и поставя отново записите за атака в база данни, която се използва от Grafana за представяне на атаките в реално време и показване на някои статистически данни. Всеки път, когато има положителна атака, Kapacitor ще го съобщи и на отделен процес, който ще напише запис в syslog към ATOS XL-SIEM. Този SIEM е разработен и тестван в контекста на проекта CIPSEC.

Kapacitor играе много важна роля тук. Видяхме, че дори да можем да коригираме праговете и параметрите за откриване на сензора, може да има няколко спорадични фалшиви позитиви или открития, които не означава непременно атака. В тези случаи не искахме да покажем, че се провежда „мини атака“, тъй като знаехме, че не е така. Ето защо добавихме слой за прецизиране на съобщенията за откриване, идващи от сензора, и този слой е реализиран от Kapacitor. Алгоритъмът е следният:

  • Ако _positiveRatio_% от последните решения за откриване на засядане _windowDuration_, идващи от сензора (в таблицата със сурови решения), са положителни, а JNR (съотношение между чук и шум) е по-голямо от _jnrThreshold_, тогава декларирайте положително нападение. Ако не, обявете отрицателно нападение.
  • Плъзнете _jammerUpdateWindowDuration_ още секунди плъзгащия се прозорец _windowDuration_

В момента сме настроили параметрите на следните и видяхме добри резултати:

  • _jnrThreshold_: 1 dB
  • _positiveRatio_: 90
  • _windowDuration_: 5 секунди
  • _jammerUpdateWindowDuration_: 1 секунда

Front-End

Последната част от решението се състои от инструмента за визуализация. Този инструмент е създаден с помощта на Grafana и осигурява табло за визуализиране на атаките и друга статистика. Той предоставя график в реално време на JNR спрямо времето на всеки тип атака, която може да се открие. Освен това, той показва броя на атаките за всеки тип през последния ден (този период може да бъде променен). Освен това има джаджа, която показва текущото състояние на устройството за детектор на засядане, където синьото означава, че сензорът е активен, червеното означава атака, а сивото означава, че сензорът е неактивен. Ето как изглежда:

Увийте

Видяхме, че изграждането на детектор за заглушаване не е лесна процедура. Необходимо е време за разработването на фърмуера и софтуера, както и за тяхното прецизиране, така че резултатите, предоставени от сензора, да са съгласувани. Независимо от това, резултатът е много хубав прототип, който може да бъде използван като доказателство за концепцията за възможностите за откриване на такъв тип атаки, които засягат значително нашата безжична среда.

Ако се почувствате като опитате сензора, продължете напред, вземете SDR модул, изтеглете хранилището на фърмуера, следвайте инструкциите README и сами стартирайте откриването на задръстванията!

Опровержение

Този проект (Cipsec) е получил финансиране от програмата за изследвания и иновации на Европейския съюз „Хоризонт 2020“ съгласно споразумение за безвъзмездна финансова помощ № 700378. Всяко разпространение на резултатите, представени тук, отразява само мнението на консорциума. Изпълнителната агенция за изследвания не носи отговорност за каквато и да е употреба от информацията, която съдържа.