Các chương trình được tải lên bảng NodeMCU có thể được trích xuất không?


13

Tôi đang sử dụng bảng NodeMCU có khả năng WiFi để xây dựng trình theo dõi tài sản đơn giản. Tôi đã quản lý để tìm một vài bản phác thảo Arduino cho phép kết nối với Azure IoT Hub và gửi tin nhắn.

Một trong những khóa tôi cần "tải" lên bảng là chuỗi Kết nối thiết bị Azure và tất nhiên là cả SSID và mật khẩu WiFi.

Nỗi sợ hãi của tôi là ai đó có thể chỉ cần lấy bảng và "tải xuống" các tệp để có quyền truy cập vào thông tin bảo mật.

Là nỗi sợ hãi của tôi không có cơ sở hay việc mất thông tin xác thực là mối đe dọa thực sự mà tôi cần phải giảm thiểu?


3
Tôi nghĩ rằng câu trả lời từ @Mike Ounsworth và Bence Kaulics được đưa ra cho tôi một lựa chọn hợp lý. Thật không may, tôi không thể đánh dấu cả hai là câu trả lời được chấp nhận.
ram

Câu trả lời:


12

[từ chối trách nhiệm: Tôi là một chuyên gia bảo mật / tiền điện tử và giải quyết các câu hỏi về kiến ​​trúc bảo mật như thế này mỗi ngày.]

Bạn đã vấp phải vấn đề lưu trữ thông tin đăng nhập theo cách mà một quy trình không giám sát có thể truy cập chúng, nhưng kẻ tấn công thì không thể. Đây là một vấn đề nổi tiếng và rất khó giải quyết.

Nếu thiết bị IoT của bạn có kho khóa phần cứng tích hợp trên bo mạch chủ, như một số TPM hoặc tương đương với Kho lưu trữ được hỗ trợ phần cứng của Android hoặc Apple Secure Eniances, thì bạn có thể sử dụng nó.

Với các máy chủ truyền thống, bạn có thể sử dụng HSM hoặc Thẻ thông minh, nhưng giải pháp phần mềm đầy đủ duy nhất mà tôi biết là lấy khóa AES từ một số "dấu vân tay phần cứng" được tạo bằng cách kết hợp số sê-ri của tất cả các thiết bị phần cứng. Sau đó sử dụng khóa AES đó để mã hóa thông tin đăng nhập. Một quá trình chạy trên cùng một máy chủ có thể tái tạo lại khóa AES và giải mã thông tin đăng nhập, nhưng một khi bạn trích xuất tệp từ máy chủ, về cơ bản nó không thể giải mã được.

IoT ném cờ lê vào đó vì hai lý do:

  1. Giả định rằng số sê-ri phần cứng là duy nhất có thể không giữ và

  2. Không giống như máy chủ, kẻ tấn công có quyền truy cập vật lý vào thiết bị, do đó có thể lấy vỏ trên thiết bị để chạy chương trình giải mã.

Cả mã hóa phần cứng (TPM) và mã hóa "vân tay phần cứng" đều bị xáo trộn tốt nhất bởi vì, về cơ bản, nếu một quy trình cục bộ có thể giải mã dữ liệu, thì kẻ tấn công có thể chạy quy trình cục bộ đó cũng có thể giải mã nó.


Vì vậy, thủ thuật tiêu chuẩn có vẻ như nó không hoạt động ở đây. Câu hỏi đầu tiên bạn cần tự hỏi mình là:

  • Mô hình mối đe dọa của tôi là gì / dự án này nằm ở đâu trên Secure <--> Convenientquy mô?

Cuối cùng, tôi nghĩ bạn cần phải quyết định điều đó security > conveniencevà yêu cầu con người nhập thông tin đăng nhập sau mỗi lần khởi động (sử dụng câu trả lời như câu trả lời của @ BenceKaulics ), hoặc bạn quyết định điều đó security < conveniencevà chỉ cần đặt thông tin đăng nhập trên thiết bị, có thể sử dụng một số thông tin ẩn giấu nếu bạn cảm thấy điều đó làm nên sự khác biệt


Đây là một vấn đề khó được thực hiện khó hơn bởi bản chất của các thiết bị IoT.

