Belkin Wemo Smart Plug V2 – lỗi tràn bộ đệm sẽ không được vá

Belkin Wemo Smart Plug V2 – lỗi tràn bộ đệm sẽ không được vá

Nút nguồn: 2657924

Các nhà nghiên cứu tại công ty bảo mật IoT Sternum đào vào một phích cắm điện tự động hóa gia đình phổ biến từ thương hiệu thiết bị nổi tiếng Belkin.

Mô hình họ nhìn vào, Ổ Cắm Thông Minh Mini Wemo (F7C063) dường như sắp hết thời hạn sử dụng, nhưng chúng tôi đã tìm thấy rất nhiều trong số chúng được rao bán trực tuyến, cùng với lời khuyên và hướng dẫn chi tiết trên trang web của Belkin về cách thiết lập chúng.

Mặc dù có thể cũ (theo nghĩa hiện đại ngắn hạn), nhưng các nhà nghiên cứu lưu ý rằng:

Mối quan tâm ban đầu của chúng tôi đối với thiết bị đến từ việc có một số thiết bị này nằm xung quanh phòng thí nghiệm của chúng tôi và được sử dụng tại nhà của chúng tôi, vì vậy chúng tôi chỉ muốn xem mức độ an toàn (hoặc không) của chúng khi sử dụng. [… T]của anh ấy dường như là một thiết bị tiêu dùng khá phổ biến[; b] Dựa trên những con số này, thật an toàn khi ước tính rằng chỉ riêng tổng doanh số bán hàng trên Amazon phải lên đến hàng trăm nghìn.

Nói một cách đơn giản, có rất nhiều người đã mua và cắm những thứ này vào nguồn điện, và hiện đang sử dụng chúng để điều khiển các ổ cắm điện trong nhà của họ.

Nói một cách đơn giản, “phích cắm thông minh” là một ổ cắm điện mà bạn cắm vào ổ cắm trên tường hiện có và đặt một công tắc điều khiển bằng Wi-Fi giữa ổ cắm điện ở mặt trước của ổ cắm trên tường và ổ cắm điện ở mặt trước trông giống hệt nhau. mặt trước của phích cắm thông minh. Hãy nghĩ về nó giống như một bộ đổi nguồn thay vì chuyển đổi, chẳng hạn như ổ cắm Euro tròn thành ổ cắm hình tam giác của Vương quốc Anh, chuyển đổi, chẳng hạn như ổ cắm được chuyển đổi thủ công của Hoa Kỳ thành ổ cắm chuyển đổi điện tử của Hoa Kỳ có thể được điều khiển từ xa thông qua một ứng dụng hoặc một giao diện kiểu web.

Chữ S trong IoT…

Vấn đề với nhiều thiết bị được gọi là Internet of Things (IoT), như một trò đùa cũ, đó là chữ “S” trong “IoT” là viết tắt của bảo mật…

…tất nhiên, có nghĩa là thường không có nhiều an ninh mạng như bạn mong đợi, hoặc thậm chí là không có.

Như bạn có thể tưởng tượng, một thiết bị tự động hóa gia đình không an toàn, đặc biệt là thiết bị có thể cho phép ai đó bên ngoài nhà bạn, hoặc thậm chí ở bên kia trái đất, bật và tắt các thiết bị điện theo ý muốn, có thể dẫn đến nhiều rắc rối.

Trước đây, chúng tôi đã viết về sự không an toàn của IoT trong nhiều loại sản phẩm khác nhau, từ ấm đun nước internet (vâng, thực sự) có thể làm rò rỉ mật khẩu Wi-Fi tại nhà của bạn, cho các camera an ninh mà kẻ gian có thể sử dụng để giữ mật khẩu của họ để mắt đến bạn thay vì ngược lại, đến các ổ đĩa gắn mạng có nguy cơ bị bị tấn công bởi ransomware trực tiếp qua internet.

Trong trường hợp này, các nhà nghiên cứu đã tìm thấy một lỗ hổng thực thi mã từ xa trong Wemo Mini Smart Plug vào tháng 2023 năm 2023, báo cáo lỗ hổng đó vào tháng 2023 năm XNUMX và nhận được số CVE cho lỗ hổng đó vào tháng XNUMX năm XNUMX (CVE-2023-27217).

Thật không may, mặc dù gần như chắc chắn có rất nhiều thiết bị trong số này đang được sử dụng tích cực trong thế giới thực, nhưng Belkin rõ ràng đã nói rằng họ coi thiết bị này “đã hết tuổi thọ” và do đó lỗ hổng bảo mật sẽ không được vá.

(Chúng tôi không chắc kiểu loại bỏ “hết hạn sử dụng” này có thể chấp nhận được không nếu thiết bị hóa ra có lỗi trong mạch điện 120V AC hoặc 230V AC, chẳng hạn như khả năng quá nhiệt và phát ra hóa chất độc hại hoặc cài đặt bị cháy, nhưng có vẻ như các lỗi trong phần sụn hoặc thiết bị điện tử kỹ thuật số điện áp thấp trong thiết bị có thể được bỏ qua, ngay cả khi chúng có thể dẫn đến việc kẻ tấn công mạng bật và tắt liên tục công tắc nguồn trong thiết bị theo ý muốn.)

