Конференція DEFCON 27. Твій автомобіль – мій автомобіль. Частина 2

Конференція DEFCON 27. Твій автомобіль – мій автомобіль. Частина 1

Наприкінці відео ви почули клацання – це спрацювало розблокування механічного замку рульового колеса, яке ми не можемо обійти за допомогою електроніки. Потрібно використати щось механічне, зламати циліндр замка вручну або зробити щось подібне, чого я не збирався робити з її машиною. Всі прошивки, продемонстровані в цих відео, будуть доступні на GitHub після мого виступу, так що ви просто заходите на адресу, вказану на слайді, і завантажуєте файл OpenRemoteStart.

Давайте поговоримо про те, що саме відбувається, коли ми додаємо інтернет до цієї системи, тому що це має піти на користь, чи не так? Як я вже сказав, я отримав модуль дистанційного керування сигналізацією під назвою MyCar. Він випускається у різних модифікаціях, у мене була модель Linkr LT-1.

Конференція DEFCON 27. Твій автомобіль – мій автомобіль. Частина 2

MyCar – лише бренд, і такі модулі продаються під назвами Linkr LT-1, MyCar KIA, Visions MyCar, Carlink (CL6) і т.д. Як виявилося, якийсь час дилерські центри KIA в Канаді встановлювали на автомобілі цю систему або принаймні додаток під назвою MyCar KIA. Цікаво, що ця програма більше не доступна для завантаження в AppStore. Я також хочу відзначити, що зупинив свій вибір на продукції Fortin та MyCar, але згідно з відгуками користувачів на тематичних форумах позаштатної автосигналізації, інші системи поводяться не краще та мають аналогічні проблеми.

У мене постало важливе питання: чому на вторинному ринку автомобільної сигналізації продається продукт із проблемами безпеки, і це нікого не хвилює? Тому якщо когось із вас зацікавлять системи дистанційного стартера, зверніть увагу на кілька важливих обставин. По-перше, як я згадував раніше, якщо система ДС неправильно встановлена ​​на автомобіль з механічною трансмісією, цілком можливо, що після дистанційного запуску двигуна автомобіль просто поїде без водія, якщо в коробці включена якась передача. Це справді небезпечно. Друга небезпека полягає в тому, що якщо хтось запаркував автомобіль у прибудованому до будинку гаражі і в нього випадково дистанційно ввімкнувся двигун, можна задихнутися від чадного газу, що накопичився. Так що якщо у вас є система ДС і вбудований гараж, ви напевно повинні мати детектори чадного газу.

Якщо ви використовуєте ДС системи, ніколи не намагайтеся запустити двигун машини, не знаючи точно, де вона знаходиться, тому що наслідки можуть бути катастрофічними.

Пристрій MyCar, маленька чорна коробочка з двома проводками, що виходять з неї, має 8 портів, два з яких призначені для інтерфейсу відладчика. Підключення до цього інтерфейсу показало, що пристрій працює під керуванням Linux, про що виробник замовчує. Потрапити в оболонку прошивки елементарно за допомогою пароля oelinux 123, але ви можете і без входу використовувати АЕ Engine, який дозволяє вводити AT-команди з командного рядка, в тому числі команду змінити IP-адресу пристрою, з яким зв'язується даний модуль.

Конференція DEFCON 27. Твій автомобіль – мій автомобіль. Частина 2

Якщо ми подивимося на рядки внизу, можна побачити IP-адресу сервера, з якого модуль MyCar отримує оновлення прошивки. Пристрій має L-порт, який дозволяє «прослуховувати» команди, що отримуються модулем. Використовуючи АЕ Engine і змінюючи IP парного пристрою, я зміг визначити, що цей пристрій спілкується з ДС за незашифрованим протоколом UDP.

Я не особливо в це вникав, але гадаю, що це досить значний і цікавий факт. Якщо вас цікавить додаткова інформація про цей пристрій, погляньте на цей слайд – тут вказано напругу живлення 3,3В, швидкість передачі даних 115200 бод, адресу сервера для оновлення прошивки, root-пароль та посилання на посібник користувача.

Конференція DEFCON 27. Твій автомобіль – мій автомобіль. Частина 2

Пристрій може «терпимо» ставитися і до вищої напруги живлення.

Як я вже сказав, у нас досить холодно. Приблизно через місяць після того, як я подарував цю систему своїй подрузі, я вирішив витягнути блок із машини та попрацювати з ним як слід. Справа в тому, що весь цей місяць я гнав від себе думки про вразливість цього пристрою. Наступного тижня обіцяли мороз до -30F°, тож мені довелося поспішати. Я приєднався до оболонки і змусив її працювати, але оскільки стільниковий зв'язок у моїй домашній лабораторії не надто хороший, я вирішив попрацювати з блоком на іншому комп'ютері. Пристрій FTDI, який я використовую, має короткий шнур, тому я знайшов інший, більшої довжини, під'єднав його до блоку ДС, підключив до комп'ютера, і як тільки увімкнув живлення, мій модуль задимив!

