ฉันจะรักษาความปลอดภัยการสื่อสารระหว่างแอพและอุปกรณ์ IoT ได้อย่างไร


18

ฉันกำลังทำงานในโครงการที่มีการสื่อสาร Bluetooth ระหว่างแอปพลิเคชั่นมือถือ (ปัจจุบันใช้แพลตฟอร์ม Ionic) และอุปกรณ์ฝังตัว สำหรับการเปรียบเทียบผลิตภัณฑ์ของเรามีลักษณะคล้ายกับการล็อคสมาร์ท

ความปลอดภัยเป็นเรื่องที่สำคัญที่สุดและเรากำลังมองหาวิธีเพื่อให้มั่นใจว่าฮาร์ดแวร์และซอฟต์แวร์ของเราจะไม่ถูกแฮก ขั้นตอนใดที่เราควรทำเพื่อให้มั่นใจว่าระบบของเราปลอดภัย

แก้ไข: ใช่เรากำลังเข้ารหัสการสื่อสารและใช้ HTTPS เมื่ออุปกรณ์สื่อสารกับเซิร์ฟเวอร์ของเรา


ใช้ HTTPS หรือไม่ คุณกำลังเข้ารหัสอุปกรณ์ทั้งสองหรือไม่ การเข้ารหัสลับ?
Mawg กล่าวว่าคืนสถานะโมนิก้า


2
@Mawg เท่าที่ฉันทราบ HTTPS ไม่สามารถใช้ได้กับบลูทู ธ (หรืออย่างน้อยก็ไม่ได้อยู่ในเกณฑ์ปกติ / มีเหตุผล)
goldilocks

1
ฉันลงคะแนนให้ปิดคำถามนี้เป็นหัวข้อนอกเพราะไม่สามารถแสดงได้ว่านี่เป็น IoT ที่เฉพาะเจาะจงอย่างไร มันเป็นเพียงการรักษาความปลอดภัยการสื่อสารระหว่างอุปกรณ์
Helmar

4
@Helmar การสื่อสารระหว่างอุปกรณ์เป็นคุณสมบัติที่สำคัญของ IoT แม้จะเป็นคุณสมบัติที่กำหนดดังนั้นฉันจึงไม่สามารถดูได้ว่าทำไมคำถามนี้ถึงไม่เป็นที่นิยม
Gilles 'หยุดความชั่วร้าย'

คำตอบ:


13

เพื่อให้แน่ใจว่าอุปกรณ์ของคุณปลอดภัยพอฉันมีเคล็ดลับหลายประการ:

  1. เพิ่มการเข้ารหัสบางอย่างเพื่อการสื่อสาร Bluetooth ฉันขอแนะนำให้เก็บคีย์เข้ารหัสไว้ในอากาศ ตัวอย่างเช่นคุณอาจขอให้ผู้ใช้สแกนรหัส QR ที่อยู่บนอุปกรณ์พิมพ์ในกล่องและอื่น ๆ ที่การตั้งค่าเริ่มต้นของแอพมือถืออาจมีรหัส AES หรือไม่ แล้วแต่คุณ. นี่คือการป้องกันไม่ให้ใครบางคนเห็นรหัสผ่านที่ส่งผ่านอากาศด้วยข้อความธรรมดา
  2. หากทำได้ให้อยู่ห่างจากโหมด ECB (ใช้ CBC) ของอัลกอริทึมการเข้ารหัสที่คุณเลือกเนื่องจากอาจให้ข้อมูลบางอย่างกับข้อมูลที่ส่ง ข้อมูลเพิ่มเติมเกี่ยวกับที่สามารถพบได้ที่นี่
  3. บนการส่งข้อมูลบลูทู ธ ตรวจสอบให้แน่ใจว่าได้รวม ID ที่ไม่ซ้ำกันเพื่อไม่ให้ข้อความซ้ำ (ตัวอย่างเช่นคุณอาจรวมเวลาประทับ) คุณอาจใช้ระบบที่คล้ายกับ TOTP
  4. ใส่พอร์ตบนอุปกรณ์ที่อนุญาตให้มันติดไฟได้ง่ายดังนั้นในกรณีที่คุณรู้ว่าซอฟต์แวร์มีข้อผิดพลาด (และด้วยเหตุผลบางอย่างที่คุณไม่สามารถอัปเดต OTA ได้) อุปกรณ์ไม่ได้เป็นกระดาษที่มีราคาแพงเพียงอุปกรณ์ ที่ต้องเชื่อมต่อกับพีซีและต่อเข้ากับซอฟต์แวร์ใหม่
  5. พิเศษ: เพื่อให้แน่ใจว่าคนที่มีใบรับรองรูทปลอม (อาจออกเองและติดตั้งบนอุปกรณ์ไคลเอนต์) ไม่สามารถดักการสื่อสารเซิร์ฟเวอร์ของคุณให้ตรวจสอบใบรับรอง HTTPS นี่คือ SO ที่ขอให้สำหรับ Android คุณต้องสามารถค้นหาทรัพยากรที่คล้ายกันสำหรับ iOS ได้เช่นกัน

