Làm thế nào để cân bằng tải và mối quan hệ IP thực gây rủi ro bảo mật của bạn?
Một trong những lợi ích của việc trở thành chuyên gia bảo mật là làm việc với nhiều nhóm. Sau khi kiểm tra, các chuyên gia bảo mật sẽ có cơ hội làm việc với các nhà phân tích và quản trị viên cơ sở dữ liệu. Để một ứng dụng hoạt động bình thường và an toàn, các nhóm này cố gắng xử lý các lỗ hổng bảo mật có cơ sở chung. Đối thoại giữa các nhóm này nêu lên một số vấn đề với IP thực.
Mục Lục
Khái niệm proxy và IP thực
Các ứng dụng web ngày nay chạy trên nhiều máy chủ ứng dụng và hệ thống cơ sở dữ liệu. Hãy tưởng tượng hai máy chủ ứng dụng chia sẻ cùng một mã nguồn. Các yêu cầu từ người dùng sẵn sàng được đáp ứng bởi một trong hai máy chủ này tùy thuộc vào tình trạng tải. Cơ chế cân bằng tải xử lý các yêu cầu HTTP trước các máy chủ ứng dụng, quyết định chuyển tiếp yêu cầu nào đến máy chủ ứng dụng nào. Điều này đặt ra một câu hỏi lớn cho các quản trị viên hệ thống trung gian và nhà phát triển phần mềm: địa chỉ IP thực của người dùng là gì?
Proxy chịu trách nhiệm truyền dữ liệu giữa hai hệ thống. Bộ cân bằng tải là cơ chế phụ trách proxy. Nói cách khác, chỉ một hệ thống giao tiếp với cả người dùng và máy chủ ứng dụng. Về lưu lượng mạng, máy chủ web A hoặc web B luôn giao tiếp với địa chỉ IP của bộ cân bằng tải. Điều tương tự cũng có thể được nói cho người dùng. Đối với các chuyên gia bảo mật, bộ cân bằng tải gây ra sự cố nghiêm trọng trong các cuộc tấn công tiêm nhiễm SQL dựa trên thời gian. Nhưng trọng tâm chính ở đây là giả mạo IP.
Mối quan hệ X-Forwarded-For và IP
Xem xét mối quan hệ giữa X-Forwarded-For, nhà phát triển và phần mềm trung gian. Ví dụ: giả sử nhiệm vụ của nhà phát triển ứng dụng là ghi lại tất cả các hoạt động, chẳng hạn như việc người dùng nhập sai mật khẩu, bằng địa chỉ IP của họ. Lúc đầu, nhà phát triển sẽ xác định địa chỉ IP của người dùng khi yêu cầu HTTP được đáp ứng với cơ hội được cung cấp bởi ngôn ngữ lập trình mà anh ta sử dụng và sẽ cố gắng tiếp tục sử dụng dữ liệu này trong ứng dụng.
Vì địa chỉ IP của nó sẽ cố định trong suốt quá trình phát triển nên nó sẽ luôn thấy cùng một địa chỉ trong quá trình kiểm tra vì nhìn chung, máy tính người dùng trong mạng công ty hoạt động với IP tĩnh trên địa chỉ MAC. Đơn vị sẽ thực hiện nghiệm thu một số công trình; tuy nhiên, sẽ có vấn đề với những điều này. Đơn vị kiểm tra sẽ chuyển vấn đề này tới nhà phát triển phần mềm.
Ở giai đoạn này, nhà phát triển có thể viết bộ điều khiển trong môi trường phát triển và xem yêu cầu HTTP được truyền tới ứng dụng ở dạng thô, vì mọi người đều có cùng một địa chỉ IP. Điều này sẽ dẫn đến việc làm việc với X-Forwarded-For.
Thông tin tiêu đề được gọi là X-Forwarded-For sẽ được gửi đến máy chủ ứng dụng. Ở giai đoạn này, nhà phát triển phần mềm sẽ thấy địa chỉ IP của họ mà họ kiểm soát bằng ipconfig chứ không phải bộ cân bằng tải mà họ thấy trong nhật ký. Nhiều lập trình viên nghĩ rằng họ có thể giải quyết vấn đề này bằng một khối mã như sau:
function getIPaddress() {
$ipKeys = array(
'HTTP_CLIENT_IP',
'HTTP_X_FORWARDED_FOR',
'HTTP_X_FORWARDED',
'HTTP_X_CLUSTER_CLIENT_IP',
'HTTP_FORWARDED_FOR', 'HTTP_FORWARDED',
'REMOTE_ADDR'
);
foreach ($ipKeys as $key) {
if (array_key_exists($key, $_SERVER) === true) {
foreach (explode("https://www.smartreviewaz.com/load-balancers-real-ip-risk-security/,", $_SERVER[$key]) as $ip) {
$ip = trim($ip);
if (validate_ip($ip)) {
return $ip;
}
}
}
}
return isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : false;
}
Điều này sẽ không đủ—nhà phát triển cần kiểm tra xem giá trị đến có phải là địa chỉ IP hợp lệ hay không.
Mọi thứ ở trên thuộc về phần do nhà phát triển xử lý. Tuy nhiên, để một ứng dụng hoạt động bình thường và an toàn, các nhóm—làm việc cùng nhau trên lý thuyết nhưng trên thực tế, ở những điểm cực kỳ xa nhau—cố gắng xử lý các lỗ hổng bảo mật có cơ sở chung. Bây giờ hãy thử xem xét vấn đề từ quan điểm của người chịu trách nhiệm về cấu hình của bộ cân bằng tải.
Quản trị viên hệ thống có thể nghĩ rằng các nhà phát triển ghi lại thông tin như X-Forwarded-For vì dữ liệu trong yêu cầu HTTP không thể tin cậy được. Những quản trị viên đó thường truyền X-Forwarded-For; tuy nhiên, chúng cũng truyền địa chỉ nguồn TCP của hệ thống đã gửi yêu cầu dưới dạng giá trị tiêu đề thứ hai. Cấu trúc True-Client-IP là một ví dụ điển hình về điều này.
Khi bạn kết hợp tất cả những thứ này lại với nhau, hai đơn vị khác nhau sẽ đi theo những con đường khác nhau cho cùng một vấn đề, được gọi là giả mạo IP máy khách. Kết quả là một vấn đề nghiêm trọng xảy ra khi việc ghi nhật ký IP và ủy quyền dựa trên IP sẽ không hoạt động.
Giả mạo IP của khách hàng được phát hiện như thế nào trong các bài kiểm tra thâm nhập?
Hầu hết những người kiểm tra thâm nhập đều sử dụng Firefox để kiểm tra bảo mật. Họ định cấu hình Firefox bằng một tiện ích bổ sung đơn giản, X-Forwarded-For: 127.0.0.1 cho tất cả các yêu cầu HTTP. Và do đó, khả năng phát hiện các lỗ hổng như vậy trong tất cả các thử nghiệm thâm nhập sẽ tăng lên. Thực hiện kiểm tra theo Danh sách kiểm tra OWASP đảm bảo bạn kiểm tra các lỗ hổng đó. Tuy nhiên, để phát hiện lỗ hổng X-Forwarded-For, bạn cần một mô-đun trong ứng dụng hiển thị địa chỉ IP của bạn hoặc các hành động đã thực hiện.
Cách giải quyết lỗ hổng X-Forwarded-For
Các tổ chức cần một tài liệu phát triển ứng dụng an toàn bắt buộc cho tất cả các nhóm phần mềm và công ty gia công phần mềm. Ví dụ: nếu bạn cần địa chỉ IP của người dùng, công ty nên lập kế hoạch trước và đưa ra quy tắc về thông tin tiêu đề mà công ty sẽ sử dụng ở đây. Nếu không, các nhóm khác nhau sẽ đưa ra các giải pháp khác nhau. Nếu không xử lý được tình trạng này, các ứng dụng gia công phần mềm sẽ ra đời, gây khó khăn cho việc đo lường mã nguồn. Nhìn chung, các công ty không muốn đi theo con đường như vậy.
Nhưng để giải quyết vấn đề này, bạn có thể sử dụng quy tắc F5 sau:
when HTTP_REQUEST {
HTTP::header remove X-Forwarded-For
HTTP::header insert X-Forwarded-For [IP::remote_addr]
}
Thao tác này sẽ xóa trường X-Forwarded-For trong yêu cầu HTTP khỏi thế giới bên ngoài. Sau đó, nó truyền yêu cầu bằng cách thêm địa chỉ IP của hệ thống đã gửi yêu cầu tới nó. Bằng cách đó, một danh sách đáng tin cậy được tạo cho phần mềm hoạt động theo X-Forwarded-For.
Tóm lại, mục tiêu lớn nhất ở đây là thực hiện một số kiểm tra đối với các yêu cầu HTTP và tạo một môi trường đáng tin cậy. Khối mã ở trên là một ví dụ tốt mà bạn có thể sử dụng cho việc này.
Khung an ninh mạng và tài liệu dành cho doanh nghiệp
Các đơn vị dường như độc lập với nhau thực sự là các bộ phận của một tổng thể. Đó là lý do tại sao mọi thứ phải hoạt động có hệ thống. Các quy tắc được xác định trước phải được áp dụng giữa mỗi đơn vị. Nếu một hệ thống làm việc như vậy không được thông qua, nhiều vấn đề như lỗ hổng X-Forwarded-For có thể xảy ra. Đối với điều này, mọi thứ nên được xem xét trước và nên sử dụng tài liệu càng toàn diện càng tốt.
Và mọi đơn vị trong hệ thống rộng lớn này cần áp dụng và triển khai các khuôn khổ an ninh mạng. Điểm khởi đầu của bạn là nghiên cứu và tìm hiểu logic hoạt động của các khung này.