Phần 9. Bảo mật thiết bị IoT

0
861

Các bài viết trước đã trình bày cách tạo thiết bị IoT để theo dõi thông tin của đất và kết nối với đám mây. Nhưng nếu bị tin tặc truy cập để chiếm quyền kiểm soát các thiết bị IoT thì sẽ rất nguy hiểm. Ví dụ như tin tặc gửi các kết quả đo độ ẩm của đất cao đến mức cây không bao giờ được tưới nước, hoặc đặt chế độ bật hệ thống tưới nước liên tục trong thời gian dài làm chết cây và lãng phí nước.

Bài viết này sẽ giới thiệu về bảo mật các thiết bị IoT. Những nội dung chính trong bài viết:

1. Lý do cần bảo mật các thiết bị IoT.

2. Giới thiệu về mật mã học.

3. Cách bảo mật các thiết bị IoT.

4. Cách tạo và sử dụng chứng chỉ X.509

1. Lý do cần bảo mật các thiết bị IoT.

Bảo mật IoT liên quan đến việc đảm bảo chỉ các thiết bị mong muốn mới có thể kết nối với dịch vụ IoT đám mây và gửi chúng từ xa cũng như chỉ dịch vụ đám mây của người dùng mới có thể gửi lệnh đến thiết bị của họ. Dữ liệu IoT có thể là dữ liệu cá nhân, gồm dữ liệu y tế hoặc dữ liệu riêng tư, vì vậy toàn bộ ứng dụng cần phải được bảo mật để ngăn dữ liệu này bị rò rỉ.

Các rủi ro có thể xảy ra khi ứng dụng IoT không an toàn:

– Thiết bị giả mạo có thể gửi dữ liệu không chính xác gây ra phản hồi không chính xác từ ứng dụng.

– Người dùng trái phép có thể đọc dữ liệu từ các thiết bị IoT bao gồm dữ liệu quan trọng của cá nhân hoặc doanh nghiệp.

– Tin tặc có thể gửi lệnh để điều khiển thiết bị gây ra thiệt hại cho thiết bị hoặc phần cứng được kết nối.

– Bằng cách kết nối với thiết bị IoT, tin tặc có thể truy cập vào các mạng bổ sung nhằm truy cập vào các hệ thống riêng tư.

– Tin tặc có thể truy cập dữ liệu cá nhân và sử dụng dữ liệu này để tống tiền.

Một số ví dụ khác trong thực tế:

Năm 2018, tin tặc đã sử dụng điểm truy cập WiFi trên máy điều nhiệt bể cá để truy cập vào mạng của sòng bạc nhằm đánh cắp dữ liệu. Click tại đây để biết thêm về vụ tấn công

Năm 2016, Mirai Botnet đã phát động một cuộc tấn công từ chối dịch vụ nhằm vào nhà cung cấp dịch vụ Internet Dyn, đánh sập một phần lớn Internet. Mạng botnet này đã sử dụng phần mềm độc hại để kết nối với các thiết bị IoT như DVR và camera sử dụng tên người dùng và mật khẩu mặc định, từ đó phát động cuộc tấn công. Click tại đây để biết thêm về vụ tấn công.

CloudPets là thương hiệu đồ chơi của hãng Spiral Toys. Đồ chơi này ghi âm lại những cuộc trò chuyện của trẻ em, lưu những bản ghi âm trên web và công khai trên Internet. Dữ liệu từ gấu bông bị rò rỉ làm lộ tin nhắn thoại của trẻ em và gây ra những vụ tống tiền đòi tiền chuộc. Tham khảo thông tin tại đây.

Ứng dụng thể dục Strava dành cho những người đi bộ và đạp xe. Ứng dụng này ghi lại thông tin về sức khỏe và tuyến đường thể dục của người dùng sau đó chia sẻ công khai dữ liệu đó trên internet. Điều này có thể gây ra nhiều vấn đề tiềm ẩn nghiêm trọng như làm lộ thông tin cá nhân, người lạ có thể biết nơi sinh sống của người dùng… Click tại đây để xem xét thông tin thêm về nguy cơ khi sử dụng ứng dụng này.

Bảo mật là một chủ đề lớn, trong bài viết này chỉ đề cập đến một số vấn đề cơ bản xung quanh việc kết nối thiết bị với đám mây. Các chủ đề khác như giám sát các thay đổi dữ liệu khi truyền dữ liệu, hack thiết bị trực tiếp hoặc các thay đổi của cấu hình thiết bị không được đề cập ở đây.

2. Giới thiệu về mật mã học

Khi một thiết bị kết nối với dịch vụ IoT, nó sẽ sử dụng ID để nhận dạng chính nó. Tin tặc có thể tạo ra bản sao ID này để thiết lập một thiết bị độc hại sử dụng cùng ID nhưng gửi dữ liệu không có thật.