นอกจากนี้ถ้าคุณต้องการที่จะเรียนรู้เพิ่มเติมเกี่ยวกับการเข้ารหัสและการเข้ารหัสที่คุณจะใช้เพื่อรักษาความปลอดภัยอุปกรณ์ของคุณตรวจสอบนี้ (ฟรี) ebook มันพูดถึงการใช้งานที่ดีและไม่ดีของอัลกอริทึมการเข้ารหัสและควรช่วยคุณในการรักษาความปลอดภัยผลิตภัณฑ์ของคุณ (หมายเหตุ 1: ได้โปรดอย่าสร้างอัลกอริทึมของคุณเองหมายเหตุ 2: ฉันไม่เกี่ยวข้องกับ crypto101 หรือ lvh)


2
“ ถ้าทำได้ให้อยู่ห่างจาก ECB” ไม่คำแนะนำที่ไม่ดี คำแนะนำที่พอใช้ได้คือ“ ไม่เคยใช้ ECB” แต่ก็ยังไม่สมบูรณ์ คำตอบที่ดีกว่าจะบอกว่าถ้าคุณกำลังพิมพ์ตัวอักษร CBC เป็นรหัสของคุณคุณกำลังทำมันผิด โดยเฉพาะอย่างยิ่ง AES-CBC ไม่รับประกันความสมบูรณ์หรือความถูกต้องของการสื่อสาร
Gilles 'หยุดความชั่วร้าย'

@Gilles ECB นั้นดีกว่าอุปกรณ์ iot ทุกวันนี้ที่เพิ่งส่งข้อมูลแบบธรรมดา ๆ หรือ xor ด้วยค่าที่ตั้งไว้ แต่ใช่ ECB ไม่ได้ทำให้ผลิตภัณฑ์ของคุณ "ไม่แฮ็ก" (ในทางเทคนิคแล้วไม่มีอะไรทำ แต่ คุณสามารถพยายามทำบางสิ่งที่จะทำให้มันปลอดภัยที่สุดเท่าที่จะเป็นไปได้ในปัจจุบันเป็นระยะเวลานานและนั่นไม่เกี่ยวข้องกับ ECB แต่เป็นการใช้งานที่เหมาะสมของ AES-CBC 256)
Ave

13

หากคุณสามารถใช้ TCP แบบครบวงจรให้ใช้ TLS แบบ end-to-end (เช่นด้วย HTTPS)

อย่าประดิษฐ์ล้อเลื่อนโดยเฉพาะอย่างยิ่งเมื่อพูดถึงการเข้ารหัส - คนส่วนใหญ่เข้าใจผิด เว้นแต่อุปกรณ์ที่มีมากเกินไปมีทรัพยากร จำกัด เพื่อสนับสนุน TLS ถ้าคุณได้รับลงไปถึงระดับของ AES ที่คุณกำลังทำมันผิด # 1 ข้อผิดพลาดคือการเข้ารหัสและลืมที่จะตรวจสอบ - ถ้าคุณมีช่องทางการเข้ารหัสระหว่างเซิร์ฟเวอร์ของคุณกับคนที่อยู่ตรงกลางแทนที่จะเป็นช่องทางที่เข้ารหัสระหว่างเซิร์ฟเวอร์และอุปกรณ์ของคุณแล้วการเข้ารหัสไม่มีประโยชน์ใด ๆ . หากคุณไม่สามารถใช้ TLS ตรวจสอบให้แน่ใจว่าโปรโตคอลใดที่คุณใช้ตรวจสอบสิทธิ์ทุกอย่างและเข้ารหัสสิ่งที่ต้องเป็นความลับ

