Kiểm Thử Bảo mật website
ĐẠI HỌC THÁI NGUYÊN TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG BÀI TẬP LỚN Môn Kiểm Chứng Phần Mềm ĐỀ TÀI: Tìm hiểu một số công cụ kiểm thử, bảo mật Ứng dụng vào KTBM trên website Thành Viên: Nguyễn Văn Thanh Đào Đình Thiện Bùi Văn Công Đỗ Mạnh Hùng Ngô Tuấn Thịnh 1 CHƯƠNG I: TỔNG QUAN VỀ BẢO MẬT WEBSITE VÀ KIỂM THỬ BẢO MẬT 1.1. Tổng quan về bảo mật Bảo mật là sự thỏa hiệp giữa bảo mật và chức năng, khả năng sử dụng. Nếu bảo mật của hệ thống quá chặt chẽ, nó sẽ trở nên rất khó sử dụng hoặc khó hoạt động một cách hiệu quả. Nếu bảo mật quá đơn giản, hệ thống dễ bị tấn công và xâm nhập. Kiểm thử bảo mật Web, trong nghĩa truyền thống, là kiểm thử hiệu quả sự bảo vệ toàn bộ hệ thống Web. Nó yêu cầu kết hợp nhiều kiến thức về các công nghệ bảo mật, công nghệ mạng, lập trình, và kinh nghiệm thực tế về thâm nhập các hệ thống mạng. Hầu hết các kiểm thử viên phần mềm không có loại kiến thức này.Tuy nhiên, chúng ta nên hiểu các vấn đề về bảo mật sao cho chúng ta hiểu được các công việc chúng ta nên làm và các công việc nên được thực hiện bởi các chuyên gia khác. Mục đích của bảo mật : Đảm bảo sự an toàn dữ liệu cho hệ thống và bảo vệ các tài nguyên trên mạng trước sự tấn công nhằm phá vỡ hệ thống hoặc sử dụng trái phép các tài nguyên của một số người có chủ ý xấu. 1.2. Giới thiệu về kiểm thử bảo mật - Kiểm thử phần mềm là quá trình khảo sát một hệ thống hay thành phần dưới những điều kiện xác định, quan sát và ghi lại các kết quả, và đánh giá một khía cạnh nào đó của hệ thống hay thành phần đó. - Kiểm thử phần mềm là quá trình thực thi một chương trình với mục đích tìm lỗi. - Kiểm thử phần mềm là hoạt động khảo sát thực tiễn sản phẩm hay dịch vụ phần mềm trong đúng môi trường chúng dự định sẽ được triển khai nhằm 2 cung cấp cho người có lợi ích liên quan những thong tin về chất lượng của sản phẩm hay dịch vụ phần mềm ấy. Mục đích của kiểm thử phầm mềm là tìm ra các lỗi hay khiếm khuyết phầm mềm nhằm đảm bảo hiệu quả hoạt động tối ưu của phần mềm trong nhiều ngành khác nhau. 1.3. Kiểm thử bảo mật - Mục đích: tìm kiếm các lỗ hổng và rò rỉ thông tin gây nên chủ yếu do lập trình và do cấu hình sai các trình chủ Web và các trình chủ ứng dụng khác. - Kiểm thử bảo mật liên quan đến trách nhiệm của nguồn khác nhau sau đây: + Nhà định nghĩa chính sách (policymaker), định nghĩa các yêu cầu bảo mật nhằm tang độ tin cậy của người sử dụng và nhà sản xuất hệ thống. + Người quản trị mạng, thiết kế và cài đặt các biện pháp bảo mật nhằm cung cấp bảo mật ở mức hỏa động. + Lập trình viên phần mềm, chịu trách nhiệm kiểm thử độ hệ thống nhằm phát hiện các lỗi chức năng, tương tác cấu hình và khả năng tương thích khi họ liên quan đến cài đặt bảo mật (chủ yếu ở mức ứng dụng và có thể ở mức hoạt động), phát hiện các vấn đề do lỗi thiết kế bảo mật. + Các chuyên gia và nhà tư vấn bảo mật, giúp kiểm thử và duy trì các chương trình bảo mật vũng như xử lý các lỗ hổng bảo mật. Thông thường, nhóm người này vốn trước đây là những kẻ tấn công. Những kẻ tấn công cũ, là những người có nhiều kinh nghiệm, chịu trách nhiệm điều khiển các kiểm thử xâm nhập trước khi triển khai một hệ thống. Trừ khi tổ chức của chúng tôi không có một chuyên gia để thực hiện kiểm thử xâm nhập, không nên để một kiểm thử viên và lập trình viên chịu trách nhiệm này. - Những ưu điểm trong kiểm thử bảo mật + Kiểm thử bảo mật là kiểm thử chủ động, không bị động. 3 + Các lỗi không được xử lý là các kho báu để chèn lỗi vào nhằm xác định các lỗi bảo mật. + Các giao diện dữ liệu vào là các kho báu để chèn lỗi nhằm xác định các lỗi bảo mật. + Hãy xem xét mọi dữ liệu vào không hợp lệ có thể xảy ra phái trình khách. + Hãy xem xét mọi dữ liệu vào không hợp lệ có thể xảy ra phía trình chủ. + Tập trung trên các điều kiện dữ liệu vào mà ở đó dữ liệu được chuyển từ miền không tin cậyvào miền tin cậy. + Thiết kế các ca kiểm thử với sự nhấn mạnh trên các b + Tìm kiếm các lỗi cho phép người sử dụng thực thi chương trình trên máy chủ. iên giữa các miền tin cậy và miền không tin cậy. + Tìm kiếm các lỗi cho phép người sử dụng thay đổi nâng cao quyền truy cập. + Luôn ý thức rằng ứng dụng thường xử lý sai một số dữ liệu xấu đến từ phía trình khách không tin cậy. + Tìm kiếm dữ liệu vào mà có thể trở nên thực thi được (ví dụ: khi dữ liệu vào trở nên dữ liệu ra). 1.4. Đối tượng và hoạt động của Security Testing Cần chú ý đến các đối tượng và hoạt động Test sau: - Phân quyền (các vai trò và danh sách quyền tương ứng): chú ý vai trò của từng đối tượng sử dụng và các quyền cùng việc phân quyền phải chính xác, nếu không việc thông tin bị lộ một cách không phù hợp là khó tránh khỏi. Thông thường các ứng dụng luôn có 1 function cho việc Phân quyền nên việc Test bảo mật ở đây là test function của module Phân quyền và đảm bảo danh sách quyền đi kèm từng vai trò và danh sách vai trò là đủ và chính xác. - Độ an toàn của mạng (Network Scanning): thường sử dụng một tool quét tự động các cổng truy cập để đảm bảo tất cả các host trong mạng lưới có được đảm 4 bảo an toàn trong mạng nội bộ và không bị truy cập bất hợp pháp từ một mạng ngoài không. Tool quét thường dùng cho trường hợp này là NMap. - Rà soát các lỗ hổng tiềm ẩn (Vulnerability Scanning): Tool quét mạng có thể phát hiện ra các lỗ hổng bảo mật đã có và tồn tại trong mạng hoặc ứng dụng, còn kiểu test này là phát hiện ra các lỗ hổng bảo mật tiềm ẩn (chưa có ở thời điểm hiện tại nhưng có thể xảy ra trong tương lai). - Phát hiện các khả năng ăn trộm/bẻ gãy mật khẩu (Password Cracking) - Phát hiện lỗ hổng bảo mật từ các bản ghi log (Firewall log, IDS log, Server log ) => cùng là phát hiện lỗ hổng bảo mật tiềm ẩn hoặc đã có (tương tự phần 2, và 3 nhưng phương thức thực hiện là khác nhau. Kiểu 2) và 3) là dùng tool quét tự động và phân tích dựa trên kết quả đã qua sàng lọc của các tool quét tự động. Còn phương thức 5) này dựa trên các bản ghi log của hệ thống). - Kiểm tra tính toàn vẹn của hệ thống File (File Integrity Checkers): sự không đồng nhất về kiểu dữ liệu file trong 1 ứng dụng hay hệ thống có thể tạo kẽ hở để hacker thâm nhập vào. Rất nhiều virus khai thác qua kẽ hở này đã chứng minh điều đó. - Dò tìm và phát hiện virus (virus director) - War Dialling: là 1 thuật ngữ chỉ 1 hình thức lỗ hổng bảo mật mà hacker có thể khai thác qua modem mạng khiến gây ra hậu quả lớn. Các modem mạng nặc danh xuất hiện trong hệ thống mạng cung cấp 1 phương tiện vượt qua được tất cả các phương thức bảo mật. Có một số phần mềm cho phép hacker và người quản trị mạng gọi được đến một số lượng lớn số điện thoại mà 1 modem có trong nó (ví dụ: 1 máy tính với 4 modem có thể gọi ra được 10.000 số điện thoại trong ngày, việc thất thoát dữ liệu là rất lớn). 1.5. Các loại kiểm thử bảo mật 1.5.1 Kiểm thử yêu cầu và thiết kế. 5 Bất kỳ hệ thống nào cũng được xây dựng từ một tập hợp các yêu cầu. Đôi khi những yêu cầu này được viết một cách rõ rang, nhưng thường chúng là những phát biểu mật mờ không được định nghĩa rõ ràng. Ví dụ, có thể có phát biểu “Ứng dụng phải an toàn”. Nhưng “an toàn” nghĩa là gì và nên phải dành bao nhiêu công sức và thời gian để làm cho sản phẩm an toàn. 1.5.2 Kiểm thử mã nguồn Phương pháp kiểm tra độ bảo mật của ứng dụng thông qua mã nguồn của ứng dụng. Phuong pháp kiểm thử này chủ yếu dung để xác định sự an toàn của thuật toán được dung trong ứng dụng, xác độ nguy cơ rò rỉ thông tin, nguy cơ bị tấn công chiếm quyền kiểm soát thông qua mã nguồn. Phương pháp này thường ứng dụng kỹ thuật kiểm thử hộp trắng. 1.5.3 Kiểm thử các thiết lập của trình duyệt Các thiết lập của trình duyệt có thể được cài đặt trong các trình duyệt như Mozilla FireFox và Micrrosoft Internet Explorer cho phép giới hạn truy cập đến các nội dung internet có thể gây hại. Người sử dụng sẽ thường có các chỉnh sửa các thiết lập này.Hơn nữa, có một sự thay đổi lớn phía người sử dụng về khả năng làm chủ các thiết lập này.Những người sử dụng Web ngày càng được đào tạo nhiều hơn cách sử dụng các thiết lập để bảo vệ chính họ. Với tư cách là một đội phát triển Website hay ứng dụng Web, chúng ta không thể bắt buộc người sử dụng chấp nhận các thiết bị mặc định. Vì vậy, chúng ta cần phải kiểm thử nhiều sự kết hợp của các thiết lập. 1.5.4 Kiểm thử bức tường lửa Cần nhắc lại rằng nhóm kiểm thử phần mềm không chịu trách nhiệm kiểm thử sự hiệu quả của các tường lửa và sự cấu hình chúng.Kiểm thử tường lửa nhằm nhận biết các hiệu ứng về chức năng được tạo ra bởi sự chuyển đổi dữ liệu qua các mạng khác nhau.Một số mạng riêng và một số khác công cộng. 6 1.6. Quy trình kiểm thử bảo mật Website 1.6.1 Quy trình kiểm thử thủ công Hình 2.4: Quy trình kiểm thử thủ công 7 1.6.2 Quy trình kiểm thử bảo mật đê xuất Hình 2.5: Quy trình kiểm thử bảo mật đề xuất 8 1.6.3 Mô hình kiểm thử bảo mật phân tích và thiết kế Hình 2.6: Mô hình kiểm thử bảo mật phân tích thiết kế 9 1.6.4 Mô hình kiểm thử mã nguồn tự động Hình 2.7: Mô hình kiểm thử bảo mật 10 [...]... Khi triển khai các ứng dụng web trên Internet, nhiều người vẫn nghĩ rằng việc đảm bảo an toàn, bảo mật nhằm giảm thiểu tối đa khả năng bị tấn công từ các tin tặc chỉ đơn thuần tập trung vào các cấn đề như chọn hệ điều hành, hệ quản trị cơ sở dữ liệu, webserver sẽ chạy ứng dụng, …mà quên mất rằng ngay cả bản thân ứng dụng chạy trên đó cũng tiềm ẩn một lỗ hổng bảo mật rất lớn Một trong số các lỗ hổng này... TẤN CÔNG CƠ BẢN VÀO ỨNG DỤNG VÀ CÁC KỸ THUẬT KIỂM THỬ 2.1 Tấn công vào các lỗ hổng- điểm yếu (Injection vulnerabilities) Loại tấn công này thường được sử dụng khi dữ liệu đầu vào chưa được xác nhận (validated) Những cuộc tấn công này sẽ cung cấp một số dữ liệu đầu vào và đính kèm thêm dữ liệu độc hại (Những dữ liệu đính thêm này có thể dưới dạng các dòng lệnh để lấy được thêm các thông tin bảo mật) ... kẻ tấn công còn có thể sử dụng một số công cụ để dò tìm lỗi dạng này và tấn công với những thông tin đã được thiết lập sẵn + Thay đổi giá trị điều kiện truy vấn: Dạng lỗi này khiến cho kẻ tấn công có thể thay đổi giá trị điều kiện trong câu truy vấn, làm sai lệch sự hiển thị của một ứng dụng chứa lỗi này SELECT booktitle FROM booklist WHERE bookId = 'OOk14cd' AND 1=1; Sẽ hiển thị một trang một cách... đoạn mã trên được sử dụng trong một thủ tục xác thực thì ví dụ trên có thể được sử dụng để bắt buộc lựa chọn một tên người dùng hợp lệ bởi 't'='t' luôn đúng Trong khi hầu hết các SQL server cho phép thực hiện nhiều truy vấn cùng lúc chỉ với một lần gọi, tuy nhiên một số SQL API như mysql_query của php lại không cho phép điều đó vì lý do bảo mật Điều này chỉ ngăn cản tin tặc tấn công bằng cách sử dụng. .. quyền trên cơ sở dữ liệu của ứng dụng, thậm chí là server mà ứng dụng đó đang chạy Lỗi này thường xảy ra trên các ứng dụng web có dữ liệu được quản lí bằng các hệ quản trị cơ sở dữ liệu như SQL Server, MySQL, Oracle, DB2, Sysbase Sql Injection được mô tả như là một trong những lỗ hổng bảo mật web nguy hiểm nhất Khai thác Sql Injection, ngoài việc đoạt được quyền kiểm soát về mặt dữ liệu như đã nói ở trên, ... khiển hệ thống của bạn Đề phòng tránh, ta có thế thực hiện ở 2 mức: • Kiểm soát chặt chẽ dữ liệu nhập vào Cách phòng chống hiệu quả Sql injection chính là việc kiểm tra kỹ càng tham số đầu vào Những tham số mà từ đó người lập trình website sử dụng để xây dựng lên câu truy vấn tới cơ sở dữ liệu Công việc kiểm tra tham số đầu vào (áp dụng phòng tránh lỗi Sql injection) nên được tiến hành theo nhiều tầng:... sẽ mở các kết nối tới website (sử dụng Perl's socket) để kiểm tra các lỗi XSS của bạn Hơn nữa bạn có thể sử dụng nó trong cả môi trường Unix lẫn Windows * Cách phát hiện Website bị lỗi này: - Sử dụng nhiều chương trình dò quét lỗi của ứng dụng web: Web ulnerability Scanner - Thủ công: 1 Mở website cần kiểm tra 2 Xác định các nơi cần kiểm tra XSS (thông thường là những form trong website như: search,... luôn sử dụng một danh sách trắng khi xác nhận đầu vào Không dựa vào xác nhận phía khách hàng để xác nhận người dùng nhập vào Xác nhận phía khách hàng là rất tốt cho việc giúp đỡ các dữ liệu chính xác người dùng nhập vào Nhưng một người sử dụng độc hại sẽ không sử dụng và có thể bỏ qua việc xác nhận phía khách hàng Phía khách hàng validate là không bao giờ nên được xem là một sửa chữa bảo mật Sử dụng javascript... người dùng đăng nhập hợp lệ • Dạng tấn công sử dụng câu lệnh SELECT Dạng tấn công này phức tạp hơn Để thực hiện được kiểu tấn công này, kẻ tấn công phải có khả năng hiểu và lợi dụng các sơ hở trong các thông báo lỗi từ hệ thống để dò tìm các điểm yếu khởi đầu cho việc tấn công Ví dụ, trong các trang tìm kiếm Các trang này cho phép người dùng nhập vào các thông tin tìm kiếm như Họ, Tên, … Đoạn mã thường... giả đoạn mã trên là nhập vào một số tương ứng với trường id - trường số Tuy nhiên, người dùng cuối, thay vì nhập vào một số, họ có thể nhập vào một chuỗi ký tự, và do vậy có thể trở thành một câu truy vấn SQL hoàn chỉnh mới mà bỏ qua ký tự thoát Ví dụ, ta thiết lập giá trị của biến a_variable là: 1; DROP TABLE users khi đó, nó sẽ thực hiện thao tác xóa người dùng có id tương ứng khỏi cơ sở dữ liệu,