跳至主要内容

保持你的植物安全

本課概述的手繪筆記

手繪筆記由 Nitya Narasimhan 提供。點擊圖片查看大圖。

課前測驗

課前測驗

介紹

在過去的幾節課中,你已經創建了一個土壤監測物聯網設備並將其連接到雲端。但是,如果為競爭對手工作的黑客設法控制了你的物聯網設備怎麼辦?如果他們發送高土壤濕度讀數,讓你的植物永遠不會被澆水,或者讓你的灌溉系統一直運行,導致你的植物因過度澆水而死亡,並讓你花費一大筆水費怎麼辦?

在本課中,你將學習如何保護物聯網設備。由於這是本項目的最後一課,你還將學習如何清理你的雲端資源,減少任何潛在的成本。

在本課中,我們將涵蓋:

🗑 這是本項目中的最後一課,所以在完成本課和作業後,不要忘記清理你的雲端服務。你需要這些服務來完成作業,所以請確保先完成作業。

如有需要,請參考清理項目指南以獲取有關如何執行此操作的說明。

為什麼需要保護物聯網設備?

物聯網安全涉及確保只有預期的設備可以連接到你的雲端物聯網服務並向其發送遙測數據,並且只有你的雲端服務可以向你的設備發送命令。物聯網數據也可能是個人數據,包括醫療或私密數據,因此你的整個應用程序需要考慮安全性,以防止這些數據洩露。

如果你的物聯網應用程序不安全,會有很多風險:

  • 假設備可能會發送錯誤的數據,導致你的應用程序做出錯誤的反應。例如,他們可能會發送持續的高土壤濕度讀數,意味著你的灌溉系統永遠不會啟動,導致你的植物因缺水而死亡
  • 未經授權的用戶可能會從物聯網設備中讀取數據,包括個人或業務關鍵數據
  • 黑客可能會發送命令來控制設備,從而對設備或連接的硬件造成損壞
  • 通過連接到物聯網設備,黑客可以利用這一點訪問其他網絡,從而獲得對私人系統的訪問權限
  • 惡意用戶可能會訪問個人數據並利用這些數據進行勒索

這些都是現實世界中的情況,並且經常發生。之前的課程中已經給出了一些例子,這裡還有一些更多的例子:

✅ 做一些研究:搜索更多物聯網黑客和數據洩露的例子,特別是與個人物品(如互聯網連接的牙刷或體重計)相關的例子。思考這些黑客對受害者或客戶的影響。

💁 安全是一個龐大的話題,本課只會觸及一些基本的內容,主要是關於將設備連接到雲端。其他不會涵蓋的主題包括監控數據在傳輸中的變化、直接黑客攻擊設備或更改設備配置。物聯網黑客是一個如此大的威脅,像 Azure Defender for IoT 這樣的工具已經被開發出來。這些工具類似於你電腦上的防病毒和安全工具,只是專為小型、低功耗的物聯網設備設計。

密碼學

當設備連接到物聯網服務時,它使用一個ID來識別自己。問題是這個ID可以被克隆——黑客可以設置一個惡意設備,使用與真實設備相同的ID,但發送虛假數據。

有效和惡意設備都可以使用相同的ID發送遙測數據

解決這個問題的方法是將發送的數據轉換為一種加密格式,使用設備和雲端都知道的某種值來加密數據。這個過程稱為加密,用來加密數據的值稱為加密密鑰

如果使用加密,那麼只有加密的消息會被接受,其他消息會被拒絕

雲端服務可以使用稱為解密的過程將數據轉換回可讀格式,使用相同的加密密鑰或解密密鑰。如果加密消息無法被密鑰解密,則設備已被黑客攻擊,消息將被拒絕。

進行加密和解密的技術稱為密碼學

早期的密碼學

最早的密碼學類型是替換密碼,已有3500年的歷史。替換密碼涉及用另一個字母替換一個字母。例如,凱撒密碼 涉及按定義的數量移動字母表,只有加密消息的發送者和預期接收者知道要移動多少個字母。

維吉尼亞密碼 更進一步,使用單詞來加密文本,使得原始文本中的每個字母都被不同的數量移動,而不是總是移動相同的字母數量。

密碼學被用於廣泛的用途,例如在古代美索不達米亞保護陶工的釉料配方,在印度寫秘密情書,或在古埃及保持魔法咒語的秘密。

現代密碼學

現代密碼學更加先進,比早期的方法更難破解。現代密碼學使用複雜的數學來加密數據,擁有太多可能的密鑰,使得暴力破解攻擊變得不可能。

密碼學在許多不同的方式中用於安全通信。如果你正在GitHub上閱讀此頁面,你可能會注意到網站地址以HTTPS開頭,這意味著你的瀏覽器和GitHub的網絡服務器之間的通信是加密的。如果有人能夠讀取你的瀏覽器和GitHub之間流動的互聯網流量,他們將無法讀取數據,因為數據是加密的。你的電腦甚至可能加密硬盤上的所有數據,因此如果有人偷走了它,他們將無法在沒有你的密碼的情況下讀取任何數據。

