Оригиналът е на Alaoui Kendil Даниел Десподов 11:04 | 29.03.2024

...
Оригиналът е на Alaoui Kendil Даниел Десподов 11:04 | 29.03.2024
Коментари Харесай

Реверсивно инженерство на сигнала от автомобилния електронен ключ

Оригиналът е на Alaoui Kendil

Даниел Десподов 11:04 | 29.03.2024 1 Сподели

Най-четени

IT НовиниЕмил Василев - 11:38 | 28.03.2024

Установено е, че ВЕЦ-овете отделят големи количества метан и това е сериозен проблем

IT НовиниДаниел Десподов - 9:20 | 28.03.2024

Германия стартира да употребява някогашните атомни електроцентрали като акумулаторни складове на електрическа сила

IT НовиниДаниел Десподов - 10:34 | 27.03.2024

Кой език се счита за „ най-бързият “ език в света и каква е скоростта на гласовия продан на информацията

Даниел Десподовhttps://www.kaldata.com/Новинар. Увличам се от модерни технологии, осведомителна сигурност, спорт, просвета и изкуствен интелект.

От няколко години уча протоколите за радиокомуникация. Всичко стартира, когато от любознание взех решение да опитвам с USB ключ от вида на RTL-SDR. Винаги съм желал да схвана по какъв начин се предават данните в отдалечените ръководства (особено при ключовете за автомобили), да се опитам да прихвана техния сигнал и да схвана какви други вектори за офанзива има в този случай.

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

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

Техническите средства

RTL-SDR

За първи път навлязох в света на радиокомуникациите през 2016 година, когато научих, че на ниска цена (~10 долара) USB TV/радио донгъл може елементарно да се трансформира в многофункционален радиоапарат за инспекция и декодиране на съвсем цялата информация, излъчена в диапазона от 24 до 1750 MHz. Това устройство е известно като RTL-SDR:

Тайната на тези мощни благоприятни условия се крие в чипа, който дава опция за потребление на софтуерно дефинирано радио (SDR). Оказва се, че благодарение на този чип (RTL2832U) е допустимо да се пропусне обработката на сигнала, която нормално се прави на хардуерно равнище. Като е допустимо преобразуването на необработения сигнал в „ смислени “ данни. В случая става дума за телевизионни и радиопредавания.

С достъпа до необработените данни за фазов и квадратурен (I/Q) сигнал е допустимо да се придобие, пресъздава и запази на практика всеки сигнал в занемарен тип. При това без да е належащо да се познават радиочестотните параметри на неговото предаване (модулация, честотен обсег, скорост на предаване и т.н.), защото можете сами да анализирате тези данни. По създание това ни дава опция да сканираме на практика всяка активност в радиочестотната лента до 1,7 GHz.

Flipper Zero

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

Интересуваме се съответно от Sub-Ghz модула, който съставлява чипа CC1101, поддържащ честоти до 1 GHz, които нормално се употребяват в безжичната потребителска електроника.

Но би трябвало да се означи, че можете просто да закупите CC1101 настрана (~5 долара) и да го настроите посредством Arduino/Raspberry Pi или да употребявате USB-TTL адаптер. Но Flipper явно е по-добър и по-практичен. ¯_(ツ)_/¯

CC1101 или RTL2832U

Чипът CC1101 във Flipper Zero, за разлика от RTL2832U от RTL-SDR, е приемо-предавател. Така че ще използваме Flipper за изпращане на сигнала.

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

Забележка: естествено, съществуват SDR приемо-предаватели, само че те нормално са доста скъпи.

Визуалният разбор

SDR#

SDR# е гратис, интуитивно компютърно приложение за DSP (цифрова обработка на сигналите), написано на C с акцент върху продуктивността. То обезпечава визуализацията на радиочестотния набор в действително време и поддържа демодулация на някои постоянно срещани модулации. Освен това то дава опция за потребление на приставки на трети страни за персонализирани модулации и интеграции.

С помощта на тази стратегия ще открием сигнала и ще правим неговия първичен разбор.

Откриването на сигнала

Като настроите честотата 433,92 MHz с RTL-SDR донгъла (използвайки WinUSB драйвер вместо общоприетия DVB-T), можете да наблюдавате интензивността на множеството отдалечени ръководства, в случай че те са задоволително близо. В Европейски Съюз и прилежащите страни, в това число Мароко, където пребивавам, честотата 433,92 MHz не е контролирана.

