GIỚI THIỆU ĐỀ TÀI
Tính cấp thiết của đề tài
Trong thời đại công nghệ thông tin phát triển nhanh chóng, hàng loạt ứng dụng web đã ra đời để đáp ứng nhu cầu ngày càng cao của người dùng Internet bắt đầu hình thành từ năm 1968 với dự án ARPANET của Bộ Quốc phòng Mỹ, và từ đó, nhiều ứng dụng như email và FTP đã xuất hiện, thúc đẩy sự phát triển mạnh mẽ của Internet.
World Wide Web (www) là một ứng dụng không thể thiếu khi nhắc đến Internet, ra đời vào ngày 13/3/1989 Nó đã trở thành một trong những ứng dụng phát triển nhất, được sử dụng rộng rãi để quảng bá thông tin, đăng tải tin tức và giới thiệu sản phẩm của các công ty Với sự phổ biến của Internet, nhu cầu của tổ chức và cá nhân trong việc giới thiệu thông tin và thực hiện giao dịch trực tuyến ngày càng tăng cao.
Với sự mở rộng của ứng dụng web, nguy cơ xuất hiện lỗi và bị tấn công ngày càng cao, khiến các website trở thành mục tiêu cho nhiều cuộc tấn công với mục đích khác nhau Các đối tượng xấu thường cố tình xâm nhập vào website để khai thác thông tin nhạy cảm của công ty và khách hàng, gây thiệt hại kinh tế và làm giảm uy tín của cá nhân, doanh nghiệp Sự gia tăng không ngừng của các cuộc tấn công này đã khiến việc phát hiện và ngăn chặn tấn công website trở thành một vấn đề cấp bách và được chú trọng hơn bao giờ hết.
Công nghệ phát triển mang lại nhiều tiện ích cho cuộc sống, nhưng cũng tiềm ẩn nhiều rủi ro khi vượt qua giới hạn đạo đức Điều này đặt ra yêu cầu cấp thiết về bảo mật cho các ứng dụng, đặc biệt là ứng dụng web, khi mối nguy hại ngày càng gia tăng Các nhà phát triển cần chú ý hơn đến vấn đề bảo mật trong quá trình phát triển Để góp phần bảo vệ ứng dụng web, tác giả đã phát triển một công cụ đánh giá an toàn website, hỗ trợ cả công ty lớn và doanh nghiệp vừa, nhỏ trong việc nâng cao bảo mật Công cụ này trở nên cần thiết ở mọi nơi có yêu cầu về bảo mật.
Mục tiêu của đề tài
Đề tài nghiên cứu nhằm các mục tiêu sau:
- Nghiên cứu các lỗ hổng bảo mật phổ biến của ứng dụng web
- Nghiên cứu các kiểu tấn công website phổ biến
- Tìm ra các giải pháp nhằm phát hiện và cảnh báo các lỗ hổng bảo mật
- Đề xuất phương án khắc phục
- Xây dựng được mô hình cho ứng dụng
- Xây dựng công cụ đánh giá an toàn website.
Phương pháp thực hiện đề tài
Tác giả sẽ nghiên cứu và lựa chọn các công cụ quét lỗ hổng bảo mật, sau đó nhóm chúng thành một khối duy nhất để tạo ra một giao diện lập trình ứng dụng cho phép gọi các chức năng Giao diện này sẽ tích hợp tất cả các công cụ dưới dạng plugin, giúp người dùng thực hiện yêu cầu quét lỗ hổng website theo từng nhóm công cụ tùy chọn và có thể áp dụng cho bất kỳ website nào để đánh giá mức độ an toàn, với hệ thống tự động trả về các cảnh báo tương ứng Ứng dụng sẽ hoạt động thông qua các câu lệnh theo cú pháp nhất định để gọi các chức năng của phần mềm Để phục vụ nhu cầu người dùng, ứng dụng cần có các chức năng cơ bản như quét lỗ hổng, phân loại người dùng, đăng ký, đăng nhập, quản lý tài khoản và xem lịch sử quét Đề tài sẽ đánh giá độ an toàn của website theo phương pháp Black Box, tức là người kiểm tra sẽ đóng vai trò là người dùng cuối, quan sát dữ liệu đầu ra từ thông tin đầu vào mà website cung cấp mà không cần biết chi tiết bên trong của mã nguồn.
Bố cục báo cáo luận văn
Luận văn được cấu trúc thành các chương rõ ràng: Chương 2 trình bày các công cụ đánh giá an toàn website, so sánh ưu, nhược điểm của các công cụ hiện có Chương 3 tập trung vào lý thuyết liên quan đến ứng dụng, bao gồm OWASP, các kiểu tấn công và lỗ hổng bảo mật phổ biến, cũng như kỹ thuật tấn công mà hacker thường sử dụng, nhằm tìm ra phương pháp phòng chống hiệu quả Chương 4 đề xuất giải pháp và ý tưởng thiết kế cho ứng dụng Chương 5 mô tả quá trình xây dựng ứng dụng “Đánh giá an toàn website” dựa trên phân tích thiết kế hệ thống và các tính năng Chương 6 đánh giá kết quả đạt được, phân tích hiệu suất và ưu, nhược điểm của hệ thống so với công cụ tương tự, từ đó đưa ra kết luận và hướng phát triển tiếp theo Cuối cùng, luận văn tổng kết các quá trình thực hiện và trình bày tài liệu tham khảo liên quan.
NHỮNG CÔNG TRÌNH LIÊN QUAN
Bộ tiêu chí đánh giá
Trước khi tiến hành nghiên cứu và lựa chọn các công cụ đánh giá an toàn website, bài viết sẽ khởi đầu bằng việc xác định bộ tiêu chí OWASP, một trong những tiêu chuẩn đánh giá các nguy cơ bảo mật phổ biến hiện nay.
OWASP, which stands for the Open Web Application Security Project, is a collaborative initiative aimed at helping organizations develop, purchase, or maintain secure applications It emphasizes the principles of being "free" and "open," providing valuable resources for enhancing web application security.
- Công cụ và các tiêu chuẩn về an toàn thông tin;
- Tài liệu về kiểm tra bảo mật ứng dụng, lập trình an toàn và các bài viết về kiểm định mã nguồn;
- Thư viện và các tiêu chuẩn điều khiển an ninh;
- Những nghiên cứu mới nhất;
- Và nhiều thứ khác, xem thêm tại www.owasp.org
OWASP là một tổ chức phi lợi nhuận cung cấp thông tin chính xác và không thiên vị về an toàn ứng dụng Không liên kết với bất kỳ công ty kỹ thuật nào, OWASP hỗ trợ kỹ thuật trong lĩnh vực an toàn thông tin Tương tự như các dự án phần mềm mã nguồn mở, OWASP phát triển nhiều sản phẩm thông qua sự hợp tác của cộng đồng.
OWASP là một tổ chức phi lợi nhuận cam kết đảm bảo sự thành công lâu dài của các dự án an ninh thông tin Đội ngũ của OWASP chủ yếu là tình nguyện viên, bao gồm Ban quản trị, Ban điều hành toàn cầu, lãnh đạo các chi nhánh và dự án Tổ chức này hỗ trợ sự sáng tạo trong nghiên cứu an toàn thông tin thông qua các khoản trợ cấp và cơ sở hạ tầng.
Wapiti
Wapiti là công cụ giúp người dùng kiểm tra tính bảo mật của các trang web và ứng dụng web thông qua kỹ thuật quét "black-box" Thay vì phân tích mã nguồn bên trong, Wapiti quét lỗ hổng bằng cách thu thập dữ liệu từ các trang của ứng dụng, tìm kiếm các tập lệnh và biểu mẫu để lấy dữ liệu.
Wapiti nhận danh sách các URL, tập lệnh và biểu mẫu làm thông tin đầu vào, hoạt động như một phiên làm việc giả mạo Nó truyền tham số yêu cầu ứng dụng và thực hiện các lệnh để kiểm tra xem tập lệnh có dễ bị tấn công hay không.
Wapiti có thể phát hiện ra những nguy cơ sau:
- Tập tin bị rò rỉ (bao gồm ở cả local và remote qua những lệnh như fopen, read )
- Database Injection (PHP/JSP/ASP/SQL Injection và Xpath Injection)
- Phát hiện những câu lệnh được chạy (eval(), system() )
- CRLF Injection (HTTP Response Splitting, session fixation )
- Nhận biết được những file nguy hiểm (dựa vào cơ sở dữ liệu có sẵn)
- Cấu hình htaccess không an toàn và có thể bị bypass
- Những file backup chứa thông tin nhạy cảm có thể bị rò rỉ
Wapiti hỗ trợ cả phương thức GET và POST, đồng thời cung cấp các tính năng khác như từ chối payload trong tên tập tin, xác thực qua Kerberos và hỗ trợ HTML5.
Zap
ZAP (Zed Attack Proxy) là một công cụ mã nguồn mở miễn phí, phổ biến toàn cầu và được duy trì bởi hàng trăm tình nguyện viên quốc tế Nó chuyên quét mã nguồn các ứng dụng web viết bằng Java, tự động phát hiện lỗ hổng bảo mật trong quá trình xây dựng và thử nghiệm ZAP cũng là công cụ lý tưởng cho các chuyên gia tấn công giả lập để kiểm tra bảo mật thủ công Là một trong những dự án OWASP hàng đầu, ZAP đã được quốc tế hóa và hỗ trợ hơn 25 ngôn ngữ Khi hoạt động như một máy chủ proxy, ZAP cho phép người dùng kiểm soát tất cả lưu lượng truy cập, bao gồm cả lưu lượng HTTPS, và có thể chạy ở chế độ 'daemon', điều khiển qua giao diện lập trình ứng dụng.
Những tính năng mà ZAP hỗ trợ đó là: chặn proxy server, tự động quét, quét thụ động, hỗ trợ WebSocket, hỗ trợ Scripting Language, tự động update
GoLismero
GoLismero là phần mềm miễn phí chuyên kiểm tra bảo mật cho các đối tượng, chủ yếu tập trung vào bảo mật website nhưng có khả năng mở rộng sang các loại quét khác Phần mềm này có thể thực hiện các kiểm tra bảo mật độc lập, quản lý nhiều công cụ bảo mật khác như OpenVas, Wfuzz, DNS Rec, và robot analyzer Nó tự động thu thập và hợp nhất kết quả từ các công cụ này, mang lại phản hồi toàn diện cho người dùng.
Công cụ này hoạt động độc lập mà không cần sử dụng bất kỳ thư viện nào, tất cả các framework được thực thi thông qua các lệnh dòng lệnh viết bằng ngôn ngữ Python nguyên bản.
Sử dụng được trên các nền tảng và hệ điều hành khác nhau như Windows, Linux, *BSD và OS X
GoLismero là một công cụ phát triển mã nguồn mở cho phép cộng đồng đóng góp ý tưởng và cải tiến liên tục Nhờ vào sự tham gia của người dùng, các bản cập nhật được thực hiện thường xuyên và các chức năng mới được tích hợp một cách hiệu quả.
GoLismero có hiệu suất hoạt động và kết quả đầu ra vượt trội, đặc biệt so với các framework khác được phát triển bằng Python và các ngôn ngữ lập trình khác.
SQLmap
SQLmap là công cụ kiểm tra thâm nhập mã nguồn mở, tự động hóa việc phát hiện và khai thác lỗ hổng SQL injection, cho phép tiếp quản máy chủ cơ sở dữ liệu Nó sở hữu công cụ phát hiện mạnh mẽ và nhiều tính năng, phù hợp cho kiểm tra thâm nhập, bao gồm các module cho database fingerprinting, tìm nạp dữ liệu từ cơ sở dữ liệu, truy cập hệ thống dữ liệu cơ bản và thực thi lệnh trên hệ điều hành qua kết nối băng thông.
It fully supports various database management systems including MySQL, Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird, Sybase, SAP MaxDB, Informix, HSQLDB, and H2 Additionally, it offers support for six SQL injection techniques: boolean-based blind, time-based blind, error-based, UNION query-based, stacked queries, and out-of-band.
Hỗ trợ kết nối trực tiếp với cơ sở dữ liệu mà không cần sử dụng SQL injection, thông qua việc cung cấp thông tin đăng nhập DBMS, địa chỉ IP, cổng và tên cơ sở dữ liệu Chương trình cho phép liệt kê người dùng, băm mật khẩu, đặc quyền, vai trò, cũng như các cơ sở dữ liệu, bảng và cột Nó tự động nhận dạng các định dạng băm mật khẩu và hỗ trợ bẻ khóa chúng bằng cách sử dụng cuộc tấn công dựa trên từ điển.
Người dùng có thể kết xuất toàn bộ bảng cơ sở dữ liệu hoặc chọn một loạt các mục và cột cụ thể Ngoài ra, họ cũng có tùy chọn để chỉ kết xuất một phạm vi ký tự từ mỗi mục nhập trong cột.
Arachni
Arachni is a comprehensive Ruby framework designed to assist testers in penetrating and evaluating the security of web applications, offering high performance and modular capabilities.
Arachni là một công cụ kiểm tra bảo mật miễn phí, với mã nguồn mở và dễ dàng tiếp cận để xem xét Nó hoạt động trên nhiều nền tảng và hỗ trợ các hệ điều hành chính như MS Windows và Mac.
OS X và Linux) và được phân phối thông qua các gói di động, cho phép triển khai ngay lập tức Nó đủ linh hoạt để bao quát rất nhiều trường hợp sử dụng, từ những tiện ích quét dòng lệnh đơn giản, đến mạng lưới quét hiệu suất cao cũng như thư viện Ruby cho phép kiểm tra theo kịch bản, cho đến cộng tác web đa quét nền tảng
Trình duyệt tích hợp hỗ trợ các ứng dụng web phức tạp, cho phép sử dụng nhiều công nghệ như JavaScript, HTML5, thao tác DOM và AJAX.
Kết quả quét là số liệu quan trọng để đánh giá mức độ bảo mật ứng dụng web của tổ chức, vì vậy cần xử lý chúng một cách đáng tin cậy, an toàn và chính xác Mã nguồn mở của Arachni cho phép kiểm chứng kết quả nhằm đảm bảo tính bảo vệ cao nhất và phát hiện mọi vấn đề Đối với các môi trường phức tạp, Arachni hỗ trợ sửa đổi tùy chỉnh để nâng cao tính năng Nó được thiết kế linh hoạt để sử dụng trong nhiều môi trường khác nhau, từ giao diện web đơn giản đến các trường hợp sử dụng tùy biến với thư viện Ruby.
Các lỗ hổng thông thường đã được hỗ trợ, bao gồm:
Với sự hỗ trợ liên tục từ cộng đồng đang phát triển của mình, Arachni đang tiếp tục vượt qua các mức độ trong việc quét ứng dụng web.
NỀN TẢNG LÝ THUYẾT
Khái niệm, thuật ngữ liên quan
Hacker là những chuyên gia về công nghệ thông tin, chuyên tìm kiếm và khai thác lỗ hổng trong hệ thống mạng, website và phần mềm Họ không tạo ra các lỗ hổng, nhưng có kiến thức sâu rộng về hệ điều hành, quản trị dữ liệu và ngôn ngữ lập trình, giúp họ phát hiện điểm yếu trong hệ thống.
Một số hacker, được gọi là WhiteHat (hacker mũ trắng), chỉ dừng lại ở việc phát hiện và thông báo lỗ hổng cho các nhà bảo mật hoặc nhà phát triển Ngược lại, những hacker BlackHat (hacker mũ đen) lợi dụng các lỗ hổng để thực hiện các hành vi khai thác trái phép nhằm mục đích phá hoại hoặc mưu lợi cá nhân.
HTTP, hay Giao thức Truyền tải Siêu văn bản, là một giao thức cho phép truyền tải các dạng dữ liệu như văn bản, hình ảnh, âm thanh và video, cũng như các siêu liên kết Giao thức này hoạt động theo mô hình Server/Client, trong đó máy chủ lưu trữ siêu văn bản và xử lý các yêu cầu từ máy khách Quá trình này bao gồm việc trao đổi thông tin giữa máy chủ và máy khách để đảm bảo sự giao tiếp hiệu quả.
HTTP header là phần thông tin đầu tiên mà máy khách và máy chủ trao đổi Thông tin mà máy khách gửi đến máy chủ được gọi là HTTP requests, trong khi máy chủ phản hồi lại bằng HTTP responses.
Một HTTP header thường bao gồm nhiều dòng, trong đó mỗi dòng chứa tên tham số và giá trị tương ứng Một số tham số này có thể được sử dụng trong cả header yêu cầu và header phản hồi.
HTTP header giống như một lá thư ngắn chứa thông tin quan trọng mà máy khách gửi đến máy chủ, giúp nhận phản hồi từ máy chủ Ví dụ dưới đây sẽ làm rõ hơn các khái niệm này.
Hình 3.1: Header yêu cầu minh họa
+ Dòng đầu là dòng yêu cầu cho biết phương thức yêu cầu (GET hoặc POST), địa chỉ yêu cầu (http://vngeek.com) và phiên bản HTTP (HTTP/1.1)
+ Request Headers: là phần yêu cầu từ máy khách gửi đến máy chủ
Trình duyệt sử dụng các thông tin như Accept, Accept-Encoding, Accept-Language, Cookie và User-Agent để đảm bảo giao tiếp hiệu quả và chuẩn mực với máy chủ Những thông tin này sẽ được gửi đến máy chủ của trang web mà bạn truy cập, trong trường hợp này là http://vngeek.com.
Hình 3.2: Header trả lời tương ứng
Phản hồi từ máy chủ đến máy khách là một quá trình quan trọng trong giao tiếp trực tuyến Khi sử dụng trình duyệt Chrome để truy cập trang web http://vngeek.com, trình duyệt này hoạt động như một máy khách, trong khi trang web đóng vai trò là máy chủ, nhận và cung cấp thông tin cần thiết cho người dùng.
Session là khái niệm quan trọng trong lập trình website kết nối với cơ sở dữ liệu Nó đặc biệt cần thiết cho các chức năng như đăng nhập và đăng xuất, giúp người dùng thực hiện các thao tác này một cách dễ dàng và hiệu quả.
Session là phương pháp lưu trữ dữ liệu người dùng trên website, với giá trị được lưu trong tập tin trên máy chủ Khi người dùng đăng nhập vào trang web bằng tài khoản đã đăng ký, máy chủ sẽ xác thực thông tin và tạo ra một tập tin (session) chứa dữ liệu cần thiết của người dùng.
SessionID là chuỗi dùng để xác thực phiên làm việc, và một số máy chủ sẽ cấp sessionID cho người dùng khi họ truy cập trang web Để duy trì phiên làm việc, sessionID thường được lưu trữ.
Phiên làm việc chỉ có hiệu lực trong một khoảng thời gian nhất định, được cấu hình bởi máy chủ hoặc ứng dụng thực thi Để tối ưu hóa tài nguyên hệ thống, máy chủ sẽ tự động giải phóng các phiên làm việc sau khi hết thời gian cho phép.
Cookie là một đoạn văn bản lưu trữ thông tin trên trình duyệt của người dùng, thường được tạo ra khi truy cập một website Nó ghi nhớ các thông tin như tên đăng nhập, mật khẩu và các tùy chọn của người dùng, giúp nhận diện người dùng khi họ quay lại trang web.
Khi người dùng truy cập vào một trang web sử dụng cookie, hệ thống máy chủ sẽ tự động gửi cookie đến máy tính của họ, giúp tổ chức thông tin trong hệ thống Khi người dùng quay lại các trang web đã lưu cookie, thông tin sẽ được gửi về cho chủ sở hữu cookie, nhưng chỉ website chứa cookie mới có quyền truy cập vào thông tin này Cookie là yếu tố quan trọng cho các trang web có lượng dữ liệu lớn và nhiều người dùng, đặc biệt là các trang thương mại điện tử có chức năng đăng ký thành viên.
Cookie được phân làm 2 loại secure/non-secure và persistent/non-persistent, do đó ta sẽ có 4 kiểu cookie là:
- Non-Persistent và Non-Secure
Persistent cookies được lưu trữ dưới dạng tệp *.txt trong trình duyệt của người dùng, kéo dài trong một khoảng thời gian nhất định, với mỗi tệp đại diện cho một cookie.
Ứng dụng web
3.2.1 Khái niệm Ứng dụng web (webapp) là một trình ứng dụng mà người dùng có thể tiếp cận web thông qua mạng như Internet hay Intranet Ứng dụng web phổ biến nhờ vào sự có mặt vào bất cứ nơi đâu của một chương trình Khả năng cập nhật và bảo trì ứng dụng web mà không phải phân phối và cài đặt phần mềm trên hàng ngàn máy tính là lý do chính cho sự phổ biến của nó Ứng dụng web được dùng để hiện thực Webmail, bán hàng trực tuyến, đấu giá trực tuyến, wiki, diễn đàn thảo luận, Weblog, MMORPG, Hệ quản trị nội dung, Phần mềm quản lý nguồn nhân lực,… và nhiều chức năng khác Ứng dụng web hoạt động theo mô hình chủ/khách, sử dụng giao thức HTTP/HTTPS để tương tác với người dùng hoặc hệ thống khác Trình khách dành cho người sử dụng thường là một trình duyệt web như: FireFox, Google Chrome, Internet Explorer,… Cũng có thể là một chương trình có chức năng như một trình duyệt web, người dùng gửi và nhận các thông tin từ máy chủ thông qua việc tương tác với trang web Các chương trình này có thể là các trang trao đổ mua bán, các diễn đàn, các trang gửi nhận email,
Hiện nay, ứng dụng Web thường được cấu trúc theo mô hình ba lớp, với trình duyệt Web là lớp đầu tiên Các lớp tiếp theo bao gồm một bộ máy sử dụng nhiều công nghệ nội dung Web động như ASP, ASP.NET, CGI, ColdFusion, JSP/Java, PHP, Python và Ruby.
Trên nền tảng Rails, lớp giữa đóng vai trò quan trọng trong việc xử lý yêu cầu từ trình duyệt, bằng cách tạo ra các truy vấn và cập nhật cơ sở dữ liệu, đồng thời tạo ra giao diện người dùng.
Cấu trúc của một ứng dụng web thông thường gồm có [4]:
Hình 3.3: Cấu trúc thông thường của ứng dụng web
Các đường đứt khúc trong Hình 3.3 biểu thị các lớp của ứng dụng web, bao gồm:
- Lớp trình bày: có nhiệm vụ hiển thị các thông tin và dữ liệu cho người dùng khi họ bắt đầu truy cập bằng các trình duyệt web
- Lớp ứng dụng: là nơi dùng để xử lý các luồng thông tin của ứng dụng web
Nó sẽ xử lý thông tin mà người dùng yêu cầu, đưa ra quyết định và gửi kết quả đến
Lớp trình bày thường được phát triển bằng các ngôn ngữ lập trình như Java, NET, và PHP, và được triển khai trên các máy chủ như Tomcat, Apache và IIS.
- Lớp dữ liệu: thường là các hệ quản trị dữ liệu (DBMS) chịu tránh nhiệm quản lý các file dữ liệu và quyền sử dụng
Quá trình hoạt động bắt đầu khi người dùng tạo yêu cầu trên trình duyệt web thông qua các lệnh như GET và POST Những yêu cầu này được gửi đến máy chủ ứng dụng web, nơi thực hiện nhiệm vụ như cập nhật hoặc truy vấn thông tin từ cơ sở dữ liệu Cuối cùng, ứng dụng web sẽ gửi thông tin trở lại cho người dùng qua trình duyệt.
Hệ thống sẽ tiếp nhận, xử lý và tính toán thông tin dựa trên cách thức hoạt động đã được thiết lập, kết nối với cơ sở dữ liệu và lưu trữ dữ liệu từ máy khách, sau đó trả về cho máy khách một luồng dữ liệu theo định dạng giao thức HTTP, bao gồm hai phần.
- Header: là phần mô tả các thông tin về gói dữ liệu và thuộc tính, trạng thái trao đổi giữa trình duyệt và ứng dụng web
Nội dung dữ liệu mà máy chủ gửi đến máy khách, được gọi là Body, có thể bao gồm nhiều định dạng khác nhau như file HTML, hình ảnh, video hoặc bất kỳ đoạn văn bản nào.
Hình 3.4: Mô hình hoạt động của ứng dụng web
- Trình khách: các trình duyệt như Google Chrome, FireFox, Opera,…
- Trình chủ: Tomcat, Apache, IIS,
- CSDL: các hệ quản trị CSDL như SQL Server, MySQL, Oracle, Postgres,
Firewall là giải pháp bảo vệ hệ thống mạng, hoạt động như một lớp rào chắn để ngăn chặn truy cập thông tin không mong muốn từ bên ngoài Nó có thể là thiết bị phần cứng hoặc phần mềm, giúp bảo vệ mạng nội bộ và ngăn chặn thông tin bảo mật rò rỉ ra internet khi không được phép.
Mục đính thông dụng của firewall:
- Cho phép/cấm dịch vụ truy xuất ra ngoài
- Cho phép/cấm dịch vụ từ bên ngoài truy cập vào trong
- Kiểm soát/cấm các địa chỉ truy cập
Theo mô hình trong Hình 3.4, luồng thông tin giữa máy chủ và máy khách thông qua firewall được coi là hợp lệ Tuy nhiên, khi hacker phát hiện lỗ hổng trong ứng dụng web, firewall không còn khả năng ngăn chặn Hiện nay, các kỹ thuật tấn công mạng đang chuyển hướng tập trung vào những sơ suất trong quá trình phát triển ứng dụng của các lập trình viên, thay vì tấn công trực tiếp vào hệ thống mạng hay hệ điều hành Hơn nữa, hacker có thể lợi dụng những lỗ hổng này để mở rộng tấn công vào các hệ thống không liên quan khác.
OWASP
OWASP (Open Web Application Security Project) là một dự án mã nguồn mở về bảo mật ứng dụng web, nhằm hỗ trợ doanh nghiệp phát triển và duy trì ứng dụng một cách an toàn Dự án này là nỗ lực chung của cộng đồng, cung cấp nhiều tài nguyên miễn phí và mở cho người dùng.
- Công cụ và tiêu chuẩn về an toàn thông tin
- Tài liệu về kiểm tra bảo mật ứng dụng, lập trình an toàn và các bài viết về kiểm định mã nguồn;
- Thư viện và các tiêu chuẩn điều khiển an ninh
- Các nghiên cứu mới nhất về bảo mật ứng dụng web
- Các mailing list uy tín về thông tin bảo mật
OWASP cung cấp tài nguyên miễn phí và mở cho mọi người có nhu cầu cải thiện bảo mật thông tin, giúp tổ chức này độc lập khỏi các nhà tài trợ và đảm bảo thông tin chính xác, khách quan OWASP không liên kết với bất kỳ công ty kỹ thuật nào, mặc dù hỗ trợ về mặt kỹ thuật trong an toàn thông tin Giống như các dự án phần mềm mã nguồn mở, OWASP đã phát triển nhiều sản phẩm thông qua sự hợp tác của cộng đồng.
OWASP, được thành lập vào tháng 9 năm 2001 bởi Mark Curphey, đã chính thức hoạt động trực tuyến từ tháng 12 cùng năm Tổ chức này hoạt động dưới giấy phép FLOSS và có website chính thức tại www.owasp.org.
Các thành viên chủ chốt của OWASP là tình nguyện viên, bao gồm ban quản trị, ban điều hành toàn cầu, lãnh đạo chi nhánh và dự án OWASP hỗ trợ nghiên cứu an toàn thông tin thông qua các khoản trợ cấp và cơ sở hạ tầng Mục tiêu cốt lõi của OWASP là xây dựng một cộng đồng mạnh mẽ, định hướng tầm nhìn và tiến hóa về an toàn và bảo mật phần mềm OWASP có bốn giá trị cốt lõi.
- OPEN: moi thứ tại OWASP là hoàn toàn minh bạch từ nguồn tài chính cho tới mã nguồn
OWASP luôn khuyến khích sự sáng tạo và thử nghiệm để phát triển những giải pháp hiệu quả cho các thách thức về an ninh phần mềm.
- GLOBAL: bất cứ ai trên thế giới cũng được khuyến khích tham gia vào cộng đồng OWASP
- INTEGRITY: trung thực và trung thành, là một nhà cung cấp trung lập, là là một cộng đồng toàn cầu
OWASP cũng đề ra 11 chuẩn mực đạo đức trong lập trình và luôn hoạt động theo những nguyên tắc đã đề ra
Khoảng ba năm một lần, OWASP công bố danh sách 10 rủi ro an ninh cao nhất của ứng dụng web, với bản cập nhật mới nhất vào năm 2017 Danh sách này bao gồm các rủi ro, trong đó có rủi ro Injection.
Sai sót trong quá trình nhập liệu, như SQL injection, OS injection hay LDAP injection, xảy ra khi thông tin sai lệch được đưa vào cùng với các biến dữ liệu đầu vào trong lệnh hoặc câu truy vấn Kẻ tấn công có thể lợi dụng sơ hở này để thực hiện các lệnh không mong muốn hoặc truy cập dữ liệu bất hợp pháp Các kiểu tấn công này rất đơn giản và dễ thực hiện, bất kỳ ai có quyền truy cập Internet đều có khả năng thực hiện chúng.
Quản lý phiên không chính xác có thể dẫn đến việc kẻ tấn công đánh cắp mật khẩu, khóa hoặc chiếm quyền kiểm soát phiên làm việc, từ đó mạo danh danh tính của người dùng Điều này tạo ra nguy cơ rò rỉ dữ liệu nhạy cảm.
Việc không lưu trữ và bảo vệ cẩn thận các dữ liệu nhạy cảm có thể dẫn đến những ảnh hưởng nghiêm trọng cho hệ thống máy chủ, doanh nghiệp và khách hàng, chẳng hạn như việc lưu trữ thẻ tín dụng mà không mã hóa hoặc các gói tin TLS bị bẻ khóa qua lỗ hổng CRIME Do đó, các ứng dụng cần đảm bảo truy cập được xác thực và dữ liệu được mã hóa, nếu không sẽ xảy ra vi phạm quyền riêng tư ở quy mô lớn.
Sử dụng entity trong XML cho phép thay thế ký tự đặc biệt, khối văn bản hoặc toàn bộ nội dung của file bằng cách tham chiếu đến dữ liệu bên ngoài Các loại entity bao gồm: character, named (internal), external và parameter Tuy nhiên, hacker có thể lợi dụng phương pháp này để yêu cầu ứng dụng trả về dữ liệu hiển thị, từ đó có thể truy cập nội dung file một cách trái phép.
Khi người dùng không có quyền kiểm soát truy cập, tin tặc có thể lợi dụng để truy cập trái phép vào tài khoản, chức năng hoặc dữ liệu Kiểm soát truy cập rất quan trọng để xác định người dùng được ủy quyền và đảm bảo họ có quyền thực hiện các hành động trong ứng dụng Để thiết lập quyền kiểm soát truy cập hợp lý, ứng dụng cần thực hiện kiểm tra ủy quyền và xác thực một cách chính xác Lỗi kiểm soát truy cập thường xảy ra do các nhà phát triển gặp khó khăn trong việc tuân thủ các quy tắc đã đặt ra.
Cấu hình an ninh lỏng lẻo ở các tầng kiến trúc web như nền tảng, framework, máy chủ, cơ sở dữ liệu và mã tùy chỉnh tạo điều kiện cho tin tặc khai thác và truy cập dữ liệu Do đó, cần áp dụng các phương pháp bảo mật thống nhất và liên kết giữa các tầng kiến trúc để giảm thiểu nguy cơ bị tấn công ứng dụng, như việc lộ thông tin quan trọng trong quá trình trao đổi gói tin Một trong những nguy cơ điển hình là Cross-Site Scripting (XSS).
Sai sót trong kiểm duyệt nội dung đầu vào có thể dẫn đến rủi ro bảo mật, khi dữ liệu bất hợp pháp được gửi đến trình duyệt mà không cần xác nhận Điều này cho phép kẻ tấn công thực thi các kịch bản độc hại trên trình duyệt của nạn nhân, gây ra thay đổi nội dung trang web, chuyển hướng nạn nhân hoặc đánh cắp phiên làm việc lưu trữ trên trình duyệt.
Serialization là quá trình chuyển đổi tuần tự một đối tượng Java thành định dạng có thể gửi qua mạng hoặc lưu trữ trong bộ nhớ và cơ sở dữ liệu Mục đích chính của Serialization là bảo vệ đối tượng, cho phép nó tồn tại bên ngoài chương trình gốc Ngược lại, Deserialization là cơ chế chuyển đổi cấu trúc dữ liệu ảo, giúp khôi phục định dạng dãy byte trở lại thành một đối tượng hoạt động.
Khi rút tiền từ máy ATM, thông tin của chủ tài khoản và hoạt động yêu cầu được lưu trữ trong một đối tượng nội bộ Trước khi gửi đối tượng này tới máy chủ chính, dữ liệu được tuần tự thực hiện (Serialization) để chuyển đổi từ dạng đối tượng sang dạng dãy byte và phê duyệt các hoạt động cần thiết Sau đó, máy chủ chuyển đổi cấu trúc dữ liệu từ dạng byte về dạng đối tượng (Deserialization) để hoàn tất các hoạt động và phản hồi với người dùng.
Các kiểu tấn công ứng dụng web phổ biến
SQL Injection là một trong những hình thức tấn công nguy hiểm nhất trong các loại tấn công "injection", được biết đến với khả năng gây thiệt hại lớn cho hoạt động kinh doanh của các doanh nghiệp và tổ chức Tấn công này có thể dẫn đến việc rò rỉ thông tin nhạy cảm từ cơ sở dữ liệu, bao gồm tên, mật khẩu và số tài khoản ngân hàng.
Cuộc tấn công SQL Injection là hành động chèn một câu truy vấn SQL thông qua dữ liệu đầu vào từ client đến ứng dụng web Một cuộc tấn công thành công có thể giúp kẻ tấn công truy cập thông tin nhạy cảm trong cơ sở dữ liệu, chỉnh sửa dữ liệu (bao gồm thêm, xóa, sửa) và thực hiện các lệnh quản lý hệ thống cơ sở dữ liệu, chẳng hạn như tắt Hệ Quản trị Cơ sở dữ liệu.
SQL Injection là một loại tấn công trong đó các câu lệnh SQL bị chèn vào dữ liệu đầu vào, nhằm mục đích ảnh hưởng đến các câu lệnh SQL đã được định nghĩa trước Tấn công này có thể khôi phục nội dung của tập tin trên hệ thống tập tin lưu trữ hoặc ghi nội dung vào Hệ Quản trị Cơ sở Dữ liệu, và trong một số trường hợp, nó còn có thể thực thi lệnh trong hệ điều hành.
SQL Injection, được giới thiệu lần đầu vào năm 1998, đã phát triển thành một phương thức tấn công hiệu quả và gây ra nhiều hậu quả nghiêm trọng trong lịch sử ứng dụng web.
SQL Injection là một lỗ hổng bảo mật cho phép kẻ tấn công giả mạo thông tin người dùng, làm xáo trộn dữ liệu, thay đổi giao dịch và số dư, cũng như tiết lộ, phá hủy dữ liệu, gây mất tính sẵn sàng của hệ thống Nghiêm trọng hơn, kẻ tấn công có thể chiếm quyền quản trị cơ sở dữ liệu, dẫn đến những hậu quả nghiêm trọng cho an ninh thông tin.
SQL Injection là một lỗ hổng phổ biến trong các ứng dụng PHP và ASP, trong khi các ứng dụng J2EE và ASP.NET có nguy cơ bị khai thác thấp hơn.
Mức độ nghiêm trọng của các cuộc tấn công SQL Injection phụ thuộc vào kỹ năng và sự sáng tạo của kẻ tấn công Tuy nhiên, OWASP khuyến cáo rằng SQL Injection luôn nên được xem là một mối nguy hại cao SQL Injection xảy ra khi
- Dữ liệu gọi từ một chương trình không rõ nguồn gốc
- Dữ liệu được sử dụng tự động để xây dựng một câu truy vấn d Hậu quả chính của SQL Injection
- Tính bảo mật: mất tính bí mật là vấn đề thường xuyên của cuộc tấn công này
- Tính xác thực: kẻ tấn công có thể giả mạo một người dùng khác đã xác thực trước đó
- Tính ủy quyền: thông tin ủy quyền có thể bị thay đổi nếu như nó được lưu trong cơ sở dữ liệu
- Tính toàn vẹn: cũng như việc đọc được các thông tin nhạy cảm, SQL Injection có thể làm thay đổi nội dung, thậm chí xóa thông tin
Nhiều hệ quản trị cơ sở dữ liệu cho phép thực thi các câu lệnh đồng thời, ngăn cách bằng dấu chấm phẩy, điều này tạo điều kiện cho kẻ tấn công thực hiện các lệnh tùy ý nhằm chống lại cơ sở dữ liệu.
Cần lưu ý rằng hai dấu gạch ngang ( ) thường được coi là chú thích trong hầu hết các hệ quản trị cơ sở dữ liệu và không được thực thi; tuy nhiên, dấu nháy đơn là cần thiết để hoàn thiện câu truy vấn Kẻ tấn công có thể thêm một hoặc nhiều câu truy vấn hợp lệ, và tất cả sẽ được thực thi.
Để ngăn chặn các cuộc tấn công SQL Injection, phương pháp truyền thống là kiểm tra giá trị đầu vào bằng cách sử dụng whitelist và blacklist Tuy nhiên, cả hai phương pháp này đều có những hạn chế; kẻ tấn công có thể dễ dàng vượt qua các kí tự đặc biệt trong blacklist hoặc sử dụng thủ thuật để ẩn các kí tự này Hơn nữa, việc kiểm tra đầu vào không hoàn toàn đảm bảo an toàn trước các cuộc tấn công SQL Injection.
Stored procedure có thể giảm thiểu nguy cơ SQL Injection bằng cách hạn chế các loại câu lệnh có thể bị tấn công, nhưng vẫn còn nhiều phương thức khác có thể vượt qua biện pháp này Do đó, việc sử dụng stored procedure không đảm bảo ngăn chặn hoàn toàn SQL Injection.
Giả sử có câu truy vấn
Nếu như có một người dùng nào đó có thông tin như sau:
Từ khi đó câu truy vấn sẽ trở thành:
Khi đó cơ sở dữ liệu sẽ được chạy:
Thông tin không chính xác, dù là vô tình hay cố ý, có thể dẫn đến nguy cơ tấn công SQL Injection.
Đoạn code C# dưới đây giúp tạo câu truy vấn tìm kiếm kết quả từ bảng items với tên cụ thể, đồng thời giới hạn kết quả trả về chỉ cho những tài khoản đã được xác thực.
Khi đó, câu truy vấn được thực thi như sau:
Vấn đề phát sinh khi câu truy vấn được xây dựng từ dữ liệu động, cho phép kẻ tấn công nhập dữ liệu như “itemName” là “name' OR 'a'='a”, dẫn đến câu truy vấn trở thành SELECT * FROM items Điều này khiến điều kiện ‘OR’ trở nên đúng, dễ dàng cho kẻ tấn công truy cập thông tin trong cơ sở dữ liệu.
Xét trường hợp câu truy vấn như ở ví dụ 2 ở trên và nếu kẻ tấn công thêm một chuỗi "name'; DELETE FROM items; " thì câu truy vấn sẽ trở thành:
Nhiều hệ quản trị cơ sở dữ liệu cho phép thực thi các câu lệnh đồng thời, được ngăn cách bằng dấu chấm phẩy, điều này tạo cơ hội cho kẻ tấn công thực hiện các lệnh tùy ý nhằm vào cơ sở dữ liệu.