Khai thác bộ đệm stack tràn trên Arduino


Câu trả lời:


8

Câu hỏi của bạn có thể được đọc theo hai cách, DarkCoffee:

Nếu một thiết bị dựa trên Arduino cụ thể có thể được cảm ứng để tràn vào ngăn xếp của nó, nó có thể được khai thác không?

Có, có thể khai thác một ngăn xếp tràn trên Arduino.

Một cuộc tấn công có thể là phương pháp lập trình hướng trở lại , đòi hỏi phần sụn đủ phức tạp. Vì vậy, một biện pháp bảo vệ ở đây là giữ cho chương trình cơ sở của bạn đơn giản nhất có thể. Rất khó có khả năng bản phác thảo "hello world" của Arduino dễ bị tấn công. Tuy nhiên, điều đó không thoải mái lắm với bạn, bởi vì đèn LED không hữu dụng lắm . Phần sụn hữu ích sẽ có nhiều chức năng hơn và do đó có nhiều chức năng hơn để thu hoạch để sử dụng trong một máy trừu tượng.

Arduino cũng có một bộ tải khởi động, vốn có khả năng ghi đè lên phần sụn. Có thể khai thác nó để ghi đè lên phần sụn lành tính nhưng dễ bị tổn thương với phần sụn ác tính.

Việc tôi đọc trang đầu tiên của bài báo tấn công INRIA khiến tôi tin rằng nó kết hợp cả hai cách tiếp cận: lập trình hướng trở lại để thực thi đủ mã để kích hoạt khả năng tự nhấp nháy của vi điều khiển để có thể tải mã tùy ý.

Có các cuộc tấn công tràn stack vào Arduinos nói chung?

Tôi không biết về bất kỳ cuộc tấn công nào hoạt động trên tất cả các thiết bị dựa trên Arduino. Một lần nữa, bản phác thảo LED "chào thế giới" có lẽ là bất khả xâm phạm, đơn giản vì nó quá tầm thường để dễ bị tổn thương.

Bạn viết càng nhiều mã, càng có nhiều khả năng bạn sẽ tạo ra một lỗ hổng.

Lưu ý rằng viết 5.000 dòng mã sau đó thay thế 2 kLOC bằng 1.000 dòng mới không phải là khoản tiết kiệm ròng 1 kLOC từ quan điểm bảo mật. Nếu 5 kLOC đó an toàn và bạn đã nhầm lẫn trong khi viết một số 1 kLOC mới, thì đó vẫn là một lỗ hổng. Đạo đức của câu chuyện là mã an toàn nhất có xu hướng là cái được nhìn chằm chằm lâu nhất, và điều đó có nghĩa là giữ cho nó không thay đổi càng lâu càng tốt.

Rõ ràng, mọi lỗ hổng nên được vá càng sớm càng tốt. Đây không phải là đối số để giữ các lỗ hổng cũ xung quanh. Đó là một lập luận chống lại việc thêm các tính năng một cách thiếu suy nghĩ vào mã mà bạn tin tưởng an toàn mặc dù kiểm tra, kiểm toán và phân tích.


Cảm ơn bạn. Tôi đã đọc bài báo tấn công INRIA và tôi đang cố gắng làm điều tương tự với ngôn ngữ arduino trên atmega2560, nhưng tôi không thể đến địa chỉ trả lại với avr atmega2560. Tôi không hiểu lỗi của mình ở đâu.
DarkCoffee

1
@DarkCoffee: Cuộc tấn công này đòi hỏi phải đào dưới mức C ++. Bạn sẽ phải tháo rời phần sụn và nghiên cứu mã ngôn ngữ lắp ráp AVR , để xem đuôi chức năng nào có tác dụng phụ hữu ích. Sau đó, để gọi từng người, bạn sẽ phải thực hiện một lệnh JMP thô . Nếu điều đó khiến bạn có nhiều câu hỏi hơn, tốt nhất hãy đưa chúng lên Stack Overflow.
Warren Young

Cảm ơn bạn rất nhiều. Hiện tại tôi đang cố gắng tạo ra một lỗ hổng với lỗi tràn bộ đệm. Tôi sẽ viết trên Stack Overflow. Cảm ơn bạn!
DarkCoffee

5

