Có thể khai thác bộ đệm ngăn xếp tràn trên bảng Arduino?
Có thể khai thác bộ đệm ngăn xếp tràn trên bảng Arduino?
Câu trả lời:
Câu hỏi của bạn có thể được đọc theo hai cách, DarkCoffee:
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 ý.
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.
Đ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.
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.
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ự ...
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.
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.