Cách để bảo mật là sử dụng khóa mã hóa (chỉ thiết bị và đám mây biết khóa mã hóa này) để mã hóa dữ liệu trước khi gửi.

Sau đó, dịch vụ đám mây sử dụng quy trình giải mã với cùng khóa mã hóa hoặc khóa giải mã để chuyển đổi dữ liệu về định dạng có thể đọc được. Nếu không thể giải mã tin nhắn mã hóa bằng khóa giải mã thì có nghĩa là thiết bị đã bị tấn công và tin nhắn bị từ chối.

Kỹ thuật để thực hiện mã hóa và giải mã gọi là mật mã.

Tiền mã hóa

Các loại mật mã sớm nhất là mã thay thế, có niên đại khoảng 3.500 năm. Mã thay thế liên quan đến việc thay thế một chữ cái này cho một chữ cái khác. Ví dụ, mật mã Caesar liên quan đến việc dịch chuyển bảng chữ cái đi một số lượng xác định, chỉ người gửi và người nhận thông điệp biết số lượng cần dịch chuyển đó.

Mật mã Vigenère đã tiến xa hơn bằng cách sử dụng các từ để mã hóa văn bản, sao cho các chữ cái trong văn bản gốc được dịch chuyển đi các số lượng chữ cái khác nhau.

Mật mã hiện đại

Mật mã hiện đại tiên tiến hơn nhiều nên khó bị bẻ khóa hơn so với các phương pháp ban đầu. Mật mã hiện đại sử dụng toán học phức tạp để mã hóa dữ liệu với rất nhiều mã khóa khác nhau.

Mật mã được sử dụng theo nhiều cách khác nhau để đảm an toàn khi giao tiếp. Địa chỉ trang web bắt đầu bằng HTTPS (HyperText Transfer Protocol Secure) là cách mã hóa để giao tiếp giữa trình duyệt và máy chủ web của GitHub. Nếu ai đó có thể đọc lưu lượng truy cập internet giữa trình duyệt và GitHub thì họ cũng không đọc dữ liệu vì nó đã được mã hóa. Máy tính của bạn có thể mã hóa tất cả dữ liệu trên ổ cứng, vì vậy nếu bị đánh cắp, người khác  không thể đọc bất kỳ dữ liệu nào nếu không có mật khẩu.

Thực tế, không phải mọi thiết bị đều an toàn. Một số thiết bị không có bảo mật hoặc có thiết bị được bảo mật nhưng sử dụng khóa dễ bị bẻ khóa, thậm chí đôi khi tất cả các thiết bị cùng loại sử dụng cùng một khóa cũng không an toàn. Đã có những tài khoản của các thiết bị IoT rất riêng tư nhưng kết nối qua WiFi hoặc Bluetooth với cùng mật khẩu. Nếu một người dùng có thể kết nối với thiết bị của họ, thì cũng có thể kết nối với thiết bị của người khác. Khi đó, họ có thể truy cập dữ liệu rất riêng tư hoặc có quyền kiểm soát thiết bị của người khác.

Sự phát triển của điện toán lượng tử có khả năng phá vỡ tất cả các mã hóa trước đó trong khoảng thời gian rất ngắn!

Mã hóa đối xứng và bất đối xứng

– Mã hóa đối xứng sử dụng cùng một khóa để mã hóa và giải mã (cả người gửi và người nhận đều biết khóa này). Đây là cách mã hóa kém an toàn nhất. Để gửi một tin nhắn được mã hóa, trước tiên người gửi phải gửi khóa cho người nhận.

Nếu khóa bị đánh cắp trong quá trình truyền, hoặc người gửi hay người nhận bị tấn công và khóa được tìm thấy, mã hóa có thể bị bẻ khóa.

– Mã hóa bất đối xứng sử dụng 2 khóa khác nhau: khóa mã hóa và khóa giải mã, được gọi là cặp khóa public/private. Khóa public dùng để mã hóa nhưng không thể dùng để giải mã, ngược lại, khóa private dùng để giải mã nhưng không thể dùng để mã hóa.

Người nhận chia sẻ khóa public, người gửi sử dụng khóa này để mã hóa tin nhắn và người nhận sẽ giải mã tin nhắn nhận được bằng khóa private của họ.

Mã hóa bất đối xứng an toàn hơn vì dù bất kỳ ai cũng có khóa public để mã hóa nhưng chỉ người nhận mới có khóa private để giải mã và họ không bao giờ chia sẻ khóa này.