Натискането на който и да е бутон на електронния ключ на автомобила неотложно излъчва 3 поредни импулса, които могат да се видят на каскадната диаграма под визуализацията на спектъра:

Визуализация на сигнала от ключодържателя на автомобила с SDR#. Оста X е периодичност, ос Y е силата на сигнала

Можете също по този начин ясно да видите, че сигналът има два съществени пика от двете страни на честотата 433,92 MHz (червената линия в средата е точната периодичност на настройване).

Като се разрових в публикуваните схеми за модулация, открих забавен вид на 2-FSK.

2-FSK

FSK е редуциране от Frequency-Shift Keying (Иместване на честотата). Това е скица за честотна модулация, при която данните се кодират посредством от време на време изместване на честотата на носещия сигнал сред няколко стойности.

Дотук всичко е напълно просто. Само че наподобява, че тук става въпрос за FM.

Интересен е префиксът „ 2 “, който значи броя на кодиращите канали. Така че в действителност кодираме двоични данни в две обособени честоти, една за 0 и една за 1, което изяснява двата пика, които открихме нагоре.

Забележка: за тези, които се чудят какво съставляват другите по-малки пикове, те всъщност са нежелани честоти, генерирани на инцидентен принцип от чипа на предавателя. Появата им се дължи на евтиния чип и на непосредствената непосредственост на ключа за автомобила и антената. Така че това е просто звук, който можете да игнорирате.

Практическият разбор

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

Universal Radio Hacker

Според README в неговото вместилище Universal Radio Hacker (URH) е инструмент с напълно отворен код за разбор на безжични протоколи с поддръжка на голям брой публикувани SDR. URH разрешава лесна демодулация на сигналите дружно с автоматизираното разкриване на параметрите на модулацията, което доста улеснява идентифицирането на битовете и байтовете, излъчени по въздуха.

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

При пускане URH предлага да отворите файл или да започнете запис непосредствено от устройството.

За да започнете да записвате, би трябвало да изберете източника и да конфигурирате някои параметри (лично аз просто зададох вярната периодичност, като оставих останалите по подразбиране).

След записването на сигнала URH се пробва да откри вярната настройка за декодиране на неговите радиовълни.

При първите записи не съумях да накарам URH да откри верните параметри и той даде погрешни резултати. По-късно открих, че записването на няколко повтарящи се сигнала по едно и също време усилва шанса приложението да открие вярната настройка. В моя случай тя се оказа: 50 проби/символ, FSK.

Когато увеличим един от сигналите, виждаме трите пика, които наблюдавахме в диаграмата SDR# (вторият се състои от 3 обособени пика – което значи, че имаме общо 5 фрагмента за анализ).

За всеки откъс автоматизирано се извлича последователността от битове, която може да се преобразува в шестнадесетичен формат за по-добра визуализация:

Вече се следи ясна поредност и повтарящи се модели на байтове, тъй че сме на прав път.

Изглежда обаче пропущаме нещо, защото тук има един забавен миг, а точно повтарянето на едни и същи 5 шестнадесетични числа с набор от байтовете 0x55 (01010101).

Когато превключим на прилежащия раздел “ Analysis “ (Анализ), виждаме байтовете, които преди малко извлякохме от следените импулси. Всеки от тях е показан като низ и програмата ни предлага опция да ги декодираме, като използваме един от логаритмите:

След като изпробвах всичко наред, забелязах, че Manchester II преобразува всички байтове 0x55 в нула без никакви неточности при декодирането:

Сега това към този момент е един по-приемлив тип.

Кодирането вид Манчестър

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

Тези характерности са доста потребни при изпращане на цифрови данни по аналогови канали, които са податливи на звук и разстройства.

В схемата на Манчестър двоичните данни се кодират в два противоположни бита, като 0 се трансформира в 01, а 1 – в 10 (или противоположното, според от стандарта):

Нека се върнем към нашия разбор.

Като вършим ръчни проби и съпоставяме другите фотоси на сигнала, можем да забележим, че всяко натискане на бутон генерира сигнал със следните характерности:

Дълга серия (маркирана в жълто) без данни (декодирана в 100 нулеви байта). Три доста сходни серии – единствено 2 байта са отчасти изменени (подчертани в червено). Последна серия (подчертана в зелено), която е по-кратка, само че към момента доста сходна на предходните три серии.

Реших да прегледам по-отблизо тези три импулса (да ги назовем пакети) в средата, защото наподобява, че те са значима част от сигнала. В резултат на това бързо забелязах възходящ идентификатор (маркиран в синьо), който се усилва с 1 при всеки идващ сигнал:

За да продължим разбора, би трябвало да се срещнем с един доста значим механизъм за отбрана на отдалечения достъп.

Плаващият код

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

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

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

Пример за реализация на непрестанно изменящ се код е показан по-долу:

uid: идентификатор на транспортното средство и на автомобилния ключ; enck: осъществяване на логаритъма за плаващ код; ctr: брояч на автомобила; ctr’: брояч на ключодържателя.

Прозорецът за достъп разрешава на автомобилния ключ да остане синхронизиран в случаите, когато автомобилът не е получил сигнал (обикновено за най-много 255 натискания на бутоните отвън обсега, след което ключът би трябвало да бъде синхронизиран ръчно).

С това се оправихме. Време е да се върнем към разбора.

След като към този момент знаем, че плаващият код е криптографски предпазен, можем елементарно да определим частта от сигнала (маркирана в зелено), която е виновна за тази реализация (това ще бъде частта с най-висока ентропия):

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

Като съпоставих сигналите „ заключване “ и „ отключване “, съумях бързо да намеря байта (подчертан в розово), виновен за тази команда (8 = отключване, 4 = заключване):

Сега от „ изменящите се елементи “ на сигнала би трябвало единствено да разбираем двете червени промени, които отбелязахме по-рано:

1) Що се отнася до първата, можем да забележим, че едни и същи стойности се повтарят във всички прихванати сигнали.

Превръщайки тези три стойности в двоична форма, виждаме следното:

0x6: 0110 0xA: 1010 0xE: 1110

Интересно. Изглежда, че се основава нещо като следващ номер на пакетите.
Какво ще стане, в случай че проверим последния, четвърти пакет?

0x13: 10011

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

2) Сега дано разбираем последния байт.

Можете да видите, че той освен се трансформира за всеки пакет, само че и че това се случва във всички сигнали.

Хм, последният байт на пакета се трансформира случайно, дали не е контролна сума…?

Като тест можем да се опитаме да правим XOR сред този байт и този, който преди малко анализирахме, с цел да забележим дали ще получим статична стойност (защото в случай че разгледаме 3 пакета с плаващ код, всичко, с изключение на тези два байта, в действителност е статично).

Нека го проверим с два образеца:

Пример 1:

0x06 0xB9 = 0xBF 0x0A 0xB5 = 0xBF 0x0E 0xB1 = 0xBF

Пример 2:

0x06 0xCC = 0xCA 0x0A 0xC0 = 0xCA 0x0E 0xC4 = 0xCA

Бинго! Това несъмнено е контролна сума.

Като използван XOR към всички байтове на пакетите, виждаме, че цената постоянно се измества с 1:

От това можем да заключим, че първите два байта от пакета най-вероятно са изключени от контролната сума (откъдето идва единицата):

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

Забележка: ако се чудите за задачата на първата дълга серия, подчертана в жълто на фотосите, тя е да разсъни приемника и да го приготви за приемане на данните (тъй като той минава в режим на икономисване на сила, когато не работи). А в случай че се чудите и за какво автомобилният ключ изпраща три пакета с съвсем идентични данни, това е просто за повишение на надеждността, ако един от пакетите се повреди по време на предаването (което се следи на предходната снимка).

Крайният резултат

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

Чудесно! Току-що се справихме с реверсивното инженерство на сигнала от електронния ключ на автомобила.

Оригиналът провокира огромен интерес и доста мнения. Разбира се, това не е управление за хакване на електронните ключове на колите – някои неща са изменени, а други изпуснати. Освен това става дума за към този момент много остарели способи за безжично отключване на колите. Но показаните похвати и хрумвания несъмнено провокират интерес.

Източник: kaldata.com

СПОДЕЛИ СТАТИЯТА


Промоции

КОМЕНТАРИ
НАПИШИ КОМЕНТАР