З цього можна отримати такий урок: якщо ви займаєтеся апаратним зломом, майте напоготові запасний блок! Моя дівчина сформулювала мораль цієї історії так: якщо твоя друга половинка – хакер, не дозволяй йому грати з твоїми різдвяними подарунками! А тепер давайте подивимося на програмне забезпечення, гадаю, тут нічого диміти не стане.

Конференція DEFCON 27. Твій автомобіль – мій автомобіль. Частина 2

Я запустив проксі-сервер типу "людина посередині", відключив перевірку SSL на своєму телефоні і став дивитися, який трафік надсилається додатком на серверну частину. При реєстрації я помітив, що система бере мою адресу електронної пошти і надсилає її веб-сервісу, щоб переконатися, що ця адреса прив'язана до існуючого облікового запису. Цікаво, що система використовувала базову автентифікацію, тому що я ще не створив обліковий запис. Я не знав, що робити з цією інформацією, тому просто записав її в блокнот і рушив далі. Я створив свій обліковий запис і увійшов до системи, а перше, що робить програму під час авторизації – це викликає веб-сервіс для перевірки поточного користувача. Тому я просто викликав цей веб-сервер за допомогою облікових даних, які я бачив раніше, і які були використані для перевірки того, чи існує моя адреса електронної пошти, і у відповідь отримав доступ Mycar Admin.

Конференція DEFCON 27. Твій автомобіль – мій автомобіль. Частина 2

Я сумнівався, що це був обліковий запис справжнього адміністратора системи, тому що, незважаючи на гучне звучання, він мав низькі привілеї. Зрештою, ми всі знаємо таких людей.

Тому я створюю ще один запит - команду EngineStart, щоб завести з цього облікового запису машину, натискаю "Send", отримую у відповідь статус команди - "200 ОК", і приблизно через три секунди моя машина рушає з місця.

Конференція DEFCON 27. Твій автомобіль – мій автомобіль. Частина 2

Як виявилося, обліковий запис Mycar Admin дійсно був обліковим записом адміністратора, жорстко закодованим в мобільний додаток. Але це ще не все. На одному з попередніх слайдів ви бачили таку штуку як API key. Знову ж таки з моніторингу трафіку мого фальшивого проксі-сервера я дізнався, що ці ключі API можна використовувати замість імені користувача та пароля. Якщо використовувати як ім'я користувача «API» та один із цих ключів, ви можете автентифікувати користувача.

Конференція DEFCON 27. Твій автомобіль – мій автомобіль. Частина 2

Тому я скопіював вміст рядка “APIKey”, вставив його в рядок Password POST і натиснув кнопку «Send».

Конференція DEFCON 27. Твій автомобіль – мій автомобіль. Частина 2

Однак, це не спрацювало, і я протягом довгих 5 хвилин не міг зрозуміти, чому. Нарешті, до мене дійшло, що я забув вирізати лапки і кому в скопійованому ключі API, про що мені і було повідомлено: «Ви зробили помилку в синтаксисі SQL». Мені стало ясно, що можна просто використовувати базову SQL-ін'єкцію для обходу всього процесу входу в систему і стати адміністратором або будь-яким користувачем, яким захочете. Не думаю, що хтось намагався викрасти автомобіль за допомогою SQL-ін'єкції, тож давайте спробуємо це зробити.

Конференція DEFCON 27. Твій автомобіль – мій автомобіль. Частина 2

Конференція DEFCON 27. Твій автомобіль – мій автомобіль. Частина 2

Загалом я зайшов під своїм обліковим записом, натиснув «Send» і отримав у відповідь статус «200 ОК». На цей раз я зрозумів записати відео. Воно трохи темне, бо я знімав пізно увечері з вікна мого офісу. Отже, я вводжу команду, і ви бачите через вікно, що внизу у дворі машини спалахують фари. Спочатку їхнє світло слабке, але потім фари починають світити на повну потужність – це ввімкнувся двигун. Отже, я завів автомобіль за допомогою SQL-ін'єкції (аплодисменти аудиторії).

Але це ще не все. SQL-ін'єкцію можна використовувати не тільки для авторизації, але й для заміни інших параметрів, таких як URL, параметри тіла рядка запиту і т.д. Фактично ця система скрізь використовує SQL-ін'єкції. Дивлячись на повідомлення про помилки можна побачити, що те, що ми вводимо як пароль, порівнюється безпосередньо зі стовпцем password в базі даних.

