Một cổng web bị xâm phạm còn có thể vươn tới đâu?
Cổng web giới hạn thứ khách truy cập mở, không giới hạn thứ một máy chủ bị xâm phạm có thể vươn tới. Hai đợt rà soát, một bảng thẩm quyền và các lệnh đo phạm vi.
Giả sử máy chủ của cổng bị xâm phạm khi chứng chỉ của nó vẫn còn hiệu lực. Mọi quy tắc quy định khách truy cập được yêu cầu những trang nào vẫn có hiệu lực, và không quy tắc nào trong số đó giới hạn kết nối mà kẻ tấn công giờ mở từ máy chủ đó về phía mạng con của cơ sở dữ liệu. Chính khoảng trống này khiến một điểm vào chỉ dành cho web không phải là cùng một khẳng định như một mạng được phân đoạn. Hai khẳng định cần những đợt rà soát riêng, từ những điểm xuất phát khác nhau, trước khi có thể đưa ra bất kỳ khẳng định nào một cách trung thực.
Hai khẳng định, và chỉ một trong số đó bắt đầu từ khách truy cập
Khẳng định thứ nhất nói về một người: khách truy cập có trình duyệt và phiên hợp lệ có thể mở một ứng dụng và không gì khác. Điểm vào chỉ dành cho web trả lời tốt khẳng định đó, vì khách truy cập nhận được một trang chứ không phải một tuyến. Câu trả lời đó đáng giữ, và nó cũng là khẳng định duy nhất mà hầu hết sơ đồ ghi lại.
Khẳng định thứ hai nói về một thành phần: người ta giả định cổng, hoặc tiến trình ứng dụng phía sau nó, nằm dưới sự kiểm soát của người khác. Từ giả định đó, câu hỏi chuyển từ những URL nào được phép sang những đích đến và danh tính nào mà tiến trình còn có thể vươn tới.
Hai khẳng định có chủ sở hữu khác nhau, tạo ra bằng chứng khác nhau và thất bại một cách độc lập. Nhóm danh tính có thể chứng minh khẳng định thứ nhất bằng một bài kiểm tra phiên; khẳng định thứ hai cần chính sách mạng, rà soát tài khoản dịch vụ và các kiểm soát máy chủ. Một thiết kế chỉ ghi lại nửa phần khách truy cập trông đầy đủ trên một slide rà soát và mỏng manh trong một sự cố, vì những kiểm soát quan trọng sau khi bị xâm phạm chưa bao giờ nằm trong phạm vi. Hãy nêu rõ mỗi kiểm soát hỗ trợ khẳng định nào, nếu không một quy tắc cổng sẽ bị ghi công cho cả hai.
Một dịch vụ chi phí đã được triển khai, và hai cách nó thua
Lấy một dịch vụ chi phí: một cổng công khai tại 10.60.4.10 xác thực nhân viên và chuyển các yêu cầu đã được phê duyệt tới một trình lắng nghe ứng dụng trên cổng 8443, và ứng dụng đó vươn tới một trình lắng nghe PostgreSQL tại 10.60.4.20:5432 với vai trò expenses_app. Nhân viên không được nhận quyền truy cập nội bộ chung. Trong vận hành bình thường, thiết kế thực sự cung cấp một lối vào riêng cho ứng dụng mà không công bố trình lắng nghe cơ sở dữ liệu ở bất cứ đâu. Các địa chỉ quan trọng, vì mọi kiểm tra về sau trong bài viết này đều nêu tên chúng.
Giờ hãy bỏ cổng ra khỏi tập tin cậy. 10.60.4.10 có thể vươn tới những đích nào khi tiến trình của nó thuộc về kẻ tấn công? Bộ lọc URL từng giới hạn khách truy cập không nói gì về một kết nối mà máy chủ cổng mở về phía mạng con của cơ sở dữ liệu.
Thay vào đó hãy bỏ tiến trình ứng dụng, và thẩm quyền đổi hình dạng: vai trò expenses_app, các dịch vụ mà máy chủ đó có thể vươn tới và các tệp mà tài khoản đó có thể đọc. Trong cả hai trường hợp, cửa trước có thể vẫn chỉ dành cho web trong khi ranh giới backend vắng mặt. Vì vậy nhãn trên cửa trước không phải câu trả lời cho bất kỳ câu hỏi nào trong hai câu hỏi.
Lập bản đồ thẩm quyền mà mỗi bên thực sự nắm giữ
Một hợp đồng viết như những quyền dự định có xu hướng lặp lại thiết kế cho bạn. Hãy viết nó như thẩm quyền được nắm giữ, kiểm tra bác bỏ phần vượt quá và chủ sở hữu của kiểm tra đó, và mỗi dòng trở nên có thể kiểm chứng. Bảng này là một đề xuất cho ví dụ trên, không phải khẳng định về sản phẩm:
| Component | Authority it actually holds | Check that proves the denial | Owner of the check |
|---|---|---|---|
| Identity provider | Issues assertions and session cookies, and holds no network path of its own | A request to the application URL without a session is redirected to the login page | Identity team |
| Public gateway host | TCP reachability to whatever its routing table and egress rules permit | An egress rule drops 10.60.4.20:5432 and the probe reports the port filtered | Network platform team |
| Application role | SQL privileges granted to expenses_app inside the expenses database | A privilege query shows no ownership or create right on any other schema | Application team |
| Database listener | Accepts connections only from the source ranges named in its host-based rules | A connection from an unlisted address is refused before authentication | Database administrator |
| Management path | Administrative access reserved for patching, monitoring and recovery | A staff workstation cannot reach the administrative port or jump through it | Platform owner |
Quyền sở hữu đi theo thẩm quyền. Nhóm danh tính sở hữu các khẳng định, nhóm nền tảng mạng sở hữu các tuyến, nhóm ứng dụng sở hữu vai trò cơ sở dữ liệu, quản trị viên cơ sở dữ liệu sở hữu trình lắng nghe và các quy tắc dựa trên máy chủ của nó, và chủ sở hữu nền tảng sở hữu mặt phẳng quản lý. Một sự từ chối không có chủ sở hữu là một câu trong tài liệu, không phải một kiểm soát.
Việc tách bạch cũng ngăn ngừa đếm trùng. Một hạn chế cổng không thể diễn đạt một đặc quyền bảng, và một vai trò cơ sở dữ liệu không thể ngăn máy chủ mở một socket tới một mạng con không liên quan.
Hãy đếm những gì cổng có thể vươn tới thay vì khẳng định
Một khẳng định về ranh giới chỉ tốt bằng phép đếm phía sau nó. Trên máy chủ cổng, ba lệnh bao quát việc chọn tuyến, một phép thử trực tiếp và chính sách đi ra:
ip route get 10.60.4.20
nc -zv 10.60.4.20 5432
sudo nft list chain inet filter outputĐọc kết quả theo thứ tự đó. Tuyến cho biết 10.60.4.20 có được chọn từ máy chủ đó hay không; phép thử cho biết trình lắng nghe có trả lời hay không; danh sách quy tắc cho thấy chính sách có chặn gói tin hay không hề có gì trên đường đi của nó.
Lặp lại phép đếm từ máy chủ ứng dụng. Từ đó, phía cơ sở dữ liệu là một truy vấn được chạy dưới vai trò ứng dụng:
psql -h 10.60.4.20 -U expenses_app -d expenses -c 'select rolname, rolsuper, rolcreatedb from pg_roles'Một kết nối thành công dưới một vai trò không thể đọc lược đồ khác là một kết quả khác với một kết nối thành công dưới vai trò chủ sở hữu. Chỉ cái thứ hai mới là một phát hiện.
Ghi lại các từ chối, rồi ghi ngày cho đợt rà soát
Việc chấp nhận được viết như các kết quả chứ không phải ý định: phiên nhân viên không thể vươn tới trình lắng nghe, máy chủ cổng không thể vươn tới một mạng con không liên quan, và vai trò ứng dụng không thể tạo một cơ sở dữ liệu. Mỗi cái là một kiểm tra riêng với chủ sở hữu được nêu tên và một ngày.
Giữ cho việc giám sát, vá lỗi và khôi phục có thể tiếp cận qua con đường quản lý được thiết kế cho chúng. Một ranh giới cũng chặn chính chủ sở hữu của nó trở thành một sự cố gián đoạn, và phản ứng đầu tiên thông thường với sự gián đoạn đó là mở rộng quy tắc một lần nữa. Hướng dẫn vành đai của CISA yêu cầu giới hạn truy cập vào và ra ở những cổng và giao thức có lý do chính đáng, bao gồm lưu lượng giữa các mạng nội bộ, tức hướng do backend khởi phát mà hầu hết sơ đồ bỏ qua.
Ghi ngày cho đợt rà soát và nêu tên chủ sở hữu của nó. Chạy lại phép đếm và truy vấn đặc quyền sau bất kỳ thay đổi nào đối với ảnh cổng, bảng định tuyến hoặc vai trò ứng dụng.