Bối cảnh và vấn đề nghiên cứu
Sự phát triển nhanh chóng của công nghệ Internet of Things (IoT) đã đưa hạ tầng kết nối vạn vật trở thành một phần thiết yếu trong đời sống và sản xuất công nghiệp, từ các ứng dụng nhà thông minh, giao thông thông minh, quan trắc môi trường cho đến các dây chuyền tự động hóa nhà máy. Theo báo cáo năm 2020 của Statista, số lượng thiết bị IoT trên toàn cầu đạt khoảng 8,74 tỷ thiết bị và dự kiến đạt 25,4 tỷ thiết bị vào năm 2030 (trong đó thị trường tiêu dùng chiếm khoảng 60%). Báo cáo từ Fortune Business Insights ghi nhận quy mô thị trường IoT đạt 308,97 tỷ USD năm 2020, dự báo đạt 381,30 tỷ USD năm 2021 và 1.854,76 tỷ USD năm 2028 với tốc độ tăng trưởng kép hàng năm (CAGR) là 25,4%.
Tuy nhiên, phần lớn các thiết bị IoT bị hạn chế nghiêm trọng về năng lực tính toán, dung lượng bộ nhớ và khả năng cài đặt các phần mềm bảo mật chuyên dụng. Điều này khiến mạng IoT dễ bị tổn thương trước các cuộc tấn công mạng quy mô lớn và tinh vi. Các sự cố an ninh thực tế được tác giả dẫn chứng bao gồm:
- Cuộc tấn công botnet Mirai (2016) lây nhiễm hơn 300.000 thiết bị IoT (camera IP, bộ định tuyến) để tạo lưu lượng tấn công từ chối dịch vụ phân tán (DDoS) làm tắc nghẽn nhiều máy chủ lớn.
- Lỗ hổng bảo mật trên thiết bị trợ tim của công ty St. Jude (2017) cho phép kẻ tấn công can thiệp làm kiệt pin hoặc thay đổi thông số hoạt động.
- Sự cố tấn công điều khiển ô tô từ xa qua mạng di động được IBM Security Intelligence ghi nhận năm 2015.
- Cuộc tấn công DDoS vào Spamhaus (2013) với lưu lượng đạt mức 300 GB/s.
Trước thực trạng đó, việc xây dựng các hệ thống phát hiện xâm nhập mạng (NIDS) tại vùng biên mạng IoT là yêu cầu cấp thiết. Tuy nhiên, việc triển khai NIDS đối mặt với hai thách thức kỹ thuật lớn:
- Thách thức về dữ liệu: Các tập dữ liệu mạng hiện có chủ yếu được gán nhãn theo luồng (flow-based), không phù hợp trực tiếp cho việc huấn luyện mô hình phát hiện trên từng gói tin (packet-based) theo thời gian thực. Việc tạo tập dữ liệu thực nghiệm đòi hỏi hạ tầng phức tạp, trong khi các tập dữ liệu công bố sẵn thường mất cân bằng và định dạng không đồng nhất.
- Thách thức về phương pháp và tài nguyên: NIDS truyền thống dựa trên dấu hiệu mẫu (signature-based) không phát hiện được tấn công mới và gây tốn bộ nhớ lưu trữ luật, trong khi các mô hình phát hiện bất thường dựa trên học máy/học sâu phức tạp lại đòi hỏi năng lực tính toán vượt quá khả năng của thiết bị nhúng vùng biên.
Mục tiêu và nhiệm vụ nghiên cứu của khóa luận được xác định cụ thể:
- Thiết kế một hệ thống NIDS nhỏ gọn, có khả năng vận hành ổn định trên các thiết bị giới hạn tài nguyên phần cứng tại vùng biên mạng IoT (IoT Gateway), đạt độ chính xác cao, tỷ lệ cảnh báo giả thấp và độ trễ xử lý thấp hơn tốc độ lưu thông của gói tin trong mạng.
- Nghiên cứu và xây dựng thuật toán gán nhãn tự động để chuyển đổi tập dữ liệu mạng từ dạng luồng sang dạng gói tin có độ tin cậy cao.
- Khảo sát, xây dựng và đánh giá các mô hình học máy và học sâu phục vụ cho bài toán phát hiện nhị phân và phân loại đa lớp các hình thức tấn công mạng bất thường.
Đối tượng nghiên cứu của đề tài là các gói tin và luồng lưu lượng mạng lưu thông qua thiết bị cổng IoT Gateway. Phạm vi nghiên cứu tập trung vào việc tiền xử lý, gán nhãn và rút trích đặc trưng gói tin dựa trên tập dữ liệu chuẩn CIC-IDS2017 do Viện An ninh mạng Canada (CIC) phát hành, cùng việc kiểm thử hiệu năng thực tế trên nền tảng phần cứng nhúng Raspberry Pi 4.
Cơ sở lý thuyết và phương pháp
Khóa luận xây dựng trên các nền tảng lý thuyết và công nghệ mạng sau:
- Giao thức mạng và cấu trúc gói tin: Phân tích cấu trúc tiêu đề (header) và dữ liệu (payload) của các giao thức tầng mạng và tầng giao vận trong mô hình OSI, bao gồm IP (IPv4, IPv6), TCP, UDP, ICMP và ARP.
- Mô hình dữ liệu mạng: Phân định sự khác biệt giữa dữ liệu dựa trên gói tin (packet-based - lưu trữ toàn bộ header và payload trong tệp PCAP, cho phép xử lý tức thời không phụ thuộc kết thúc kết nối) và dữ liệu dựa trên luồng (flow-based - tổng hợp siêu dữ liệu từ nhiều gói tin như NetFlow, IPFIX, sFlow).
- Phương pháp định danh luồng vô hướng: Sử dụng bộ 5 thông số định danh (địa chỉ IP nguồn, địa chỉ IP đích, cổng nguồn, cổng đích, số hiệu giao thức) để liên kết các gói tin vào luồng dữ liệu hai chiều tương ứng.
- Kỹ thuật chuẩn hóa dữ liệu: Sử dụng phương pháp chuẩn hóa điểm chuẩn (z-score standardization) để đưa các đặc trưng số liệu thống kê về phân phối có giá trị trung bình $\mu = 0$ và độ lệch chuẩn $\sigma = 1$:
$$z = \frac{x - \mu}{\sigma}$$
Phương pháp nghiên cứu thực nghiệm và thuật toán được triển khai bao gồm:
- Phương pháp gán nhãn dữ liệu bằng tìm kiếm nhị phân: Khóa luận xây dựng thuật toán sắp xếp các luồng dữ liệu theo
Flow_IDvà áp dụng kỹ thuật tìm kiếm nhị phân (bisect_left,bisect_right) với độ phức tạp $O(\log N)$ để đối soát thời gian gói tin (timestamp) với khoảng thời gian hoạt động của luồng (Flow Duration), chuyển đổi 56.370.703 gói tin từ tệp PCAP thô thành dữ liệu có gán nhãn. - Phương pháp rút trích đặc trưng thống kê cửa sổ thời gian: Thiết kế thuật toán rút trích đặc trưng tức thời với độ phức tạp $O(1)$ sử dụng cấu trúc hàng đợi hai phía (deque) và kỹ thuật tổng tiền tố (prefix sum) theo 3 ngưỡng thời gian $\lambda \in {0.1\text{s}, 1\text{s}, 10\text{s}}$. Thuật toán trích xuất 168 đặc trưng thống kê từ 28 thuộc tính gói tin.
- Mô hình phân loại học máy (Machine Learning): Thực nghiệm các thuật toán phục vụ phát hiện xâm nhập nhị phân gồm Cây quyết định (Decision Tree - DT), Rừng ngẫu nhiên (Random Forest - RF), K-láng giềng gần nhất (K-Nearest Neighbors - KNN) và Máy vector hỗ trợ tuyến tính (Linear Support Vector Classification - Linear SVC).
- Mô hình phân loại học sâu (Deep Learning): Đề xuất mô hình mạng nơ-ron sâu D3NIDS (Deep Neural Network) với 5 lớp ẩn, sử dụng hàm kích hoạt phi tuyến ReLU, lớp đầu ra Softmax và tối ưu hóa bằng hàm mất mát Categorical Crossentropy cùng thuật toán Gradient Descent. Khóa luận cũng thiết kế mô hình mạng nơ-ron tích chập C3NIDS (Convolutional Neural Network) để phân loại đa lớp 9 nhóm tấn công.
Nguồn dữ liệu thực nghiệm chính là bộ dữ liệu CIC-IDS2017 do Viện An ninh mạng Canada (CIC) và Tổ chức An ninh Truyền thông (CSE) công bố, ghi nhận lưu lượng mạng trong 5 ngày (03/07/2017 đến 07/07/2017) với 2.830.743 luồng và 80 đặc trưng luồng gốc.
Thiết kế và triển khai hệ thống
Hệ thống phát hiện xâm nhập mạng đề xuất được thiết kế để triển khai trực tiếp trên thiết bị cổng IoT Gateway, giám sát luồng lưu lượng mạng hai chiều giữa các thiết bị IoT đầu cuối và mạng Internet/Cloud.
| Khối chức năng | Tên thành phần | Công nghệ / Kỹ thuật sử dụng | Nhiệm vụ chính trong hệ thống |
|---|---|---|---|
| POC | Khối thu thập gói tin (Packet Observation Component) | NFQueue, Tshark, Scapy | Liên tục giám sát, bắt các gói tin đi qua Gateway ở cả hai chiều và trích xuất thông tin cơ bản (IP, Port, Protocol, Packet Size, Timestamp). |
| FEC | Khối rút trích đặc trưng (Feature Extraction Component) | Hàng đợi hai phía (Deque), Tổng tiền tố, Cửa sổ thời gian $\lambda$ | Tính toán tức thời 168 đặc trưng thống kê từ 28 trường thuộc tính gói tin trong thời gian $O(1)$, thực hiện chuẩn hóa z-score và xuất vector đặc trưng $x \in \mathbb{R}^{168}$. |
| ADC | Khối phát hiện tấn công (Attack Detection Component) | Decision Tree, Random Forest, Linear SVC, D3NIDS (DNN), C3NIDS (CNN) | Tiếp nhận vector đặc trưng $x$ để thực thi suy luận theo thời gian thực; hỗ trợ chế độ phát hiện bất thường nhị phân hoặc phân loại chi tiết 9 nhóm nhãn mạng. |
| AMC | Khối quản lý hành vi (Action Manager Component) | Mô-đun cảnh báo và điều khiển luồng | Tiếp nhận kết quả từ ADC; thực hiện ghi nhật ký (logging), chặn các luồng dữ liệu độc hại và gửi cảnh báo tới quản trị viên hệ thống. |
Môi trường thực nghiệm phần cứng được thiết lập trên thiết bị máy tính nhúng đơn bo Raspberry Pi 4 để kiểm chứng khả năng vận hành biên trong điều kiện tài nguyên giới hạn.
Nội dung chính theo từng chương
Chương 1: Giới thiệu
Chương này phân tích bối cảnh phát triển của IoT, các rủi ro an ninh mạng tiềm ẩn và các cuộc tấn công tiêu biểu trong thực tế. Tác giả xác định hai nhóm phương pháp NIDS hiện nay (dựa trên dấu hiệu và dựa trên sự bất thường), đồng thời nêu rõ khó khăn trong việc xử lý dữ liệu và cân bằng giữa độ chính xác với độ phức tạp tính toán khi triển khai trên thiết bị nhúng. Chương 1 xác lập mục tiêu, phạm vi nghiên cứu và tóm tắt 4 đóng góp cốt lõi của khóa luận.
Chương 2: Các nghiên cứu liên quan
Chương 2 cung cấp tổng quan về các dạng lưu trữ dữ liệu mạng (packet-based và flow-based) cùng các giao thức TCP, UDP, ICMP, IP. Tác giả so sánh chi tiết ưu nhược điểm của hai dạng dữ liệu về kích thước, độ trễ, khả năng can thiệp payload và mức độ bảo đảm tính riêng tư.
Phần tiếp theo khảo sát các bộ dữ liệu an ninh mạng phổ biến (KDD Cup'99, NSL-KDD, UNSW-NB15, CIC-IDS2017, CSE-CICIDS2018) và phân tích các công trình nghiên cứu NIDS tiêu biểu:
- Các giải pháp trên thiết bị nhúng và mạng cảm biến: Snort/Bro trên Raspberry Pi 2, Suricata cho IPv6 trong WSN, SVELTE trên hệ điều hành Contiki.
- Các phương pháp học máy và phát hiện bất thường: NIDS dựa trên mức tiêu thụ năng lượng của Riecker và Lee, hệ thống Heimdall sử dụng VirusTotal, mô hình KITSUNE dùng Autoencoder và thuật toán DIS, các nghiên cứu dùng ANN của Linda, và các giải pháp dùng Isolation Forest.
- Tác giả chỉ ra hạn chế của các nghiên cứu trước như phụ thuộc vào tập dữ liệu tự tạo, chỉ xử lý được một số dạng tấn công định tuyến cố định, hoặc thuật toán rút trích đặc trưng bị suy giảm tốc độ nghiêm trọng khi khối lượng gói tin lớn.
Chương 3: Phương pháp thực hiện
Chương 3 trình bày toàn bộ quy trình xây dựng hệ thống NIDS đề xuất:
- Phân tích và gán nhãn tập dữ liệu CIC-IDS2017: Hệ thống mạng tạo dữ liệu gồm mạng tấn công (4 PC, 1 router, 1 switch) và mạng nạn nhân (3 server, 1 firewall, 2 switch, 10 PC). Tác giả thiết kế thuật toán tìm kiếm nhị phân $O(\log N)$ để gán nhãn 56.370.703 gói tin từ 2.830.743 luồng dữ liệu gốc, phân chia thành 9 nhóm nhãn.
- Kiến trúc hệ thống 4 khối: POC, FEC, ADC và AMC.
- Thuật toán rút trích đặc trưng tối ưu: Cải tiến thuật toán Damped Incremental Statistics (DIS) của KITSUNE bằng cách sử dụng Deque và Prefix Sum, loại bỏ liên kết chéo hai chiều để đạt độ phức tạp $O(1)$ mà không bị suy giảm hiệu năng theo thời gian. Trích xuất 168 đặc trưng từ 28 trường thuộc tính gói tin với 3 cửa sổ thời gian $\lambda \in {0.1\text{s}, 1\text{s}, 10\text{s}}$.
- Xây dựng mô hình phân loại: Trình bày cơ sở toán học của các thuật toán học máy (DT, RF, KNN, Linear SVC) và thiết kế chi tiết mạng học sâu D3NIDS (DNN 5 lớp ẩn, ReLU, Softmax, Categorical Crossentropy, Gradient Descent) và mạng C3NIDS (CNN).
| Nhóm tấn công (9 nhãn) | Các kiểu tấn công gốc trong CIC-IDS2017 | Số lượng gói tin sau gán nhãn |
|---|---|---|
| Benign | Lưu lượng mạng bình thường | 51.949.900 |
| DoS | DoS Hulk (2.246.112), DoS GoldenEye (104.491), DoS slowloris (47.575), DoS Slowhttptest (39.537) | 2.437.716 |
| DDoS | DDoS LOIC | 1.225.472 |
| PortScan | Quét cổng dịch vụ | 321.489 |
| BruteForce | SSH-Patator (163.311), FTP-Patator (111.494) | 274.805 |
| Infiltration | Tấn công xâm nhập qua lỗ hổng phần mềm | 59.754 |
| Heartbleed | Khai thác lỗ hổng OpenSSL TLS | 49.296 |
| Web Attack | Brute Force (30.249), XSS (9.044), Sql Injection (126) | 39.419 |
| Botnet | Mạng máy tính ma điều khiển từ xa | 12.853 |
| Tổng cộng | 15 kiểu tấn công ban đầu | 56.370.703 |
Chương 4: Kết quả thực nghiệm
Chương 4 thiết lập môi trường thực nghiệm, xác định các thang đo đánh giá (Confusion Matrix, Accuracy, False Alarm Rate, Throughput) và trình bày kết quả đánh giá hệ thống:
- Đánh giá các thuật toán học máy trong bài toán phân loại nhị phân (phát hiện bất thường).
- Đánh giá mô hình học sâu D3NIDS với các cấu hình số lớp ẩn khác nhau, đo lường chi tiết ma trận nhầm lẫn và độ chính xác phân loại trên từng nhóm tấn công.
- Đánh giá mô hình C3NIDS trên bài toán phân loại đa lớp.
- So sánh tốc độ xử lý gói tin (gói tin/giây) của các mô hình trên thiết bị phần cứng Raspberry Pi 4 để chứng minh khả năng đáp ứng thời gian thực.
Chương 5: Kết luận
Chương này tổng kết toàn bộ các kết quả đạt được về mặt lý thuyết, phương pháp và thực nghiệm của đề tài; đồng thời chỉ ra các hạn chế kỹ thuật hiện tại và vạch ra các hướng phát triển tiếp theo trong tương lai.
Kết quả và đóng góp
Khóa luận đạt được các kết quả thực nghiệm cụ thể và đóng góp học thuật sau:
- Hiệu quả phát hiện và phân loại: Trên tập dữ liệu CIC-IDS2017, hệ thống đạt độ chính xác phân loại tổng thể lên tới 99,29% với tỷ lệ cảnh báo giả (False Alarm Rate) ở mức thấp 0,29%.
- Tốc độ xử lý trên phần cứng nhúng Raspberry Pi 4:
- Các thuật toán học máy đạt tốc độ xử lý 904.306,89 gói tin/giây.
- Các mô hình học sâu đạt tốc độ xử lý 23.156,98 gói tin/giây.
- So sánh với lưu lượng mạng thực tế trong tập dữ liệu (lưu lượng bình thường không vượt quá 10.000 gói tin/giây, lưu lượng tấn công DoS không vượt quá 15.000 gói tin/giây), tốc độ của hệ thống hoàn toàn vượt trội và bảo đảm khả năng hoạt động theo thời gian thực tại vùng biên.
- Đóng góp về mặt dữ liệu và thuật toán:
- Chuyển đổi thành công tập dữ liệu CIC-IDS2017 từ 2.830.743 luồng thành tập dữ liệu 56.370.703 gói tin được gán nhãn chính xác, chia thành 9 lớp tấn công rõ ràng.
- Thuật toán gán nhãn sử dụng tìm kiếm nhị phân có độ phức tạp $O(\log N)$ giúp giảm số phép tính từ $1,6 \times 10^{14}$ xuống còn $1,2 \times 10^8$ phép tính, rút ngắn thời gian xử lý lý thuyết từ 184 ngày xuống còn khoảng 120 giây.
- Thuật toán rút trích đặc trưng dựa trên Deque và Prefix Sum đạt độ phức tạp $O(1)$, giải quyết triệt để vấn đề suy giảm hiệu năng theo thời gian của thuật toán DIS trong mô hình KITSUNE.
- Giải pháp ứng dụng: Đề xuất kiến trúc NIDS khả thi triển khai trên thiết bị cổng IoT Gateway với chi phí phần cứng thấp, có thể ứng dụng từ quy mô hộ gia đình, doanh nghiệp đến đô thị thông minh.
Hạn chế và hướng nghiên cứu tiếp
Dựa trên các nội dung được văn bản đề cập, các hạn chế và hướng phát triển của đề tài bao gồm:
- Hạn chế về dữ liệu: Một số dạng tấn công trong tập dữ liệu ban đầu có số lượng mẫu còn ít (như Web Attack Sql Injection chỉ có 126 gói tin, Infiltration có 59.754 gói tin), gây ra sự mất cân bằng giữa các lớp dữ liệu khi huấn luyện mô hình phân loại đa lớp.
- Phạm vi kiểm thử: Hệ thống mới tập trung đánh giá trên dữ liệu mô phỏng từ bộ dữ liệu CIC-IDS2017 và kiểm thử hiệu năng suy luận trên thiết bị nhúng Raspberry Pi 4; chưa đánh giá toàn diện trên nhiều môi trường phần cứng chuyên biệt khác (như Jetson Nano hay Coral Dev Board) trong điều kiện mạng vật lý thực tế đa dạng.
- Hướng phát triển tiếp theo:
- Tối ưu hóa cấu trúc mô hình học sâu để giảm thiểu hơn nữa kích thước mô hình và mức độ chiếm dụng bộ nhớ RAM.
- Mở rộng tập dữ liệu với các dạng tấn công mới xuất hiện trên các giao thức chuyên dụng của IoT (như MQTT, CoAP).
- Tích hợp sâu hơn các cơ chế phòng thủ chủ động và tự động cập nhật trọng số mô hình tại biên mạng.
Giá trị tham khảo
Khóa luận là tài liệu tham khảo giá trị cho sinh viên, học viên cao học và các kỹ sư nghiên cứu thuộc các chuyên ngành Khoa học máy tính, An toàn thông tin, Mạng máy tính và Kỹ thuật IoT:
- Phương pháp xử lý dữ liệu mạng: Cung cấp chi tiết mã giả và giải thuật tối ưu hóa tìm kiếm nhị phân để gán nhãn dữ liệu gói tin từ luồng, có thể tái sử dụng trực tiếp cho các tập dữ liệu PCAP quy mô lớn khác.
- Thiết kế trích xuất đặc trưng thời gian thực: Thuật toán rút trích đặc trưng cửa sổ trượt $O(1)$ dùng Deque và Prefix Sum là tài liệu tham khảo hữu ích cho các bài toán xử lý chuỗi sự kiện mạng tốc độ cao.
- Kỹ thuật triển khai AI tại biên (Edge AI): Cung cấp các thông số thực nghiệm cụ thể về thông lượng xử lý của các mô hình học máy và học sâu trên phần cứng nhúng hạn chế tài nguyên (Raspberry Pi 4).
Câu hỏi thường gặp
1. Khóa luận sử dụng tập dữ liệu nào để huấn luyện và đánh giá hệ thống?
Khóa luận sử dụng tập dữ liệu CIC-IDS2017 do Viện An ninh mạng Canada (CIC) và CSE phát hành năm 2017. Tác giả đã xử lý tệp PCAP thô và tệp nhãn luồng CSV để gán nhãn thành công cho 56.370.703 gói tin, phân thành 9 nhóm nhãn.
2. Thuật toán gán nhãn dữ liệu của tác giả có ưu điểm gì về mặt hiệu năng tính toán?
Thay vì sử dụng tìm kiếm tuyến tính đòi hỏi $1,6 \times 10^{14}$ phép tính (ước tính mất khoảng 184 ngày chạy liên tục), tác giả áp dụng thuật toán tìm kiếm nhị phân $O(\log N)$ trên danh sách luồng đã sắp xếp, giảm tổng số phép tính xuống còn $1,2 \times 10^8$ phép tính, trên lý thuyết chỉ mất khoảng 120 giây để thực thi.
3. Thuật toán rút trích đặc trưng đề xuất khắc phục nhược điểm gì của thuật toán DIS trong nghiên cứu KITSUNE?
Thuật toán Damped Incremental Statistics (DIS) của KITSUNE bị chậm dần theo thời gian do phải duy trì các mối liên kết hai chiều giữa các kết nối. Tác giả đã cải tiến bằng cách sử dụng cấu trúc hàng đợi hai phía (deque) kết hợp tổng tiền tố (prefix sum), đạt độ phức tạp $O(1)$ ổn định và loại bỏ chi phí tính toán liên kết chéo.
4. Kết quả thực nghiệm về độ chính xác và tốc độ xử lý của hệ thống trên Raspberry Pi 4 đạt mức nào?
Hệ thống đạt độ chính xác phân loại 99,29% và tỷ lệ cảnh báo giả 0,29% trên tập dữ liệu CIC-IDS2017. Trên bo mạch Raspberry Pi 4, tốc độ xử lý đạt 904.306,89 gói tin/giây đối với các thuật toán học máy và 23.156,98 gói tin/giây đối với các mô hình học sâu, đáp ứng yêu cầu xử lý thời gian thực.
Kết luận
Khóa luận của tác giả Nguyễn Xuân Dương đã xây dựng thành công giải pháp hệ thống phát hiện xâm nhập mạng (NIDS) thời gian thực có khả năng triển khai trực tiếp trên thiết bị cổng IoT Gateway. Bằng việc đề xuất thuật toán gán nhãn nhị phân $O(\log N)$ và thuật toán rút trích đặc trưng $O(1)$ sử dụng cấu trúc hàng đợi hai phía, nghiên cứu đã giải quyết hiệu quả bài toán xử lý dữ liệu gói tin quy mô lớn. Các kết quả thực nghiệm trên tập dữ liệu CIC-IDS2017 và nền tảng nhúng Raspberry Pi 4 chứng minh hệ thống đạt độ chính xác cao (99,29%) cùng thông lượng xử lý vượt trội so với lưu lượng mạng biên thực tế. Đề tài đóng góp cơ sở khoa học và giải pháp kỹ thuật có tính ứng dụng cao cho lĩnh vực an toàn thông tin trong hạ tầng IoT.