Mã hóa đối xứng nhanh hơn nhưng kém an toán hơn mã hóa bất đối xứng. Một số hệ thống sẽ sử dụng kết hợp cả hai loại: dùng mã hóa bất đối xứng để mã hóa và chia sẻ khóa đối xứng, sau đó sử dụng khóa đối xứng để mã hóa tất cả dữ liệu. Điều này giúp an toàn hơn khi chia sẻ khóa đối xứng giữa người gửi và người nhận, đồng thời nhanh hơn khi mã hóa và giải mã dữ liệu.

3. Bảo mật các thiết bị IoT

Các thiết bị IoT được bảo mật bằng cách sử dụng mã hóa đối xứng hoặc bất đối xứng.

 Mã hóa đối xứng

Khi thiết lập thiết bị IoT để tương tác với IoT Hub, người dùng đã sử dụng một chuỗi kết nối. Ví dụ một chuỗi kết nối như sau:

HostName=soil-moisture-sensor.azure-devices.net;DeviceId=soil-moisture-sensor;SharedAccessKey=Bhry+ind7kKEIDxubK61RiEHHRTrPl7HUow8cEm/mU0=

Chuỗi kết nối này được tạo bởi ba phần phân tách bằng dấu chấm phẩy, mỗi phần là một khóa và một giá trị:

KhóaGiá trịMô tả
HostNamesoil-moisture-sensor.azure-devices.netURL của IoT Hub
DeviceIdsoil-moisture-sensorID duy nhất của thiết bị
SharedAccessKeyBhry+ind7kKEIDxubK61RiEHHRTrPl7HUow8cEm/mU0=Khóa đối xứng mà cả thiết bị và IoT Hub đều biết

Phần cuối cùng của chuỗi kết nối này SharedAccessKey là khóa đối xứng mà cả thiết bị và IoT Hub đều biết. Thiết bị không bao giờ gửi khóa này lên đám mây hoặc ngược lại mà nó được sử dụng để mã hóa dữ liệu.

Khi kết nối lần đầu tiên, thiết bị gửi mã thông báo chữ ký truy cập được chia sẻ (SAS) bao gồm URL của IoT Hub, thời gian hết hạn của chữ ký truy cập (thường là 1 ngày kể từ thời điểm hiện tại) và một chữ ký. Chữ ký này bao gồm URL và thời gian hết hạn được mã hóa bằng khóa truy cập, được chia sẻ từ chuỗi kết nối. IoT Hub giải mã chữ ký bằng khóa truy cập và nếu giá trị sau khi giải mã khớp với URL và thời hạn sử dụng, thiết bị được phép kết nối. Việc xác minh thời điểm hiện tại là trước khi hết hạn nhằm ngăn thiết bị độc hại chụp mã thông báo SAS của một thiết bị thực và sử dụng nó.

Đây là phương pháp để xác minh thiết bị gửi. Bằng cách gửi dữ liệu đã biết ở cả dạng giải mã và mã hóa, máy chủ có thể xác minh thiết bị khi giải mã dữ liệu đã mã hóa, kết quả khớp với phiên bản được giải mã đã gửi. Khi đó, cả người gửi và người nhận đều có cùng một khóa mã hóa đối xứng.

Do có hạn chế về thời gian hết hạn nên thiết bị IoT cần biết thời gian chính xác, thường đọc từ máy chủ NTP. Nếu thời gian không chính xác, kết nối bị lỗi. Sau khi kết nối, tất cả dữ liệu gửi từ thiết bị đến IoT Hub hoặc ngược lại được mã hóa bằng khóa truy cập chia sẻ. Nếu nhiều thiết bị chia sẻ cùng một chuỗi kết nối sẽ gây ra mất an toàn cho dữ liệu.

Việc bảo mật thực hiện bằng cách lưu trữ khóa này dưới dạng mã. Việc này cũng khó hơn khi phát hành mã vì cần phải biên dịch lại một khóa cập nhật cho mọi thiết bị. Cách tốt hơn là tải khóa này từ mô-đun bảo mật phần cứng, một con chip trên thiết bị IoT lưu trữ các giá trị được mã hóa có thể đọc được.

Khi học IoT, việc đặt khóa vào mã thường dễ dàng hơn, nhưng phải đảm bảo khóa này không bị kiểm tra trong kiểm soát mã nguồn công khai (SCC).

Các thiết bị có 2 khóa và 2 chuỗi kết nối tương ứng, cho phép sử dụng thay đổi các khóa bằng cách chuyển từ khóa này sang khóa khác nếu khóa đầu tiên bị xâm phạm và tạo lại khóa đầu tiên.

Chứng chỉ X.509

Khi sử dụng mã hóa bất đối xứng với cặp khóa public/private, người dùng cần cung cấp khóa public cho bất kỳ thiết bị nào muốn gửi dữ liệu đến. Để đảm bảo an toàn và hiệu quả, người dùng cung cấp khóa công khai của mình bên trong chứng chỉ đã được xác minh bởi bên thứ ba đáng tin cậy, được gọi là chứng chỉ X.509.

