Akuvox – interkom a dveřní zvonek (IoT případová studie)

Přinášíme vám další díl ze seriálu o bezpečnosti běžně dostupných IoT zařízení. Tentokrát se podíváme mimo jiné na chytrý dveřní zvonek – může vás útočník sledovat prostřednictvím jeho kamery? Otevře zvonek vchodové dveře i bez znalosti PINu? Zařízení jsme otestovali doslova „skrz naskrz“. Čtěte dále.

Testovaná zařízení byla na trh uvedena v roce 2018 a ve svém oboru stále patří mezi high-end. Jedná se o zvonek Akuvox R29F Android Smart Video Intercom s FaceID (vlevo) a Akuvox IT83 Smart Android Indoor Monitor (vpravo).

1+2.png

Běží na nich operační systém Android, a kromě hardwarové výbavy a účelu použití se softwarově moc neliší. Všechny bezpečnostní nálezy sdílejí, jako by od sebe zařízení kopírovala.

Fyzické zabezpečení

Na každém IoT zařízení je základem najít servisní port – nejčastěji se dnes jedná o UART rozhraní – který zprostředkovává přístup do konzole proprietárního Linux based systému. Protože naše zařízení obsahovala OS Android, dalo se očekávat, že přístup do konzole bude přes ADB rozhraní pomocí USB portu. Obě zařízení jsme tedy rozebrali a hledaný microUSB konektor na sebe nenechal dlouho čekat.

usb.jpg

Je konektor funkční? Disponuje systém ochranou proti neautorizovanému přístupu?

Konektor byl více než funkční; po připojení jsme ihned zjistili, že systém má zapnutý ADB debugging pro USB a nabídl důvěru našemu hacking notebooku:

debugging.jpg

Taktéž příkazová řádka umožňuje povýšit privilegia na uživatele root:

root_shell.png

Co z toho plyne? Zařízení jsou již od výroby rootnutá (odemčená) a kdokoli se ke konzolovému konektoru připojí, získá kompletní vládu nad operačním systémem. Velice nebezpečná konfigurace. Vzhledem k tomu, že zařízení Akuvox R29F má chránit rovněž vstupní dveře do zabezpečeného objektu, nemusíme vysvětlovat, že vyvrtáním malé dírky a připojením USB kabelu si nezvaný host může dveře otevřít, ale o tom později.

Operační systém

Jak jsme zmiňovali, na zařízeních běží operační systém Android. V případě Akuvox IT83 byl ve verzi 6.0.1 a v zařízení Akuvox R29F ve verzi 5.1.1, která již v době uvedení zvonku na trh byla téměř čtyři roky stará. Na stránkách výrobce jsou stále k dispozici ke stažení nové verze firmware, ukázalo se však, že i po aktualizaci na nejnovější verze zůstala verze Androidu stále stejná.

Pokud má na Androidu útočník k dispozici debug rozhraní, může se dostat k částem systému, které pro běžného uživatele nejsou přístupné. Například nastavení systému je možné vyvolat spuštěním aktivity v aplikaci Settings:

am start -a android.settings.SETTINGS

settings.jpg

U debuggingu chvíli zůstaneme. Každé Android zařízení má tzv. logcat konzoli, do které systém a aplikace vypisují info/debug/warning/error informace. Jedná se o obdobu syslogu na Linuxu. V této konzoli se mohou (ale nemusí a neměly by) vyskytovat různé informace užitečné pro potenciálního útočníka.

V zařízeních jsme při testech měli následující nastavení: PIN pro odemčení dveří je 33334444 a PIN po odemčení nastavení zařízení je 3888. V logcatu se při zadání PINu zobrazovaly následující informace:

