It can be difficult for a security nerd to inherently trust cloud vendors and products that do not keep all data on-premises—especially when it comes to home security/automation IoT devices such as cameras since they can record sensitive data. One such product with excellent reviews, ample capability, and a very reasonable price is the ever-popular Wyze Camera. So, I snatched up a Wyze Cam v2 triple pack that went on-sale, but became concerned after reading reviews and even Reddit threads found here (https://www.reddit.com/r/wyzecam/comments/beq0sk/do_you_trust_wyze/) and here (https://www.reddit.com/r/wyzecam/comments/7cykgf/wyzecam_sending_data_to_servers_other_than_aws/) mentioning the data is possibly going to China. Note: while no country is perfect, not all countries condone state-sponsored corporate espionage and mass general population data collection. Just sayin...
One positive note at the time was that it seemed that the manufacturer was chiming in on the Reddit threads explaining that they attempted a fix and that they needed someone to test again. So, in order to test the validity of the reviews and to help answer WyzeTao in the second article: “We are asking help from some Reddit forum helpers to help check.”, we needed to set up our own environment. This blog series outlines both the setup involved and then the results.
Since this is a two part series and we want readers to benefit from the latest security enhancements, we are providing a spoiler in the first article. Our camera arrived with firmware version 126.96.36.199 (Release date: October 22, 2018) and we upgraded to the latest version at the time of: 188.8.131.52 (Release date: December 17, 2018). We found that the other reviewers were correct in that the data was going to China (and other countries) due to a content delivery network that Wyze uses—however, after working with the very responsive manufacturer to test and retest, Wyze corrected the issue for everyone. So a huge thanks goes to Tao And Martin at Wyze for listening to customer concerns and their great handling of responsible disclosures. Now, please update your mobile app and camera to the latest versions (or newer) found below :-)
Mobile app: V2.4.24 (release date: July 9th, 2019)
Wyze Cam v2 Firmware V184.108.40.206 (Release date: July 8, 2019) <-- Update your camera firmware too!
|Figure 1: The ever-popular (and pretty awesome) Wyze Cam 1080p HD Indoor Wireless Smart Home Camera|
Test EnvironmentThe hardware and software in our environment is a mixture of what we had on hand and what was required to compensate for lack of existing features. Also keep in mind that there are quite a few ways to test these devices, however we are presenting just one of the solutions here.
- Wyze Cam v2
- eero Pro WiFi System (Set of 3 eero Pros) – 2nd Generation
- GL-iNet AR750s
- Standard laptop
- USB Ethernet adapter
- Windows 10 base OS
- Kali Linux OS running in VMWare Workstation with USB ethernet adapter connected as pass through
Quick Note on Limitations of Mesh Routers (Including the Eero Pro WiFi System)One potentially tricky scenario in monitoring wireless traffic on a mesh network is determining the AP to which the device connects and keeping it on that AP. To avoid that issue, ideally it should be simple to monitor the last hop AP that connects to the source of Internet (cable modem in our case), but this is not always a provided feature. It certainly isn’t a feature in the Eero Pro. Don’t get us wrong, the Eero hardware and reliability makes it one of the best mesh setups around, but the lack of advanced features is depressing—especially for the price tag (~$500) (https://www.amazon.com/eero-Home-WiFi-System-Beacon/dp/B071DWXLYL/). Maybe things will change after the semi-recent Amazon acquisition (https://www.theverge.com/2019/2/11/18220960/amazon-eero-acquisition-announced). Fingers crossed!
|Figure 2: Typical Mesh network diagram (courtesy of Eero)|
Work Around to Sniff Wireless TrafficSince the Eero woefully lacks a way to route the traffic to a SPAN port, we purchased a GL.iNet GL-AR750S-Ext Gigabit Travel AC Router (https://www.amazon.com/GL-iNet-GL-AR750S-Ext-pre-Installed-Cloudflare-Included/dp/B07GBXMBQF) to do so. The impressive stats on this compact device are as follows:
- Dual band AC750 Wi-Fi: 433Mbps(5G) +300Mbps(2.4G)
- QCA9563,@775MHz SoC
- 128MB RAM, 16MB NOR Flash and 128 MB NAND Flash
- Up to 128GB MicroSD slot
- USB 2.0 port
- Three ethernet ports (1 WAN, 2 LANs)
- Powered by Micro USB 5V/2A power supply
- And best of all: OpenWrt pre-installed
Configuration and SetupNow that we know the hardware, let’s jump into it.
1) Cable Modem --> Wireless router --> Wireless Mesh receiver --> Hardwire to WAN port of AR750s
2) AR750s Switch port --> USB ethernet adapter (connected to Kali VM)
|Figure 3: Wiring and configuration|
First configuration of the router:
- Power up the router
- Connect wirelessly using the supplied wireless SSID and default password: goodlife
- Upon connecting to the web UI (ex: http://192.168.8.1) you will be required to set a password for the router admin
|Figure 4: Web UI that shows the Wyze Cam v2 target and the Kali host to send the SPAN data|
Setting up a SPAN port:
Putty or SSH to router (ex: 192.168.8.1) with proper credentials (ex: root:<password set above>)
- Run the following to set up a SPAN port:
Syntax to setup a SPAN port:
iptables -t mangle -A PREROUTING -j TEE --gateway <IP of Kali VM>
iptables -t mangle -A POSTROUTING -j TEE --gateway <IP of Kali VM>
Example (where our Kali VM IP is 192.168.8.217):
iptables -t mangle -A PREROUTING -j TEE --gateway 192.168.8.217
iptables -t mangle -A POSTROUTING -j TEE --gateway 192.168.8.217
NOTE: If you get the following error:
iptables v1.6.2: unknown option "--gateway"
- Run the following and then the iptables commands again
opkg install iptables-mod-tee kmod-ipt-tee
|Figure 5: SSH into the AR750S and setting up the SPAN port to go to the Kali Linux host (192.168.8.217)|
- Open Wireshark and sniff on the same interface specified above and you should now see all traffic to and from the AR750S.
- Pro-tip: Use a filter in Wireshark to limit traffic to just the device you want to monitor (in our case it is the Wyze Camera)
- Ex: ip.addr==<IP ADDRESS>