Một số phương thức tấn công ứng dụng web

lohongmailpoet

Đối với các cơ quan, tổ chức website là kênh cung cấp thông tin hiệu quả và nhanh chóng nhất. Cũng chính đặc điểm này, các website thường xuyên là mục tiêu tấn công của tin tặc để khai thác đánh cắp các thông tin liên quan bên trong. Một trong những phương thức tấn công phổ biến là khai thác các lỗi bảo mật liên quan đến ứng dụng web.

Các lỗi bảo mật ứng dụng web là nguyên nhân chủ yếu gây ra các lỗi đối với website đang vận hành. Sau khi xác định các lỗi này, tin tặc sẽ sử dụng các kỹ thuật khác nhau để tiến hành khai thác hệ thống đích. Một số kỹ thuật thường được sử dụng: Buffer Overflows, SQL Injection, and Cross-site Scripting…Việc phân loại các kiểu tấn công thành các nhóm khác nhau sẽ giúp cho người quản trị dễ dàng xác định các nguy cơ cũng như biên pháp đối phó hơn.

Tấn công Bruteforce

Bruteforce là cách thức thử tất cả các khả năng có thể có để đoán các thông tin cá nhân đăng nhập: tài khoản, mật khẩu, số thẻ tín dụng…Nhiều hệ thống cho phép sử dụng mật khẩu hoặc thuật toán mã hóa yếu sẽ tạo điều kiện cho tin tặc sử dụng phương pháp tấn công này để đoán tài khoản và mật khẩu đăng nhập. Sau đó sử dụng các thông tin này để đăng nhập truy cập vào tài nguyên hệ thống.

Biện pháp đối phó:

  • Tăng cường độ mạnh cho mật khẩu (Độ dài ít nhất 6 ký tự, không chứa chuỗi username, chứa ít nhất 1 ký tự số, chứa ít nhất 1 ký tự đặc biệt, không cho phép thay đổi mật khẩu trùng lặp đã sử dụng, quản lý, điều khiển thông báo lỗi)
  • Sử dụng cơ chế chứng thực (Basic hoặc Digest Authentication)
  • Hạn chế số lần đăng nhập hoặc khóa tài khoản đăng nhập sai
  • Sử dụng module Mod_Dosevasive để xác định dấu hiệu của kiểu tấn công này.

Lỗi chứng thực yếu (Insufficient Authentication)

Lỗi chứng thực yếu xuất hiện khi một website cho phép truy cập các nội dung, tài nguyên nhạy cảm mà không có đủ quyền. Các trang quản trị là một ví dụ dễ thấy nhất. Nếu không có cơ chế phân quyền hợp lý thư mục cũng như tài khoản đăng nhập trang quản trị này. Tin tặc hoàn toàn có khả năng vượt qua được cơ chế đăng nhập để chiếm quyền điều khiển trang này.

Biện pháp đối phó:

  • Thiết lập cơ chế điều khiển truy cập thông quan .htaccess hoặc tập tin cấu hình httpd.conf

Ví dụ: Điều khiển truy cập thông qua httpd.conf

<LocationMatch “^/admin/”>
SSLRequireSSL
AuthType Digest
AuthName “Admin Area”
AuthDigestfile /usr/local/apache/conf/passwd_digest
Require user admin
</LocationMatch>

Dự đoán, chèn phiên (Credentical/Session Prediction)

Dự đoán, chèn phiênlà một phương thức chiếm phiên (hijacking). Thông thường, khi một tài khoản thực hiện quá trình chứng thực đối với server (tài khoản/mật khẩu). Dựa vào các thông tin này, server sẽ tạo một giá trị session ID duy nhất để cho phép và duy trì kết nối. Nếu đoán được session ID kế tiếp thì tin tặc có khả năng chiếm phiên đăng nhập của người dùng hợp lệ khác.

Biện pháp đối phó:

  • Sử dụng SSL (mod_ssl) trong quá trình chứng thực để chống lại việc nghe lén dữ liệu quan trọng.
  • Sử dụng cơ chế tạo session ID ngẫu nhiên, thuật toán mã hóa mạnh.
  • Session ID phải đủ lớn để làm khó quá trình tấn công brute-fore.
  • Giới hạn thời gian tồn tại của session ID.

XSS – Cross-Site Scripting

