Các tệp shtml có an toàn không
Các khung ứng dụng web được tạo ra để giúp các nhà phát triển xây dựng các ứng dụng web. Một số trong số họ cũng giúp bạn bảo mật ứng dụng web. Trên thực tế, một khung không an toàn hơn khung khác. Nếu bạn sử dụng nó đúng cách, bạn sẽ có thể xây dựng các ứng dụng an toàn với nhiều khung. Ruby on Rails có một số phương thức trợ giúp thông minh, chẳng hạn như chống lại SQL injection, vì vậy đây hầu như không phải là vấn đề Nói chung không có cái gọi là bảo mật plug-n-play. Bảo mật phụ thuộc vào những người sử dụng khung và đôi khi vào phương pháp phát triển. Và nó phụ thuộc vào tất cả các lớp của môi trường ứng dụng web. Bộ lưu trữ phía sau, máy chủ web và chính ứng dụng web (và có thể là các lớp hoặc ứng dụng khác) Tuy nhiên, Tập đoàn Gartner ước tính rằng 75% các cuộc tấn công nằm ở lớp ứng dụng web và phát hiện ra rằng "trong số 300 trang web được kiểm toán, 97% dễ bị tấn công". Điều này là do các ứng dụng web tương đối dễ bị tấn công, vì chúng dễ hiểu và thao tác đơn giản, ngay cả với người bình thường. Các mối đe dọa đối với các ứng dụng web bao gồm chiếm đoạt tài khoản người dùng, bỏ qua kiểm soát truy cập, đọc hoặc sửa đổi dữ liệu nhạy cảm hoặc trình bày nội dung lừa đảo. Hoặc kẻ tấn công có thể cài đặt chương trình ngựa thành Troia hoặc phần mềm gửi e-mail không mong muốn, nhằm mục đích làm giàu tài chính hoặc gây thiệt hại cho thương hiệu bằng cách sửa đổi tài nguyên của công ty. Để ngăn chặn các cuộc tấn công, giảm thiểu tác động của chúng và loại bỏ các điểm bị tấn công, trước hết bạn phải hiểu đầy đủ về các phương thức tấn công để tìm ra biện pháp đối phó chính xác. Đó là những gì hướng dẫn này nhằm mục đích Để phát triển các ứng dụng web an toàn, bạn phải cập nhật tất cả các lớp và biết kẻ thù của mình. Để luôn cập nhật, hãy đăng ký danh sách gửi thư bảo mật, đọc blog bảo mật và tạo thói quen cập nhật và kiểm tra bảo mật (xem chương Tài nguyên bổ sung). Nó được thực hiện thủ công vì đó là cách bạn tìm thấy các vấn đề bảo mật logic khó chịu Chương này mô tả một số cuộc tấn công cụ thể liên quan đến phiên và các biện pháp bảo mật để bảo vệ dữ liệu phiên của bạn 2. 1 Phiên là gì?Phiên cho phép ứng dụng duy trì trạng thái dành riêng cho người dùng, trong khi người dùng tương tác với ứng dụng. Ví dụ: các phiên cho phép người dùng xác thực một lần và duy trì trạng thái đăng nhập cho các yêu cầu trong tương lai Hầu hết các ứng dụng cần theo dõi trạng thái của người dùng tương tác với ứng dụng. Đây có thể là nội dung của giỏ hàng hoặc id người dùng của người dùng hiện đang đăng nhập. Loại trạng thái dành riêng cho người dùng này có thể được lưu trữ trong phiên Rails cung cấp một đối tượng phiên cho mỗi người dùng truy cập ứng dụng. Nếu người dùng đã có phiên hoạt động, Rails sẽ sử dụng phiên hiện có. Nếu không, một phiên mới được tạo 2. Chiếm quyền điều khiển 2 phiênĐánh cắp ID phiên của người dùng cho phép kẻ tấn công sử dụng ứng dụng web dưới tên của nạn nhân Nhiều ứng dụng web có hệ thống xác thực. người dùng cung cấp tên người dùng và mật khẩu, ứng dụng web sẽ kiểm tra chúng và lưu id người dùng tương ứng trong hàm băm phiên. Từ bây giờ, phiên có hiệu lực. Đối với mọi yêu cầu, ứng dụng sẽ tải người dùng, được xác định bởi id người dùng trong phiên mà không cần xác thực mới. ID phiên trong cookie xác định phiên Do đó, cookie đóng vai trò xác thực tạm thời cho ứng dụng web. Bất kỳ ai lấy cookie từ người khác đều có thể sử dụng ứng dụng web với tư cách là người dùng này - với những hậu quả nghiêm trọng có thể xảy ra. Dưới đây là một số cách để chiếm quyền điều khiển phiên và các biện pháp đối phó của chúng
Mục tiêu chính của hầu hết những kẻ tấn công là kiếm tiền. Giá ngầm cho các tài khoản đăng nhập ngân hàng bị đánh cắp dao động từ 0. 5%-10% số dư tài khoản, $0. 5-$30 cho số thẻ tín dụng ($20-$60 với đầy đủ chi tiết), $0. 1-$1. 5 cho danh tính (Tên, SSN và DOB), $20-$50 cho tài khoản nhà bán lẻ và $6-$10 cho tài khoản nhà cung cấp dịch vụ đám mây, theo Symantec Internet Security Threat Report (2017) 2. Lưu trữ 3 phiênRails sử dụng 3 làm bộ lưu trữ phiên mặc địnhRails 4 lưu phiên băm trong cookie ở phía máy khách. Máy chủ truy xuất hàm băm phiên từ cookie và loại bỏ nhu cầu về ID phiên. Điều đó sẽ làm tăng đáng kể tốc độ của ứng dụng, nhưng nó là một tùy chọn lưu trữ gây tranh cãi và bạn phải suy nghĩ về ý nghĩa bảo mật và giới hạn lưu trữ của nó
4 sử dụng lọ cookie được mã hóa để cung cấp vị trí được mã hóa, an toàn để lưu trữ dữ liệu phiên. Do đó, các phiên dựa trên cookie cung cấp cả tính toàn vẹn cũng như tính bảo mật cho nội dung của chúng. Khóa mã hóa, cũng như khóa xác minh được sử dụng cho cookie đã ký, được lấy từ giá trị cấu hình 6Bí mật phải dài và ngẫu nhiên. Sử dụng 7 để nhận những bí mật độc đáo mớiĐiều quan trọng nữa là sử dụng các giá trị muối khác nhau cho cookie được mã hóa và đã ký. Sử dụng cùng một giá trị cho các giá trị cấu hình muối khác nhau có thể dẫn đến cùng một khóa dẫn xuất được sử dụng cho các tính năng bảo mật khác nhau, do đó có thể làm suy yếu độ mạnh của khóa Trong các ứng dụng thử nghiệm và phát triển nhận được một 6 bắt nguồn từ tên ứng dụng. Các môi trường khác phải sử dụng khóa ngẫu nhiên có trong 9, được hiển thị ở đây ở trạng thái được giải mã Bản saoNếu các bí mật của ứng dụng của bạn có thể đã bị lộ, hãy cân nhắc kỹ lưỡng việc thay đổi chúng. Thay đổi 6 sẽ hết hạn các phiên hoạt động hiện tại2. 4 Luân phiên cấu hình cookie được mã hóa và đã kýXoay vòng là lý tưởng để thay đổi cấu hình cookie và đảm bảo cookie cũ không bị vô hiệu ngay lập tức. Sau đó, người dùng của bạn có cơ hội truy cập trang web của bạn, đọc cookie của họ với cấu hình cũ và viết lại nó với thay đổi mới. Sau đó, vòng quay có thể bị xóa khi bạn cảm thấy đủ thoải mái. Người dùng đã có cơ hội nâng cấp cookie của họ Có thể xoay các mật mã và thông báo được sử dụng cho các cookie đã mã hóa và đã ký Ví dụ: để thay đổi thông báo được sử dụng cho cookie đã ký từ SHA1 thành SHA256, trước tiên bạn sẽ chỉ định giá trị cấu hình mới 0Bản saoBây giờ, hãy thêm một vòng quay cho thông báo SHA1 cũ để các cookie hiện có được nâng cấp liền mạch lên thông báo SHA256 mới 1Bản saoSau đó, mọi cookie đã ký bằng văn bản sẽ được tiêu hóa bằng SHA256. Vẫn có thể đọc các cookie cũ được ghi bằng SHA1 và nếu được truy cập, chúng sẽ được ghi bằng thông báo mới để chúng được nâng cấp và sẽ không hợp lệ khi bạn xóa xoay vòng Sau khi người dùng có cookie đã ký được tiêu hóa SHA1 sẽ không còn cơ hội ghi lại cookie của họ nữa, hãy xóa xoay vòng Mặc dù bạn có thể thiết lập bao nhiêu vòng quay tùy thích, nhưng việc có nhiều vòng quay diễn ra cùng một lúc là điều không phổ biến Để biết thêm chi tiết về xoay khóa với các tin nhắn đã mã hóa và đã ký cũng như các tùy chọn khác nhau mà phương thức 01 chấp nhận, vui lòng tham khảo tài liệu API MessageEncryptor và API MessageVerifier2. 5 Replay Attacks cho CookieStore SessionsMột loại tấn công khác mà bạn phải biết khi sử dụng 4 là tấn công lặp lạiNó hoạt động như thế này
Bao gồm một nonce (một giá trị ngẫu nhiên) trong phiên giải quyết các cuộc tấn công phát lại. Một nonce chỉ hợp lệ một lần và máy chủ phải theo dõi tất cả các nonce hợp lệ. Nó thậm chí còn phức tạp hơn nếu bạn có nhiều máy chủ ứng dụng. Lưu trữ nonces trong bảng cơ sở dữ liệu sẽ đánh bại toàn bộ mục đích của CookieStore (tránh truy cập cơ sở dữ liệu) Giải pháp tốt nhất để chống lại nó không phải là lưu trữ loại dữ liệu này trong một phiên mà là trong cơ sở dữ liệu. Trong trường hợp này, lưu trữ tín dụng trong cơ sở dữ liệu và 03 trong phiên2. 6 Phiên cố địnhNgoài việc đánh cắp ID phiên của người dùng, kẻ tấn công có thể sửa ID phiên mà họ biết. Điều này được gọi là cố định phiên Cuộc tấn công này tập trung vào việc sửa ID phiên của người dùng mà kẻ tấn công đã biết và buộc trình duyệt của người dùng sử dụng ID này. Do đó, kẻ tấn công không cần thiết phải đánh cắp ID phiên sau đó. Đây là cách cuộc tấn công này hoạt động
2. 7 Cố định phiên - Biện pháp đối phóMột dòng mã sẽ bảo vệ bạn khỏi sự cố định phiên Biện pháp đối phó hiệu quả nhất là cấp mã định danh phiên mới và tuyên bố mã định danh cũ không hợp lệ sau khi đăng nhập thành công. Bằng cách đó, kẻ tấn công không thể sử dụng mã định danh phiên cố định. Đây cũng là một biện pháp đối phó tốt đối với việc chiếm quyền điều khiển phiên. Đây là cách tạo một phiên mới trong Rails Nếu bạn sử dụng đá quý Devise phổ biến để quản lý người dùng, nó sẽ tự động hết hạn các phiên đăng nhập và đăng xuất cho bạn. Nếu bạn cuộn của riêng mình, hãy nhớ hết hạn phiên sau hành động đăng nhập của bạn (khi phiên được tạo). Điều này sẽ xóa các giá trị khỏi phiên, do đó bạn sẽ phải chuyển chúng sang phiên mới Một biện pháp đối phó khác là lưu các thuộc tính dành riêng cho người dùng trong phiên, xác minh chúng mỗi khi có yêu cầu và từ chối quyền truy cập nếu thông tin không khớp. Các thuộc tính như vậy có thể là địa chỉ IP từ xa hoặc tác nhân người dùng (tên trình duyệt web), mặc dù tác nhân sau ít dành riêng cho người dùng hơn. Khi lưu địa chỉ IP, bạn phải nhớ rằng có những nhà cung cấp dịch vụ Internet hoặc các tổ chức lớn đặt người dùng của họ làm proxy. Những điều này có thể thay đổi trong suốt một phiên, vì vậy những người dùng này sẽ không thể sử dụng ứng dụng của bạn hoặc chỉ sử dụng được ở một mức độ hạn chế 2. 8 phiên hết hạnCác phiên không bao giờ hết hạn sẽ mở rộng khung thời gian cho các cuộc tấn công như giả mạo yêu cầu giữa các trang web (CSRF), chiếm quyền điều khiển phiên và sửa phiên Một khả năng là đặt dấu thời gian hết hạn của cookie bằng ID phiên. Tuy nhiên, khách hàng có thể chỉnh sửa cookie được lưu trữ trong trình duyệt web để các phiên hết hạn trên máy chủ sẽ an toàn hơn. Dưới đây là một ví dụ về cách hết hạn phiên trong bảng cơ sở dữ liệu. Gọi 05 để hết hạn các phiên đã được sử dụng lâu hơn 20 phút trước 7Bản saoPhần về cố định phiên đã giới thiệu vấn đề về phiên duy trì. Kẻ tấn công duy trì phiên cứ năm phút một lần có thể giữ phiên tồn tại mãi mãi, mặc dù bạn đang hết hạn phiên. Một giải pháp đơn giản cho việc này là thêm cột 06 vào bảng phiên. Bây giờ bạn có thể xóa các phiên đã được tạo từ lâu. Sử dụng dòng này trong phương pháp quét ở trên 9Bản saoPhương pháp tấn công này hoạt động bằng cách bao gồm mã độc hại hoặc liên kết trong trang truy cập ứng dụng web mà người dùng được cho là đã xác thực. Nếu phiên cho ứng dụng web đó chưa hết thời gian, kẻ tấn công có thể thực thi các lệnh trái phép Trong chương phiên, bạn đã biết rằng hầu hết các ứng dụng Rails đều sử dụng phiên dựa trên cookie. Họ lưu trữ ID phiên trong cookie và có hàm băm phiên phía máy chủ hoặc toàn bộ hàm băm phiên nằm ở phía máy khách. Trong cả hai trường hợp, trình duyệt sẽ tự động gửi cookie theo mọi yêu cầu tới một miền, nếu nó có thể tìm thấy cookie cho miền đó. Điểm gây tranh cãi là nếu yêu cầu đến từ một trang web thuộc miền khác, nó cũng sẽ gửi cookie. Hãy bắt đầu với một ví dụ
Điều quan trọng cần lưu ý là hình ảnh hoặc liên kết được tạo thực tế không nhất thiết phải nằm trong miền của ứng dụng web, nó có thể ở bất kỳ đâu - trong diễn đàn, bài đăng trên blog hoặc email CSRF rất hiếm khi xuất hiện trong CVE (Lỗ hổng phổ biến và Phơi nhiễm) - dưới 0. 1% năm 2006 - nhưng nó thực sự là 'người khổng lồ đang ngủ' [Grossman]. Điều này hoàn toàn trái ngược với kết quả trong nhiều hợp đồng bảo mật - CSRF là một vấn đề bảo mật quan trọng 3. 1 Biện pháp đối phó CSRFĐầu tiên, theo yêu cầu của W3C, hãy sử dụng GET và POST một cách thích hợp. Thứ hai, mã thông báo bảo mật trong các yêu cầu không NHẬN sẽ bảo vệ ứng dụng của bạn khỏi CSRF Về cơ bản, giao thức HTTP cung cấp hai loại yêu cầu chính - GET và POST (DELETE, PUT và PATCH nên được sử dụng như POST). World Wide Web Consortium (W3C) cung cấp danh sách kiểm tra để chọn HTTP GET hoặc POST Sử dụng NHẬN nếu
Sử dụng POST nếu
Nếu ứng dụng web của bạn là RESTful, bạn có thể đã quen với các động từ HTTP bổ sung, chẳng hạn như PATCH, PUT hoặc DELETE. Tuy nhiên, một số trình duyệt web cũ không hỗ trợ chúng - chỉ GET và POST. Rails sử dụng trường 11 ẩn để xử lý các trường hợp nàyYêu cầu POST cũng có thể được gửi tự động. Trong ví dụ này, liên kết www. vô hại. com được hiển thị dưới dạng đích trong thanh trạng thái của trình duyệt. Nhưng nó đã thực sự tự động tạo một biểu mẫu mới gửi yêu cầu POST 5Bản saoHoặc kẻ tấn công đặt mã vào trình xử lý sự kiện onmouseover của một hình ảnh 6Bản saoCó nhiều khả năng khác, như sử dụng Bản sao 04Mã JavaScript này sẽ chỉ hiển thị một hộp cảnh báo. Các ví dụ tiếp theo thực hiện chính xác như vậy, chỉ ở những nơi rất hiếm gặp 8 Bản saoTất nhiên, đối với kẻ tấn công, điều này không hữu ích, vì nạn nhân sẽ thấy cookie của chính họ. Ví dụ tiếp theo sẽ thử tải một hình ảnh từ URL http. //www. kẻ tấn công. com/ cộng với cookie. Tất nhiên URL này không tồn tại nên trình duyệt không hiển thị gì. Nhưng kẻ tấn công có thể xem lại tệp nhật ký truy cập máy chủ web của họ để xem cookie của nạn nhân 9
Các tệp nhật ký trên www. kẻ tấn công. com sẽ đọc như thế này 0
Bạn có thể giảm thiểu các cuộc tấn công này (theo cách rõ ràng) bằng cách thêm cờ httpOnly vào cookie để JavaScript có thể không đọc được 13. Có thể sử dụng cookie chỉ HTTP từ IE v6. SP1, Firefox v2. 0. 0. 5, Opera 9. 5, Safari 4 và Chrome 1. 0. 154 trở đi. Nhưng các trình duyệt khác, cũ hơn (chẳng hạn như WebTV và IE 5. 5 trên Mac) thực sự có thể khiến trang không tải được. Tuy nhiên, được cảnh báo rằng cookie sẽ vẫn hiển thị khi sử dụng Ajax7. 3. 2. 2 sự đào thảiVới việc xóa trang web, kẻ tấn công có thể làm rất nhiều việc, chẳng hạn như đưa ra thông tin sai lệch hoặc dụ nạn nhân vào trang web của kẻ tấn công để lấy cắp cookie, thông tin đăng nhập hoặc dữ liệu nhạy cảm khác. Cách phổ biến nhất là bao gồm mã từ các nguồn bên ngoài bằng iframe 9
Điều này tải HTML và/hoặc JavaScript tùy ý từ một nguồn bên ngoài và nhúng nó như một phần của trang web. 14 này được lấy từ một cuộc tấn công thực tế vào các trang web hợp pháp của Ý bằng cách sử dụng khung tấn công Mpack. Mpack cố gắng cài đặt phần mềm độc hại thông qua các lỗ hổng bảo mật trong trình duyệt web - rất thành công, 50% các cuộc tấn công thành côngMột cuộc tấn công chuyên biệt hơn có thể chồng lên toàn bộ trang web hoặc hiển thị biểu mẫu đăng nhập trông giống như biểu mẫu ban đầu của trang web nhưng truyền tên người dùng và mật khẩu đến trang web của kẻ tấn công. Hoặc nó có thể sử dụng CSS và/hoặc JavaScript để ẩn một liên kết hợp pháp trong ứng dụng web và hiển thị một liên kết khác tại vị trí chuyển hướng đến một trang web giả mạo Các cuộc tấn công tiêm nhiễm được phản ánh là những cuộc tấn công mà tải trọng không được lưu trữ để hiển thị cho nạn nhân sau này, nhưng được bao gồm trong URL. Đặc biệt là các hình thức tìm kiếm không thoát khỏi chuỗi tìm kiếm. Liên kết sau đây trình bày một trang nói rằng "George Bush bổ nhiệm một cậu bé 9 tuổi làm chủ tịch. " |