3. Cấu trúc luận văn
2.5.2. Penetration Testing thủ công
Thuật ngữ “Penetration Testing” ( hay Pentest) có thể hiểu một cách đơn giản chính là đánh giá độ an toàn bằng cách tấn công( đánh trận giả ). Một phần trong công tác đánh giá hệ thống. Nói một cách chính xác ta phải thực hiện một số công việc chính sau đây: - Xác định khả năng bị tấn công.
- Khả năng kết hợp các nguy cơ nhỏ thành mối nguy cơ lớn.
- Xác định các nguy cơ mà các công cụ tự động không phát hiện được.
- Đánh giá khả năng tác động đến hoạt động của tổ chức nếu Pentest thành công. - Khả năng của hệ thống trong việc ngăn chặn các loại hình tấn công.
- Lượng hoá các vấn đề cần đầu tư cho bảo mật.
Pentest một cách thủ công là cách mang lại kết quả tốt nhất vì một lý do đơn giản: Mỗi ứng dụng Web là khác nhau và có tương tác với người sử dụng. Nhiều trường nhập dữ liệu yêu cầu thông tin hợp lệ như: một ID khách hàng hợp lệ, số thẻ tín dụng hợp lệ, tên một người dùng, sau đó mới cho phép người dùng tiến hành bước tiếp theo. Ví dụ, tương tác của người sử dụng là CAPTCHA, được thiết kế một cách rõ ràng để xác định người đó và để ngăn chặn các hệ thống tự động truy cập vào các lớp sâu hơn của ứng dụng Web. Sự tương tác của con người trở nên quan trọng hơn trong các ứng dụng Web hiện đại vì các thư viện JavaScript, hình ảnh động, và các yêu cầu HTTP không đồng bộ thông qua AJAX được kích hoạt bằng việc nhấp chuột hoặc nhấn phím.
Một số lỗ hổng trong các ứng dụng Web có thể được kẻ tấn công khai thác bằng cách sử dụng các cách khác thường. Một số bài báo cung cấp một số ví dụ khá hay. Họ tạo ra một ứng dụng thử nghiệm được gọi là "WackoPicko", trong đó người dùng có thể tải lên hình ảnh. Một lỗ hổng trong WackoPicko hoạt động như sau: Khi tải lên một hình
ảnh, WackoPicko sao chép tệp được đăng bởi người dùng tới một thư mục con của thư mục tải lên. Tên của thư mục con là thẻ người dùng cung cấp các hình ảnh được tải lên. Tin tặc có thể thao tác trên các tham số thẻ để thực hiện tấn công.
Kết quả là máy quét không thể tìm ra lỗ hổng bảo mật. Nguyên nhân do các máy quét không thể tải lên một hình ảnh. Nhưng ngay cả khi các máy quét có thể tải lên một hình ảnh, vẫn có khả năng máy quét sẽ không phát hiện được các lỗ hổng. Chỉ có sự kết hợp của việc tải lên một hình ảnh và cung cấp một thẻ đặc biệt thì sẽ tìm ra lỗ hổng đó.
Pentesters sử dụng một cách tiếp cận lặp đi lặp lại. Đầu tiên, các thông số đầu vào được sửa đổi một chút bằng cách chèn các vectơ tấn công có chứa các kí tự quan trọng như ‘, ", <, và >.
Đôi khi , các vectơ tấn công có thể được thay thế bằng vectơ tấn công tương tự, phá vỡ các bộ lọc cụ thể. Giả sử, bộ lọc đầu vào lọc chuỗi con <script>. Nếu bộ lọc không tái kiểm tra các chuỗi, các vector tấn công <scr <script> ipt src = "..."> </ script> sẽ vượt qua được bộ lọc và mã độc được thực thi.
Một cách tiếp cận lặp đi lặp lại vào thư mục WackoPicko truyền tải lỗ hổng bảo mật sẽ bao gồm tải lên một hình ảnh bình thường với thẻ khác nhau như test, <script> alert (5) </ script>, .. / test, test/test2, .. /../ test, để tìm các bất thường trong các phản hồi cho mỗi vectơ tấn công. Ngoài ra, hình ảnh có thể được thay thế bằng một hình ảnh bị thay đổi hoặc bởi một tệp hoàn toàn khác chẳng hạn như một Shell-script (tập lệnh vỏ) hoặc một tệp script (tập lệnh) được viết bằng ngôn ngữ lập trình của các ứng dụng Web để tiêm các mã tiêm độc hại. Pentesting thủ công tìm hiểu các cách gây ra sự kiện bất ngờ của các ứng dụng Web để hiểu cơ chế và logic của nó.
Việc sử dụng pentesting thủ công trở nên cồng kềnh, nếu các biểu mẫu với các trường đầu vào là vô tận và mỗi trường phải được kiểm tra một lần. Hãy tưởng tượng một biểu mẫu với 20 trường đầu vào mà chỉ có một đầu vào là lỗ hổng bảo mật để tấn công. Đồng thời, nếu một trong những trường đầu vào khác bị phủ đầy bởi một vectơ tấn công, ứng dụng sẽ hiển thị một thông báo lỗi không rõ ràng.Cách duy nhất để tìm ra lỗ hỏng bảo mật là kiểm tra đầu vào của tất cả các trường. Ta cần một công cụ tự động để thực hiện các công việc lặp đi lặp lại.
Mặt khác, kiểm tra thâm nhập thủ công không phá hủy các máy chủ Web vì lượt tải quá mức bởi hàng ngàn yêu cầu HTTP, skipfish3 gửi đến 2.000 yêu cầu mỗi giây - một con số ấn tượng. Tuy nhiên, kết quả không phải lúc nào cũng như mong đợi.
Không phải tất cả các kiểm tra thâm nhập có thể được thực hiện trong môi trường thử nghiệm. Đôi khi, một pentester lấy được một tài khoản người dùng trong một môi trường sản xuất và phải cẩn thận tiêm các vectơ tấn công mà không ảnh hưởng tới những người dùng khác hoặc các chức năng tổng thể của ứng dụng Web. Mặc dù có thể loại bỏ các liên kết nhất định trong Web Vulnerability Scanners, nhưng vẫn có thể bị ảnh hưởng bởi các cuộc tấn công tự động nếu có nhiều vectơ tấn công được tiêm hoặc do pentester không loại bỏ một liên kết nào đó từ máy quét. Với pentesting thủ công, các mã tiêm trong các ứng dụng web có thể được dò tìm từ gốc một cách có hiệu quả.