🎓 HTTPS 代表超文本傳輸協議安全

不幸的是,並非所有東西都是安全的。有些設備沒有安全性,有些設備使用容易破解的密鑰,有時甚至所有相同類型的設備使用相同的密鑰。有報導稱,一些非常個人的物聯網設備都具有相同的密碼,可以通過WiFi或藍牙連接到它們。如果你可以連接到自己的設備,你也可以連接到別人的設備。一旦連接,你可以訪問一些非常私密的數據,或者控制他們的設備。

💁 儘管現代密碼學的複雜性和聲稱破解加密可能需要數十億年,但量子計算的興起使得在非常短的時間內破解所有已知的加密成為可能!

對稱和非對稱密鑰

加密有兩種類型——對稱和非對稱。

對稱加密使用相同的密鑰來加密和解密數據。發送者和接收者都需要知道相同的密鑰。這是最不安全的類型,因為密鑰需要以某種方式共享。為了讓發送者向接收者發送加密消息,發送者首先可能需要向接收者發送密鑰。

對稱密鑰加密使用相同的密鑰來加密和解密消息

如果密鑰在傳輸過程中被盜,或者發送者或接收者被黑客攻擊並找到密鑰,加密就可以被破解。

對稱密鑰加密只有在黑客沒有獲得密鑰的情況下才是安全的——如果黑客獲得了密鑰,他們可以攔截並解密消息

非對稱加密使用兩個密鑰——一個加密密鑰和一個解密密鑰,稱為公鑰/私鑰對。公鑰用於加密消息,但不能用於解密,私鑰用於解密消息,但不能用於加密。

非對稱加密使用不同的密鑰來加密和解密。加密密鑰被發送給任何消息發送者,以便他們在將消息發送給擁有密鑰的接收者之前加密消息

接收者共享他們的公鑰,發送者使用這個公鑰來加密消息。一旦消息發送,接收者使用他們的私鑰解密消息。非對稱加密更安全,因為私鑰由接收者保密,從不共享。任何人都可以擁有公鑰,因為它只能用於加密消息。

對稱加密比非對稱加密更快,非對稱加密更安全。一些系統會同時使用兩者——使用非對稱加密來加密和共享對稱密鑰,然後使用對稱密鑰來加密所有數據。這使得在發送者和接收者之間共享對稱密鑰更安全,並且在加密和解密數據時更快。

保護你的物聯網設備

物聯網設備可以使用對稱或非對稱加密來保護。對稱加密更容易,但安全性較低。

對稱密鑰

當你設置你的物聯網設備與物聯網中心互動時,你使用了一個連接字串。以下是一個連接字串的範例:

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

此連接字串由三個部分組成,每個部分由分號分隔,每個部分都是一個鍵和值:

描述
HostNamesoil-moisture-sensor.azure-devices.netIoT 中樞的 URL
DeviceIdsoil-moisture-sensor設備的唯一 ID
SharedAccessKeyBhry+ind7kKEIDxubK61RiEHHRTrPl7HUow8cEm/mU0=設備和 IoT 中樞都知道的對稱密鑰

此連接字串的最後一部分 SharedAccessKey 是設備和 IoT 中樞都知道的對稱密鑰。此密鑰永遠不會從設備發送到雲端,或從雲端發送到設備。相反,它用於加密發送或接收的數據。

✅ 做一個實驗。你認為如果在連接 IoT 設備時更改連接字串的 SharedAccessKey 部分會發生什麼?試試看。

當設備首次嘗試連接時,它會發送一個共享訪問簽名 (SAS) 令牌,其中包含 IoT 中樞的 URL、訪問簽名將過期的時間戳(通常是從當前時間起 1 天),以及一個簽名。此簽名由 URL 和到期時間組成,並使用連接字串中的共享訪問密鑰加密。

IoT 中樞使用共享訪問密鑰解密此簽名,如果解密後的值與 URL 和到期時間匹配,則允許設備連接。它還會驗證當前時間是否在到期時間之前,以防止惡意設備捕獲真實設備的 SAS 令牌並使用它。

這是一種優雅的方式來驗證發送者是正確的設備。通過發送一些已知的數據,以未加密和加密的形式,服務器可以通過確保在解密加密數據時,結果與發送的未加密版本匹配來驗證設備。如果匹配,則說明發送者和接收者具有相同的對稱加密密鑰。

💁 由於到期時間,你的 IoT 設備需要知道準確的時間,通常從 NTP 服務器讀取。如果時間不準確,連接將失敗。

連接後,從設備發送到 IoT 中樞或從 IoT 中樞發送到設備的所有數據都將使用共享訪問密鑰加密。

✅ 你認為如果多個設備共享相同的連接字串會發生什麼?

💁 在代碼中存儲此密鑰是糟糕的安全實踐。如果黑客獲取了你的源代碼,他們可以獲取你的密鑰。發布代碼時也更困難,因為你需要為每個設備重新編譯並更新密鑰。最好從硬體安全模組加載此密鑰——這是一個 IoT 設備上的芯片,用於存儲可以被你的代碼讀取的加密值。