01-07 14:32:00.120: E/BluetoothAvrcpController(834): at android.bluetooth.BluetoothAvrcpController$1.onBluetoothStateChange(BluetoothAvrcpController.java:80)
01-07 14:32:07.544: E/BluetoothAvrcpController(834): at android.bluetooth.BluetoothAvrcpController$1.onBluetoothStateChange(BluetoothAvrcpController.java:80)
01-07 14:35:01.804: E/isDoorphoneUserSettingKey(1103): Controller.java: isDoorphoneUserSettingKey(1922): [3338][3888]
01-07 14:35:07.974: E/isDoorphoneUserSettingKey(1103): Controller.java: isDoorphoneUserSettingKey(1922): [3338][3888]
01-07 14:35:12.224: E/isDoorphoneUserSettingKey(1103): Controller.java: isDoorphoneUserSettingKey(1922): [3888][3888]
01-07 14:53:02.975: E/isDoorphonePublicKey(1103): Controller.java: isDoorphonePublicKey(1909): [33334444][33334444]
01-07 14:54:20.029: E/isDoorphonePublicKey(1103): Controller.java: isDoorphonePublicKey(1909): [22222222][33334444][1]
01-07 14:55:31.640: E/isDoorphonePublicKey(1103): Controller.java: isDoorphonePublicKey(1909): [28888888][33334444][1]
01-07 14:55:38.855: E/isDoorphonePublicKey(1103): Controller.java: isDoorphonePublicKey(1909): [33334444][33334444][1]
01-07 14:57:56.680: E/isDoorphoneUserSettingKey(1103): Controller.java: isDoorphoneUserSettingKey(1922): [3888][3888]

Systém nejen loguje, jaké PINy uživatel pro odemčení zadává, ale zároveň i vypisuje, které jsou správné! Příklad: útočník zadá špatný PIN 22222222 a v konzoli se objeví informace: „zadáno je 22222222, ale správně je 33334444“. S tímto chováním jsme se (díkybohu) za celé roky testováni IoT zařízení nesetkali a považujeme ho za naprosto alarmující.

U hesel a PIN kódů ještě chvíli zůstaneme. Ty jsou totiž uloženy v konfiguračních souborech v adresářové struktuře na flash paměti. Nachází se i zde nějaký prohřešek? Ano, hned dva.

Zaprvé: některé PINy (například právě ten do nastavení nebo pro otevření dveří) jsou uloženy v cleartextové, nezašifrované formě.

...
[ PASSWORD ]
ProjectKey=9999
UserSettingKey=3888
SystemSettingKey=9999
PublicKey=33334444

PublicKeyEnable=1

[ MOTION_DETECT ]
ImageCapture=0
ImageCaptureShow=1
MotionDectect=0
Interval=10
SendType=0
DetectDelay=60
CaptureDelay=10
DetectAccuracy=20
FtpServer=test.ftp.com
FtpPort=21
FtpUser=root
FtpPwd=QYeEnIlewrY/j3F8XJphaJsykAjE8bM3LcVQlQihQcOEkqH1MzNBQ0GGaLM3
...

Hesla, jako například pro SMTP (odesílání notifikačních mailů) nebo do FTP úložiště jsou správně zašifrována.

Zadruhé: práva na soubory v rámci filesystemu jsou nastavena na 777 (rwx) pro všechny uživatele. To znamená, že se lze jednoduše dostat ke konfiguračním souborům, číst z nich hesla a měnit je, a to i tehdy, pokud by zařízení nebyla rootnutá. Výrobce si tady velice zjednodušil práci při vývoji, avšak na úkor bezpečnosti.

dir_structure.png

Poslední zmínka na nedostatečné zabezpečení v rámci operačního systému je opět o heslech, různých kódech i PINech. V rámci veškerých přihlašovacích dialogů pro zadání hesla či PINu (včetně webové administrace) nedochází ke kontrole na útok hrubou silou. Útočník má tedy neomezený počet pokusů na uhádnutí těchto hesel a co víc, při nastavování nedochází ani ke kontrole jejich složitosti.

Síťové služby

