Хакінг роутера - частина перша

Опубліковано 02.02.2025, 11:59 в категорії YouTube

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

"WR840N V2"

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

В першій частині ми поговоримо про одну з найбільших фізичних вразливостей роутера - UART шину.

UART

"UART шина"

UART або ж Universal Asynchronous Receiver-Transmitter - це простий послідовний протокол для передачі даних між двома пристроями. Ті хто працювали з мікроконтролерами, думаю точно знайомі з ним. UART шина зазвичай складається з 4х контактів - це 2 контакти живлення, - плюс живлення та земля, а також 2 контакти для передачі даних:

  • GND
  • VCC
  • Rx
  • Tx

Стосовно живлення - подавати живлення через VCC, тобто плюс живлення, це зазвичай погана ідея, краще просто заживити пристрій через його блок живлення, і хай він сам робить потрібні напруги, адже для його функціонування можуть бути потрібні й інші напруги - 1.8V, 3.3V, 5V, 12V, і тд.

А от землю підключати обов'язково, бо вона потрібна щоб була різниця потенціалів, і пристрої могли між собою спілкуватись.

Ще важливий параметр - це напруга логічного рівня. Зазвичай вона становить 5В, або 3.3В, і відповідно треба це враховувати, щоб не пошкодити або сам пристрій, або конвертер за допомогою якого ми будемо підключати пристрій до нашого комп'ютеру.

Стосовно ж підключення, для того щоб зв'язати між собою комп'ютер та UART шину, існують спеціальні конвертери, які ще через Arduino інколи називають програматорами. За запитом USB UART можна знайти безліч різних. Особисто я використовую ось такий конвертер на мікросхемі CH340.

"CH340"

Він ну дууже дешевий, але при цьому ще жодного разу мене не підводив, ще й вміє працювати як з 3.3V, так і з 5V.

Роутер

Спеціально для відео на YouTube, і для цих статтей, я купив собі аж за 250 гривень - піддослідний роутер.

"Піддослідний роутер"

Щось нагадує, правда?

"Близнюки"

Так, візуально, це повна копія мого поточного роутера, TP-Link WR850N, але по факту це роутер WR840N, ще й залочений під Київстар. Тобто якщо підключити цей роутер до якогось іншого провайдера - він не буде працювати. В останній частині цієї серії поставимо на нього прошивку OpenWrt. Це не тільки розширить його функціонал, а ще й змінить це обмеження.

"Розбираємо роутер"

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

Що всередині?

"Плата роутера"

Коли ми дістались плати, саме час поговорити, а що ж таке взагалі цей WiFi роутер. А це не що інше, як слабенький комп'ютер, на якому крутиться операційна система Linux! Так так, хоч і с певними обмеженнями, але це повноцінний одноплатний комп'ютер!

Тут вам і процесор, і оперативна пам'ять, і накопичувач, та і навіть GPIO порти є, до яких підключені світлодіоди. Про накопичувач, а саме SPI флешку, ми поговоримо в наступній частині, а зараз давайте пошукаємо UART шину.

"UART шина на роутері"

Ось вона. Але, контакти не підписані. Конкретно в даному випадку можна легко розрізнити їх навіть візуально - той, який таким як би плюсиком під'єднаний до великого полігону, це мінусовий пін, або ж GND. Той який під'єднаний до такої жирненької доріжки, це живлення, VCC. А відповідно інші 2, які тоненькими доріжками йдуть прямо в процесор, це і є лінія даних. Де Rx а де Tx можна визначити навмання.

"Піни UART шини"

Але, не завжди можна візуально це побачити. Тому давайте розкажу, як визначити контакти за допомогою мультиметру. Легше всього знайти землю - можна продзвонити її з роз'єму живлення. Зазвичай зовнішня сторона коннектора це мінус, тобто GND.

"Коннектор живлення роутера"

Переводимо мультиметр в режим продзвонювання, та шукаємо - ставимо один щуп на мінусовий контакт роз'єму живлення, а іншим торкаємось по черзі кожного з невідомих контактів. Коли щуп торкнеться землі, мультиметр задзвенить. Але він також короткочасно задзвенить і коли ми торкнемось VCC, бо в цей момент від мультиметра зарядиться конденсатор.

Тепер, знаючи де земля, в режимі вимірювання напруги, можна визначити й інші контакти, керуючись наступною логікою:

  • Там де напруга найбільш стабільна та близька до 3.3V, це плюс живлення, VCC
  • Там де напруга або відсутня, або має якесь нестандартне значення в діапазоні до 3.3В, це Rx.
  • Там де напруга трішки нестабільна (особливо в момент включення роутера), та знаходиться поблизу 2.6V, це Tx.

Підключаємось

