2010-06-03 40 views
13

Tôi sắp triển khai một API RESTful đến trang web của chúng tôi (dựa trên các dịch vụ dữ liệu WCF, nhưng điều đó có thể không quan trọng).Làm thế nào để bạn ngăn chặn các cuộc tấn công bạo lực trên các dịch vụ dữ liệu RESTful

Tất cả dữ liệu được cung cấp qua API này thuộc về một số người dùng máy chủ của tôi, vì vậy tôi cần đảm bảo chỉ những người dùng đó có quyền truy cập vào tài nguyên của tôi. Vì lý do này, tất cả các yêu cầu phải được thực hiện với một sự kết hợp đăng nhập/mật khẩu như là một phần của yêu cầu.

Cách tiếp cận được đề xuất để ngăn chặn các cuộc tấn công bạo lực trong trường hợp này là gì?

Tôi đã nghĩ đến việc đăng nhập các yêu cầu thất bại bị từ chối do thông tin đăng nhập sai và bỏ qua các yêu cầu bắt nguồn từ cùng một IP sau khi vượt ngưỡng yêu cầu không thành công nhất định. Đây có phải là cách tiếp cận tiêu chuẩn, hay tôi thiếu một cái gì đó quan trọng?

Trả lời

8

Tự chặn dựa trên IP là nguy hiểm do số cổng NAT ra khỏi đó.

Bạn có thể làm chậm (tar pit) một khách hàng nếu nó thực hiện quá nhiều yêu cầu một cách nhanh chóng; có nghĩa là, cố tình chèn một sự chậm trễ của một vài giây trước khi trả lời. Con người không có khả năng phàn nàn, nhưng bạn đã làm chậm chương trình.

+7

Hm, bạn muốn đặt CAPTCHA vào API RESTfull như thế nào? AFAIU tất cả các khách hàng không được coi là con người. – SergGr

+0

Điểm tốt, tôi phải chớp mắt qua bit RESTful. Khôn lanh. – crazyscot

+0

Hình ảnh xác thực là những gì tôi đang sử dụng ngay bây giờ cho trang web thông thường của mình. Nhưng như Iphone mới bắt đầu chỉ ra, đó không phải là một lựa chọn cho một api yên tĩnh. Tarpitting có thể là một ý tưởng tốt mặc dù. –

3

Tôi sẽ sử dụng phương pháp tương tự như tôi làm với trang web. Theo dõi số lần đăng nhập thất bại trong một cửa sổ nhất định - giả sử cho phép 3 (hoặc 5 hoặc 15) trong một khoảng thời gian hợp lý, nói 15 phút. Nếu vượt quá ngưỡng, hãy khóa tài khoản và đánh dấu thời gian khóa xảy ra. Bạn cũng có thể đăng nhập sự kiện này. Sau một khoảng thời gian thích hợp khác đã trôi qua, hãy nói một giờ, mở khóa tài khoản (trong lần đăng nhập tiếp theo). Đăng nhập thành công thiết lập lại các quầy và thời gian khóa cuối cùng. Lưu ý rằng bạn không bao giờ thực sự cố gắng đăng nhập vào tài khoản bị khóa, bạn chỉ cần trả lại đăng nhập thất bại.

Điều này có hiệu quả sẽ hạn chế bất kỳ cuộc tấn công bạo lực nào, khiến cuộc tấn công chống lại mật khẩu hợp lý rất khó thành công. Kẻ tấn công, sử dụng số của tôi ở trên sẽ chỉ có thể thử 3 (hoặc 5 hoặc 15) lần cho mỗi 1.25hrs. Sử dụng nhật ký của bạn, bạn có thể phát hiện khi một cuộc tấn công như vậy có thể xảy ra đơn giản bằng cách tìm kiếm nhiều lần khóa từ cùng một tài khoản trong cùng một ngày. Vì dịch vụ của bạn được dự định sử dụng bởi các chương trình, một khi chương trình truy cập dịch vụ có thông tin xác thực được đặt đúng, nó sẽ không bao giờ gặp phải lỗi đăng nhập trừ khi có một cuộc tấn công đang diễn ra. Đây sẽ là một dấu hiệu cho thấy một cuộc tấn công có thể xảy ra. Khi bạn biết một cuộc tấn công đang diễn ra, bạn có thể thực hiện các biện pháp khác để hạn chế quyền truy cập vào các IP vi phạm hoặc liên quan đến các cơ quan chức năng, nếu thích hợp và nhận được cuộc tấn công dừng lại.

+2

Điều đó sẽ không làm cho việc khởi chạy các cuộc tấn công DOS vào tài khoản người dùng thậm chí còn dễ dàng hơn không? Ví dụ, một đối thủ cạnh tranh ác ý của trang web của chúng tôi có thể cố tình khóa người dùng bằng cách đăng mật khẩu sai. Anh ấy sẽ không có quyền truy cập vào tài khoản của họ, nhưng anh ấy sẽ thành công trong việc làm cho trang web của chúng tôi trông không đáng tin cậy. Đó là lý do tại sao tôi xem xét cách tiếp cận dựa trên IP - kẻ tấn công sẽ phải giả mạo địa chỉ ip của người dùng thực sự để khóa anh ta. –

+0

@Adrian - vâng, nhưng đó là một loại vấn đề khác. Sử dụng phương pháp dựa trên IP để giải quyết nó có thể làm cho dịch vụ của bạn thực sự không đáng tin cậy vì có thể người dùng chỉ quên cập nhật tập lệnh của mình sau khi thay đổi mật khẩu.Trong trường hợp đó, người dùng chỉ có thể đợi cho đến khi hết thời gian chờ và thử lại mà không liên quan đến bạn. Bằng cách sử dụng đăng nhập, bạn vẫn có thể phát hiện một cuộc tấn công DOS và đặt vào một khối IP từ trang web ác ý và, trong trường hợp này, hãy gọi điện cho chính quyền. – tvanfosson

Các vấn đề liên quan