Điều quan trọng là chúng tôi không thể trả lời câu hỏi này bằng "không" với bất kỳ điều gì gần với sự chắc chắn tuyệt đối, trừ khi chúng tôi chính thức xác minh một hệ thống Arduino cụ thể, như được triển khai, hướng dẫn theo hướng dẫn và thậm chí sau đó.

Arduinos có giao diện ethernet tùy chọn và hình thức giao tiếp từ xa khác, do đó, việc khai thác từ xa là có thể trong khái niệm. Có một ngăn xếp TCP để liên kết mạng và ngay cả khi nó nhỏ và đơn giản, nó có thể có sai sót.

Nhưng, cụ thể, là bộ đệm ngăn xếp có thể tràn? Hãy xem xét rằng các bộ xử lý Atmel AVR có kiến ​​trúc Harvard, có nghĩa là mã và dữ liệu nằm trong các không gian bộ nhớ riêng biệt . Điều đó có xu hướng loại trừ việc khai thác nơi mã được đưa vào ngăn xếp và sau đó được thực thi. Một địa chỉ được đặt vào ngăn xếp bởi một vectơ tấn công sẽ được hiểu là nằm trong không gian mã, trong khi các byte vectơ tấn công còn lại chứa tải trọng độc hại nằm trong không gian dữ liệu.


-1: Kiến trúc Harvard không phải là một sự bảo vệ hoàn hảo, như tôi đã chỉ ra trong câu trả lời của mình. Ngoài ra, ngăn xếp TCP cứng trên chip WizNet của Arduino Ethernet có lẽ không thể tấn công. Ít nhất, nó không có khả năng ảnh hưởng đến chip CPU riêng biệt.
Warren Young

2

Nếu bạn nhìn vào những gì thường được khai thác trong các hệ thống x86, nghĩa là, tràn đống, tràn chồng, seh ghi đè, chuỗi định dạng, v.v. không có gì lớn trên bề mặt tấn công. Với ngoại lệ có thể có của các chuỗi định dạng, tôi không thấy bất kỳ cuộc tấn công nào hoạt động vì kiến ​​trúc đơn giản là không cho phép nó.

Nếu bạn quan tâm đến loại nghiên cứu này, tôi khuyên bạn nên xem xét sự cố đồng hồ và điện áp, điều này thường cho phép trích xuất thông tin từ các thiết bị ngay cả khi bị khóa và nói chung là chỉ nói chung với chúng. Bạn cũng có thể thử phân tích công suất vi sai nếu bạn theo số liệu thống kê. Các cuộc tấn công thời gian cuối cùng có lẽ là dễ khai thác nhất nếu bạn đang tìm kiếm một cái gì đó để bắt đầu.

Về mặt phần cứng, có một chương trình gọi là degate cho phép đảo ngược chip ở mức silicon. Có một vài cuộc hội thảo đàng hoàng về chủ đề này và có lẽ bạn sẽ thích chúng.


1

Thực sự không có gì để khai thác trên bộ xử lý nhúng như ATmega (được sử dụng trên Arduino) vì chỉ có một mức thực thi (truy cập đầy đủ) và không có công cụ ưa thích nào như bảo vệ vòng CPU Intel / AMD (giữ mã người dùng tránh xa mã hạt nhân phần cứng).

Nếu bạn kết nối trình gỡ lỗi, bạn có toàn quyền truy cập vào RAM và flash, vì vậy không cần phải khai thác bất cứ điều gì, thực sự ...


1
Nếu bạn kết nối trình gỡ lỗi, đó không phải là khai thác từ xa: bạn có quyền truy cập vật lý.
Kaz

2
Khai thác không có nghĩa là để có được đặc quyền cao nhất, mà chỉ đơn giản là làm cho một số máy thực thi mã trái phép thay mặt cho kẻ tấn công. Khai thác không bao giờ phải rời khỏi bối cảnh bảo mật không được ưu tiên (ví dụ: ứng dụng người dùng trên PC) để gây hại thực sự.
Kaz

2
Thực thi mã, nếu không phải là một tính năng được thiết kế, có phải là sự khai thác - tồn tại của mô hình đặc quyền hay không.
Chris Stratton

0

Khai thác bộ đệm với ý định kiểm soát thông qua mã hóa chỉ hoạt động đối với Kiến trúc Princeton, bởi vì lưu trữ dữ liệu và lưu trữ chương trình chia sẻ cùng một bộ nhớ.