Тепер, знаючи розпіновку, можна підключатись. Для зручності я підпаяв до роутера контактну гребінку, щоб можна було підключати дюпонт кабель. І дротами з'єднав конвертер та роутер, землю до землі, а Rx та Tx - хрест навхрест.

"Підключення" "TX - RX, RX - TX"

Після цього я підключив конвертер до комп'ютера, і тепер за допомогою якогось емулятору COM порту, можна з'єднатись з роутером. Але, є один нюанс який називається BaudRate, або ж швидкість передачі даних. Щоб нормально працювати з UART-ом, треба знати на якій швидкості він працює. Є певна кількість стандартних швидкостей, я виділив найбільш розповсюджені (але це наче не всі):

  • 300
  • 1200
  • 2400
  • 4800
  • 9600
  • 14400
  • 19200
  • 38400
  • 57600
  • 115200

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

Я буду використовувати програму picocom на Linux. Достатньо просто ввести цю команду:

picocom /dev/ttyUSB0 --baud 115200

/dev/ttyUSB0 це в даному випадку пристрій, наш конвертер, а 115200 після флагу --baud - це швидкість, BaudRate.

Подаємо живлення на роутер, і, ми повинні побачити логи запуску роутеру.

"Логи запуску"

Чудово. Вже на цьому етапі можна побачити доволі багато цікавої інформації. А після того як логи закінчаться, достатньо натиснути Enter і ми повинні отримати доступ до Root консолі роутера. І тут я був без перебільшення шокований! У всіх роутерів з якими я стикався до цього, або не було паролю, або він був дефолтний, як і на веб інтерфейс.

"Спроби залогінитись"

Тут же стоїть якийсь логін та пароль, який не співпадає з з логіном та паролем від веб інтерфейсу. Я перепробував стандартні комбінації типу там admin, root, kyivstar, і тд, і нічого не підійшло. Щож, за це Київстару прям похвала від мене, бо мені є з чим порівняти.

"Netis MW5230"

Якщо взяти наприклад Netis MW5230, попередній мій роутер, тут Root Shell не захищений паролем - під'єднуйся, і роби шо хочеш. Ба більше, пароль від вебінтерфейсу, який повинен бути останнім рубежем захисту, коли в зловмисника є фізичний доступ до пристрою, лежить в незашифрованому вигляді за ось цим шляхом: /etc/passwd

"Пароль від Netis"

Хоча його можна навіть не шукати, бо при невдалій спробі залогінитись в вебінтерфейсі, роутер по UART покаже правильний пароль. В мене слів нема. Просто браво, Netis.

"Підказка для пароля :))))"

Ну а повертаючись до роутеру від Київстар, я дізнався який там пароль - sohoadmin. Детальніше про це буде в наступній частині. Все ж таки мабуть перехвалив я Київстар, пароль виявився доволі стандартним, але тим не менш, особисто я його бачу вперше, та і не часто він зустрічається в вордлістах. Та і все одно, це краще ніж нічого, як в Netis.

Що тепер?

Тож тепер ми маємо доступ до Root оболонки роутера, і що з ним можна зробити, обмежується лише вашою фантазією. Наприклад таким чином зловмисник може завантажити в тимчасову пам'ять роутера якийсь бінарник, який надасть йому віддалений доступ до роутера. Наприклад netcat, або ssh, telnet, і так далі.

Хтось вдало зауважить, раз пам'ять тимчасова, то цей віддалений доступ буде працювати лише до перезапуску роутеру, і, ви будете праві. Але конкретно в цьому випадку, на роутері є dropbear, ssh сервер. Я це дізнався, подивившись активні процеси на роутері:

ps a

"Dropbear на роутері"

За вказаним шляхом є файлик, в якому лежить логін та пароль від ssh. Пароль в даному випадку лежить у вигляді md5 хешу, він такий ж як і логин - kyivstar. Особисто в мене не вийшло приєднатись по ssh до цього роутеру, але я сильно і не намагався, бо воно мені не треба.

А якщо ж в роутера нема ніякого ssh серверу, уявіть що щоб обійти проблеми з тимчасовою пам'яттю, зловмисник додає до роутеру мікроконтролер, який вмикається разом з роутером, чекає поки буде доступ до інтернету, і вже після цього по UART керує роутером - наприклад завантажує необхідний файл, відкриває віддалений доступ, і сповіщає про це зловмисника.

"Мікроконтролер зловмисника"

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

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

Більш того, хоч в статті і йде мова про роутер, але насправді все це актуально і для багатьох інших пристроїв, бо UART це доволі популярний метод для того щоб забезпечити пристрій додатковим інтерфейсом для керування або відладки.

А на цьому в мене все. В наступній частині поговоримо про те, як здампити з роутера прошивку, розкласти її на складові, та подивитись що там є.

Post Scriptum

Це текстова версія мого відео. Можете переглянути його за посиланням.