Chứng chỉ X.509 là tài liệu kỹ thuật số chứa phần khóa công khai của cặp khóa public/private, thường được một trong số các tổ chức đáng tin cậy là Cơ quan cấp chứng chỉ (Certification authorities -CA) cấp và được CA ký điện tử xác minh khóa hợp lệ và đến từ người dùng xác định. Người dùng đó tin tưởng vào chứng chỉ và khóa public, bởi vì tin tưởng CA, tương tự như cách tin tưởng vào hộ chiếu hoặc giấy phép lái xe vì người dùng tin tưởng quốc gia cấp nó. Để sử dụng chứng chỉ này phải trả phí, vì vậy bạn cũng có thể ‘self-sign’, là tự tạo chứng chỉ do bạn ký cho mục đích thử nghiệm.

Các chứng chỉ này có một số trường, gồm khóa công khai của người dùng, thông tin chi tiết về CA đã cấp, thời gian có hiệu lực và bản thân khóa công khai. Trước khi sử dụng chứng chỉ, người dùng nên xác minh chứng chỉ bằng cách kiểm tra chứng chỉ đã được CA ký chưa.

Tham khảo danh sách đầy đủ các trường trong chứng chỉ trong Microsoft Understanding X.509 Public Key Certificates tutorial

Khi sử dụng chứng chỉ X.509, cả người gửi và người nhận sẽ có khóa public và khóa private, cũng như cả hai đều có chứng chỉ X.509 chứa khóa public. Sau đó, họ trao đổi chứng chỉ X.509, sử dụng các khóa public của nhau để mã hóa dữ liệu gửi và khóa private riêng để giải mã dữ liệu nhận được.

Lợi thế lớn của việc sử dụng chứng chỉ X.509 là có thể chia sẻ giữa các thiết bị. Người dùng có thể tạo một chứng chỉ, tải lên IoT Hub và sử dụng chứng chỉ này cho tất cả các thiết bị của mình. Sau đó, mỗi thiết bị chỉ cần biết khóa private để giải mã các tin nhắn nhận được từ IoT Hub.

Chứng chỉ được thiết bị sử dụng để mã hóa các tin nhắn gửi đến IoT Hub được Microsoft publish. Đó là cùng một chứng chỉ mà nhiều dịch vụ Azure sử dụng và đôi khi được tích hợp vào SDK

Lưu ý: Azure chỉ sử dụng khóa public để mã hóa dữ liệu gửi đến Azure chứ không phải để giải mã, vì vậy nó có thể chia sẻ ở mọi nơi, kể cả trong mã nguồn.

4. Cách tạo và sử dụng chứng chỉ X.509

* Các bước để tạo chứng chỉ X.509:

1. Tạo một cặp khóa public/private. Một trong những thuật toán được sử dụng rộng rãi nhất để tạo cặp khóa public/private là Rivest – Shamir – Adleman (RSA).

2. Gửi khóa public với dữ liệu được liên kết để ký bằng CA hoặc bằng cách tự ký.

Azure CLI có các lệnh để tạo ID thiết bị mới trong IoT Hub và tự động tạo cặp khóa public/private và tạo chứng chỉ tự ký.

Người dùng có thể tham khảo các bước chi tiết tại Using OpenSSL to create self-signed certificates tutorial in the Microsoft IoT Hub documentation

* Cách tạo ID thiết bị bằng chứng chỉ X.509

1. Chạy lệnh sau để đăng ký ID thiết bị mới, tự động tạo khóa và chứng chỉ.

az iot hub device-identity create --device-id soil-moisture-sensor-x509 \
                                  --am x509_thumbprint \
                                  --output-dir . \
                                  --hub-name <hub_name>

Thay <hub_name> bằng tên đã sử dụng cho IoT Hub.

Lệnh trên sẽ tạo ra một thiết bị có ID là soil-moisture-sensor-x509 để phân biệt với ID thiết bị đã tạo trong bài viết trước. Lệnh này cũng sẽ tạo 2 file trong thư mục hiện tại:

soil-moisture-sensor-x509-key.pem – chứa khóa private cho thiết bị.

soil-moisture-sensor-x509-cert.pem – là file chứng chỉ X.509 cho thiết bị.

Giữ các file này an toàn và không nên kiểm tra file khóa private trong kiểm soát mã nguồn công khai.

Biên dịch: Bắc Đặng

Để cập nhật tin tức công nghệ mới nhất và các sản phẩm của công ty AIoT JSC, vui lòng truy cập link: http://aiots.vn hoặc linhkienaiot.com

5 1 Bỏ phiếu
Article Rating
Subscribe
Notify of
guest
0 Comments
Phản hồi nội tuyến
Xem tất cả các bình luận