ในการใช้ TLS อย่างปลอดภัยให้คิดถึงสิ่งที่รับประกันว่าคุณต้องมีจากมุมมองของผู้เข้าร่วมแต่ละคน โดยทั่วไปแล้วอุปกรณ์จำเป็นต้องรู้ว่ามันกำลังพูดคุยกับเซิร์ฟเวอร์ที่ถูกกฎหมาย นั่นหมายความว่าจะต้องตรวจสอบใบรับรองของเซิร์ฟเวอร์ อุปกรณ์ต้องมีใบรับรอง X.509 ของหน่วยงานออกใบรับรองที่บันทึกว่าเชื่อถือได้ ต้องมีที่เก็บข้อมูลซึ่งผู้โจมตีไม่สามารถแก้ไขได้ แต่ไม่ต้องการการเก็บข้อมูลที่เป็นความลับ โปรดทราบว่าคุณไม่ควรกำหนดรหัสใบรับรองของเซิร์ฟเวอร์โดยตรงเนื่องจากจะไม่อนุญาตให้คุณเปลี่ยนใบรับรองนั้นหากถูกบุกรุก แต่อุปกรณ์จะเก็บข้อมูลประจำตัวที่คาดหวังไว้แทน(ชื่อโฮสต์) ของเซิร์ฟเวอร์และใบรับรองของผู้ออกใบรับรองที่รับรองว่ากุญแจสาธารณะบางอันเป็นของชื่อโฮสต์ที่คาดหวัง อย่าซ้ำล้ออีกครั้งพึ่งพาการตรวจสอบใบรับรองจากห้องสมุดหรือแอปพลิเคชัน TLS ของคุณ

หากเซิร์ฟเวอร์จำเป็นต้องรู้ว่ามันกำลังพูดคุยกับลูกค้าที่ถูกต้องลูกค้าแต่ละคนต้องมีใบรับรองลูกค้าของตนเอง ที่ต้องมีการจัดเก็บข้อมูลลับบนไคลเอนต์ ส่งใบรับรองไคลเอ็นต์ไปยังฟังก์ชันการเปิดเซสชัน TLS จากไลบรารี TLS ของคุณหรือตั้งค่าในการกำหนดค่าแอปพลิเคชัน

ที่ดูแลการสื่อสารระหว่างเซิร์ฟเวอร์ของคุณกับอุปกรณ์ของคุณ หากแอปพลิเคชันมือถือสามารถพูดคุยกับอุปกรณ์ได้โดยตรง (เช่นเพื่อให้สามารถทำการเชื่อมต่อได้ในขณะที่อยู่ในเครือข่าย wifi ในพื้นที่) คุณต้องทำการจับคู่ระหว่างสวิตช์อัจฉริยะกับโทรศัพท์มือถือก่อน การจับคู่หมายถึงการแลกเปลี่ยนกุญแจโดยเฉพาะอย่างยิ่งการแลกเปลี่ยนกุญแจสาธารณะถ้าทรัพยากรอนุญาตหรือมิฉะนั้นข้อตกลงของคีย์ลับ เป้าหมายของการจับคู่นี้คือเพื่อให้แน่ใจว่าอุปกรณ์แต่ละเครื่องรู้ว่าใครกำลังคุยอยู่

คุณจะต้องรักษาความปลอดภัยของช่องสัญญาณควบคุมเช่นกันไม่ว่าจะโดยตรงจากอุปกรณ์มือถือไปยังสมาร์ทสวิตช์หรือผ่านเซิร์ฟเวอร์ คิดเกี่ยวกับการอนุญาต: มีระดับการเข้าถึงสวิตช์ที่แตกต่างกันหรือไม่เช่นระดับการควบคุมที่อนุญาตให้ทำการกำหนดค่าใหม่และช่องสัญญาณพื้นฐานที่อนุญาตให้เปิด / ปิดสวิตช์ได้หรือไม่ โดยทั่วไปขั้นตอนนี้จะได้รับการจัดการโดยการรับรองความถูกต้องหลังจากสร้างแชนเนลที่ปลอดภัย (TLS ถ้าเป็นไปได้)

ข้อควรพิจารณาอีกประการคือการอัปเดตเฟิร์มแวร์ นั่นเป็นสิ่งที่ยุ่งยาก: ในอีกด้านหนึ่งไม่มีสิ่งใดที่เป็นความปลอดภัยแน่นอนดังนั้นคุณจะมีแพตช์รักษาความปลอดภัยที่จะใช้ทันที ในทางกลับกันกลไกการอัพเกรดเฟิร์มแวร์เป็นสิ่งที่ซับซ้อนและอาจมีข้อบกพร่อง อย่างน้อยที่สุดให้แน่ใจว่าการอัพเกรดเฟิร์มแวร์ของคุณได้รับการลงชื่อ การใช้ความปลอดภัยอย่างแท้จริงของช่องทางการสื่อสารสำหรับการอัพเกรดนั้นเป็นการหลบหลีกเพราะช่องสัญญาณที่เชื่อถือได้มีขนาดใหญ่กว่าการตรวจสอบความปลอดภัยแบบคงที่และบางครั้งคุณอาจต้องการใช้การอัปเดตเฟิร์มแวร์โดยไม่มีการเชื่อมต่อเครือข่าย นอกเหนือจากการตรวจสอบลายเซ็นแล้วคุณควรมีการป้องกันการย้อนกลับเพื่อให้ฝ่ายตรงข้ามสามารถ '

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.