Bây giờ Atmel bé nhỏ của chúng ta có Kiến trúc Harvard - nó chạy mã từ một bộ nhớ khác với dữ liệu. Và tràn bộ đệm được khai thác khéo léo của chúng tôi chỉ có thể ghi vào SRAM, không thể thực thi được.

Tuy nhiên, nó có thể làm sập Arduino nếu bạn có cách chuyển dữ liệu sang bộ đệm.


Có một điểm hữu ích ở đây, nhưng nó không phải là một kiến ​​trúc gặt đập thuần túy. Nếu bộ tải khởi động Arduino có mặt và bạn có thể làm cho nó xuất hiện nối tiếp (bằng cách gây ra thiết lập lại) thì bạn có thể flash bất cứ thứ gì bạn muốn.
Chris Stratton

-1: Xin lỗi, nhưng bạn đang truyền bá huyền thoại ở đây. Các máy phát điện đã được khai thác và kiến ​​trúc Harvard nói chung không ngăn chặn các cuộc tấn công phá vỡ ngăn xếp thực thi mã tùy ý. Xem câu trả lời của tôi để biết chi tiết.
Warren Young

-1

Như Madmanguruman đã chỉ ra, theo một cách nào đó, thực sự không có gì để khai thác trên một bộ xử lý nhúng. Câu hỏi thực sự là TẠI SAO bạn muốn khai thác một thiết bị nhúng? Nếu bạn có một Ardunio độc lập và có thể khai thác thứ gì đó, bạn có thể làm gì với nó?

Trong các PC hiện đại, hầu hết việc khai thác lỗ hổng sẽ giúp bạn truy cập root từ xa, mục tiêu cuối cùng. Nhưng một hệ thống nhúng USUALLY không có tệp, thông tin hoặc bất cứ thứ gì như thế, mặc dù vẫn có trường hợp ngoại lệ.

Nếu bạn muốn khai thác một hệ thống nhúng, nó thường dành cho một mục đích cụ thể. Trên hết, việc khai thác sẽ hoàn toàn độc đáo gần như mọi lúc. Hơn nữa, hầu hết các thiết bị nhúng sẽ không được kết nối; có nghĩa là bạn cần truy cập vật lý vào chúng để làm bất cứ điều gì. Và một khi bạn có quyền truy cập vật lý, bạn giữ tất cả các thẻ và mọi thứ đều có thể được thực hiện. Đây là một trong những khía cạnh hiếm hoi của kỹ thuật thực sự đang cố gắng tìm giải pháp cho một vấn đề, chứ không phải là cách khác.


1
Bạn có thể làm gì với nó? Ồ, giả sử bảng nhúng đang điều khiển một hệ thống nhập không cần chìa khóa. Nếu phần mềm có lỗi, bạn có thể truy cập trái phép.
Kaz

2
-1: Có rất nhiều thứ để khai thác trong các hệ thống nhúng, có rất nhiều cuộc tấn công vào chúng và các hệ thống nhúng đang ngày càng được kết nối. Mới tuần trước, đã có một cuộc tấn công từ xa được báo cáo rõ ràng chống lại nhà vệ sinh thông minh .
Warren Young

Vâng, tôi cho rằng tôi có thể đã nói nó tốt hơn. Nhưng về cơ bản, tôi đã tuyên bố rằng một số lỗ hổng chung cho một thiết bị cụ thể (arduino) không nhất thiết phải mua cho bạn bất cứ thứ gì. Vâng, bạn có thể khai thác một hệ thống khóa không cần chìa khóa hoặc nhà vệ sinh, nhưng các cách tiếp cận sẽ vô cùng khác biệt và một số "tràn bộ đệm cho ardunio" chung chung sẽ không được áp dụng. Tôi đã cố gắng khiến người hỏi tiếp cận câu hỏi một cách khác biệt, tìm kiếm một lý do để làm như vậy và khai thác điều đó, thay vì cố gắng tìm cách "tấn công tất cả mọi thứ" bằng một quy trình.
Kris Bahnsen

Tất nhiên cuộc tấn công mua cho bạn một cái gì đó: toàn bộ hệ thống tấn công. Bạn muốn gì hơn nữa? :)
Warren Young

@WarrenYoung Nhanh lên! Tấn công bộ điều khiển máy in 3D của tôi thông qua kết nối nối tiếp USB thông qua PC của tôi được kết nối với internet và sử dụng nó để in các đối tượng ảo! haha
Kris Bahnsen
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.