Để đầy đủ, giải pháp công nghiệp toàn diện cho vấn đề này là:

  • Cung cấp cho mỗi thiết bị IoT một khóa công khai RSA duy nhất tại thời điểm sản xuất. Ghi lại khóa công khai này trong một db so với số sê-ri của thiết bị.
  • Lưu trữ các thông tin nhạy cảm trên một máy chủ phù hợp, hãy gọi nó là "cổng".
  • Khi một thiết bị IoT xác thực với cổng (sử dụng khóa RSA của nó), cổng sẽ mở một phiên cho nó bằng thông tin xác thực được lưu trữ và trao lại mã thông báo phiên cho thiết bị.
  • Để bảo mật tốt nhất, cổng là một cổng vật lý (hoặc VPN) để tất cả lưu lượng truy cập từ thiết bị IoT đi qua cổng và bạn có quyền kiểm soát nhiều hơn đối với các quy tắc và công cụ tường lửa - lý tưởng là ngăn thiết bị có đường truyền trực tiếp (không phải VPN) truy cập Internet.

Bằng cách này, và kẻ tấn công thỏa hiệp một thiết bị có thể mở phiên, nhưng không bao giờ có quyền truy cập trực tiếp vào thông tin đăng nhập.


2
Đúng. Một phần lớn của vấn đề là những gì đang cố gắng được bảo vệ ở đây là bí mật được chia sẻ đó là mật khẩu wifi. Bí mật được chia sẻ là một ý tưởng tồi khi một thiết bị có thể được mổ xẻ. Một thiết kế tốt hơn sẽ phân tách từng phiên bản của thiết bị (hoặc máy tính khác) vào môi trường bảo mật của riêng nó với một kênh bảo mật duy nhất giữa mỗi tiện ích riêng lẻ và các hệ thống mà chúng cần liên lạc. Đối với vấn đề đó, wifi có thể không phù hợp lắm cho ứng dụng dù sao so với một số sơ đồ 2,4 GHz điểm-điểm hoặc thậm chí là giao thức "Esp Now".
Chris Stratton

1
Điểm tốt. Bạn có thể khắc phục sự cố bí mật được chia sẻ bằng cách sử dụng chứng chỉ ứng dụng khách doanh nghiệp WPA2 thay vì mật khẩu SSID (nếu thiết bị IoT đủ lớn để có ngăn xếp TLS, nhiều người không có). Tôi không biết gì về Azure IoT Hub, nhưng tôi cho rằng các chuỗi Kết nối thiết bị Azure đó là duy nhất trên mỗi thiết bị. Thật không may, đây có vẻ là một màu đen và trắng khá sạch giữa "DIY không bảo mật" và "Bảo mật quy mô công nghiệp" không có nhiều ở giữa.
Mike Ounsworth

2
Tôi tự hỏi, nếu tôi có thể mở một phiên theo ý muốn, tại sao tôi lại cần thông tin đăng nhập?
Andrew Savinykh

1
@AndrewSavinykh Phụ thuộc vào thông tin đăng nhập là gì. Có lẽ tất cả những gì họ làm là mở một phiên, trong trường hợp này, không có nhiều lý do. Nhưng có thể chúng là thông tin đăng nhập AD miền Windows hoặc cấp quyền truy cập vào các API bổ sung thường không được sử dụng / truy cập từ thiết bị IoT. Có thể bạn ổn với các phiên đến từ các thiết bị bị xâm nhập, nhưng không ổn với các phiên đến từ máy tính xách tay của kẻ tấn công. Vâng, nó được sử dụng trường hợp cụ thể khá nhanh chóng.
Mike Ounsworth

3
Số seri??? Tìm một số sê-ri duy nhất không phải là một vấn đề, nhưng số sê-ri không phải là bí mật. Chúng vô dụng để tạo thành chìa khóa. Trường hợp trên trái đất đang sử dụng các số sê-ri để tạo thành một khóa lừa theo tiêu chuẩn của Google?
Gilles 'SO- ngừng trở nên xấu xa'

6

Mối đe dọa là có thật nhưng may mắn thay, đó không phải là bạn đầu tiên hoặc duy nhất có mối quan tâm bảo mật này.

