今日目標是了解醫療 IoT 裝置的資安風險,包含數據竄改、裝置控制與隱私外洩,並認識 FDA 警告案例的重要性。學習如何透過加密傳輸、端點安全與權限控管,降低 IoT 資安風險。最後透過 Python 範例模擬 IoT 資料加密傳輸,理解安全傳輸的重要性。
一、理論重點
醫療 IoT(Internet of Things)裝置 包含心律監測器、智慧血壓計、胰島素幫浦等,會自動收集並上傳病人數據。
資安風險:
二、案例分享
2017 年,美國 FDA 公布 Abbott 心律調節器安全漏洞,攻擊者可透過無線電信號遠端存取設備,竄改程式參數,可能導致心律不整甚至生命危險,迫使醫院緊急召回 46 萬台裝置進行韌體更新,突顯醫療 IoT 安全的迫切性。
三、簡單程式範例
server.py
# server.py
from cryptography.fernet import Fernet
from flask import Flask, request, jsonify
import json
app = Flask(__name__)
# 和 device.py 要用同一把金鑰
key = b'nEkD-a1CJMwTjTRbfi8VFIb9Bo6hLUwthb652hWEIKw='
cipher = Fernet(key)
@app.route('/submit_record', methods=['POST'])
def submit_record():
try:
data = request.json
device_id = data.get("device_id")
encrypted_payload = data.get("payload")
if not device_id or not encrypted_payload:
return jsonify({"status": "error", "message": "Missing fields"}), 400
# 解密資料
decrypted_bytes = cipher.decrypt(encrypted_payload.encode())
record = json.loads(decrypted_bytes.decode())
# 這裡可以進一步存資料庫,或做其他處理
print(f"Received data from {device_id}: {record}")
return jsonify({"status": "success", "record": record}), 200
except Exception as e:
return jsonify({"status": "error", "message": str(e)}), 500
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8000, debug=True)
device.py
# device.py
from cryptography.fernet import Fernet
import requests
import json
# 和 server.py 要用同一把金鑰
key = b'nEkD-a1CJMwTjTRbfi8VFIb9Bo6hLUwthb652hWEIKw='
cipher = Fernet(key)
# 模擬一筆醫療紀錄
payload = {
"device_id": "device-001",
"heart_rate": 74,
"systolic": 118,
"diastolic": 76,
"note": "正常"
}
# 加密 JSON
encrypted = cipher.encrypt(json.dumps(payload).encode())
# 傳送到伺服器
url = "http://127.0.0.1:8000/submit_record"
res = requests.post(url, json={
"device_id": payload["device_id"],
"payload": encrypted.decode()
})
print(res.status_code, res.json())
這兩個程式碼整合了一套加密傳輸的過程,device.py 模擬 IoT 裝置將醫療資料加密後傳送到伺服器,server.py 則建立 API 接收這些加密資料,解密後回傳或進一步處理,整個流程確保資料在傳輸過程中安全。執行結果如下