Khi tên thân thiện là kẻ thù của bạn

Vấn đề mà các nhà nghiên cứu phát hiện ra là một vấn đề cũ kỹ tràn bộ đệm ngăn xếp trong một phần của phần mềm thiết bị cho phép bạn thay đổi cái gọi là FriendlyName của thiết bị – chuỗi văn bản được hiển thị khi bạn kết nối với thiết bị bằng một ứng dụng trên điện thoại.

Theo mặc định, các thiết bị này khởi động với một tên thân thiện dọc theo dòng Wemo mini XYZ, Nơi XYZ biểu thị ba chữ số thập lục phân mà chúng tôi đoán được chọn giả ngẫu nhiên.

Điều đó có nghĩa là nếu bạn sở hữu hai hoặc ba thiết bị này, gần như chắc chắn chúng sẽ bắt đầu với các tên khác nhau để bạn có thể thiết lập chúng một cách dễ dàng.

Nhưng có lẽ bạn sẽ muốn đổi tên chúng sau này để chúng dễ phân biệt hơn trong tương lai, bằng cách gán các tên thân thiện chẳng hạn như TV power, Laptop chargerRaspberry Pi server.

Các lập trình viên Belkin (hay chính xác hơn là các lập trình viên của mã kết thúc trong các thiết bị mang nhãn hiệu Belkin này, những người có thể cũng đã cung cấp phần mềm phích cắm thông minh cho các thương hiệu khác) rõ ràng đã dành 68 byte dung lượng lưu trữ tạm thời để theo dõi tên mới trong quá trình đổi tên.

Nhưng họ quên kiểm tra xem tên bạn cung cấp có vừa với khe 68 byte đó không.

Thay vào đó, họ cho rằng bạn sẽ sử dụng ứng dụng điện thoại chính thức của họ để thực hiện quy trình đổi tên thiết bị và do đó, họ có thể hạn chế lượng dữ liệu được gửi tới thiết bị ngay từ đầu, nhằm ngăn chặn bất kỳ lỗi tràn bộ đệm nào có thể xảy ra. nảy sinh.

Trớ trêu thay, họ đã rất cẩn thận không chỉ giữ cho bạn ở giới hạn 68 byte cần thiết để thiết bị tự hoạt động bình thường, mà thậm chí còn hạn chế bạn chỉ nhập 30 ký tự.

Tất cả chúng ta đều biết tại sao để phía máy khách thực hiện kiểm tra lỗi, thay vì kiểm tra (hoặc tốt hơn nữa) ở phía máy chủ, là một ý tưởng tồi:

  • Mã máy khách và mã máy chủ có thể không phù hợp. Các ứng dụng khách trong tương lai có thể quyết định rằng tên 72 ký tự sẽ là một tùy chọn hay và bắt đầu gửi nhiều dữ liệu hơn tới máy chủ so với khả năng xử lý an toàn của nó. Các lập trình viên phía máy chủ trong tương lai có thể nhận thấy rằng dường như chưa từng có ai sử dụng toàn bộ 68 byte dành riêng và quyết định đơn phương rằng 24 byte là quá đủ.
  • Kẻ tấn công có thể chọn không làm phiền với ứng dụng. Bằng cách tạo và truyền các yêu cầu của riêng họ tới thiết bị, họ sẽ dễ dàng bỏ qua mọi kiểm tra bảo mật chỉ dựa vào ứng dụng.

Các nhà nghiên cứu đã nhanh chóng có thể thử các tên dài hơn bao giờ hết đến mức họ có thể làm hỏng thiết bị Wemo theo ý muốn bằng cách ghi vào phần cuối của bộ nhớ đệm dành riêng cho tên mới và làm hỏng dữ liệu được lưu trữ trong các byte ngay sau đó.

Làm hỏng ngăn xếp

Thật không may, trong một hệ điều hành dựa trên ngăn xếp, hầu hết phần mềm kết thúc với bộ đệm bộ nhớ tạm thời dựa trên ngăn xếp của nó được bố trí sao cho hầu hết các bộ đệm này được theo sát bởi một khối bộ nhớ quan trọng khác cho biết chương trình sẽ đi đâu khi nó hoàn thành. nó đang làm ngay bây giờ.

Về mặt kỹ thuật, những khối dữ liệu “đi đâu tiếp theo” này được gọi là trả lại địa chỉvà chúng được lưu tự động khi một chương trình gọi cái được gọi là chức năng, hoặc là chương trình con, là một đoạn mã (ví dụ: “in thông báo này” hoặc “hộp thoại cảnh báo bật lên”) mà bạn muốn có thể sử dụng trong một số phần của chương trình.