XSS là một trong những kĩ thuật tấn công phổ biến nhất hiện nay, đồng thời nó cũng là một trong những vấn đề bảo mật quan trọng đối với các nhà phát triển web và cả những người sử dụng web. Bất kì một website nào cho phép người sử dụng đăng thông tin mà không có sự kiểm tra chặt chẽ các đoạn mã nguy hiểm thì đều có thể tiềm ẩn các lỗi XSS.

Tin tặc tấn công bằng cách chèn vào các website động (ASP, PHP, CGI, JSP …) những thẻ HTML hay những đoạn mã script nguy hiểm có thể gây nguy hại cho những người sử dụng khác. Trong đó, những đoạn mã nguy hiểm đựơc chèn vào hầu hết được viết bằng các Client-Site Script như JavaScript, JScript, DHTML và cũng có thể là cả các thẻ HTML

Ví dụ: Sử dụng XSS chèn mã java script trực tiếp trên URL

http://www.demo.com/search.cgi?query=<script>alert(‘XSS was found !’);</script>

Khi wesite http://www.demo.combị lỗi XSS trình duyệt sẽ hiện lên một thông báo “XSS was found !”.

Nếu như các kĩ thuật tấn công khác có thể làm thay đổi được dữ liệu nguồn của web server (mã nguồn, cấu trúc, cơ sở dữ liệu) thì XSS chỉ gây tổn hại đối với website ở phía client mà nạn nhân trực tiếp là những người khách duyệt site đó

Biện pháp đối phó:

  • Chỉ cho phép những dữ liệu hợp lệ, từ chối nhận các dữ liệu sai, thường xuyên kiểm tra và lọc dữ liệu đầu vào.
  • Sử dụng Mod_Security để lọc một số dữ liệu tấn công XSS.
SecFilterSelective THE_REQUEST “<[^>]*meta*\”?[^>]*>”
SecFilterSelective THE_REQUEST “<[^>]*style*\”?[^>]*>”
SecFilterSelective THE_REQUEST “<[^>]*script*\”?[^>]*>”
SecFilterSelective THE_REQUEST “<[^>]*iframe*\”?[^>]*>”
SecFilterSelective THE_REQUEST “<[^>]*object*\”?[^>]*>”
SecFilterSelective THE_REQUEST “<[^>]*img*\”?[^>]*>”
SecFilterSelective THE_REQUEST “<[^>]*applet*\”?[^>]*>”
SecFilterSelective THE_REQUEST “<[^>]*form*\”?[^>]*>”

SQL injection

Tấn công SQL Injection được thực thi bằng cách chèn các câu truy vấn SQL vào dữ liệu tương tác giữa máy khách và trình ứng dụng. Quá trình khai thác lỗi SQL Injection thành công có thể giúp tin tặc lấy được các dữ liệu nhạy cảm trong cở sở dữ liệu, thay đổi cơ sở dữ liệu (Insert/Update/Delete), thực thi các hành động với quyền của người quản trị và cao hơn có thể điều khiển được hệ điều hành máy chủ

Ví dụ: Xét đoạn mã truy vấn SQL sau:

SELECT * FROM Users WHERE Username=’$username’ AND Password=’$password’

Đây là một câu truy vấn thường hay được dùng trong các trình ứng dụng nhằm xác thực người dùng. Nếu câu truy vấn trả về một giá trị nói rằng thông tin về người dùng đang đăng nhập là đúng và được lưu trong cơ sở dữ liệu, thì người dùng được phép đăng nhập vào hệ thống, ngược lại thì không đăng nhập được. Người dùng nhập thông tin đó vào các trường gọi là web form.

Thay vì nhập đúng tên đăng nhập và mật khẩu, thử nhập vào các ký tự đặc biệt như:

$username = 1′ or ‘1’ = ‘1
$password = 1′ or ‘1’ = ‘1

Khi đó câu truy vấn sẽ là:

SELECT * FROM Users WHERE Username=’1′ OR ‘1’ = ‘1’ AND Password=’1′ OR ‘1’ = ‘1’

Giả sử rằng giá trị của các tham số được gửi tới máy chủ bằng phương thức GET, thì có một câu lệnh khai thác lỗi như sau:

http://www.example.com/index.php?username=1’%20or%20’1’%20=%20’1&password=1’%20or%20’1’%20=%20’1

