Ngày nay, ứng dụng Web đã có mặt trong hầu hết mọi lĩnh vực của cuộc sống hiện đại từ các nhu cầu cơ bản như tìm kiếm sản phẩm, mua sắm đến các nhu cầu hiện đại, đặc trưng của thời đại như trao đổi tâm sự, chia sẻ thông tin trên mạng xã hội. Đặc biệt trong lĩnh vực thương mại điện tử hiện nay, rất nhiều doanh nghiệp đang sử dụng ứng dụng Web để quảng bá hình ảnh, kết nối với khách hàng, đối tác và cung cấp dịch vụ thương mại trực tuyến. Cùng với sự phát triển nhanh chóng của ứng dụng Web thì vấn đề bảo mật ứng dụng Web đang là lĩnh vực vô cùng nóng hổi nhằm đảm bảo an toàn cho tất cả người dùng ứng dụng. Vậy nếu có một lỗi bảo mật xảy ra trong ứng dụng Web thì điều này có thể ảnh hướng tới tất cả người dùng, ảnh hưởng tới uy tín của công ty, tổ chức đó, gây mất mát về mặt tài chính và các ràng buộc về pháp lý,… Theo thống kê của tổ chức OWASP (Open Web Application Security Project) trong những năm gần đây thì lỗ hổng bảo mật của ứng dụng Web ngày càng tăng mà nguyên nhân chính đó là sự lơi lỏng trong việc lập trình Web, sự đa dạng của các phần mềm ứng dụng và một số hạn chế trong việc kiểm tra tính bảo mật của ứng dụng đó. Vì vậy khóa luận “Nghiên cứu lựa chọn một số công cụ đánh giá độ an toàn và bảo mật cho ứng dụng Web” sẽ đáp ứng phần nào nhu cầu cấp thiết về an ninh bảo mật hiện nay. Trên cơ sở nghiên cứu và lựa chọn hệ thống hỗ trợ mã nguồn mở, có khả năng tự động quét toàn bộ cấu trúc Website từ bên ngoài, từ đó đưa ra báo cáo đánh giá về an toàn thông tin cho Website nhằm nâng cao tính chính xác và giảm thiểu chi phí trong việc kiểm tra và chứng thực tính an ninh của một Website… Nội dung chính của bài khóa luận gồm ba chương và phần kết luận: • Chương 1: tổng quan về an ninh, an toàn ứng dụng Web. Chương này sẽ trình bày kiến thức tổng quan về ứng dụng Web như kiến trúc, phương thức hoạt động, cơ chế bảo mật của nó cũng như các rủi ro thường gặp nhất trong ứng dụng Web, từ đó làm cơ sở cho việc kiểm tra, đánh giá bảo mật ứng dụng Web. • Chương 2: tìm hiểu một số lỗ hổng ứng dụng Web. Chương này phân tích một số tấn công vào 3 lỗ hổng chiếm tỷ lệ cao nhất hiện nay đối với ứng dụng Web của Việt Nam và thế giới là: SQL Injection, Cross Site Scripting và Chiếm hữu phiên làm việc. • Chương 3: sử dụng công cụ để quét lỗ hổng bảo mật ứng dụng Web. Trên cơ sở lý thuyết phân tích các lỗ hổng, chương này giới thiệu hai công cụ được dùng trong việc quét các lỗ hổng nhằm phát hiện, đánh giá các lỗ hổng bảo mật của ứng dụng Web. Qua đó so sánh, lựa chọn một công cụ có giải pháp tối ưu về kiểm định, đánh giá các lỗ hổng ứng dụng Web. • Kết luận: tổng kết khóa luận và hướng phát triển nghiên cứu.
Trang 1ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN
KHOA TOÁN – CƠ – TIN HỌC
Trang 2Hà Nội – 2014
Trang 3ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN
KHOA TOÁN – CƠ – TIN HỌC
Trang 4Hà Nội - 2014
Trang 5MỤC LỤC
LỜI MỞ ĐẦU 1
CHƯƠNG 1: TỔNG QUAN VỀ AN NINH AN TOÀN ỨNG DỤNG WEB 3
1.1 Khái niệm ứng dụng Web 3
1.2 Các công nghệ dùng trong ứng dụng Web 5
1.2.1 Giao thức HTTP 5
1.2.2 Công nghệ được sử dụng trong chức năng của ứng dụng Web 8
1.3 Cơ chế phòng thủ trong ứng dụng Web 9
1.4 Các rủi ra thường gặp trong ứng dụng Web 11
CHƯƠNG 2: TÌM HIỂU MỘT SỐ LỖ HỔNG BẢO MẬT ỨNG DỤNG WEB 14
2.1 SQL Injection 14
2.1.1 Khái niệm lỗi SQL Injection 14
2.1.2 SQL Injection do không lọc các ký tự “escape” .14
2.1.3 SQL Injection do không kiểm soát tốt kiểu của biến .15
2.1.4 SQL Injection do các hàm của hệ quản trị cơ sở dữ liệu .16
2.2 Cross Site Scripting (XSS) 19
2.2.1 Khái niệm lỗi XSS 19
2.2.2 Nguyên nhân gây lỗi XSS 20
2.2.3 Phân loại lỗi XSS 21
2.2.4 Kịch bản khai thác lỗi XSS 21
2.3 Session ID Management (Chiếm hữu phiên làm việc) 22
2.3.1 Tấn công kiểu “Ấn định phiên làm việc” 23
2.3.2 Tấn công kiểu “Đánh cắp phiên làm việc” 25
CHƯƠNG 3: SỬ DỤNG CÔNG CỤ ĐỂ QUÉT LỖ HỔNG BẢO MẬT ỨNG DỤNG WEB 26
3.1 AppScan Standard 26
3.1.2 Yêu cầu khi cài đặt hệ thống 26
3.1.2.1 Yêu cầu về phần cứng 26
3.1.2.2 Yêu cầu về phần mềm 27
3.1.2.3 Đánh giá điểm yếu an ninh ứng dụng Web bằng AppScan 27
3.2 Acunetix Web Vulnerability Scanner 31
3.3 So sánh hai công cụ 40
3.5 Ứng dụng dùng Acunetix Web Vulnerability Scanner quét website 41
KẾT LUẬN .43TÀI LIỆU THAM KHẢO
Trang 6LỜI CẢM ƠN
Trước tiên em xin được bày tỏ lòng biết ơn tới các thầy cô giáo đã và đangcông tác tại khoa Toán – Cơ - Tin trường Đại học Khoa học Tự Nhiên Hà Nội,những người đã giảng dạy và cung cấp những kiến thức khoa học quý báu trongsuốt những năm học vừa qua để em có nền tảng kiến thức thực hiện khóa luận này.
Đặc biệt, em xin bày tỏ lòng biết ơn sâu sắc đến TS Hồ Văn Hương, ngườiđã tận tình chỉ bảo, giúp đỡ và tạo điều kiện về nhiều mặt để em có thể hoàn thànhkhóa luận này.
Em cũng xin gửi lời cảm ơn tới tập thể lớp K55A3, trường Đại học Khoahọc Tự Nhiên đã giúp đỡ, nhiệt tình chia sẻ đóng góp những kinh nghiệm quýbáu cho em.
Cuối cùng em xin cảm ơn gia đình, bạn bè đã giúp đỡ, tạo điều kiện và đónggóp cho em nhiều ý kiến quý báu trong cuộc sống, công việc và học tập nói chungcũng như trong quá trình thực hiện khóa luận này.
Mặc dù đã có nhiều cố gắng nhưng do hạn hẹp về kiến thức, kinh nghiệm,thời gian tìm hiểu và thực hiện nên khóa luận không tránh khỏi những thiếu sót Emrất mong nhận được sự góp ý của thầy cô, bạn bè để em có thể hoàn thành tốt khóaluận của mình.
Hà Nội, tháng 05 năm 2014Sinh viên
Trần Thị Luyến
Trang 7DANH SÁCH CÁC CHỮ VIẾT TẮT
HTML Hypertext Markup Language
HTTP Hypertext Transfer Protocol
IIS Internet Information Services
IBM International Business Machines Corporation
MIME Multipurpose Internet Mail Extensions
SOAP Simple Object Access Protocol
SQL Structured Query Language
URL Uniform Resource Locator
XML eXtensible Markup Language
Trang 8Hình 2: Kiến trúc của ứng dụng web 4
Hình 3: Giao diện ban đầu của AppScan 27
Hình 4: Tạo phiên quét mới 28
Hình 5: Lựa chọn kiểu quét 28
Hình 6: Cấu hình chính sách quét 29
Hình 7: Kết quả quét bằng AppScan 30
Hình 8: Giải pháp khắc phục của AppScan 31
Hình 9: Giao diện ban đầu của Acunetix 32
Hình 10: Cấu hình chính sách quét 33
Hình 11: Crawling toàn bộ Website 34
Hình 12: Phân tích trang Web tự động 35
Hình 13: Các lỗ hổng tìm được 36
Hình 14: Thông tin và giải pháp khắc phục lỗi 37
Hình 15: Lưu thông tin sau khi quét 38
Hình 16: Kết quả quét bằng Acunetix 38
Hình 17: Mức độ bảo mật của Website 39
Trang 9LỜI MỞ ĐẦU
Ngày nay, ứng dụng Web đã có mặt trong hầu hết mọi lĩnh vực của cuộcsống hiện đại từ các nhu cầu cơ bản như tìm kiếm sản phẩm, mua sắm đến các nhucầu hiện đại, đặc trưng của thời đại như trao đổi tâm sự, chia sẻ thông tin trên mạngxã hội Đặc biệt trong lĩnh vực thương mại điện tử hiện nay, rất nhiều doanh nghiệpđang sử dụng ứng dụng Web để quảng bá hình ảnh, kết nối với khách hàng, đối tácvà cung cấp dịch vụ thương mại trực tuyến Cùng với sự phát triển nhanh chóng củaứng dụng Web thì vấn đề bảo mật ứng dụng Web đang là lĩnh vực vô cùng nóng hổinhằm đảm bảo an toàn cho tất cả người dùng ứng dụng Vậy nếu có một lỗi bảo mậtxảy ra trong ứng dụng Web thì điều này có thể ảnh hướng tới tất cả người dùng, ảnhhưởng tới uy tín của công ty, tổ chức đó, gây mất mát về mặt tài chính và các ràngbuộc về pháp lý,…
Theo thống kê của tổ chức OWASP (Open Web Application SecurityProject) trong những năm gần đây thì lỗ hổng bảo mật của ứng dụng Web ngàycàng tăng mà nguyên nhân chính đó là sự lơi lỏng trong việc lập trình Web, sự đadạng của các phần mềm ứng dụng và một số hạn chế trong việc kiểm tra tính bảomật của ứng dụng đó.
Vì vậy khóa luận “Nghiên cứu lựa chọn một số công cụ đánh giá độ an toànvà bảo mật cho ứng dụng Web” sẽ đáp ứng phần nào nhu cầu cấp thiết về an ninhbảo mật hiện nay Trên cơ sở nghiên cứu và lựa chọn hệ thống hỗ trợ mã nguồn mở,có khả năng tự động quét toàn bộ cấu trúc Website từ bên ngoài, từ đó đưa ra báocáo đánh giá về an toàn thông tin cho Website nhằm nâng cao tính chính xác vàgiảm thiểu chi phí trong việc kiểm tra và chứng thực tính an ninh của mộtWebsite…
Nội dung chính của bài khóa luận gồm ba chương và phần kết luận:
Chương 1: tổng quan về an ninh, an toàn ứng dụng Web Chương nàysẽ trình bày kiến thức tổng quan về ứng dụng Web như kiến trúc, phương thức hoạtđộng, cơ chế bảo mật của nó cũng như các rủi ro thường gặp nhất trong ứng dụngWeb, từ đó làm cơ sở cho việc kiểm tra, đánh giá bảo mật ứng dụng Web.
Trang 10 Chương 2: tìm hiểu một số lỗ hổng ứng dụng Web Chương này phântích một số tấn công vào 3 lỗ hổng chiếm tỷ lệ cao nhất hiện nay đối với ứng dụngWeb của Việt Nam và thế giới là: SQL Injection, Cross Site Scripting và Chiếm hữuphiên làm việc.
Chương 3: sử dụng công cụ để quét lỗ hổng bảo mật ứng dụng Web.Trên cơ sở lý thuyết phân tích các lỗ hổng, chương này giới thiệu hai công cụ đượcdùng trong việc quét các lỗ hổng nhằm phát hiện, đánh giá các lỗ hổng bảo mật củaứng dụng Web Qua đó so sánh, lựa chọn một công cụ có giải pháp tối ưu về kiểmđịnh, đánh giá các lỗ hổng ứng dụng Web.
Kết luận: tổng kết khóa luận và hướng phát triển nghiên cứu.
Trang 11CHƯƠNG 1: TỔNG QUAN VỀ AN NINH AN TOÀN ỨNGDỤNG WEB
Phần này sẽ trình bày kiến thức tổng quan về ứng dụng Web như kiến trúc,phương thức hoạt động, hay cơ chế bảo mật của nó, từ đó làm cơ sở cho việc kiểmtra, đánh giá bảo mật ứng dụng Web.
Những khái niệm cơ bản của chương một chủ yếu dựa vào tài liệu [1,4].
1.1 Khái niệm ứng dụng Web
Trong những ngày đầu của Internet, World Wide Web là tập hợp những sitechứa các trang Web là các tài liệu tĩnh Ngày nay, hình thức của nó đã thay đổi rấtnhiều Đa số các trang Web trên Website là các ứng dụng thực tế Các ứng dụng nàyhỗ trợ việc đăng ký, đăng nhập, giao dịch tài chính, tìm kiếm…, các nội dung đượctrình bày cho người sử dụng được tạo ra tự động và thường được thiết kế cho mỗingười dùng cụ thể Ứng dụng Web được tạo ra để thực hiện tất cả các chức nănghữu ích mà có thể thực hiện trực tuyến Có rất nhiều cách hiểu khác nhau về ứngdụng Web, dưới góc độ kỹ thuật, dưới góc độ chức năng…
Dưới góc độ chức năng, ứng dụng Web là các chương trình máy tính chophép người dùng website đăng nhập, truy vấn vào ra dữ liệu qua mạng Internet trêntrình duyệt Web của người dùng Dữ liệu sẽ được gửi tới người dùng trong trìnhduyệt theo kiểu thông tin động (trong một định dạng cụ thể, như với HTML thìdùng CSS) từ ứng dụng Web qua một Web Server.
Để hiểu hết được ý nghĩa của khái niệm này chúng ta cùng đi sâu tìm hiểumô hình cấu trúc chức năng của ứng dụng Web
Hình 1: Mô hình hoạt động của ứng dụng Web
Trang 12Hình 1 mô hình hóa hoạt động của một ứng dụng Web điển hình trong đó:
Trình khách (Web client): là trình duyệt Web Nó thông qua giao thức
HTTP (hay một số giao thức khác) và hoàn lại HTML (hay một số ngôn ngữ khácnhư Dynamic HTML, XML,…) Web client được dùng để biểu diễn dữ liệu đượcxử lý bởi máy chủ Web và nhận dữ liệu từ người dùng.
Tường lửa (Firewall): là một kỹ thuật được tích hợp vào hệ thống mạng để
chống sự truy cập trái phép nhằm bảo vệ các nguồn thông tin nội bộ cũng như hạnchế sự xâm nhập vào hệ thống của một số thông tin khác không mong muốn.
Trình chủ (Web Server): được mô tả đơn giản nhất như một deamon HTTP
(dịch vụ) nhận các yêu cầu từ client, thực hiện một số phân tích cơ bản theo yêu cầusau đó đưa nó tới ứng dụng Web để xử lý Khi ứng dụng Web trả về một phản hồi,HTTP deamon trả nó về cho client Một số phần mềm máy chủ Web phổ biến hiệnnay như Microsoft IIS, Apache HTTP Server…
Ứng dụng Web (Web Application): là một chương trình phần mềm ứng
dụng thực hiện chức năng nào đó Để hiểu hơn về Web Application cần hiểu về tier” “n-tier” là một kiến trúc mở rộng tạo ra sự liền mạch cho ứng dụng mà ngườidùng có thể tương tác trong thời gian thực Một “n-tier” điển hình là kiến trúc gồmba lớp: lớp trình bày, lớp ứng dụng và lớp dữ liệu.
“n-Hình 2: Kiến trúc của ứng dụng web
Lớp trình bày có nhiệm vụ tương tác với người dùng, nhận lệnh từ trìnhduyệt gửi lên server, chờ xử lý, nhận các dữ liệu, bố cục trình bày và hiển thị kếtquả tại trình duyệt người dùng Lớp ứng dụng là nơi xử lý các yêu cầu gửi lên từtrình duyệt Nó sẽ phân tích các thông tin, đưa ra quyết định, xử lý kết quả và gửiđến lớp trình bày Lớp này thường được cài đặt bằng các kỹ thuật lập trình như:
Trang 13Java, Net, PHP… được triển khai trên các trình chủ như IIS, Apache… Cuối cùng,lớp dữ liệu chịu trách nhiệm quản lý các file dữ liệu và quyền sử dụng.
Nhiều công nghệ được sử dụng để xây dựng các ứng dụng tích hợp chứcnăng của một hay nhiều tầng này, vì vậy thật khó để phân biệt chúng trong một ứngdụng thực tế
Cơ sở dữ liệu (Database): chịu trách nhiệm lưu trữ dữ liệu, cho phép tìm
kiếm, trích xuất, cập nhật dữ liệu Đây là môi trường trung gian cho phục hồi thôngtin và thương mại điện tử Các nhà cung cập và các platform trong lớp dữ liệuchiếm ưu thế nhất hiện nay là SQL và Oracle.
Tóm lại, quá trình hoạt động bắt đầu với yêu cầu được tạo ra từ người dùngtrên trình duyệt, gửi tới máy chủ Web (Web server) rồi từ máy chủ Web gửi tớitrình chủ ứng dụng Web Máy chủ ứng dụng Web truy cập máy chủ cơ sở dữ liệu(Database server) để thực hiện nhiệm vụ được yêu cầu cập nhật, truy vấn thông tinđang nằm trong cơ sở dữ liệu Sau đó máy chủ ứng dụng Web tự động sinh ra mộttrang Web và gửi nó tới Web Server và từ Web server sẽ gửi thông tin lại cho ngườidùng qua trình duyệt.
1.2 Các công nghệ dùng trong ứng dụng Web
Các ứng dụng Web sử dụng nhiều loại công nghệ để thực hiện chức năng củanó Ở đây sẽ đề cập một số công nghệ quan trọng, phổ biến mà có khả năng gặpphải khi kiểm thử các ứng dụng Web.
1.2.1 Giao thức HTTP
Giao thức HTTP (Hypertex Transfer Protocol) là giao thức truyền thông cốtlõi được sử dụng để truy nhập World Wide Web và tất cả các ứng dụng Web Giaothức này hoạt động theo cơ chế request/response mà trong đó client gửi messagerequest hay yêu cầu và server gửi lại message response hay hồi đáp HTTP đã đượcmở rộng, phát triển theo nhiều hướng khác nhau để hỗ trợ cho các ứng dụng phântán phức tạp phổ biến hiện nay.
Các trường thông tin yêu cầu (request header):cho phép máy trạm gửi
kèm các dữ liệu về bản thân nó về yêu cầu đến máy chủ Trong phạm vi đồ án taquan tâm tới một số request header thông dụng sau:
Trang 14mong muốn: tiếp tục mở kết nối sau khirequest thành công hay đóng kết nối đólại.
User-Dạng trình duyệt mà client sử dụng, đâycũng có thể dùng để đánh dấu chươngtrình nào đang truy vấn trang Web
User-Agent: Mozilla/5.0(Linux; X11)
Cache-Được sử dụng để xác định chỉ thị rằng tấtcả các cơ chế trong bộ nhớ đệm PHẢItuân theo giá trị trong yêu cầu này.
Cache-Control: private
Nội dung message body.
Dưới đây là một ví dụ cho một Http Request.Get/tintuc/homnay.php HTTP/1.1Accept: */*
Accept-Language: en-usConnection: Keep-AliveHost: localhost
Referer: http://localhost/lienket.php
User-Agent: Mozilla/4.0 (compatible; MSIE 5.5;Windows NT 5.0)
Accept-Encoding: gzip, deflate
Mỗi http request luôn được bắt đầu bằng một từ chỉ “phương thức” (method)yêu cầu (GET, POST, HEAD…) Đây là thành phần xác định các hành động mongmuốn được thực hiện đối với các tài nguyên trên Server.
Trang 15Có rất nhiều trường khác nhau trong http response: tuy nhiên trong phạm viđồ án ta cần tập trung vào các trường sau:
Content-Encoding: gzipContent-
Độ dài của response body tínhtheo kiểu số nguyên 8 bit.
Content-Length: 348Server Tên, phiên bản… của Web server
đang sử dụng.
Server: Apache/1.3.27(Unix) (Red-Hat/Linux)Set-Cookie Yêu cầu tạo ra các cookie với các
giá trị xác định.
Content-Type Dạng mime của dữ liệu trả về Content-Type: text/html;charset=utf-8
Với status code, đây là một trường rất cần thiết phải quan tâm Nó là một mãsố gồm 3 chữ số, mô tả kết quả server trả về cho 1 request xác định Các dạngStatus-code bao gồm:
1xx là message thông tin
2xx là request thành công và tài nguyên được request sẽ được trả về
trong message body.
3xx tự động chuyển đến client đang request một số tài nguyên khác
4xx là lỗi phía client
Trang 16 5xx là lỗi phía server
1.2.2 Công nghệ được sử dụng trong chức năng của ứng dụng Web
Ngoài các giao thức chính được sử dụng để truyền thông giữa server và client,các ứng dụng Web sử dụng nhiều công nghệ để thực hiện chức năng của mình Có rấtnhiều công nghệ khác nhau được sử dụng bên phía server và client vì vậy cần phải cókiến thức cơ bản về những công nghệ này để việc kiểm tra đạt hiệu quả.
a Công nghệ sử dụng phía Server
Các thành phần được sử dụng để cung cấp chức năng cho ứng dụng Web bênphía server gồm có:
+ Ngôn ngữ script như là PHP, VBScript và Perl+ Platform ứng dụng Web như ASP.NET và Java
+ Các máy chủ Web như Apache, IIS và Netscape Enterprise+ Cơ sở dữ liệu như MS-SQL, Oracle và MySQL
+ Các thành phần phụ trợ như hệ thống tập tin, các dịch vụ Web dựa trênSOAP và dịch vụ thư mục.
b Công nghệ sử dụng phía client
Đối với các ứng dụng phía server để nhận được đầu vào người dùng và đưara kết quả trở lại cho người dùng thì nó cần phải cung cấp một giao diện người dùngphía client Bởi vì tất cả các ứng dụng Web được truy cập thông qua một trìnhduyệt Web, nên tất cả những giao diện này chia sẻ một lõi chung các công nghệ.Tuy nhiên, những giao diện này được xậy dựng dựa trên nhiều cách khác nhau Mộtsố công nghệ sử dụng phía client điển hình như là:
+ HTML+ Hyperlinks+ Forms+JavaScript
+ Ajax+ HTML5+ ”Web 2.0”+…
Các công nghệ phía client vẫn tiếp tục phát triển nhanh chóng trong nhữngnăm gần đây.
c Trạng thái và các phiên
Các công nghệ được mô tả ở trên cho phép các thành phần máy chủ và máykhách của một ứng dụng Web trao đổi và xử lý dữ liệu theo nhiều cách Tuy nhiên,để thực hiện được hầu hết các chức năng hữu ích, ứng dụng cần phải theo dõi trạngthái tương tác của người dùng với ứng dụng qua nhiều yêu cầu Ví dụ, một ứngdụng mua sắm có thể cho phép người dùng duyệt một danh mục sản phẩm, thêm
Trang 17các sản phẩm vào giỏ hàng, xem và cập nhật nội dung giỏ hàng, tiến hành kiểm tra,cung cấp các chi tiết cá nhân và thanh toán.
Để thực hiện các yêu cầu của người dùng một cách chính xác, ứng dụng phảiduy trì một bộ trạng thái dữ liệu thông qua các yêu cầu của người dùng gửi đếnserver Dữ liệu này thường được lưu trong cấu trúc phía server được gọi là phiên(session) Khi người dùng thực hiện một hành động như thêm một mục vào giỏhàng, ứng dụng phía server cập nhật các chi tiết liên quan trong phiên của ngườidùng Sau đó khi người dùng xem nội dung giỏ hàng thì dữ liệu từ phiên được sửdụng để trả về thông tin chính xác cho người dùng.
Trong một số ứng dụng, thông tin trạng thái được lưu trữ trên thành phầnmáy khách chứ không phải trên máy chủ Tập dữ liệu hiện thời được chuyển đếnmáy khách trong mỗi hồi đáp của máy chủ và được gửi lại cho máy chủ trong từngyêu cầu của máy khách Bởi vì người dùng có thể thay đổi bất kỳ dữ liệu nào đượctruyền qua thành phần máy khách, cho nên các ứng dụng cần phải có các biện phápbảo vệ phù hợp để những kẻ tấn công không thể thay đổi thông tin trạng thái nhằmcan thiệp vào ứng dụng.
1.3 Cơ chế phòng thủ trong ứng dụng Web
Để người dùng có thể truy cập vào một ứng dụng, vành đai tường lửa phảicho phép các kết nối gửi đến máy chủ qua HTTP hoặc HTTPS Và đối với các ứngdụng chức năng, máy chủ phải được phép kết nối tới hệ thống Database Những hệthống này thường là cốt lõi của mọi hoạt động của tổ chức và cư trú đằng sau nhiềulớp phòng thủ cấp mạng Nếu một lỗ hổng tồn tại trong một ứng dụng Web, một kẻtấn công trên Internet có thể thỏa hiệp hệ thống Database bằng cách gửi dữ liệu độctừ trình duyệt Web của mình Dữ liệu này vượt qua tất cả các lớp phòng vệ mạngcủa tổ chức một cách bình thường tới ứng dụng Web và kẻ tấn công sẽ chiếm đượcdữ liệu nhạy cảm trên hệ thống Database Đây là vấn đề tiềm năng cho một loạt cáccuộc tấn công và phòng thủ chống lại các cuộc tấn công phải được thực hiện trongcác ứng dụng.
Vấn đề an ninh cơ bản với các ứng dụng Web – đó là tất cả đầu vào ngườidùng là không đáng tin cậy – làm phát sinh một số cơ chế bảo mật mà các ứng dụngsử dụng để bảo vệ mình chống lại các cuộc tấn công Phần này mô tả các cơ chế bảomật chính mà ứng dụng Web sử dụng để giải quyết vấn đề cơ bản này Các cơ chếphòng thủ được sử dụng trong các ứng dụng Web như sau:
+ Xử lý truy cập người dùng+ Xử lý đầu vào người dùng
Trang 18+ Xử lý kẻ tấn công+ Quản lý ứng dụng
a Xử lý truy cập người dùng
Có các loại người dùng khác nhau chẳng hạn như người dùng vô danh, ngườidùng được xác thực thông thường, và người dùng quản trị Mỗi loại người dùngkhác nhau được phép truy cập một tập dữ liệu khác nhau Vì vậy hầu như bất kỳứng dụng nào đều cần phải đáp ứng được việc kiểm soát người dùng truy cập vàodữ liệu và chức năng của nó Các ứng dụng Web xử lý truy cập bằng cách sử dụngba cơ chế bảo mật liên quan đến nhau:
+ Xác thực+ Quản lý phiên+ Kiểm soát truy cập
Mỗi cơ chế này là nền tảng cho thế trận an ninh tổng thể của một ứng dụng.Vì sự phụ thuộc lẫn nhau của chúng, một khiếm khuyết trong bất kỳ thành phần đơnlẻ nào đều có thể cho phép kẻ tấn công truy cập không hạn chế tới các chức năng vàdữ liệu của ứng dụng Xử lý truy cập người dùng tới dữ liệu của ứng dụng nhằmngăn chặn người dùng khác truy cập trái phép.
b Xử lý đầu vào người dùng
Lỗ hổng dựa trên đầu vào có thể phát sinh bất cứ nơi nào trong chức năngcủa một ứng dụng Tuy nhiên, không có cơ chế đơn lẻ nào có thể được sử dụng Xửlý đầu vào người dùng nhằm ngăn chặn đầu vào bị thay đổi gây ra hành vi khôngmong muốn.
c Xử lý kẻ tấn công
Một chức năng quan trọng trong cơ chế bảo mật ứng dụng là có thể xử lý vàphản ứng lại với các tấn công theo một cách có kiểm soát Những cơ chế nàythường kết hợp một biện pháp phòng thủ và tấn công được thiết kế để làm thất bạimột kẻ tấn công càng nhiều càng tốt và cung cấp cho chủ sở hữu của ứng dụngthông báo và bằng chứng thích hợp về những gì đã diễn ra Thực hiện các biện phápđể xử lý những kẻ tấn công thường bao gồm các nhiệm vụ sau:
+ Xử lý thông báo lỗi+ Duy trì kiểm toán nhật ký+ Tạo cảnh báo tới quản trị+ Phản ứng lại kẻ tấn công
Trang 19Xử lý kẻ tấn công để đảm bảo rằng các ứng dụng cư xử thích hợp khi là mụctiêu trực tiếp, lấy phòng thủ và các biện pháp tấn công thích hợp để chống lại nhữngkẻ tấn công.
d Quản lý ứng dụng
Bất kỳ ứng dụng hữu ích nào đều cần phải được quản lý, điều hành Khảnăng này tạo thành một phần quan trọng của cơ chế bảo mật ứng dụng, cung cấpcho các quản trị viên cách quản lý tài khoản người dùng và các vai trò, các chứcnăng giám sát truy cập và kiểm toán, thực hiện các nhiệm vụ chẩn đoán, và cấu hìnhcác mặt chức năng của ứng dụng.
Các cơ chế phòng thủ trong ứng dụng Web có vai trò trung tâm trong việcgiải quyết vấn đề an ninh cốt lõi, các cơ chế này cũng chiếm phần lớn bề mặt tấncông một ứng dụng điển hình Tìm hiểu thấu đáo những cơ chế này là phần khôngthể thiếu trong việc xác định điểm yếu ứng dụng
1.4Các rủi ra thường gặp trong ứng dụng Web
Phát hiện ra lỗ hổng bảo mật thì quan trọng, nhưng quan trọng hơn là việc cóthể để ước tính rủi ro liên quan đến công việc của tổ chức, doanh nghiệp Kẻ tấncông có thể lợi dụng nhiều con đường khác nhau thông qua ứng dụng để làm tổn hạidoanh nghiệp hay tổ chức Mỗi con đường thể hiện một rủi ro khác nhau mà có thểcó hoặc không gây ra sự chú ý Những mỗi rủi ro có thể đi từ không có gì đến việckhiến cho tổ chức, doanh nghiệp phá sản Để có thể xác định được những rủi ro chotổ chức, doanh nghiệp thì cần phải tính toán khả năng hiện hữu của mỗi nguy hiểm,những yếu tố tấn công và những điểm yếu bảo mật Tập hợp chúng lại với một sựcân nhắc về sự ảnh hưởng của chúng cả về kỹ thuật lẫn kinh doanh đối với tổ chứchình thành nên tập hợp rủi ro Theo thống kê mới nhất năm 2013, tổ chức OWASPđưa ra các rủi ro thường gặp nhất trong ứng dụng Web như sau:
Lỗi nhúng mã: xảy ra trong các ứng dụng như SQL, OS khi những dữliệu không xác thực được gửi tới hệ thống biên dịch như một phần của mã lệnh.Những dữ liệu này của kẻ tấn công có thể lừa hệ thống biên dịch thực hiện nhữngmã lệnh độc hại hoặc giúp kẻ tấn công xâm nhập đến những dữ liệu quan trọng mộtcách trái phép.
Hư hỏng cơ chế chứng thực và quản lý phiên làm việc: các chức năngứng dụng liên quan đến thẩm định và quản lý phiên thường không được thực hiệnmột cách chính xác Điều này cho phép kẻ tấn công có thể ăn cắp mật khẩu, mã củaphiên làm việc (session tocken) hoặc tận dụng những lỗi khác để giả mạo danh tínhcủa người dùng khác.
Trang 20 Thực thi mã script xấu: xảy ra khi một ứng dụng tiếp nhận những dữliệu không đáng tin cậy và gửi chúng đến cho trình duyệt Web mà không qua xử lývà kiểm duyệt XSS cho phép kẻ tấn công thực hiện mã độc trên trình duyệt củangười bị tấn công và lợi dụng ăn cắp phiên truy cập để mạo danh hoặc lừa người sửdụng đến những trang Web chứa mã độc khác.
Đối tượng tham chiếu thiếu an toàn: đối tượng tham chiếu xảy ra khingười phát triển để lộ một tham chiếu đến những đối tượng trong hệ thống như cáctập tin, thư mục… Nếu không có một hệ thống kiểm tra truy cập, kẻ tấn công có thểlợi dụng những tham chiếu này để truy cập dữ liệu một cách trái phép.
Sai sót trong cấu hình bảo mật: một cơ chế an ninh tốt cần phải có mộtcấu hình bảo mật được xác định và triển khai cho các ứng dụng, các framework,máy chủ ứng dụng, máy chủ Web, máy chủ dữ liệu và các ứng dụng platform Tấtcả những thiết lập này nên được xác định, thực thi và bảo trì bởi vì rất nhiều thứkhông được triển khai với thiết lập an toàn mặc định Cấu hình bảo mật cũng baogồm cập nhật phần mềm và những thư viện được sử dụng bởi ứng dụng.
Phơi bày dữ liệu nhạy cảm: nhiều ứng dụng Web không bảo vệ dữliệu nhạy cảm đúng cách, chẳng hạn như thẻ tín dụng, mã số thuế, và các thông tinxác thực Kẻ tấn công có thể ăn cắp hoặc sửa đổi dữ liệu được bảo vệ một cách yếuớt như vậy để thực hiện hành vi trộm cắp danh tính, gian lận thẻ tín dụng, và cáchành vi xấu khác Dữ liệu nhạy cảm cần phải được bảo vệ hơn nữa chẳng hạn nhưmã hóa ở phần còn lại hoặc trong truyền dẫn, cũng như các biện pháp phòng ngừađặc biệt khi trao đổi với các trình duyệt.
Thiếu chức năng điều khiển mức truy cập: hầu hết các ứng dụng Webkiểm tra cấp độ quyền truy cập trước khi thể hiện cho người dùng thấy trong giaodiện người dùng Tuy nhiên, các ứng dụng cần phải thực hiện điều khiển truy cậptrên cùng máy chủ mỗi khi được truy cập Nếu yêu cầu không được kiểm tra xácnhận, kẻ tấn công có thể giả mạo yêu cầu để truy cập trái phép.
Giảo mạo yêu cầu (Cross Site Request Forgery): kiểu tấn công này épbuộc trình duyệt Web của một người dùng đã đăng nhập gửi những yêu cầu HTTPgiả mạo tới một ứng dụng Web bị lỗi, bao gồm cookie của phiên truy cập và nhữngthông tin tự động khác như thông tin đăng nhập Cách thức này cho phép kẻ tấncông buộc trình duyệt Web của người dùng tạo ra những yêu cầu cho ứng dụng lỗimà ứng dụng này không thể biết đây là những yêu cầu giả mạo của kẻ tấn công.
Sử dụng các thành phần dễ bị tổn thương đã biết: các thành phần dễ bịtổn thương chẳng hạn như: các thư viện, các framework, và các môđun phần mềm
Trang 21khác hầu như luôn chạy với đầy đủ đặc quyền Vì vậy, nếu bị khai thác, chúng cóthể gây mất dữ liệu nghiêm trọng hoặc máy chủ bị xâm chiếm Các ứng dụng sửdụng các thành phần dễ bị tổn thương này có thể làm suy yếu phòng thủ và chophép một loạt các cuộc tấn công có thể thực hiện.
Chuyển hướng và chuyển tiếp thiếu thẩm tra: các ứng dụng Webthường xuyện đưa người dùng đến những liên kết qua các Website khác, và sử dụngnhững thông tin thiếu tin cậy để xác định đích đến Nếu không được kiểm tra mộtcách cẩn thận, kẻ tấn công có thể lợi dụng để chuyển nạn nhân đến các trang Weblừa đảo (phishing) hay phần mềm độc hại, hoặc chuyển tiếp để truy cập các trangtrái phép.
Chúng ta cần phải hiểu rằng rủi ro không phải điểm yếu Các rủi ro đượcthiết lập dựa trên việc xem xét những khă năng xảy ra và hậu quả của mỗi điểm yếugây ra cho ứng dụng Ngoài những rủi ro phổ biến trên còn rất nhiều những vấn đềcó thể ảnh hưởng tới toàn bộ sự an toàn của các ứng dụng Web Do sự tiến bộ củakẻ tấn công, sự ra đời của những công nghệ mới, và sự thiết lập của những hệ thốngngày càng phức tạp, những rủi ro về ứng dụng Web theo đó thay đổi liên tục.
Nắm bắt được các rủi ro trong ứng dụng Web, sẽ có thể ước tính mức độnghiêm trọng của tất cả các rủi ro đối với tổ chức, doanh nghiệp, và đưa ra quyếtđịnh về những gì cần làm với chúng
Trang 22CHƯƠNG 2: TÌM HIỂU MỘT SỐ LỖ HỔNG BẢO MẬT ỨNGDỤNG WEB
Trên thực tế có rất nhiều loại lỗ hổng an ninh mà một ứng dụng Web có thểmắc phải, tương ứng với nó là các kiểu tấn công khác nhau Chương này sẽ phân
tích cụ thể một số lỗ hổng nguy hiểm và phổ biến mà ứng dụng Web có thể mắc
phải hiện nay.
Những khái niệm cơ bản của chương hai dựa chủ yếu vào tài liệu [2].
2.1 SQL Injection
Khi triển khai các ứng dụng Web trên Internet, nhiều người vẫn nghĩ rằngviệ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áctin tặc chỉ đơn thuần tập trung vào các vấn đề như chọn hệ điều hành, hệ quản trị cơsở dữ liệu,…mà quên mất rằng ngay cả bản thân ứng dụng Web chạy trên đó cũngtiềm ẩn một lỗ hổng bảo mật rất lớn đó là SQL Injection Vậy SQL Injection là gì?
2.1.1 Khái niệm lỗi SQL Injection
SQL Injection (chèn câu truy vấn SQL) là một kỹ thuật cho phép những kẻtấn công lợi dụng lỗ hổng trong việc kiểm tra dữ liệu nhập trong các ứng dụng Webvà các thông báo lỗi của hệ quản trị cơ sở dữ liệu để “tiêm vào” (inject) và thi hànhcác câu lệnh SQL bất hợp pháp (không được người phát triển ứng dụng lườngtrước) Hậu quả của nó rất tai hại vì nó cho phép những kẻ tấn công có thể thực hiệncác thao tác xóa, hiệu chỉnh,… do có toàn 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 ứngdụng web có dữ liệu được quản lý bằng các hệ quản trị cơ sở dữ liệu như SQLServer, MySQL, Oracle, DB2, Sysbase [3].
SQL Injection có thể được phân chia thành nhiều loại khác nhau, nhưng bảnchất gây ra lỗi thì chỉ có 3 dạng:
- Không lọc các ký tự “escape” – những ký tự có thể gây ngắt câu truy vấn SQL.- Kiểm soát không tốt “kiểu” của biến, ví dụ: một biến định kiểu số nhưngnếú người dùng nhập 1 xâu thì vẫn được chấp nhận.
- Lỗi do các hàm của hệ quản trị cơ sở dữ liệu.
2.1.2 SQL Injection do không lọc các ký tự “escape”.
Trong kỹ thuật lập trình, ký tự thoát (escape character) là một dạng ký tự đặcbiệt, như các mã điều khiển, ký tự bắt đầu các biến, các xâu…
Nếu như các ký tự này không được lọc bỏ mà được đưa trực tiếp vào câutruy vấn SQL thì nó có thể gây ra việc ngắt câu truy vấn, từ đó gây lỗi hoặc thay đổicấu trúc câu SQL.
Trang 23a' or 't'='t
Khi đó câu truy vấn SQL trở thành:
SELECT * FROM users WHERE name = 'a' OR't'='t';
Nếu đoạn mã này được sử dụng trong một thủ tục xác nhận đăng nhập thì vídụ trên sẽ buộc ứng dụng chọn ra một username hợp pháp trong cơ sở dữ liệu, bởi
vì mệnh đề ‘t’=’t’ luôn luôn cho ra kết quả “true”.
Một số hệ quản trị cơ sở dữ liệu, như SQL Server còn cho phép thực hiệnnhiều câu truy vấn cùng lúc trong mệnh đề SQL, điều này khiến cho hacker có thểthực hiện thêm nhiều câu truy vấn nguy hiểm nếu như ứng dụng bị mắc lỗi SQLInjection:
Ví dụ, cũng với đoạn mã trên, nếu biến username được nhập vàogiá trị sau:
a';DROP TABLE users; SELECT * FROM data WHERE nameLIKE '%
Thì câu truy vấn SQL được tạo ra sẽ là:
SELECT * FROM users WHERE name = 'a';DROP TABLEusers; SELECT * FROM DATA WHERE name LIKE '%';
Khi câu truy vấn trên được thực thi, toàn bộ bảng users sẽ bị xóa khỏi cơ sởdữ liệu.
2.1.3 SQL Injection do không kiểm soát tốt kiểu của biến.
Dạng thứ hai gây ra lỗi SQL Injection là không kiểm soát tốt kiểu của biến.Như ta thấy ở trên, thông thường nếu muốn ngắt 1 câu truy vấn SQL thì hacker cần
Trang 24chèn được các ký tự đặc biệt vào câu truy vấn đó Hacker thường thực hiện điều nàybằng cách chèn các dấu nháy đơn, nháy kép vào trong giá trị của biến Tuy nhiên,SQL Injection còn có thể xảy ra ở 1 trường hợp khác, đó là khi một trường dạng sốđược sử dụng trong truy vấn SQL nhưng lại không kiểm tra kỹ xem dữ liệu nhập lêntừ người dùng có đúng là số không Ta xét ví dụ sau:
statement := "SELECT * FROM data WHERE id = " +a_variable + ";"
Biến id trong ví dụ trên là một trường kiểu số Câu truy vấn được thiết kế với
mục đích chọn ra tất cả các bản ghi dữ liệu tại bảng Data mà có id bằng với giá trịngười dùng cung cấp.
Tuy nhiên, trong thực tế hacker có thể cung cấp lên 1 xâu thay cho 1 số:
Lúc đó câu truy vấn trở thành:
SELECT * FROM DATA WHERE id=1;DROP TABLE users;
Khi thực hiện nó sẽ xóa toàn bộ bảng user – đây là điều mà người lập trìnhkhông bao giờ tính tới trong lúc thiết kế câu truy vấn này.
2.1.4 SQL Injection do các hàm của hệ quản trị cơ sở dữ liệu.
Đôi khi, lỗi SQL xảy ra không phải do lỗi người lập trình mà xuất phát từbản thân các hàm built-in của hệ quản trị cơ sở dữ liệu Ví dụ, trong 1 số phiên bảncũ của MySQL Server, hàm builtinmysql_real_escape_string() được viết không tốt,do đó nếu lập trình viên sử dụng hàm này, hacker có thể chèn thêm truy vấn vào câuSQL ngay cả khi các ký tự đặc biệt đã được lọc bỏ, bằng cách sử dụng một số ký tựUnicode nguy hiểm.
Để thực hiện tìm và khai thác lỗi SQL Injection từ bên ngoài, hacker thườngsử dụng 2 kiểu chính sau đây:
Kiểu 1: Tìm lỗi SQL Injection dựa vào thông báo lỗi của hệ quảntrị cơ sở dữ liệu.
Đây là kiểu tấn công phổ biến và dễ thực hiện Nếu ứng dụng web mắc lỗiSQL Injection, khi người dùng cung cấp các giá trị đặc biệt, có khả năng ngắt/thayđổi câu truy vấn SQL thì nó có thể gây ra một câu truy vấn sai và hệ quản trị cơ sởdữ liệu sẽ trả về 1 thông báo lỗi thay việc thực hiện câu truy vấn đó.
1;DROP TABLE users
Trang 25Ta xét một ví dụ
Giả sử truy cập 1 trang web có địa chỉ:
Với địa chỉ bình thường trên, trang web trả về thông tin đúng: đó là thông tin
của quyển sách có mã id trong cơ sở dữ liệu là 1.
Ta có thể dự đoán câu truy vấn SQL trong trường hợp này như sau:
SELECT * FROM books WHERE book_id=$_GET([bookid]);Với link http://www.example.com/book_info.asp?bookid=1, câu truy vấn
trên khi gửi vào hệ quản trị cơ sở dữ liệu có giá trị:
SELECT * FROM books WHERE book_id=1Và nó cho ra kết quả đúng.
Tuy nhiên, nếu hacker nhập vào link sau:
Thì câu truy vấn khi gửi vào hệ quản trị cơ sở dữ liệu sẽ có dạng:
SELECT * FROM books WHERE book_id=1’
Đây là một câu truy vấn sai về cú pháp, do đó nó sẽ không thựchiện mà chỉ có một xâu thông báo lỗi được xuất ra màn hình:
Microsoft OLE DB Provider for ODBC Drivers error'80040e14'
[MySQL][ODBC 3.51 nt]You have an error in your SQL syntax; check themanual that corresponds to your MySQL serverversion for the right syntax to use near ''' ORDERBY category DESC' at line 1
/book_info.asp, line 60
Dựa vào thông báo lỗi này, hacker có thể thay đổi các giá trị của input, từ đótìm cách chèn được các câu truy vấn đúng hoặc thu được các thông tin nhạy cảmkhác trong cơ sở dữ liệu.
Kiểu 2: Tìm lỗi SQL Injection dựa vào các mệnh đề đúng-sai
Trang 26Một số webserver thực hiện việc tắt thông báo lỗi SQL, nên mặc dù ứngdụng web mắc lỗi cũng không thể khai thác theo cách dựa vào thông báo lỗi ở trênđược Tuy nhiên, còn một cách kiểm tra khác nữa, đó là dựa vào các mệnh đề đúngsai Hacker cố gắng thực hiện chèn mã SQL vào câu truy vấn, sao cho nó tạo thànhmột mệnh đề đúng hoặc sai, từ đó quan sát kết quả hiện ra trên màn hình để có bước
tấn công tiếp theo Kiểu tấn công này gọi là Blind SQL Injection.
Ta vẫn xét ví dụ trên, giả sử câu truy vấn trong code có dạng:
SELECT * FROM books WHERE book_id=$_GET([bookid]);
Nếu như hacker thay đổi URL như sau:
http://www.example.com/book_info.asp?bookid=1 and1=1
Khi đó code trên sẽ lấy giá trị từ người dùng và gửi một câu truy vấn vào hệquản trị cơ sở dữ liệu:
SELECT * FROM books WHERE book_id=1 and 1=1
Truy vấn này có kết quả hoàn toàn giống với truy vấn đúng “SELECT *FROM books WHERE book_id=1” bởi vì mệnh đề 1=1 luôn cho ra kết quả true nênviệc AND với nó không làm thay đổi kết quả trả về.
Bước thứ 2, hacker sẽ thử với URL sau:
Câu truy vấn lúc này có dạng:
SELECT * FROM books WHERE book_id=1 and 1=0
Kết quả trả về sẽ không giống ban đầu, bởi nó thực hiện việc AND với mệnh
đề 1=0 – một mệnh đề luôn cho giá trị false.
Bằng việc thay thế mệnh đề 1=1 hay 1=0 bởi các mệnh đề true – false khác,hacker có thể “hỏi” hệ quản trị cơ sở dữ liệu các câu hỏi đúng – sai, từ đó khai thácđược thông tin trong cơ sở dữ liệu.
Ví dụ:
http://www.example.com/book_info.asp?bookid=1 andascii(substring((select top 1 table_name frominformation_chema.tables),1,1))=64