在學習 IoT 時,通常更容易將密鑰放在代碼中,就像你在之前的課程中所做的那樣,但你必須確保此密鑰未被檢入公共源代碼控制中。

設備有 2 個密鑰和 2 個相應的連接字串。這允許你輪換密鑰——即如果第一個密鑰被洩露,則從一個密鑰切換到另一個密鑰,並重新生成第一個密鑰。

X.509 證書

當你使用公鑰/私鑰對進行非對稱加密時,你需要向任何想要向你發送數據的人提供你的公鑰。問題是,接收你的密鑰的人如何確定這實際上是你的公鑰,而不是其他人假裝是你?你可以提供一個經過可信第三方驗證的證書,其中包含你的公鑰,稱為 X.509 證書。

X.509 證書是包含公鑰部分的數字文件。它們通常由稱為證書授權機構 (CA) 的一個或多個可信組織簽發,並由 CA 進行數字簽名以表明密鑰是有效的並且來自你。你信任證書並且相信公鑰來自證書所說的那個人,因為你信任 CA,類似於你信任護照或駕照,因為你信任簽發它的國家。證書是有成本的,所以你也可以“自簽名”,即自己創建一個證書並由你自己簽名,用於測試目的。

💁 你永遠不應該在生產環境中使用自簽名證書。

這些證書中包含許多字段,包括公鑰來自誰、簽發它的 CA 的詳細信息、它的有效期以及公鑰本身。在使用證書之前,最好通過檢查它是否由原始 CA 簽名來驗證它。

✅ 你可以在 Microsoft 理解 X.509 公鑰證書教程 中閱讀證書中的字段的完整列表

使用 X.509 證書時,發送者和接收者都將擁有自己的公鑰和私鑰,以及包含公鑰的 X.509 證書。然後他們以某種方式交換 X.509 證書,使用彼此的公鑰加密他們發送的數據,並使用自己的私鑰解密他們接收的數據。

與其共享公鑰,不如共享證書。證書的使用者可以通過檢查簽發它的證書授權機構來驗證它是否來自你。

使用 X.509 證書的一個很大優點是它們可以在設備之間共享。你可以創建一個證書,將其上傳到 IoT 中樞,並將其用於所有設備。每個設備只需知道私鑰即可解密它從 IoT 中樞接收的消息。

你的設備用於加密發送到 IoT 中樞的消息的證書由 Microsoft 發佈。它是許多 Azure 服務使用的相同證書,有時內置於 SDK 中

💁 記住,公鑰就是公鑰。Azure 公鑰只能用於加密發送到 Azure 的數據,不能用於解密,因此可以在任何地方共享,包括在源代碼中。例如,你可以在 Azure IoT C SDK 源代碼 中看到它。

✅ X.509 證書有很多術語。你可以在 X.509 證書術語的外行指南 中閱讀一些你可能會遇到的術語的定義

生成和使用 X.509 證書

生成 X.509 證書的步驟如下:

  1. 創建一對公鑰/私鑰。最廣泛使用的生成公鑰/私鑰對的算法之一稱為 Rivest–Shamir–Adleman(RSA)。

  2. 提交公鑰及相關數據以供簽名,由 CA 簽名或自簽名

Azure CLI 有命令可以在 IoT 中樞中創建新的設備身份,並自動生成公鑰/私鑰對並創建自簽名證書。

💁 如果你想查看詳細步驟,而不是使用 Azure CLI,你可以在 Microsoft IoT 中樞文檔中的使用 OpenSSL 創建自簽名證書教程 中找到它

任務 - 使用 X.509 證書創建設備身份

  1. 運行以下命令以註冊新設備身份,自動生成密鑰和證書:

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

    <hub_name> 替換為你用於 IoT 中樞的名稱。

    這將創建一個 ID 為 soil-moisture-sensor-x509 的設備,以區分你在上一課中創建的設備身份。此命令還會在當前目錄中創建 2 個文件:

    • soil-moisture-sensor-x509-key.pem - 此文件包含設備的私鑰。
    • soil-moisture-sensor-x509-cert.pem - 這是設備的 X.509 證書文件。

    保管好這些文件!私鑰文件不應檢入公共源代碼控制中。

任務 - 在你的設備代碼中使用 X.509 證書

通過相關指南將你的 IoT 設備連接到雲端,使用 X.509 證書:


🚀 挑戰

有多種方法可以創建、管理和刪除 Azure 服務,例如資源組和 IoT 中樞。一種方法是 Azure 入口網站 - 一個基於網頁的界面,為你提供管理 Azure 服務的圖形用戶界面。

前往 portal.azure.com 並調查入口網站。看看你是否可以使用入口網站創建一個 IoT 中樞,然後刪除它。

提示 - 通過入口網站創建服務時,你不需要提前創建資源組,可以在創建服務時創建一個。確保在完成後刪除它!

你可以在 Azure 入口網站文檔 中找到大量文檔、教程和指南。

課後測驗

課後測驗

回顧與自學

作業

構建一個新的 IoT 設備