Câu trả lời:
Không, vì một lý do rất đơn giản là có một giá trị số tối đa mà PID có thể có. Nếu một quá trình có PID cao nhất, thì không có con nào nó có thể có một PID lớn hơn. Giải pháp thay thế cho việc cho trẻ thấp hơn sẽ là thất bại fork()
hoàn toàn, điều này sẽ không hiệu quả.
Các PID được phân bổ theo thứ tự và sau khi sử dụng mức cao nhất, hệ thống sẽ kết hợp lại để sử dụng lại các mức thấp hơn (miễn phí), do đó bạn cũng có thể nhận được các mức thấp hơn cho trẻ em trong các trường hợp khác.
PID tối đa mặc định trên hệ thống của tôi ( /proc/sys/kernel/pid_max
) chỉ là 32768, do đó, không khó để đạt được điều kiện xảy ra sự cố.
$ echo $$
27468
$ bash -c 'echo $$'
1296
$ bash -c 'echo $$'
1297
Nếu hệ thống của bạn được phân bổ ngẫu nhiên các PID ( như OpenBSD dường như làm ) thay vì liên tiếp (như Linux), sẽ có hai tùy chọn. Hoặc là sự lựa chọn ngẫu nhiên được thực hiện trên toàn bộ không gian của các PID có thể, trong trường hợp đó rõ ràng là một PID của trẻ có thể thấp hơn so với cha mẹ. Hoặc, PID con sẽ được chọn ngẫu nhiên từ các giá trị lớn hơn PID của cha mẹ, trung bình sẽ đặt nó ở giữa một nửa giữa PID của cha mẹ và tối đa. Các quy trình giả định sau đó sẽ nhanh chóng đạt đến mức tối đa và chúng ta sẽ ở cùng một điểm như đã đề cập ở trên: một ngã ba mới sẽ cần sử dụng một bộ điều khiển thấp hơn để thành công.
Ngoài ra còn tồn tại tiềm năng cho các lỗ hổng bảo mật bằng cách sử dụng thông báo kernel và tự mình tránh để phát hiện bằng cách quét bảng quy trình; điều này nếu được thực hiện đúng sẽ dẫn đến quá trình của bạn có mức độ thấp hơn và các công cụ xử lý không nhìn thấy quy trình được đề cập.
http://cve.circl.lu/cve/CVE-2018-1121
Procps-ng, Procps dễ bị tổn thương bởi một quá trình ẩn trong điều kiện chủng tộc. Do Proc_pid_readdir () của hạt nhân trả về các mục nhập PID theo thứ tự số tăng dần, nên một quá trình chiếm tỷ lệ cao có thể sử dụng các sự kiện inotify để xác định khi danh sách quy trình được quét và fork / exec để có được mức liệt kê thấp hơn, do đó tránh được liệt kê. Kẻ tấn công không có đặc quyền có thể che giấu một quá trình khỏi các tiện ích của Procps-ng bằng cách khai thác một điều kiện chủng tộc trong các mục đọc / Proc / PID. Lỗ hổng này ảnh hưởng đến Procps và Procps-ng cho đến phiên bản 3.3.15, các phiên bản mới hơn cũng có thể bị ảnh hưởng.