Конференція DEFCON 27. Твій автомобіль – мій автомобіль. Частина 2

Це означає, що вони використовують прості текстові паролі в SQL-инъекции. Як то кажуть, «це зовсім не добре, а навіть дуже погано!». Але вистачить про SQL, давайте подивимося, що можна зробити, щоб дистанційно завести автомобіль. Ви просто відправляєте команду «EngineStart» і у відповідь отримуєте цілісний ідентифікатор, що є ідентифікатором цієї команди, в даному випадку це ID = 3. Знаючи ідентифікатор, можна «витягнути» службу, яка повідомить статус цієї команди.

Конференція DEFCON 27. Твій автомобіль – мій автомобіль. Частина 2

Таким чином, збільшуючи або зменшуючи значення ID, я «витягую» статус будь-якої команди, яка будь-коли була відправлена ​​в цій системі.

Конференція DEFCON 27. Твій автомобіль – мій автомобіль. Частина 2

Однак у цьому немає нічого особливо цікавого, і я замислююсь, чи немає тут прямої вказівки на об'єкт, який я можу використати, щоб завести свою машину. Тому я запустив команду «EngineStart» від імені законного користувача з мого облікового запису, а потім спробував викликати її через обліковий запис іншого користувача, який не повинен мати доступу до системи. У відповідь я отримав повідомлення про помилку: «Цей обліковий запис знаходиться поза контекстом ієрархії». Тож, можливо, цей спосіб злому не спрацює. Однак якщо ви подивитеся на цей API, то побачите, що він дублює інформацію - адресу електронної пошти користувача можна порівняти з ID його облікового запису.

Конференція DEFCON 27. Твій автомобіль – мій автомобіль. Частина 2

Якщо ви розробляєте API або зламуєте API, подібне дублювання інформації, яке ми бачимо в цій URL-адресі, може стати джерелом помилок. У цьому випадку баги API можуть проявити себе чотирма різними способами.

Конференція DEFCON 27. Твій автомобіль – мій автомобіль. Частина 2

Якщо розглянути випадки 2 та 3, обведені червоною рамкою, можна побачити прямі посилання на об'єкт. В обох випадках система не перевіряє, чи ви уповноважені виконувати цю команду. Я спробував випадок 2 і він не спрацював, а як щодо випадку 3? Тут ми просто повинні замінити ідентифікатор облікового запису USER_EMAIL в URL-адресі, оскільки він безпосередньо пов'язаний з ідентифікатором облікового запису ACCOUNT_ID. Раніше ми використовували ідентифікатор облікового запису жертви, а тепер використовуємо обліковий запис зловмисника. Тому я використовував ідентифікатор облікового запису хакера та ідентифікатор пристрою жертви, відправив команду та очікувано отримав статус команди «200 ОК» та отримав контроль над програмою MyCar.
Таким чином, за допомогою трьох різних векторів атаки ми змогли зробити все те, що може зробити законний користувач програми. Це означає, що можна знайти в місті будь-яку машину, задати в додатку її марку та модель, а потім дистанційно розблокувати автомобіль та завести його. Ми можемо вимкнути або включити сигналізацію, внести зміни до сервісного меню автомобіля та перевірити статус будь-якої команди. І все це можна зробити трьома різними способами.

Конференція DEFCON 27. Твій автомобіль – мій автомобіль. Частина 2

Вочевидь, що розробники MyCar спробували якимось чином пофіксувати баги системи. Так, у випадку з жорстко закодованими паролями, вони просто поставили зворотний проксі-сервер перед додатком, щоб приховати облікові дані, які використовуються для авторизації. Проблема в тому, що зворотні проксі не магія і не здатні виправити всі проблеми. Вони зберегли SQL-ін'єкцію в сторонній службі, тому навіть без пароля я все одно можу використовувати її через процедуру перевірки користувача.

Конференція DEFCON 27. Твій автомобіль – мій автомобіль. Частина 2

Я вирішив уважніше розглянути структуру URL. Можливо, ви помітили, що всі адреси, що використовуються системою, містять m2m. Вирішивши, що це тип внутрішньої взаємодії для механізму авторизації в додатку MyCar, я ввів ці літери в Google і виявив сайт M2M Suite. Єдине, що вам залишається зробити, побачивши цю форму - це вставити туди пару одиночних лапок і подивитися, що станеться. А станеться те, що ви отримаєте необхідну SQL-ін'єкцію (аплодисменти аудиторії).

Конференція DEFCON 27. Твій автомобіль – мій автомобіль. Частина 2

Конференція DEFCON 27. Твій автомобіль – мій автомобіль. Частина 2