Khi đó, truy vấn sẽ trả về một giá trị (hay một loạt các giá trị) vì điều kiện trên luôn luôn đúng (OR 1=1). Trong trường hợp này tin tặc sẽ đăng nhập được vào hệ thống mà không cần biết tên đăng nhập và mật khẩu. Trường hợp này sẽ rất nguy hiểm nếu dòng đầu tiên trong bảng “Users” là tài khoản của người quản trị (admin) vì tin tặc sẽ đăng nhập vào hệ thống bằng tài khoản đầu tiên trong bảng này.

Biện pháp đối phó:

  • Kiểm tra dữ liệu đầu vào.
  • Sử dụng Mod_Security để lọc một số dữ liệu tấn công SQL injection.
SecFilter “delete[[:space:]]+from”
SecFilter “insert[[:space:]]+into”
SecFilter “select.+from”
SecFilter xp_cmdshell
SecFilter xp_regread
SecFilter xp_regwrite
SecFilter xp_regdeletekeySecFilter xp_enumdsn
SecFilter xp_filelist
SecFilter xp_availablemedia

Liệt kê thư mục (Directory indexing)

Đây là chức năng web server cho phép liệt kê tất cả nội dung bên trong một thư mục mà không có tập tin cơ sở (index.html/home.html/ default.html). Trong các thư mục đó có thể chứa nội dung quan trọng: tập tin cơ sở dữ liệu dự phòng, tập tin cấu hình, tập tin lưu trữ tạm thời, các kịch bản…

Biện pháp đối phó:

  • Thiết lập quyền hợp lý trên các thư mục chứa nội dung web.
  • Sử dụng mod_security để lọc dữ liệu đầu vào
SecFilterScanOutput On
SecFilterSelective OUTPUT “\<title\>Index of /”

Path Traversal

Path Traversal hay còn được biết với một số tên khác như “dot-dot-slash”, “directory traversal”,”directory clumbing” và “backtracking” là hình thức tấn công truy cập đến những file và thư mục mà được lưu bên ngoài thư mục webroot.

Hình thức tấn công này không cần sử dụng một công cụ nào mà chỉ đơn thuần thao tác các biến với ../ (dot-dot-slash) để truy cập đến file, thư mục, bao gồm cả source code, những file hệ thống, …

Ví dụ:

GET /../../../../../some/file HTTP/1.0
GET /..%255c..%255c..%255csome/file HTTP/1.0
GET /..%u2216..%u2216some/file HTTP/1.0

Biện pháp đối phó:

  • Sử dụng mod_security để lọc dữ liệu đầu vào
SecFilterSelective SCRIPT_FILENAME “/scripts/foo.cgi” chain
SecFilterSelective ARG_home “!^[a-zA-Z].{15,}\.txt”

Từ chối dịch vụ (DoS)

DoS là kỹ thuật tấn công nhằm không cho phép các truy cập hợp lệ truy cập tới server. Kỹ thuật tấn công này thường xảy ra tại lớp mạngvà lớp ứng dụng.

Các hệ thống đích có thể bị tấn công DoS:

  • Người dùng riêng lẻ: quá trình đăng nhập lặp đi lặp lại với tài khoản hợp lệ nhưng mật khẩu không đúng. Sau nhiều lần đăng nhập sai, hệ thống sẽ khóa tài khoản hợp lệ này, dẫn đến người dùng hợp lệ sẽ không thể đăng nhập được.
  • Máy chủ cơ sở dữ liệu: Sử dụng kỹ thuật chèn câu lệnh truy vấn SQL chỉnh sửa cơ sở dữ liệu, vì thế hệ thống sẽ không thể phục vụ các truy cập từ client.
  • Máy chủ phục vụ web: Sử dụng kỹ thuật tấn công tràn bộ đệm ( Buffer Overflow) để gới các gói truy vấn và làm đổ vỡ các tiến trình tại phía máy chủ phục vụ web, dẫn đến hệ thống máy chủ webserver sẽ không có khả năng phục vụ các truy cập hợp lý.

Biện pháp đối phó:

  • Sử dụng module Mod_Dosevasive
  • Thiết lập các thông tin hợp lý cho máy chủ phục vụ web: KeepAlives, KeepAliveTimeouts, MaxKeepAliveRequests…

Theo Securitydaily.net (rất cám ơn bài viết rất hữu ích này)

Comments

comments