ShadowCallStack

ShadowCallStack (SCS) là chế độ thiết bị đo lường LLVM giúp bảo vệ khỏi việc ghi đè địa chỉ trả về (chẳng hạn như tràn vùng đệm ngăn xếp) bằng cách lưu địa chỉ trả về của hàm vào một ShadowCallStack được phân bổ riêng trong phần mở đầu hàm của các hàm không phải lá và tải địa chỉ trả về từ ShadowCallStack trong phần kết thúc hàm. Địa chỉ trả về cũng được lưu trữ trên ngăn xếp thông thường để tương thích với trình gỡ bỏ, nhưng không được sử dụng. Điều này đảm bảo rằng các cuộc tấn công sửa đổi địa chỉ trả về trên ngăn xếp thông thường không ảnh hưởng đến luồng kiểm soát chương trình.

Trên aarch64, hoạt động đo lường sử dụng thanh ghi x18 để tham chiếu đến ShadowCallStack, nghĩa là các tệp tham chiếu đến ShadowCallStack không cần được lưu trữ trong bộ nhớ. Điều này giúp bạn có thể triển khai một môi trường thời gian chạy tránh tiết lộ địa chỉ của ShadowCallStack cho những kẻ tấn công có thể đọc bộ nhớ tuỳ ý.

Triển khai

Android hỗ trợ ShadowCallStack cho cả nhân hệ điều hành và không gian người dùng.

Bật SCS cho nhân

Để bật ShadowCallStack cho nhân, hãy thêm dòng sau vào tệp cấu hình nhân:

CONFIG_SHADOW_CALL_STACK=y

Bật SCS trong không gian người dùng

Để bật ShadowCallStack trong các thành phần không gian người dùng, hãy thêm các dòng sau vào tệp bản thiết kế của thành phần:

sanitize: {
  scs: true
}

SCS giả định rằng thanh ghi x18 được dành để lưu trữ địa chỉ của ShadowCallStack và không được dùng cho bất kỳ mục đích nào khác. Mặc dù tất cả thư viện hệ thống đều được biên dịch để đặt trước thanh ghi x18, nhưng điều này có thể gây ra sự cố nếu bạn bật SCS cho các thành phần không gian người dùng tương tác với mã cũ trong quá trình (ví dụ: các thư viện có thể được tải bằng ứng dụng bên thứ ba), điều này có thể làm hỏng thanh ghi x18. Do đó, bạn chỉ nên bật SCS trong các thành phần độc lập sẽ không được tải vào tệp nhị phân cũ.

Xác nhận kết quả

Không có quy trình kiểm thử CTS dành riêng cho SCS. Thay vào đó, hãy đảm bảo rằng các kiểm thử CTS đạt yêu cầu khi bật và không bật SCS để xác minh rằng SCS không ảnh hưởng đến thiết bị.