Địa chỉ trả về được ghi lại một cách kỳ diệu trên ngăn xếp mỗi khi chương trình con được sử dụng, để máy tính có thể tự động "tháo gỡ" đường dẫn của nó để quay lại nơi chương trình con được gọi, có thể khác nhau mỗi khi nó được kích hoạt.

(Nếu một chương trình con có một địa chỉ trả về cố định, bạn chỉ có thể gọi nó từ một nơi trong chương trình của mình, điều này sẽ khiến cho việc đóng gói mã đó vào một chương trình con riêng biệt ngay từ đầu trở nên vô nghĩa.)

Như bạn có thể tưởng tượng, nếu bạn giẫm phải địa chỉ trả về ma thuật đó trước khi chương trình con chạy xong, thì khi nó chạy xong, nó sẽ tự “thả lỏng” sai vị trí một cách đáng tin cậy nhưng vô tình.

Với một chút may mắn (hoặc có thể là rất nhiều), kẻ tấn công có thể dự đoán trước cách chà đạp địa chỉ trả về một cách sáng tạo và do đó điều hướng sai chương trình theo cách có chủ ý và ác ý.

Thay vì chỉ bị sập, chương trình bị định hướng sai có thể bị lừa để chạy mã do kẻ tấn công lựa chọn, do đó gây ra cái được gọi là thực thi mã từ xa khai thác, hoặc RCE.

Hai biện pháp bảo vệ phổ biến giúp bảo vệ chống lại các hành vi khai thác kiểu này:

  • Ngẫu nhiên hóa bố cục không gian địa chỉ, còn được gọi là ASLR. Hệ điều hành cố tình tải các chương trình ở các vị trí bộ nhớ hơi khác nhau mỗi khi chúng chạy. Điều này khiến những kẻ tấn công khó đoán được cách định hướng sai các chương trình có lỗi theo cách cuối cùng giành được và duy trì quyền kiểm soát thay vì chỉ làm hỏng mã.
  • Xếp chồng chim hoàng yến, được đặt theo tên của những con chim mà những người khai thác thường mang theo dưới lòng đất vì chúng sẽ ngất đi khi có khí mê-tan, do đó đưa ra một cảnh báo sớm tàn khốc nhưng hiệu quả về nguy cơ xảy ra vụ nổ. Chương trình cố ý chèn một khối dữ liệu đã biết nhưng ngẫu nhiên ngay trước địa chỉ trả về mỗi khi một chương trình con được gọi, do đó lỗi tràn bộ đệm sẽ ghi đè lên "chim hoàng yến" trước tiên, trước khi nó tràn đủ xa để chà đạp trên địa chỉ trả lại cực kỳ quan trọng.

Để khai thác của họ hoạt động nhanh chóng và đáng tin cậy, các nhà nghiên cứu cần buộc phích cắm Wemo tắt ASLR, điều mà những kẻ tấn công từ xa sẽ không thể làm được, nhưng với rất nhiều lần thử trong đời thực, những kẻ tấn công vẫn có thể gặp may, hãy đoán đúng tại các địa chỉ bộ nhớ được chương trình sử dụng và vẫn có quyền kiểm soát.

Nhưng các nhà nghiên cứu không cần phải lo lắng về vấn đề ngăn xếp chim hoàng yến, vì ứng dụng có lỗi đã được biên dịch từ mã nguồn của nó với tính năng “chèn hướng dẫn an toàn kiểm tra chim hoàng yến” đã bị tắt.

(Các chương trình được bảo vệ bởi Canary thường lớn hơn và chậm hơn một chút so với các chương trình không được bảo vệ do cần thêm mã trong mỗi chương trình con để thực hiện kiểm tra an toàn.)

Phải làm gì?

  • Nếu bạn là chủ sở hữu Wemo Smart Plug V2, đảm bảo rằng bạn chưa định cấu hình bộ định tuyến gia đình của mình để cho phép thiết bị được truy cập từ “bên ngoài”, qua internet. Điều này làm giảm những gì được biết đến trong biệt ngữ là của bạn diện tích bề mặt tấn công.
  • Nếu bạn có một bộ định tuyến hỗ trợ Universal Plug and Play, còn được gọi là UPnP, đảm bảo rằng nó đã tắt. UPnP khiến cho các thiết bị bên trong vô tình bị mở ra cho người bên ngoài.
  • Nếu bạn là một lập trình viên, tránh tắt các tính năng an toàn của phần mềm (chẳng hạn như bảo vệ ngăn xếp hoặc kiểm tra ngăn xếp canary) chỉ để tiết kiệm một vài byte. Nếu bạn thực sự đang hết bộ nhớ, hãy tìm cách giảm dung lượng lưu trữ bằng cách cải thiện mã của bạn hoặc loại bỏ các tính năng thay vì giảm bớt bảo mật để bạn có thể nhồi nhét nhiều hơn.

Dấu thời gian:

Thêm từ An ninh trần trụi