Những gì bạn cần là Trình quản lý WiFi ESP là những gì bạn cần ở đây.

Với thư viện này, ESP không có phiên đã lưu sẽ chuyển sang chế độ AP và sẽ lưu trữ một cổng web. Nếu bạn kết nối với AP này bằng PC hoặc điện thoại thông minh, thì bạn sẽ có thể định cấu hình thông tin xác thực WiFi thông qua trang web.

Bạn không phải mã hóa thông tin quan trọng và bạn có thể sử dụng thiết bị của mình trên bất kỳ mạng WiFi nào bạn muốn mà không cần phải phản xạ lại.

Làm thế nào nó hoạt động

  • khi ESP của bạn khởi động, nó sẽ thiết lập nó ở chế độ Station và cố gắng kết nối với Điểm truy cập đã lưu trước đó

  • nếu điều này không thành công (hoặc không lưu mạng trước đó), nó sẽ chuyển ESP sang chế độ Điểm truy cập và tạo ra DNS và Máy chủ web (ip mặc định 192.168.4.1)

  • sử dụng bất kỳ thiết bị hỗ trợ wifi nào có trình duyệt (máy tính, điện thoại, máy tính bảng) kết nối với Điểm truy cập mới được tạo

  • vì Cổng thông tin Captive và máy chủ DNS, bạn sẽ có loại cửa sổ bật lên 'Tham gia vào mạng' hoặc nhận bất kỳ tên miền nào bạn cố gắng truy cập được chuyển hướng đến cổng thông tin cấu hình

  • chọn một trong những điểm truy cập được quét, nhập mật khẩu, nhấp vào lưu

  • ESP sẽ cố gắng kết nối. Nếu thành công, nó từ bỏ quyền kiểm soát trở lại ứng dụng của bạn. Nếu không, kết nối lại với AP và cấu hình lại.

(Tài liệu quản lý WiFi ESP)


1
Hoặc chỉ cần tải xuống các bản ghi hoặc bất cứ điều gì trong khi nó đang ở chế độ AP. Hy vọng rằng người đăng không cố gắng sử dụng wifi để theo dõi tài sản.
Chris Stratton

1
@ChrisStratton :-) thực sự, tôi đang cố gắng sử dụng WiFi để theo dõi tài sản. May mắn thay, mạng WiFI tôi sử dụng là công khai và mở, nhưng tôi lo lắng về những tác động khi tôi cần sử dụng mạng khác cần mật khẩu. Ngoài ra, thực tế chuỗi kết nối AzureIoT Hub có trên thiết bị.
ram

2
@rams Chắc chắn, đọc EEPROM của thiết bị sẽ không phải là một nhiệm vụ lớn.
Bence Kaulics

3
@rams Về phần cứng của bạn, có thể đọc EPROM. Các thiết bị mới hơn có thể có một số vùng flash an toàn được bảo vệ tốt hơn. Chắc chắn đây là một vấn đề đã biết cần hỗ trợ trên chip để thử và làm đúng.
Sean Houlihane

2
@SeanHoulihane - ESP8266 không có EEPROM. Đèn flash SPI mà nó sử dụng cho mọi thứ (bao gồm cả loại mô phỏng chức năng Arduino) nằm ngoài ESP8266. Ngay cả trong mô-đun đa chip, đó là một khuôn riêng biệt có thể được thăm dò trong một phòng thí nghiệm đàng hoàng.
Chris Stratton

3

Có, họ có thể truy cập mật khẩu của bạn nếu bạn để nó dưới dạng văn bản thuần túy.

Điểm hay là nhiều giao diện kết nối wifi chấp nhận mật khẩu băm. Mặc dù những cái tôi đã sử dụng băm md5 được chấp nhận và md5 không an toàn lắm, nhưng đây vẫn là một thử thách rất khó đối với kẻ thù trung bình. Tùy thuộc vào tệp cấu hình của bạn, bạn có thể nêu tên của thuật toán băm và sau đó viết mật khẩu hoặc bạn sử dụng mặc định giao diện wifi của bạn sử dụng.