Komunikace zařízení s okolním světem je další oblast, na kterou je nutno se při testech IoT zaměřit. Zde se jedná o drátovou komunikaci na LAN síti (zařízení nepodporují WiFi). Pravděpodobnost odcizení přihlašovacích údajů existuje (webová administrace je přístupná nešifrovaně, připojení na FTP a SMTP není šifrované…), ale je velmi malá, protože by se útočník musel dostat na síť jako Man in the middle.

Za zvláštní zmínku stojí zabezpečení live streamu z kamery. Toto platí pouze pro zvonek Akuvox R29F. Jeho stream je implementovaný pomocí tzv. ONVIF rozhraní, což je dnes již standard všech moderních IoT kamer. ONVIF rozhraní pak zprostředkuje stream obrazu z kamery.

ONVIF rozhraní jsme měli přístupné na této URL: http://IP_ADDRESS:8090/onvif/device_service a bylo chráněno jménem a heslem. Nicméně ke kameře bylo v tomto případě možné přistoupit i přímo, obejít tak ONVIF autentizaci a otevřít RTSP stream přímo na adrese rtsp://IP_ADDRESS/live/ch00_0. Samotný RTSP stream už autentizací chráněn nebyl. Pokud bádáte nad tím, jak přesnou URL RTSP streamu zjistit, tak vězte, že ho jde prostě uhodnout, protože většina kamer stejných výrobců ho má podobný. URL lze pro různé výrobce rovněž zjistit například zde: https://www.ispyconnect.com/man.aspx?n=H.264

onvif.png

Webové rozhraní

Pomineme-li, že administrace obou zařízení nevyžadují pro přístup šifrovaný TLS kanál, tak bohužel také trpí nejvážnějšími zranitelnostmi, které ve webových aplikacích existují.

Najdeme tak zde například:

  • Remote Code Execution, které vzdálenému útočníkovi umožní spouštět systémové příkazy stejně jako v ADB konzoli.

POST /fcgi/do?id=4&id=3 HTTP/1.1
Host: 10.12.0.191
Cookie: RebootUserName=admin; SessionId=99856
...
Connection: close

SubmitData=begin%26cDeleteFile%3D0.wav';ping –c 1 10.50.42.24;'%26Operation%3DDelete%26SubmitData%3Dend

  • Autentizační bypass – stačí načíst stránku http://IP_ADDRESS//fcgi/do?id=6&id=2&Operation=GetDivContent&DivName=divUpgradeStatus a v odpovědi serveru se vrátí validní administrátorské Session ID.

HTTP/1.1 200 OK
Content-Type: text/html
Connection: close
Date: Fri, 24 Jan 2020 09:45:07 GMT
Server: lighttpd/1.4.30
Content-Length: 200

<form name='hiddenValForm_Div'>
<input id=hcAutoPFaildReason_Div type=hidden value='2;'>
<input id=hcAutoPStatus_Div type=hidden value='1'>
<input id=hcSessionIdNow type=hidden value='44782'>
</form>

Všimněme si, že Session ID má pouze pět numerických znaků, k uhodnutí jakéhokoliv validního stačí tedy zaslat na server pár tisíc požadavků a je možné ho zjistit i bez daného bypassu.

  • Cross Site Scripting – kdy formulářové pole „Web Title“ na adrese http://IP_ADDRESS/fcgi/do?id=889 nekontroluje vstup na přítomnost javascriptového kódu.

Závěr

Náš verdikt je v tomto případě neúprosný – obě zařízení jsou ve velice špatném stavu zabezpečení a uživatelé by se jim měli vyhnout obloukem. Nejsou chráněna uživatelská data, provozované služby ani systém samotný.

Opakujme tedy to, co již několikrát zaznělo. Jedná se o zařízení připojená do sítě, v horších případech k internetu. Svěřujeme jim naše data, chráníme s nimi náš majetek. Výrobci musí zejména v dnešní době na zabezpečení svých zařízení brát veliký zřetel, dbát na jejich kvalitu, a ne se pouze snažit o vývoj co nejlevnějších zařízení, které jim přinese největší marži z prodeje.