І це відбувається за кілька місяців після того, як розробники повідомили про виникнення проблеми з SQL-ін'єкцією. Якщо у додатку є подібні проблеми, їх необхідно виправити якнайшвидше, але, як бачите, розробники нічого не зробили. Таке байдуже ставлення до користувачів я вважаю образливим.

Модуль MyCar має блок GPS, так що може відстежувати місцезнаходження вашого автомобіля та відображати його у додатку. Але, як з'ясувалося, вони зберігають не лише місце розташування автомобілів. Вони зберігають дуже багато інформації, набагато більше, ніж потрібно для того, щоб відстежувати поточне місцезнаходження машини. У моєму випадку за 13 днів використання програми вони накопичили трохи менше двох тисяч точок геолокації місць, де побував мій автомобіль. У політиці конфіденційності компанії-розробника MyCar про такий збір інформації не йдеться ні слова.

Однак далі стає ще гіршим. Ви можете заперечити, що це лише побічний ефект реалізації служби геолокації. Але справа в тому, що замість простого створення списку місць, в яких буває ваш автомобіль, вони використовують ще один API, що аналізує ці дані та визначає місця, в яких ваша машина буває найчастіше. Знову ж таки, наскільки мені відомо, у політиці конфіденційності немає жодного натяку на подібну функцію. Можливо, це не так дивно, тому що після купи пошуків я знайшов материнську компанію MyCar під назвою Procon Analytics, зайшов на їхній сайт і відвідав розділ FAQ. Тут я натрапив на запитання: «Як ви забезпечуєте безпеку даних?». Відповідь компанії була такою: «На відміну від загальнодоступних хмарних середовищ, які борються за пріоритет у сфері зберігання даних, Procon Analytics використовує власну віртуальну хмару, яка використовується виключно для користувачів нашої програми та захищена від втручання інших користувачів. Це особливе хмарне середовище з високим ступенем захисту, яке забезпечує легку доступність та швидкість доставки послуг. Співпрацюючи з Procon Analytics, ви можете бути впевнені, що ваші дані надійно захищені. Навіть не знаю, що на це сказати.

Конференція DEFCON 27. Твій автомобіль – мій автомобіль. Частина 2

Якщо зайти на їхню сторінку на Facebook, можна дізнатися ще більше цікавого. Тут вони прямо так і пишуть: «Захист відомостей про ваш транспортний засіб життєво важливий!». Що ж, мені залишається лише погодитись з подібним висловом.

Отже, повернемося до питання, з якого я почав: "Як таке відбувається і як цього можна уникнути"? І що важливіше, яким чином ми, як спільнота, можемо запобігти такому?

На цьому моя доповідь закінчена, але я ще зможу відповісти на кілька запитань (аплодисменти аудиторії).

Ви питаєте, чи вони всі виправили? На даний момент я думаю, що вони пофіксували всі баги, про які я їм повідомив, за винятком недоліків політики конфіденційності, про які я згадав наприкінці виступу. Востаннє, коли я перевіряв її, все було без змін. На запитання, чи можу я редагувати подібним чином параметри електронного блоку керування двигуном автомобіля ECU, відповім, що моє завдання було редагування параметрів автомобіля тільки в додатку MyCar. У ньому зберігається цифрове уявлення автомобіля, яке редагується за допомогою прямого звернення до об'єкта, SQL-ін'єкції або іншого вектора атаки.

Останнє питання звучить так: чи є у мене в автомобілі безключова система запуску двигуна кнопкою «Start» і як у цьому випадку справа з блокуванням рульового колеса? Відповім, що MyCar має таку кнопку, тому ця система не має блокування керма. Я підозрюю, що якщо ви встановите цю систему, то ви точно не зможете покладатися на замок, що блокує рульове колесо.

Небагато реклами 🙂

Дякую, що залишаєтеся з нами. Вам подобаються наші статті? Бажаєте бачити більше цікавих матеріалів? Підтримайте нас, оформивши замовлення або порекомендувавши знайомим, хмарні VPS для розробників від $4.99, унікальний аналог entry-level серверів, який був винайдений нами для Вас: Вся правда про VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps від $19 чи як правильно ділити сервер? (Доступні варіанти з RAID1 і RAID10, до 24 ядер і до 40GB DDR4).

Dell R730xd вдвічі дешевше в дата-центрі Equinix Tier IV в Амстердамі? Тільки в нас 2 х Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 ТБ від $199 у Нідерландах! Dell R420 – 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB – від $99! Читайте про те Як побудувати інфраструктуру корп. класу із застосуванням серверів Dell R730xd Е5-2650 v4 вартістю 9000 євро за копійки?

Джерело: habr.com

Додати коментар або відгук