3
Nếu họ có thể trích xuất một mật khẩu băm hoạt động trong khi băm những gì để ngăn họ sử dụng nó mà không bao giờ đảo ngược nó?
Chris Stratton

1
@ChrisStratton bạn nói đúng. Các cách để ngăn chặn nó là dành cho Bảo mật thông tin SE, câu hỏi này yêu cầu ngăn ngừa mất thông tin đăng nhập. Tuy nhiên, mật khẩu băm vẫn không thể được sử dụng bởi điện thoại di động để kết nối với mạng mà không cần phần mềm bổ sung.
atakanyenel

1
Có, trong thực tế, nó sẽ cung cấp một số bảo vệ trong trường hợp sử dụng lại mật khẩu wifi trên một số hệ thống khác, nhưng không có nhiều kết nối trái phép với điểm truy cập wifi đó.
Chris Stratton

1
@ChrisStratton yeah, ví dụ như danh sách trắng MAC an toàn hơn nhiều so với việc chỉ cần có mật khẩu và băm mật khẩu, nhưng các bước này là để bảo mật wifi nói chung, không phải để bảo mật thông tin đăng nhập trên các thiết bị công cộng.
atakanyenel

2
Không, danh sách trắng MAC là một trò đùa - không có bí mật nào cả. Và tất nhiên, MAC dễ dàng được trích xuất từ ​​ESP8266 bị đánh cắp hoặc đèn flash SPI của nó. Về nơi duy nhất danh sách MAC sẽ giúp chống lại những người sử dụng GUI để tham gia mạng wifi hoặc nếu một điểm truy cập đang ngồi đó chờ kết nối từ máy khách có thể xuất hiện vào một ngày nào đó, nhưng chưa bao giờ kết nối với nó - tức là , kiếm trong các loại đá.
Chris Stratton

1

Câu trả lời đơn giản - CÓ. Nó có thể được thực hiện. Ít nhất, bạn phải thực hiện một số loại obfuscation để cung cấp sự bảo vệ tối thiểu.


1
Obfuscation làm cho việc tìm hiểu cách thức thiết bị thực hiện mọi thứ khó khăn hơn , nhưng việc bảo vệ chống lại việc nhân bản thiết bị là vô ích . Việc bảo vệ chống trích xuất thông tin đăng nhập là vô ích: tất cả những gì bạn phải làm là chạy phần sụn trong trình giả lập.
Gilles 'SO- ngừng trở nên xấu xa'

Hoàn toàn đồng ý. Động lực của tôi đưa ra câu trả lời như vậy là lưu ý rằng <bảo mật mạng IoT phải được xem xét>. @Mike Ounsworth đã đưa ra câu trả lời chi tiết đề xuất các giải pháp sử dụng cơ sở hạ tầng AES và / hoặc RSA. Tôi đang xem xét đưa ra một câu trả lời nữa nhưng tôi không chắc sẽ nhúng vào mật mã như thế nào (tôi cũng có nhiều năm trong các giải pháp thanh toán và ngân hàng). Suy nghĩ của tôi là chúng tôi phải cung cấp những lời khuyên thực tế / cân bằng vì thông thường mọi người sẽ tránh đi sâu vào mật mã để bảo vệ các thiết bị IoT trong sân sau của mình.
Amit Vujic

1
Nếu mọi người muốn tạo ra các thiết bị không an toàn vì họ không thể bận tâm tìm ra cách tạo ra các thiết bị an toàn, tôi thấy không có lý do gì để kích hoạt chúng.
Gilles 'SO- ngừng trở nên xấu xa'

Kinh nghiệm của tôi là mọi người muốn học nhưng một lần nữa, phải có sự cân bằng giữa mức độ bảo mật và độ phức tạp. Có một câu chuyện nổi tiếng trong ngành thanh toán liên quan đến SET ( en.wikipedia.org/wiki/Secure_Electronic_Transaction ) rất an toàn nhưng phức tạp để thực hiện và vì thực tế thất bại.
Amit Vujic

2
Obfuscation thêm phức tạp mà không cải thiện an ninh. Đó không phải là sự cân bằng.
Gilles 'SO- ngừng trở nên xấu xa'
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.