HỌC VIỆN KỸ THUẬT MẬT MÃ
KHOA CÔNG NGHỆ THÔNG TIN
----------
MỘT SỐ PHƯƠNG PHÁP TẤN CÔNG WEBSITE VÀ
CÁCH PHÒNG TRÁNH
Giảng viên hướng dẫn: Lê Đức Thuận
Sinh viên thực hiện:
1. Giang Văn Thắng
2. Trần Quang Huy
3. Nguyễn Minh Chiến
Hà Nội, tháng 9 năm 2016
Mục Lục
Mục Lục.................................................................................................................................................................................2
Mở Đầu..................................................................................................................................................................................5
CHƯƠNG 1: TỔNG QUAN VỀ WEB VÀ CÁC NGUY CƠ TẤN CÔNG ỨNG DỤNG WEB...........................................................6
1.1 Thực trạng an ninh mạng tại Việt Nam hiện nay.......................................................................................................6
1.1.1.Tình hình phát triển internet tại Việt Nam đến 2016.........................................................................................6
1.1.2.Các cuộc tấn công của hacker và những thiệt hại nó gây ra tại Việt Nam.........................................................7
1.2 Tổng quan về WEB......................................................................................................................................................8
1.2.1 Khái niệm ứng dụng web.....................................................................................................................................8
1.2.2 Các vấn đề liên quan đến ứng dụng web............................................................................................................8
1.2.3 Mô tả hoạt động của các ứng dụng web............................................................................................................9
1.3 Các khái niệm thuật ngữ liên quan...........................................................................................................................10
1.3.1 Hacker................................................................................................................................................................10
1.3.2 Giao thức HTTP và HTTPS..................................................................................................................................10
1.3.3 SESSION..............................................................................................................................................................10
1.3.4 COOKIE...............................................................................................................................................................11
1.3.5 PROXY.................................................................................................................................................................11
1.3.6 FIREWALL...........................................................................................................................................................12
1.4 Sơ lược về quá trình tấn công của hacker................................................................................................................12
1.4.1 Các giai đoạn tấn công.......................................................................................................................................12
1.4.2 Khảo sát ứng dụng web.....................................................................................................................................14
1.4.3 Tấn công mục tiêu..............................................................................................................................................14
CHƯƠNG 2: MỘT SỐ KỸ THUẬT TẤN CÔNG VÀO CÁC LỖ HỔNG TRÊN WEB VÀ CÁCH PHÒNG TRÁNH...........................15
2.1 Tấn công SQL INJECTION...........................................................................................................................................15
2.1.1 Các dạng tấn công SQL Injection.......................................................................................................................15
2.1.2 Cách phòng tránh...............................................................................................................................................18
2
2.2 Chèn mã lệnh thực thi trên trình duyệt Crosss-Site Scripting.................................................................................20
2.2.1 Tấn công Crosss-Site Scripting...........................................................................................................................20
2.2.2 Phương pháp tấn công XSS truyền thống.........................................................................................................21
2.2.3 Cách phòng tránh...............................................................................................................................................21
2.3 Chiếm hữu phiên làm việc (Session Management).................................................................................................22
2.3.1 Tổng quan về Session ID....................................................................................................................................22
2.3.2 Ấn định phiên làm việc......................................................................................................................................22
2.3.3 Đánh cắp phiên làm việc...................................................................................................................................23
2.3.4 Cách phòng tránh...............................................................................................................................................24
2.4 Từ chối dịch vụ (DOS)................................................................................................................................................24
2.4.1 Khái niệm tấn công kiểu DoS (Denial of Service)..............................................................................................24
2.4.2 Các kỹ thuật tấn công........................................................................................................................................25
2.4.3 Cách phòng tránh...............................................................................................................................................26
2.5 Mã hóa URL (URL Encoding).....................................................................................................................................27
2.5.1 Khái niệm...........................................................................................................................................................27
2.5.2 Cách phòng tránh..............................................................................................................................................27
2.6 Tấn công dựa vào ký tự rỗng....................................................................................................................................28
2.6.1 Khái niệm...........................................................................................................................................................28
2.6.2 Cách phòng chống.............................................................................................................................................28
2.7 Tấn công vượt đường dẫn........................................................................................................................................28
2.7.1 Khái niệm...........................................................................................................................................................28
2.7.2 Cách phòng chống.............................................................................................................................................28
CHƯƠNG 3: THỰC HIỆN PHƯƠNG PHÁP TẤN CÔNG VÀ CÁCH PHÒNG TRÁNH...............................................................28
I.DEMO TẤN CÔNG SQL INJECTION SELECT UNION.......................................................................................................28
Bước 1.1: Tìm trang web có lỗi SQL Injection Select Union......................................................................................28
Bước 2: Sử dụng câu lệnh order by để kiểm tra số cột dữ liệu của trang web.........................................................33
Bước 3: Kiểm tra cột bị lỗi qua câu lệnh “select union”............................................................................................35
3
Bước 4: Thử khai thác một số thông tin của Database từ vị trí cột lỗi.....................................................................35
Bước 5: Lấy thông tin từ database.............................................................................................................................36
Bước 6: Lấy thông tin đăng nhập và kết thúc tấn công.............................................................................................39
II.Các phòng chống..........................................................................................................................................................40
Mục Lục Hình Ảnh
4
Mở Đầu
Ngày nay khi Internet được phổ biến rộng rãi, các tổ chức đều có nhu cầu giới thiệu thông tin
của mình trên xa lộ thong 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à
vi phạm ứ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. Đôi khi
cũng chỉ đơn giản là để thử tài hoặc đùa giỡn với người khác.
Cù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 dịch
vụ tấn công trên Internet cũng tang 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 cập thông tin của Internet,thì các tài liệu chuyên
môn bắt đầu đề cập đến nhiều vấn đề bảm đảm và an toàn dữ liệu cho các máy tính kết nối vào
mạng Internet.
Vì thế 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 là
cần thiết nhằm mục đích bảo vệ dữ liệu ,bảo vệ thông tin doanh nghiệp,người dùng và bảo vệ hệ
thống.
Tuy đã có nhiều cố gắng từ các nhà lập trình Web nhưng vẫn không thể đảm bảo ngăn chặn
toàn bộ vì công nghệ Web đang phát triển nhanh chóng nên dẫn đến nhiều khuyết điểm mới phát
sinh. Sự tấn công không nằm trong một vài khuôn khổ 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ì vậy,đề tài này được thực hiệ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.
*Ý nghĩa thực tiễn của đề tài
-Về mặt lý thuyết,đề tài thể hiện rõ các cách tấn công cơ bản thường được Hacker sử dụng để
tấn công vào các ứng dụng Web từ trước đến nay,và có thể sử dụng tiếp trong thời gian dài trong
tương lai.
-Về mặt thực tiễn,với các cách tấn công của Hacker như đã tìm hiểu,nghiên cứu trong báo
cáo này,nếu áp dụng tốt các phương pháp phòng ngừa trong đề tài nêu ra sẽ góp phần nâng cao khả
năng bảo vệ các ứng dụng Web trước nguy cơ tấn công của kẻ xấu.
5
CHƯƠNG 1: TỔNG QUAN VỀ WEB VÀ CÁC NGUY CƠ TẤN CÔNG
ỨNG DỤNG WEB
1.1 Thực trạng an ninh mạng tại Việt Nam hiện nay
1.1.1.Tình hình phát triển internet tại Việt Nam đến 2016
Việt Nam được kết nối chính thức với mạng internet toàn cầu world wide web (www)
vào tháng 11/1997. Từ thời điểm đó đến nay Việt Nam luôn nằm trong top 20 quốc gia có tốc độ
tăng trưởng về sử dụng internet trên thế giới.
H1: Số người dùng internet tại Việt Nam
Ngoài sự đầu tư và xây dựng hệ thống internet của Chính phủ và các công ty tập đoàn trong nước
thì internet tại Việt Nam cũng được đầu tư hỗ trợ mạnh từ nước ngoài như năm 2010 Bill Gate đã
đầu tư 30 triệu USD để phát triển internet tại vùng nông thôn của Việt Nam.
Tính tới năm 2014 có khoảng 36 triệu người dân Việt Nam sử dụng Internet, đầu năm 2016 có
khoảng 50% dân số được tiếp cận với Internet xấp xỉ trên 45 triệu người (tính cả thuê bao cố định và
thuê bao di động). Bên cạnh sự phát triển mạnh về thuê bao sử dụng thì nội dung website được phát
triển nhanh chóng và phong phú về nội dung tới mọi mặt của đời sống KT-XH, KH-CN-GD. Hiện
nay có khoảng 12 nhà cung cấp dịch vụ internet tại Việt Nam, chất lượng về tốc độ cũng được nâng
lên nhanh chóng (1,8 Mbps thứ 113 thế giới vào năm 2014, và hết quí IV 2015 là 3,8 Mbps thứ 95 –
Nguồn báo Vietnamnet).
An ninh mạng hay an toàn thông tin trên mạng internet tại Việt Nam là một vấn đề nghiêm trọng
và gây ra nhiều hậu quả về kinh tế cũng như những hậu quả khác liên quan đến khả năng phát triển
của KT-XH, quốc phòng an ninh,…
6
1.1.2.Các cuộc tấn công của hacker và những thiệt hại nó gây ra tại Việt Nam
Nghiên cứu từ CSIS/McAfee cho thấy, tội phạm mạng gây thiệt hại cho nền kinh tế toàn cầu
khoảng 445 tỷ USD mỗi năm. Riêng Việt Nam, đã xảy ra rất nhiều vụ tấn công mạng nghiêm trọng
trong các năm gần đây và dự báo tình hình sẽ còn tồi tệ hơn vào năm 2016, thông cáo của Viện
nghiên cứu và huấn luyện an ninh mạng (Viện CSO) cho biết.
Theo số liệu thống kê và các bài viết của Bkav được đăng tải vào 12/2015 cho biết: “8.700 tỷ
đồng là thiệt hại do virus máy tính gây ra đối với người dùng Việt Nam trong năm 2015. Con số này
vẫn ở mức cao và tiếp tục tăng so với 8.500 tỷ đồng của năm 2014”. Một con số thiệt hại khổng lồ
được kiểm tra, chưa kể những thiệt hại khác mà những nghiên cứu này còn thiếu hoặc không được
tính vào số liệu trên.
Các mối nguy hại đến an ninh mạng nói chung trên thế giới và Việt Nam nói riêng hàng năm vẫn
được đưa ra để cảnh báo người dùng internet để đảm bảo quyền lợi và an toàn của chính họ. Riêng
tại Việt Nam có những đặc trưng riêng như:
- Trình độ và am hiểu về an ninh mạng và hậu quả của người dân chưa tốt.
- Sử dụng các phần mềm không có bản quyền, không thường xuyên nhận được các bản vá lỗi là
điều kiện để tin tặc khai thác lỗ hổng tấn công người dùng.
- Các ứng dụng giả mạo trên di động có kèm mã độc không được kiểm duyệt khiến người dùng
vô tình tự cài vào hệ thống của họ.
- Mạng xã hội (Facebook) vẫn là một nỗi lo lớn đối với người dùng Việt bởi những tin nhắn rác,
nội dung đồi trụy hay liên kết giả mạo có chứa mã độc nguy hiểm bên cạnh những rắc rối như
“rác” làm phiền người dùng.
Bên cạnh đó cũng đã có những chiều hướng tích cực về tình hình an ninh mạng đáng khích lệ tại
Việt Nam như:
-
-
Vấn đề an ninh mạng và an toàn thông tin trên internet đang dần được toàn xã hội quan tâm và
chú ý.
Người sử dụng các dịch vụ mạng internet, ứng dụng trên nền tảng web đã cảnh giác và chú ý
hơn tới các mối nguy hại.
Năm 2015 ghi nhận hàng loạt cuộc tấn công trên diện rộng của mã độc mã hóa dữ liệu tống tiền
(ransomeware) và sự trở lại của phần mềm quảng cáo bất hợp pháp (adware) núp bóng dưới
các phần mềm tiện ích. Đặc điểm chung của các dòng mã độc này là có thể mang lại "lợi
nhuận" trực tiếp khổng lồ cho hacker. Chính vì vậy, mã độc mã hóa tống tiền và phần mềm
quảng cáo bất hợp pháp sẽ là những xu hướng chính của mã độc trong năm 2016.
Bên cạnh đó, các cuộc tấn công bằng phần mềm gián điệp (spyware) để đánh cắp thông tin và
các cuộc tấn công từ chối dịch vụ (DDoS) đã ngày càng mang màu sắc chính trị như vụ tấn
công vào Vietnamairlines, Liên đoàn bóng đá Việt Nam, và
nhiều các trang web của các tổ chức đơn vị chính phủ, tài chính, hành chính, giáo dục,…
7
1.2 Tổng quan về WEB
1.2.1 Khái niệm ứng dụng web
Ứng dụng Web là một ứng dụng chủ,khách sử dụng giao thức HTTP để tương tác với người
dùng hay 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ư Internet Explorer
hay Google Chrome.Cũng có thể là một chương trình đóng vai trò đại lý người dùng hoạt động như
một trình duyệt tự động.Người dùng gửi và nhận các thông tin từ trình chủ thông qua việc tác động
vào các trang Web.Các chương trình có thể là các trang trao đổi mua bán,các diễn đàn,gửi nhận email,…
Tốc độ phát triển của các kỹ thuật xây dựng ứng dụng Web cũng phát triển rất nhanh. Trước
đây những ứng dụng Web thường được xây dựng bằng CGI (Common Gateway Interface) được
chạy trên các trình chủ Web và có thể kết nối vào các cơ sở dữ liệu đơn giản trên cùng máy
chủ.Ngày nay,ứng dụng Web thường được viết bằng Java và chạy trên máy chủ phân tán,kết nói đến
nhiều nguồn dữ liệu.
Dù có nhiều biến thể, một ứng dụng Web thông thường được cấu trúc như một ứng dụng 3
lớp
• Lớp trình bày: Lớp này có nhiệm vụ hiển thị dữ liệu cho người dùng, ngoài ra còn có thể thêm các
ứng dụng tạo bố cục cho trang Web.
• Lớp ứng dụng: Là nơi xử lý các ứng dụng Web. Nó sẽ xử lý thông tin người dùng yêu cầu,đưa ra
quyết định,gửi kết quả đế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ư CGI,Java,NET hay ColdFusion, được triển khai trên các trình chủ như IBM
WebSphere,WebLogic,Apache,…
• Lớp dữ liệu: Thường là các hệ quản trị cơ sở dữ liệu (DBMS) chịu trách nhiệm quản lý các file
dữ liệu và quyền sử dụng.
Kiến trúc một ứng dụng Web,Trong đó:
-
Trình duyệt: Internet Explorer,Google Chrome
Trình chủ: Apache,…
Hệ quản trị cơ sở dữ liệu: SQL,Server,MySQL,…
1.2.2 Các vấn đề liên quan đến ứng dụng web
1.1.2.1 Nguồn gốc phát triển ứng dụng Web
Các ứng dụng Web được phát triển từ nhiều nguồn khác nhau, nên các lỗ hổng, các lỗi bảo mật cũng
rất đa dạng. Tuy vậy, các ứng dụng Web chủ yếu được phát triển từ các nguồn chính sau đây:
8
• Người lập trình tự phát triển ứng dụng Web (sử dụng các ngôn ngữ kịch bản để tạo ứng dụng, phát
triển rộng rãi mà ít quan tâm đến quá trình phát triển ứng dụng an toàn. Thiếu đội ngũ lập trình với
kỹ năng nhận biết phát triển ứng dụng tránh các lỗi bảo mật)
• Sử dụng ứng dụng Web từ mã nguồn mở (Thường không theo dõi và cập nhật các bản và lỗi bảo
mật)
• Phát triển ứng dụng Web từ một ứng dụng mở khác (Trường hợp này thường không kiểm tra lỗi
bảo mật ứng dụng cũ trước khi phát triển tiếp,nên vẫn tồn tại các lỗi bảo mật).
1.2.1.2 Sự phát triển đa dạng của ứng dụng Web
Ngày nay với sự phát triển không ngừng của Internet, các ứng dụng Web cũng phát triển đa
dạng trên nhiều lĩnh vực: Cổng thông tin điện tử, báo tin tức điện tử, giao dịch tài chính ngân hang,
thị trường chứng khoán, trang thông tin điện tử doanh nghiệp,…
1.2.3 Mô tả hoạt động của các ứng dụng web
Đầu tiên trình duyệt sẽ gửi một yêu cầu (request) đến trình chủ Web thông qua các lệnh cơ
bản GET, POST,… của giao thức HTTP, trình chủ lúc này có thể cho thực thi một chương trình
được xây dựng từ nhiều ngôn ngữ như: C,C++,Java,… hoặc trình chủ yêu cầu bộ diễn dịch thực thi
các trang ASP, JSP,… theo yêu cầu của trình khách.
Tùy theo các tác vụ của chương trình được cài đặt mà nó xử lý,tính toán kết nối đến cơ sở dữ
liệu, lưu các thông tin do trình khách gửi đến… và từ đó trả về cho trình khách 1 luồng dữ liệu cố
định dạng theo giao thức HTTP nó gồm 2 phần:
• Header 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à Website,
• Body là phần nội dung dữ liệu mà Server gửi về Client,nó có thể là một file HTML, một
hình ảnh, một đoạn phim hay một văn bản bất kỳ.
Theo mô hình ở hình với Firewall,luồng thông tin giữa trình chủ và trình khách là luồng
thông tin hợp lệ.Vì thế,nếu hacker tìm thấy vài lỗ hổng trong ứng dụng Web thì Firewall không còn
hữu dụng trong việc ngăn chặn hacker này. Do đó, các kỹ thuật tấn công vào một hệ thống mạng
ngày nay đang dần tập trung vào những sơ suất (hay lỗ hổng) trong quá trình tạo ứng dụng của
những nhà phát triển Web hơn là tấn công trực tiếp vào hệ thống mạng, hệ điều hành. Tuy
nhiên,hacker cũng có thể lợi dụng các lỗ hổng Web để mở rộng sự tấn công của mình vào các hệ
thống không liên quan khác.
9
1.3 Các khái niệm thuật ngữ liên quan
1.3.1 Hacker
Hacker là một thuật ngữ dùng để chỉ các chuyên gia về máy tính. Hacker không tạo ra các kẽ
hở trong hệ thống,nhưng hacker lại là những người am hiểu về hệ điều hành,hệ quản trị dữ liệu,các
ngôn ngữ lập trình,… Họ sử dụng kiến thức của mình trong việc tìm tòi và khai thác các lỗ hổng của
hệ thống mạng.
Một số hacker chỉ dừng lại ở việc phát hiện và thông báo lỗi tìm được cho những nhà bảo
mật hay người phát triển chương trình,họ được xem như là WhiteHacker (Hacker mũ trắng).Một số
hacker dựa vào lỗ hổng để thực hiện việc khai thác trái phép nhằm mục đích phá hoại hay mưu lợi
riêng,những người này bị xem như là BlackHacker(Hacker mũ đen).
1.3.2 Giao thức HTTP và HTTPS
HTTP là viết tắt của HyperText Transfer Protocol (giao thức truyền tải siêu văn bản). Nó là
giao thức cơ bản mà World Wide Web sử dụng. HTTP xác định cách các thông điệp (các file văn
bản,hình ảnh đồ họa,âm thanh,video,…) được định dạng và truyền tải ra sao, và những hành động
nào mà các Web Server và các trình duyệt Web phải làm để đáp ứng các lệnh. Khi gõ một địa chỉ
Web URL vào trình duyệt Web,một lệnh HTTP sẽ được gửi tới Web Server để ra lệnh và hướng dẫn
nó tìm đúng trang Web được yêu cầu và kéo về mở trên trình duyệt Web.
Tóm lại,HTTP là giao thức truyền tải các file từ một Web Server vào một trình duyệt Web để
người dùng có thể xem một trang Web đang hiện diện trên Internet. HTTP là một giao thức ứng
dụng của bộ giao thức TCP/IP (các giao thức nền tảng cho Internet).
HTTPS (Security HTTP),là một sự kết hợp giữa giao thức HTTP và giao thức bảo mật SSL
hay TLS cho phép trao đổi thông tin một cách bảo mật trên Internet. Các kết nói HTTPS thường
được sử dụng cho các giao dịch thanh toán trên World Wide Web và cho các giao dịch nhạy cảm
trong các hệ thống thông tin công ty,trong đó dữ liệu cần phải được an toàn. HTTPS không nên
nhầm lẫn với Secure HTTP (S-HTTP) quy định trong RFC 2660
Theo hai khái niệm ở trên,ta có thể thấy nếu trang Web có địa chỉ bắt đầu bằng “ http:// ” thì
có nghĩa là trang Web không an toàn. Nói cách khác,một người nào đó có thể nghe lén những gì trao
đổi với trang Web và có thể lấy những dữ kiện gửi đi từ máy của bạn đến trang Web như tên tuổi,địa
chỉ,số điện thoại,… Nhưng nếu địa chỉ của trang Web bắt đầu bằng “ https:// “ thì điều này có nghĩa
là liên lạc an toàn với Server của trang Web và người ta không thể nghe lén và không thể trộm
những thông tin gửi đi.
1.3.3 SESSION
HTTP là giao thức hướng đối tượng tổng quát, phi trạng thái, nghĩa là HTTP không lưu trạng
thái làm việc giữa trình duyệt với trình chủ. Sự thiếu sót này đã gây khó khăn cho một số ứng dụng
Web, bở vì trình chủ không biết được trước đó trình duyệt đã có những trạng thái nào. Vì thế để giải
10
quyết vấn đề này, ứng dụng Web đưa ra một khái niệm phiên làm việc (Session). Còn SessionID là
một chuỗi để chứng thực phiên làm việc. Một số trình chủ sẽ cũng cấp một SessionID cho người
dùng khi họ xem trang Web trên trình chủ.
Để duy trì phiên làm việc thì SessionID thường được lưu vào:
• Biến trên URL
• Biến ẩn Form
• Cookie
Phiên làm việc chỉ tồn tại trong một khoảng thời gian cho phép, thời gian này được
cấu hình quy định tại trình chủ hay với ứng dụng thực thi. Trình chủ sẽ tự động giải phóng
phiên làm việc để khôi phục lại tài nguyên của hệ thống
1.3.4 COOKIE
Cookie là những phần dữ liệu nhỏ có cấu trúc được chia sẻ giữa trình chủ và trình duyệt giữa
người dùng.
Các Cookie được lưu trữ dưới dạng file dữ liệu nhỏ dạng text, được ứng dụng tạo ra để lưu
trữ, truy tìm, nhận biết các thông tin về người dùng đã ghé thăm trang Web và những vùng họ đi qua
trong trang. Những thông tin này có thể bao gồm tên, định dạng người dùng, mật khẩu,sở thích,…
Cookie được trình duyệt của người dùng chấp nhận lưu trên đĩa cứng của máy tính, tuy nhiên không
phải lúc nào trình duyệt cũng hỗ trợ cookie, mà còn tùy thuộc vào người dùng có chấp nhận việc lưu
trữ đó hay không.
Ở những lần truy cập sau đến trang Web đó, ứng dụng có thể dùng lại những thông tin trong
cookie (như thông tin liên quan đến việc đăng nhập vào Yahoo Messenger…) mà người dùng không
phải làm lại những thao tác đăng nhập hay phải cung cấp lại các thông tin khác.
1.3.5 PROXY
Proxy cung cấp cho người sử dụng truy xuất Internet những nghi thức đặc biệt hoặc một tập
những nghi thức thực thi trên dual_homed host hoặc basion host. Những chương trình client của
người sử dụng sẽ qua trung gian proxy server thay thế cho server thật sự mà người sử dụng cần giao
tiếp.
Proxy server cần xác định những yêu cầu từ client và quyết định đáp ứng hay không đáp
ứng,nếu yêu cầu được đáp ứng,proxy server sẽ kết nối với server thật thay cho client và tiếp tục
chuyển tiếp những yêu cầu từ client đến server,cũng như trả lời server đến client. Vì vậy proxy
server giống cầu nối trung gian giữa server và client.
11
1.3.6 FIREWALL
Một giải pháp dùng để bảo vệ hệ thống mạng thường được sử dụng là bức tường lửa –
Firewall (hoạt động dựa trên gói IP do đó kiểm soát việc truy nhập của máy người sử dụng). Nó có
vai trò như là lớp rào chắn bên ngoài một hệ thống mạng, vì chức năng chính của firewall là kiểm
soát luồng thông tin giữa các máy tính. Có thể xem firewall như một bộ lọc thông tin,nó xác định và
cho phép một máy tính này có được truy xuất đến một máy tính khác hay không, hay một mạng này
có được truy xuất đến mạng kia hay không.
Người ta thường dùng firewall vào mục đích:
• Cho phép hoặc cấm những dịch vụ truy xuất ra ngoài.
• Cho phép hoặc cấm những dịch từ bên ngoài truy nhập vào trong.
• Kiểm soát địa chỉ truy nhập, cấm địa chỉ truy nhập.
1.4 Sơ lược về quá trình tấn công của hacker
1.4.1 Các giai đoạn 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:
- Thu thập thông tin.
- Phân tích và hành động.
- Dừng và xóa dấu vêt.
• Giai đoạn 1: Thu thập thông tin
–FootPrinting (In dấu chân): Là bước mà kẻ tấn công thu thập thông tin về đối tượng, người
dùng,doanh nghiệp,máy chủ,… bao gồm các chi tiết Domain Name,địa chỉ IP,thông tin về người
quản trị,… Đây là một bước quan trọng cho hacker, đôi khi với những thông tin này hacker đã có
thể làm chủ hệ thống.
Công cụ hỗ trợ: Nslookup, Smart whois, UseNet, Google Earth, Search Engines (công cụ tìm kếm),
–Scanning (Quét thăm dò mạng): Phần lớn thông tin quan trọng từ server có được từ bước này.Xác
định hệ điều hành,xác định hệ thống có đang chạy không,tìm hiểu các dịch vụ đang chạy hay đang
lắng nghe,tìm hiểu các lỗ hổng,kiểm tra các cổng,…
Công cụ hỗ trợ như LANGuard, xScan, NetScanToolsiNetToolsNmap ,…
–Enumeration (Điểm danh mạng – Liệt kê tìm lỗ hổng): Đến đây, các attacker bắt đầu kiểm soát
server sợ bộ. Bước này là tìm kiếm những tài nguyên được bảo vệ kém, hoặc tài khoản người dùng
12
mà có thể sử dụng để xâm nhập, bao gồm các mật khẩu mặc định,các script và dịch 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 của thiết bị.
Công cụ hỗ trợ: DumpSec, SbtScan, SuperScan, NetviewX ,…
• Giai đoạn 2: Phân tích và hành động
–Gaining Access (Đột nhập hệ thống): Hacker sẽ tìm cách truy cập vào mạng bằng những thông tin
có được ở 3 bước trên.Phương pháp được sử dụng ở đây có thể là tấn công vào lỗi tràn bộ đệm,lấy
và giải mã file password,đột nhập qua các cổng mở,…
Công cụ hỗ trợ: Password eavesdropping, Tcpdump, NAT, Pwdump2, Remote Buffer Overflows,…
–Privilege Escalation (Nâng quyền hệ thống): Trong trường hợp hacker xâm nhập được vào mạng
của một tài khoản nào đó,thì họ sẽ tìm cách kiểm soát toàn bộ hệ thống.Hacker sẽ tìm cách crack
password của admin,hoặc sử dụng lỗ hổng để leo thang đặc quyền.Kẻ xâm nhập có thể truy cập vào
các file hay folder dữ liệu mà tài khoản người sử dụng ban đầu không được phép chia cập.Khi
hacker đạt được mức độ quyền truy cập đủ cao,họ có thể cài đặt phần mềm như là Backdoors và
Trojan horses,cũng như cho phép truy cập sâu hơn và thăm dò. Mục đích chung của hacker là chiếm
được quyền truy cập ở mức độ quản trị.Khi đã đạt được mục đích đó, họ có toàn quyền điều khiển
hệ thống mạng.
Công cụ hỗ trợ: L0phtcrack, Password cracking, BUG, Exploits ,…
–Pilfering (Khai thác hệ thống): Thông tin lấy được 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, hãy đến bước DoS (Denial of Service).
Công cụ hỗ trợ: Rhost, Configuration files, Registry, Ftp …
• Giai đoạn 3: Dừng và xóa dấu vết
–Creating Backdoors (Tạo cổng hậu): Để chuẩn bị cho lần xâm nhập tiếp theo được dễ dàng
hơn.Hacker để lại Backdoors,tức là một cơ chế cho phép hacker truy nhập trở lại bằng con đường bí
mật không phải tốn nhiều công sức khai phá,bằng việc cài đặt Trojan hay tạo user mới.
Công cụ hỗ trợ: Các loại Trojan, keylog, creat rogue user accounts, schedule batch jobs, …
–Covering Tracks (Xóa dấu vết): Sa khi đã có những thông tin cần thiết, hacker tìm cách xóa dấu
vết, xóa các file LOG của hệ điều hành (vì hệ thống luôn ghi nhận những hành động của người
dùng) làm cho người quản lý không nhậ 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.
Công cụ hỗ trợ: Clear logs, Zap, Event log GUI,rootkits,…
13
1.4.2 Khảo sát ứng dụng web
Khi phạm vi ứng dụng của các Web application ngày càng phổ biến thì khả năng xuất hiện
lỗi và bị tấn công càng cao.Trong các lĩnh vực hacking thì hack Web applicantion luôn là một công
việc được hacker nhắm đến nhằm mục đích phục vụ một yêu cầu nào đó của họ hay để phá hoại.
Trước hết hacker tiến hành thu thập thông tin ở mức trên về hạ tầng của mục tiêu. Thu thập
một số thông tin quan trọng như có bao nhiêu server,mô hình của các Web server,các client nào sẽ
tương tác với ứng dụng Web,kiểu giao tiếp thông tin (transport) và thông qua các cổng (port)
nào,những site liên quan đến việc thực hiện chức năng của site mục tiêu,…
Tiếp theo hacker khảo sát ứng dụng Web.Một trong những phương pháp khảo sát khá phổ
biến từ trước đến giờ,đó là xem mã nguồn và lợi dụng các lỗi cho phép xem mã nguồn các ngôn ngữ
Web thông dụng hiện nay như Active Server Page (ASP),Common Gateway Interface
(CGI),ColdFusion Server (CFS),Hypertext Preprocessor (PHP).
Sử dụng một số phép thử như thêm dấu ‘ vào các URL theo khuôn dạng truyền vào giá trị rất
phổ biến,đưa vào những mẫu thử cơ bản của form xác thực đăng nhập để khảo sát các lỗi SQL
Injection.
–Đưa vào các thông tin “lạ” ở các form ứng dụng Web hay trên URL để xem các thông điệp chuyển
xuống cho người dùng khi ứng dụng có lỗi.Các thông báo lỗi thông thường tiết lộ các chi tiết kỹ
thuật có thể cho phép kẻ tấn công biết được điểm yếu của hệ thống.
–Sử dụng các công cụ để đưa các trang Web mục tiêu vào dò tìm các lỗi của người phát triển ứng
dụng để từ đó xây dựng nên kịch bản tấn công và chọn cách tấn công cụ thể.
–Tìm hiểu sâu và các chức năng của ứng dụng Web.Tìm hiểu cách thực hiện của các phần trong ứng
dụng, đặc biệt như các order input, confirmation, order tracking.
–Tìm hiểu luồng di chuyển của thông tin.Các thông tin tương tác giữa client và server, các thông tin
tương tác với database.Hiện nay việc viết mã để thực hiện việc giao tiếp thông tin thường phải đảm
bảo được tính hiệu quả và bảo mật.Thường thì tính hiệu quả được ưu tiên hơn do đó có thể sẽ phát
sinh lỗi trong quá trình đó và giúp hacker có thể lợi dụng các lỗi để đoạt quyền điều khiển hệ thống.
1.4.3 Tấn công mục tiêu
Việc thu thập thông tin là vấn đề quan trọng cho việc tấn công vào một hệ thống máy mục
tiêu.Cho dù hacker tấn công theo phương diện phần cứng hay qua ứng dụng thì việc thu thập vẫn là
cần thiết.
Sau khi đã khảo sát và thu thập thông tin mục tiêu,hacker bắt đầu thực hiện tấn công nhằm
xâm nhập vào hệ thống lấy thông tin,đưa thông tin xấu vào,dành quyền kiểm soát,… 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 mục tiêu 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
14
vào thông tin thu thập được mà hacker sẽ quyết định tấn công theo kỹ thuật nào,xây dựng một kịch
bản tấn công phù hợp.
• Một số kịch bản tấn công:
Tấn công đồng loạt vào các trang tin điện tử thuộc Chính Phủ, thành phố,các sở ban ngành,
…làm thay đổi nội dung,đưa thông tin sai lệch,…
Tấn công vào các trang Web mua bán, giao dịch trực tuyến để đánh cắp thông tin cá nhân, thẻ
tín dụng ,…
Tấn công ứng dụng Web, đặt mã đọc tại trang Web,sự dụng máy chủ bị lỗi để thực hiện hành
vi tấn công khác.
• Một số mục đích tấn công:
Tấn công với mục đích chính trị (tấn công các trang tin điện tử thuộc chính phủ, thành phố,
các sở ban ngành, …).
Tấn công với mục đích lợi nhuận (các trang thương mại điện tử, tài chính,ngân hàng,…).
Tấn công với mục đích cá nhân.
• Hậu quả của việc tấn công:
Dù tấn công dưới bất kỳ với mục đích gì thì hậu quả ảnh hưởng đều rất đáng kể,thiệt hại to
lớn về uy tín,kinh tế,gây thiệt hại cho người dùng mạng,bị đánh cắp thông tin,…
Nếu không thành công trong việc xâm nhập bằng các kỹ thuật phổ biến, thì Dos là cách thức
mà hacker thường lựa chọn để làm cho hệ thống không thể hoạt động được.
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.
CHƯƠNG 2: MỘT SỐ KỸ THUẬT TẤN CÔNG VÀO CÁC LỖ HỔNG
TRÊN WEB VÀ CÁCH PHÒNG TRÁNH
2.1 Tấn công SQL INJECTION
2.1.1 Các dạng tấn công SQL Injection
Khi triển khai các ứng dụng Web trên Internet,nhiều người vẫn nghĩ rằng việc đảm bảo an toàn,bảo
mật nhằm giảm thiểu tối đa khả năng bị tấn công từ các tin tặc chỉ đơn thuần tập trung vào các vấn
đề như chọn hệ điều hành,hệ quản trị cơ sở dữ liệu,webserver chạy ứng dụng,… mà quên mất rằng
15
ngay cả bản thân ứng dụng chạy trên đó cũng tiềm ẩn một lỗ hổng bảo mật rất lớn.Một trong số các
lỗ hổng này đó là SQL injection.Tại Việt Nam,đã qua thời kỳ các quản trị Website lơ là việc quét
virus,cập nhật các bản vá lỗi từ các phần mềm hệ thống, nhưng việc chăn sóc các lỗi của các ứng
dụng lại rất ít được quan tâm.Đó là lý do tại sao không ít Website tại Việt Nam bị tấn công và đa số
đều là lỗi SQL injection.Vậy SQL injection là gì?
SQL injection là 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 Web và 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ành cá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ường trướ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ện các thao
tác xóa bỏ,hiệu chỉnh,…trên cơ sở dữ liệu của ứng dụng.Lỗi này thường xảy ra trên các ứng dụng
Web có dữ liệu được quản lý bằng các hệ quản trị cơ sở dữ liệu như SQL
Server,MySQL,Oracle,DB2,Sysbase.
Có 4 dạng thông thường bao gồm: vượt qua kiểm tra lúc đăng nhập, sử dụng câu lệnh SELECT, sử
dụng câu lệnh INSERT và sử dụng các stored-procedures [2],[3],…
a. Dạng tấn công vượt qua kiểm tra đăng nhập
Với dạng tấn công này tin tặc có thể dễ dàng vượt qua các trang đăng nhập nhờ vào lỗi khi
dùng các câu lệnh SQL thao tác trên cơ sở dữ liệu của ứng dụng Web.
Xét ví dụ điển hình, thông thường để cho phép người dùng truy cập vào các trang web được
bảo mật,hệ thống thường xây dựng trang đăng nhập để yêu cầu người dùng nhập thông tin về tên
đăng nhập và mật khẩu.Sau khi người dùng nhập thông tin vào,hệ thống sẽ kiểm tra tên đăng nhập
và mật khẩu có hợp lệ hay không để quyết định cho phép hay từ chối thực hiện tiếp.
Trong trường hợp này người ta có thể dùng hai trang,một trang HTML để hiện thị form nhập
liệu và một trang ASP dùng để xử lý thông tin nhập từ phía người dùng.Ví dụ:
Login.htm
<form action=”ExecLogin.asp” method=”post”>
Username: <input type=”text” name=”fUSRNAME”>
Password: <input type=”password” name=”fPASSWORD”>
<input type=”submit”>
</form>
execlogin.asp
<%
Dim vUserName, vPassword, objRS, strSQL
16
vUserName = Request.Form(“fUSRNAME”)
vPassword = Request.Form(“fPASSWORD”)
strSQL = “SELECT * FROM T_USERS “ & _
“WHERE USR_NAME=’ “ & vUsrName & _
“ ‘ and USR_PASSWORD=’ “ & vPassword & “ ‘ “
Set objRS = Server.CreateObject(“ADODB.Recordset”)
objRS.Open strSQL, ”DSN=…”
if(objRS.EOF) Then
Response.Write “Invalid login.”
Else
Response.Write “You are logged in as “ & objRS(“USR_NAME”)
End if
Thoạt nhìn, đoạn mã trong trang execlogin.asp dường như không chứa bất cứ một lỗ hổng về
an toàn nào.Người dùng không thể đăng nhập mà không có tên đăng nhập và mật khẩu hợp lệ.Tuy
nhiên đoạn mã này thực sự không an toàn và là tiền đề cho một số lỗi SQL injection. Đặc biệt chỗ
sơ hở nằm ở chỗ dữ liệu nhập vào từ người dùng được dùng để xây dựng trực tiếp câu lệnh
SQL.Chính điều này cho phép những kẻ tấn công có thể điều khiển câu truy vấn sẽ được thực
hiện.Ví dụ,nếu người dùng nhập chuỗi sau vào trong 2 ô nhập liệu username/password của trang
login.html là: ‘OR’ ‘= ‘ .Lúc này cây truy vấn sẽ được gọi thực hiện là: SELECT*FROM T_USERS
WHERE USR_NAME=”OR”=”and USR_PASSWORD=”OR”=”
Câu truy vấn này hợp lệ và sẽ trả về tất cả các bản ghi T_USERS và đoạn mã tiếp theo xử lý
người dùng đặp nhập bất hợp pháp này như là người dùng đăng nhập hợp lệ.
b. Dạng tấn công sử dụng câu lệnh SELCT
Dạng tấn công này phức tạp hơn.Để thực hiện được kiểu tấn công này, kẻ tấn công phải có
khả năng hiểu và lợi dụng các sơ hở trong các thông báo lỗi từ hệ thống để dò tìm các điểm yếu
khởi đầu cho cuộc tấn công.
pe=’U’ là có thể liệt kê được tất cả các bảng dữ liệu.
c. Dạng tấn công sử dụng câu lệnh INSERT
Thông thường các ứng dụng Web cho phép người dùng đăng ký một tài khoản để tham
gia.Chức năng không thể thiếu là sau khi đăng ký thành công,người dùng có thể xem và hiệu chỉnh
17
thông tin của mình.SQL injection có thể được dùng khi hệ thống không kiểm tra tính hợp lệ của
thông tin nhập vào.
Ví dụ, một câu lệnh INSERT có thể có cú pháp dạng: INSERT INTO TableName
VALUES(‘Value One’,’Value Two’,’Value There’).Nếu đoạn mã xây dựng SQL có dạng:
<%
strSQL = “INSERT INTO TableName VALUES(‘ “ & strValueOne & “ ‘,’ “ _ & strValueTwo & “ ‘,’
“ & StrValueThree & “ ‘) “
Set objRS = Server.CreateObject(“AODB.Recordset”)
objRS.Open strSQL, “DSN=…”
Set objRS = Nothing
%>
Thì chắc chắn sẽ bị lỗi SQL Injection, bởi vì chúng ta nhập vào trường thứ nhất ví dụ như: ‘+
(SELECT TOP 1FieldName FROM TableName)+’. Lúc này câu truy vấn sẽ là: INSERT INTO
TableName VALUES(‘ ’+(SELECT TOP 1 FieldName FROM TableName)+’ ‘,’abc’,’def’). Khi đó,
lúc thực hiện lệnh xem thông tin, xem như bạn đã yêu cầu thực hiện thêm một câu lệnh nữa đó là:
SELECT TOP 1 FieldName FROM TableName.
d. Dạng tấn công sử dụng stored-procedures
Việc tấn công bằng stored-procedures sẽ gây ra tác hại lớn nếu ứng dụng được thực thi với quyền
quản trị hệ thống ‘sa’. Ví dụ, nếu ta thay đoạn mã tiêm vào dạng: ‘; EXEC xp_cmdshell’cmd.exe dir
C:’. Lúc này hệ thống sẽ thực hiện lệnh liệt kê như mục trên ở ổ đĩa C:\cài đặt server. Việc phá hoại
kiểu nào tùy thuộc vào câu lệnh đằng sau cmd.exe.
2.1.2 Cách phòng tránh
Trong hầu hết trình duyệt, những kí tự nên được mã hóa trên địa chỉ URL trước khi sử dụng.
Việc tấn công theo SQL Injection dựa vào những câu thông báo lỗi, do đó việc phòng chống hay
nhất là không cho hiển thị những thông điệp lỗi cho người dùng bằng cách thay thế những lỗi thông
báo bằng một trang do người phát triển thiết kế mỗi khi lỗi xảy ra trên ứng dụng.
Kiểm tra kĩ dữ liệu nhập vào thay thế kí tự như:
Đối với các giá trị numeric, hãy chuyển nó sang Interger trước khi thực hiện câu truy vấn
SQL, hoặc dùng hàm ISNUMBERIC để chắc chắn nó là một Interger.
Dùng thuật toán để mã hóa dữ liệu.
Như vậy, có thể thấy lỗi SQL Injection tùy thuộc vào môi trường và cách cấu hình hệ thống.
Nếu ứng dụng sử dụng quyền dbo (quyền của người sử hữu cơ sở dữ liệu – owner) khi thao
tác dữ liệu, nó có thể xóa toàn bộ các bảng dữ liệu, tạo các bảng dữ liệu mới,… Nếu ứng
dụng sử dụng quan sa (quyền quản trị hệ thống), nó có thể điều khiển toàn bộ hệ quản trị cơ
18
sở dữ liệu và với quyền hạn rộng lớn như vậy nó có thể tạo ra các tài khoản người dùng bất
hợp pháp để điều khiển hệ thống của bạn. Để phòng tránh, ta có thể thực hiện ở hai mức.
a) Kiểm soát chặc chẽ dữ liệu nhập vào
Kiểm tra tính đúng đắn của dữ liệu là một vấn đề phức tạp và thường chưa được quan tâm
đúng mức trong các ứng dụng. Khuynh hướng của việc kiểm tra tính đúng đắn của dữ
liệukhông phải là chỉ cần thêm một số chức năng vào ứng dụng, mà phải kiểm tra một cách
tổng nhanh chống đề đạt được mục đích.
Có ba giải pháp tiếp cận vấn đề này:
• Cố gắng kiểm tra và chỉnh sửa để làm cho dữ liệu hợp lệ.
• Loại bỏ những dữ liệu bán hợp lệ.
• Chỉ chấp nhận những dữ liệu hợp lệ.
Để phòng tránh nguy cơ có thể xảy ra, hãy bảo vệ các câu lệnh SQL là bằng cách kiểm soát
chặt chẽ tất cả các dữ liệu nhập nhận được từ đối tượng Request (Request, Request.
QueryString, Request.From, Request.Cookies, and Request.ServerVariables). Ví dụ: có thể
giới hạn chiều dài của chuỗi nhập liệu, hoặc xây dựng hàm Escape Quotes để thay thế các dấu
nháy đơn bằng hai dấu nháy đơn như:
<%
Function EscapeQuotes(sInput)
sInput = replace(sInput, “ ’ ”, “ ‘ ‘ ”)
EscapeQuotes = sInput
End Function
%>
Trong trường hợp dữ liệu nhập vào là số, lỗi xuất phát từ việc thay thế một giá trị được
tiên đoán là dữ liệu số bằng chuỗi chứa câu lệnh SQL bất hợp pháp. Để tránh điều này, đơn
giản hãy kiểm tra dữ liệu có đúng hay không bằng hàm IsNumeric().
Ngoài ra có thể xây dựng hàm loại bỏ một số kí tự và từ khóa nguy hiểum như: ;, --, select,
insert, xp_,… ra khỏi chuỗi dữ liệu nhập từ phía người dùng để hạn chế các tấn công dạng
này:
<%
Function KillChars(sInput)
dim badChars
dim newChars
babChars = array(“select”, “drop”, “;”, “--”, “insert”, “delete”, “xp_”)
newChars = strInput
19
for I = 0 to uBound(babChars)
newChars = replace(newChars, badChars(i), “”)
next
KillChars = newChars
End Function
%>
b) Thiết lập cấu hình an toàn cho hệ quản trị cơ sở dữ liệu
Cần có cơ chế kiểm soát chặt chẽ và giới hạn quyền xử lí dữ liệu đến tài khoản người dùng
mà ứng dụng web đang sử dụng. Các ứng dụng thông thường nên tránh dùng đến các quyền
như dbo hay sa. Quyền càng bị hạn chế, thiệt hại càng ít.
Ngoài ra để tránh các nguy cơ từ SQL Injection attack, nên chú ý loại bỏ bất kì thông tin kỹ
thuật nào chứa trong thông điệp chuyển xuống cho người dùng khi ứng dụng có lỗi. Các
thông báo lỗi thông thường tiết lệ các chi tiết kĩ thuật có thể cho phép kẻ tấn công biết được
điểm yếu của hệ thống.
Xác định các phương pháp kết nối server:
Dùng tiện ích Network Utility để kiểm tra rằng chỉ có các thư viện mạng đang là hoạt
động.
Kiểm tra tất cả các tài khoản trong SQL server
Chỉ tạo tài khoản có quyền thấp cho các ứng dụng.
Loại bỏ những tài khoản không cần thiết.
Đảm bảo rằng tất cả các tài khoản có một mật khẩu hợp lệ.
Kiểm tra các đối tượng tồn tại.
Nhiều extended stored procedure có thể được xóa bỏ một cách an toàn. Nếu điều này
được thực hiện, thì cũng xem xét việc loại bỏ luôn những tập tin. Dll chứa mã của
extenđe stored procedure.
Xóa bỏ tất cả dữ liệu mẫu như “northwind” và “pubs”.
Xóa
các
stored
procedure
không
dùng
như:
master…xp_cmdsell,
xp_startmail,xp_makewebtask.
Kiểm tra những tài khoản nào có thể truy xuất đến những đối tượng nào.
Đối với những tài khoản của một ứng dụng nào đó dùng để truy xuất cơ sở dữ liệu thì chỉ
được cấp những quyền hạn cần thiết tối thiểu để truy xuất đến những đối tượng nó cần
dùng.
2.2 Chèn mã lệnh thực thi trên trình duyệt Crosss-Site Scripting
2.2.1 Tấn công Crosss-Site Scripting
Cross-Site Scripting (XSS) là một trong hững kỹ thuật tấn công phổ biến, 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.
20
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.
Hacker sẽ lợi dụng sự kiểm tra lỏng lẻo từ ứng dụng và hiểu biết hạn chế của người dùng cũng
như biết đánh vào sự tò mò của họ dẫn đến người dùng bị mất thông tin một cách dễ dàng. Hacker
thực hiện tấn công XSS 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ã scrip nguy hiểm có thể gây hại cho những người sử dụng khác.
Thông thường hacker lợi dụng địa chỉ URL để đưa ra những liên kết là tác nhân kích hoạt những
đoạn chương trình nguy nghiểm được chèn vào, hầu hết được viết bằng các Client-Site Script như
JavaScrip, Jscrip và cũng có thể là cả các thẻ HTML,… được thực thi trên chính trình duyệt của
nạn nhân.
2.2.2 Phương pháp tấn công XSS truyền thống
Như đã biết, cookie là phần thông tin mà ứng dụng có thể lưu trữ trên đĩa cứng của người sử
dụng. Nhưng chỉ các ứng dụng thiết lập ra cookie thì mới có thể đọc nó. Do đó chỉ khi người
dùng đang trong phiên làm việc của ứng dụng thì hacker mới có cơ hội đánh cắp cookie. Công
việc đầu tiên của hacker là tìm trang đích để dụ người đăng nhập sau khi đã tìm ra lỗ hổng trên
ứng dụng đó.
-
Bước 1 : Hacker biết được người dùng đang chạy một ứng dụng Web có lỗ hổng XSS.
Bước 2 : Người dùng nhận được một liên kết thông qua email hay trên chính trang Web (như
banner, link,…). 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 của bạn”, ”Quà tặng hấp dẫn”,…
Bước 3 : Chuyển nội dung thông tin cookie, tên, mật khẩu,…) về máy chủ đã chuẩn bị trước của
hacker.
Bước 4 : Hacker đã tạo một đoạn mã hay chương trình hoặc một trang Web để ghi nhận những
thông tin đã đánh cắp vào một 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.
2.2.3 Cách phòng tránh
Như đã biết, 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 nhà phát triển có thể bảo
vệ ứng dụng Web 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, xác nhận tính hợp lý
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ự đặc biệt, dấu nháy đơn
kép, ký tự Null,… được định nghĩa trong các đặ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. Hiện tại có khá nhiều bộ lọc để ta lựa
21
chọn (như bộ thư viện bằng PHP cho phép filter HTML để ngăn chặc kẻ xấu post mã độc XSS
thông qua Website, đó là HTML Purifier.
Mã hóa
Lỗi XSS có thể tránh được khi máy chủ Web đảm bảo những trang phát sinh được mã hóa thích
hợp để ngăn việc chạy các script không mong muốn. Mã hóa phía máy chủ là một tiến trình mà
tất cả nội dung phát sinh động sẽ đi qua mọt hàm mã hóa nơi mà các thẻ script sẽ được thay thế
bởi mã của nó. Việc mã hóa được khuyến khích sử dụng vì nó không yêu cầu phải đưa ra quyết
định những kí tự nào là hợp lệ hoặc không hợp lệ. Tuy nhiên việc mã hóa tất cả dữ liệu có thể tốn
tài nguyên và ảnh hưởng đến khả năng thực thi của máy chủ.
Người dùng
Người sử dụng cần cấu hình lại trình duyệt để được nhắc nhở có cho thực thi ngôn ngữ kịch bản
trên máy của họ hay không ? Tùy vào mức độ tin cậy mà người dúngẽ quyết định.
Kỹ thuật XSS khá phổ biến và dễ dàng áp dụng, tuy nhiên mức thiệt hại chỉ dừng lại ở mức độ
tấn công trên máy của nạn nhân. Vì thế, ngoài việc ứng dụng kiểm tra tính đúng đắn của dữ liệu
thì việc cần nhất là người dùng nên cảnh giác trước khi bước vào một trang Web mới. Có thể nói,
nhờ vào sự cảnh giác của người dùng thì 90% đã đạt được sự bảo mật trong kỹ thuật này.
2.3 Chiếm hữu phiên làm việc (Session Management)
2.3.1 Tổng quan về Session ID
Session dùng để lưu trữ trạng thái làm việc giữa trình duyệt và trình chủ. Session ID có thể được
lưu trữ trong cookie hay được nhúng vào địa chỉ URL hay trong biến ẩn của form. Mỗi kiểu lưu trữ
đều có ưu và khuyết điểm, nhưng qua thực tế cookie vẫn là lựa chọn tốt nhất, và là phương pháp an
toàn nhất.
Thông thường, sau khi người dùng được chứng thực dựa trên những thông tin cá nhân như tên/mật
khẩu, 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ọ.
XSS cũng là một cách tấn công có thể chiếm được session ID lưu trữ trong cookie. Cách tấn công
này gọi là ”session hijacking”.
Tấn công vào một phiên làm việc thường được thực hiện theo 2 kiểu chính sau :
• Ấn định phiên làm việc
• Đánh cắp phiên làm việc
2.3.2 Ấn định phiên làm việc
Trong kiểu tấn công ấn định một phiên làm việc, hacker ấn định sẵn session ID cho nạn nhân trước
khi họ đăng nhập vào hệ thống. Sau đó, hacker sẽ sử dụng session ID này để bước vào phiên làm
việc của nạn nhân đó.
-
Bước 1 : Thiết lập session ID.
22
Hệ thống quản lý session theo 2 hướng :
+ Hướng tự do: Chấp nhận bấtkì một session ID, nếu chưa tồn tại session thì tạo mới một
session ID.
+ Hướng giới hạn: Chấp nhận session ID nào đó đã đăng kí trước đó. Ở hướng giới hạn,
hacker phải đăng kí một session ID với ứng dụng.
-
-
Phụ thuộc vào quy trình quản lý phiên làm việc mà hacker lưu trữ thời gian sống của phiên
làm việc cho đến khi nạn nhân đăng nhập vào hệ thống. Thông thường một phiên làm việc
không tồn tại vô hạn định. Hệ thống sẽ tự động hủy bỏ phiên làm việc nếu nó không thực
hiện một thao tác nào (thời gian nhàn rỗi) hoặc hết hạn định.
Do đó bướ 1a là kẻ tấn công sẽ bảo trì phiên làm việc bằng cách gửi yêu cầu đến server.
Bước 2: Gởi session ID đến trình duyệt của nạn nhân.
Hacker gửi session ID vừa tạo đến người dùng và việc trao đổi ID session tùy vào ứng dụng
mà có thể có các cách tấn công thông dụng gồm:
+ Tấn công session ID trên tham số URL.
+ Tấn công session ID bằng biến ẩn form.
+ Tấn công session ID trong cookie.
Bước 3: Đột nhập vào phiên làm việc của nạn nhân.
Sau khi nạn nhân đăng nhập vào hệ thống qua session ID đã được chỉ định sẵn và chưa
thoát khỏi ứng dụng, hacker lúc này bắt đầu dùng session ID đó để bước vào phiên làm việc
của nạn nhận.
2.3.3 Đánh cắp phiên làm việc
Khác với kiểu tấn công ấn định phiên làm việc, hacker đánh cắp một session ID của người dùng
khi họ đang trong phiên làm việc của mình. Để có thể đánh cắp session ID của người dùng, hacker
có thể dùng những phương pháp sau:
Tấn công kiểu dự đoán phiên làm việc
Hacker phải là người dùng hợp lệ của hệ thống, sau vào lần đăng nhập vào hệ thống, hacker
xem xét các giá trị session ID nhận được, tìm ra qui luật phát sinh và từ đó có thể đoán ra được
giá trị của một phiên làm việc của người kế tiếp.
Tấn công kiểu vét cạn phiên làm việc
Hacker có thể tự tạo một chương trình gửi nhiều yêu cầu trong một khoảng thời gian đến
trình chủ. Mỗi một yêu cầu kèm theo một session ID để tìm các session ID đang tồn tại.
Hacker dựa vào thói quen của những nhà phát triển ứng dụng Web lấy thời gian hay địa chỉ IP
của người dùng để tạo session ID để hạn chế vùng vét cạn.
Tấn công kiểu dùng đoạn mã để đánh cắp phiên làm việc.
Bằng cách chèn vào một đoạn mã thực thi trên chính trình duyệt của nạn nhân, hacker vào
phiên làm việc của họ.
23
2.3.4 Cách phòng tránh
Việc phòng chống kiểu tấn công chiếm hữu phiên làm việc không thuộc trách nhiệm của trình
chủ Web server, vì trình chủ chỉ cung cấp API quản lý phiên làm việc cho ứng dụng. Vì thế, chỉ
ứng dụng mới cần có những biện pháp phòng chống lại kiểu tấn công này.
Chống việc đăng nhập với session ID có sẵn, ứng dụng phải hủy bỏ session ID được cung cấp bởi
trình duyệt của người dùng khi đăng nhập luôn tạo một session ID mới khi người dùng đăng nhập
thành công sẽ khiến cho hacker không phải là người dùng hợp lệ của hệ thống.
Giới hạn phạm vi ứng dụng của session ID như kết hợp session ID với địa chỉ của trình duyệt, kết
hợp session ID với chứng thực được mã hóa SSL của người dùng, xóa bỏ session khi người dùng
thoát khỏi hệ thống hay hết hiệu lực, thiệt lập thời gian hết hiệu lực cho session để tránh trường
hợp hacker có thể duy trì session và sử dụng nó lâu dài.
Người sử dụng phải dùng chế độ thoát khỏi hệ thống để xóa bỏ session hiện thoài và có thể
những session ID còn lưu lại trên hệ thống khi họ quên thoát ra ngoài những lần trước.
Không được chủ quan với thuật toán tạo session của ứng dụng là bảo mật, không ai có thể đoán
được. Với session ID quá ngắn, hacker có thể dùng kỹ thuật để vét cạn. Nhưng không vì thế mà
cho rằng ứng dụng sẽ bảo mật với session ID dài và phức tạp vì kích thước session ID dài và phức
tạp vì kích thước session ID sẽ là một vấn đề nếu thuật toán không tốt.
2.4 Từ chối dịch vụ (DOS)
2.4.1 Khái niệm tấn công kiểu DoS (Denial of Service)
Tấn công từ chối dịch vụ DoS là các cuộc tấn công trên hệ thống mạng nhằm ngăn cản những
truy xuất tới một dịch vụ. Tấn công DoS làm cho các dịch vụ mạng bị tê liệt, không còn khả năng
đáp ứng được yêu cầu bằng cách làm tràn ngập số lượng kết nối, quá tải server hoặc chương trình
chạy trên server, tiêu tốn tài nguyên của server, hoặc ngăn chặn người dùng hợp lệ truy nhập tới
dịch vụ mạng. Loại tấn công này ảnh hưởng đến nhiều hệ thống, rất dễ thực hiện và rát khó bảo vệ
hệ thống khỏi kiểu tấn công DoS.
Thông thường, kiểu tấn công DoS dựa trên giao thức (Ví dụ như tràn ngập ICMP với Smurf, Ping
of Death, khai thác điểm yếu của TCP trong hoạt động của giao thức và phân mảnh gói tin, hacker
có thể sử dụng bom email để gửi hàng loạt thông điệp email với mục đích tiêu thụ băng thông để
làm hao hụt tài nguyên hệ thống trên mail server). Hoặc có thể dùng phần mềm gửi hàng loạt yêu
cầu đến máy chủ khiến cho máy chủ không thể đáp ứng những yêu cầu chính đáng khác.
Những khả năng bị tấn công:
Tấn công trên Swap space: Hầu hết các hệ thống đều có vài trăm MB không gian chuyển đổi
(Swap space) để phục vụ những yêu cầu từ máy khách. Swap space thường dùng cho các
tiến trình con có thời gian ngắn, nên DoS có thể dựa trên phương thức làm tràn đầy Swap
space.
Tấn công trên Bandwidth: Phần băng thông dành cho mỗi hệ thống là giới hạn, vì thế nếu
hacker cùng lúc gửi nhiều yêu cầu đến hệ thống thì phần băng thông không đủ đáp ứng cho
một khối lượng lớn dữ liệu lớn đó dẫn đến hệ thống bị phá vỡ.
24
Tấn công vào RAM: Tấn công DoS chiếm một khoảng lớn bộ nhơ của Ram, cũng có thể có
thể xảy ra các vấn đề phá hủy hệ thống. Kiểu tấn công Buffer Overflow là một ví dụ cho cách
phá hủy này.
Tấn công vào Disks: Một kiểu tấn công cổ điển là làm đầy đĩa cứng. Đĩa cứng có thể bị tràn
và không thể sử dụng nữa.
2.4.2 Các kỹ thuật tấn công
a) Khái niệm TCP bắt tay ba chiều
Để nghiên cứu phương pháp tấn công DoS, trước tiên tìm hiểu về cơ chế làm việc “ TCP bắt tay
ba chiều”. Trong đó:
- Gói dữ liệu TCP với cờ SYN (synchoronize) dùng để bắt đầu 1 kết nối.
- ACK (acknowledgement) là sự công nhận.
Cách hoạt động của gói TCP:
Bước 1: Máy con gửi gói tin SYN yêu cầu kết nối.
Bước 2: Nếu máy chủ chấp nhận kết nối, máy chủ sẽ gửi gói tin SYN/ACK. Server bắt buộc
phải gửi thông báo lại bởi vì TCP là chuẩn tin cậy nên nếu máy con không nhận được thông
báothì sẽ nghĩ rằng packet đã bị lạc và gửi lại một packet mới.
Bước 3: Máy con gửi hổi đáp bằng gói tin ACK, báo cho máy chủ biết rằng máy con đã
nhận được SYN/ACK packet và lúc này kết nối đã được thiết lập.
b) Lợi dụng TCP thực hiện phương pháp SYN flood truyền thống
Bất cứ 1 gói tin SYN, máy chủ đều phải để 1 phần tài nguyên của hệ thống như bộ nhớ đệm để
nhận và truyền dữ liệu cho đường truyền đó. Tuy nhiên, tài nguyên của hệ thống là có hạn và
hacker sẽ tìm mọi cách để hệ thống quá giới hạn đó. Đây còn được gọi là half-open connection vì
máy khách mở kết nối giữa chừng.
Nếu máy chủ sau khi gửi trả một gói tin SYN/ACK để thông báo chấp nhận kết nối cho máy
yêu cầu nhưng nếu địa chỉ IP của máy yêu cầu này là giả mạo thì gói tin không thể đến được
đích, nên máy chủ vẫn phải dành tài nguyên cho yêu cầu đó. Sau một thời gian không nhận được
phản hồi từ máy khách, máy chủ lại tiếp tục gửi một gói tin SYN/ACK để xác nhận lần nữa. Và
cứ như vậy, kết nối vẫn tiếp tục mở. Nếu như hacker gửi nhiều gói tin SYN đến máy chủ khi máy
chủ không thể tiếp nhận thêm 1 kết nối nào nữa thì lúc này hệ thống sẽ quá hạn và bị phá vỡ.
c) Tấn công vào băng thông
Thường kiểu tấn công này được sử dụng khi đường truyền mạng của hacker thấp hơn so với
đường truyền của máy đích (kiểu tấn công vào băng thông lớn). Hacker xâm nhập vào hệ thống
máy tính, cài đặt các chương trình điều khiển từ xa, và sẽ kích hoạt đồng thời các chương trình
này vào cùng một thời điểm để đồng loạt tấn công vào một mục tiêu khiến cho đường truyền của
hệ thống đích không còn khả năng đáp ứng, không còn khả năng nhận một gói tin nào nữa.
Phương pháp tấn công kiểu từ chối dịch vụ này gọi là DdoS (từ chối dịch vụ phân tán),cùng
một lúc nhiều máy sẽ được phát động để gửi gói tin đến máy đích làm cho máy đích quá
hạn và bị loại khỏi mạng Internet
25