HỌC VIỆN CÔNG NGHỆ BƢU CHÍNH VIỄN THÔNG ---------------------------------------
NGUYỄN TRỌNG NGHĨA
XÂY DỰNG CÔNG CỤ NHẬN DẠNG TẤN CÔNG ỨNG DỤNG WORDPRESS DỰA TRÊN SỰ BẤT THƢỜNG
LUẬN VĂN THẠC SĨ KỸ THUẬT (Theo định hướng ứng dụng)
THÀNH PHỐ HỒ CHÍ MINH – 2017
HỌC VIỆN CÔNG NGHỆ BƢU CHÍNH VIỄN THÔNG ---------------------------------------
NGUYỄN TRỌNG NGHĨA
XÂY DỰNG CÔNG CỤ NHẬN DẠNG TẤN CÔNG ỨNG DỤNG WORDPRESS DỰA TRÊN SỰ BẤT THƢỜNG Chuyên ngành : HỆ THỐNG THÔNG TIN Mã số: 60.48.01.04
LUẬN VĂN THẠC SĨ KỸ THUẬT (Theo định hướng ứng dụng) NGƢỜI HƢỚNG DẪN KHOA HỌC: PGS.TS. TRẦN VĂN HOÀI
THÀNH PHỐ HỒ CHÍ MINH – 2017
i
LỜI CAM ĐOAN Tôi cam đoan luận văn là công trình nghiên cứu của bản thân. Các số liệu, kết quả nêu trong luận văn này là trung thực và chƣa từng đƣợc ai công bố trong bất kỳ luận văn nào trƣớc đây.
TP. HCM, ngày 22 tháng 5 năm 2017 Học viên thực hiện luận văn
Nguyễn Trọng Nghĩa
ii
LỜI CẢM ƠN Trƣớc tiên, tôi xin bày tỏ lòng biết ơn chân thành đến Thầy PGS.TS Trần Văn Hoài đã tận tình chỉ dạy, hƣớng dẫn và tạo mọi điều kiện thuận lợi để tôi hoàn thành tốt luận văn này. Đồng thời tôi cũng xin gởi lời cảm ơn đến anh Huỳnh Hoàng Tân đã luôn nhiệt tình chỉ dẫn, bên cạnh tôi trong suốt thời gian tôi thực hiện luận văn. Tôi cũng xin gửi lời cảm ơn đến Quý Thầy Cô tại Học Viện Công Nghệ Bƣu Chính Viễn Thông Cơ sở TP. Hồ Chí Minh đã tận tình giảng dạy và trang bị cho tôi những kiến thức quý báu trong quá trình tham gia học tập tại Trƣờng. Tôi chân thành biết ơn sâu sắc đến gia đình và bạn bè đã động viên và giúp đỡ tôi hoàn thành khóa học này.
TP. HCM, ngày 22 tháng 5 năm 2017 Học viên thực hiện luận văn
Nguyễn Trọng Nghĩa
iii
MỤC LỤC Lời cam đoan ................................................................................................................i Lời cảm ơn ................................................................................................................. ii Mục lục ...................................................................................................................... iii Danh mục các thuật ngữ, chữ viết tắt ..........................................................................v Danh sách bảng ..........................................................................................................vi Danh sách hình vẽ .................................................................................................... vii Mở đầu ........................................................................................................................1 CHƢƠNG 1 – TỔNG QUAN VỀ BẢO MẬT VÀ CÁC GIẢI PHÁP NHẬN DẠNG TẤN CÔNG ỨNG DỤNG WEB ...................................................................3 1.1. Những vấn đề bảo mật Website và CMS ......................................................3 1.1.1. Khái niệm về Website và CMS ...............................................................3 1.1.2. Kiến trúc của Wordpress .........................................................................5 1.1.3. Mô hình hoạt động của ứng dụng web ....................................................8 1.1.4. Vấn đề bảo mật Website và CMS ............................................................9 1.2. Phƣơng pháp bảo mật quan trọng ................................................................10 1.2.1. Danh sách rủi ro bảo mật cho ứng dụng Wordpress OWASP ...............14 1.2.2. Các phƣơng pháp nhận dạng tấn công ứng dụng web ...........................21 1.3. Học máy .......................................................................................................23 1.3.1. Tổng quan ..............................................................................................23 1.3.2. Các ứng dụng của học máy ....................................................................25 CHƢƠNG 2 – CÁC MÔ HÌNH NHẬN DẠNG TẤN CÔNG ỨNG DỤNG WORDPRESS DỰA TRÊN SỰ BẤT THƢỜNG ....................................................26 2.1. Định nghĩa tổng quát về sự bất thƣờng .......................................................26
2.2. Các mô hình nhận dạng ...............................................................................29 2.2.1. Cấu trúc yêu cầu (Request structure) .....................................................29 2.2.2. Các giá trị yêu cầu (Request values) .....................................................30 2.2.3. Phản hồi (Response) ..............................................................................32 2.2.4. Cấu trúc phiên (Session structure) .........................................................33 2.2.5. Hồ sơ ngƣời dùng (User profile) ...........................................................35 2.2.6. Tổng quan hệ thống (System overview) ................................................36 CHƢƠNG 3 – PHƢƠNG PHÁP HỌC MÁY TRONG NHẬN DẠNG TẤN CÔNG ỨNG DỤNG WORDPRESS DỰA TRÊN SỰ BẤT THƢỜNG .............................38
iv
3.1. Nhận xét và đánh giá mô hình .....................................................................38 3.2. Đề xuất mô hình nhận dạng .........................................................................43 3.3. Phƣơng pháp tạo tập dữ liệu huấn luyện .....................................................44 3.4. Mô hình và thuật toán kết hợp nhận dạng ...................................................46 3.5. Mô hình nhận dạng ......................................................................................51 CHƢƠNG 4 – CÀI ĐẶT, THỰC NGHIỆM VÀ ĐÁNH GIÁ .................................55 4.1. Thực nghiệm ................................................................................................57 4.2. Kết quả thực nghiệm và đánh giá ................................................................60 KẾT LUẬN VÀ HƢỚNG PHÁT TRIỂN ................................................................64 TÀI LIỆU THAM KHẢO .........................................................................................65 PHỤ LỤC I. DANH SÁCH MÃ TRẠNG THÁI HTTP ..........................................67
v
DANH MỤC CÁC THUẬT NGỮ, CHỮ VIẾT TẮT Viết tắt
Tiếng Anh
Tiếng Việt
CMS
Content Management System
Hệ quản trị nội dung
CSRF
Cross-Site Request Forgery
Giả mạo yêu cầu
DDoS
Distributed Denial of Service
Tấn công từ chối dịch vụ phân tán
HTML
Hyper Text Markup Language
Ngôn ngữ đánh dấu siêu văn bản
HTTP
Hypertext Transfer Protocol
Giao thức truyền tải siêu văn bản
ICD
Idealized Character Distribution
Sự phân bố ký tự lý tƣởng
IDS
Intrusion Detection System
Hệ thống phát hiện xâm nhập
NFA
Non-deterministic finite automaton Ôtômát hữu hạn không đơn định
NIDS
Network-based Intrusion Detection Hệ thống phát hiện xâm nhập trên System mạng
OWASP
Open Web Application Security
Project
Dự án mở về bảo mật ứng dụng web
PHP
Hypertext Preprocessor
Ngôn ngữ lập trình PHP
RBID
Rule-based Intrusion Detection
Phát hiện xâm nhập dựa vào các luật
SQL
Structured Query Language
Ngôn ngữ truy vấn cấu trúc
SSL
Secure Sockets Layer
Giao thức bảo mật SSL
TCP
Transmission Control Protocol
Giao thức điều khiển truyền vận
URL
Uniform Resource Locator
Định vị Tài nguyên thống nhất
URI
Uniform Resource Identifier
Định dạng tài nguyên thống nhất
XML
eXtensible Markup Language
Ngôn ngữ đánh dấu mở rộng
XSS
Cross-Site Scripting
Thực thi mã lệnh xấu
vi
DANH SÁCH BẢNG Bảng 3.1. Đánh giá mô hình cấu trúc yêu cầu
38
Bảng 3.2. Đánh giá mô hình các giá trị của yêu cầu
39
Bảng 3.3. Đánh giá mô hình phản hồi
40
Bảng 3.4. Đánh giá mô hình cấu trúc phiên
41
Bảng 3.5. Đánh giá mô hình hồ sơ ngƣời dùng
42
Bảng 3.6. Đánh giá mô hình tổng quan hệ thống
43
Bảng 4.1. Thống kê mẫu dữ liệu trong tập dữ liệu kiểm tra
58
Bảng 4.2. Kết quả dự báo trong trƣờng hợp 1
60
Bảng 4.3. Kết quả dự báo trong trƣờng hợp 2
62
vii
DANH SÁCH HÌNH VẼ Hình 1.1. Quy trình xử lý dữ liệu Wordpress
4
Hình 1.2. Kiến trúc tổng quan của Wordpress Hình 1.3. Chi tiết nạp môi trƣờng trong Wordpress
5 6
Hình 1.4. Các giá trị cần có để kết nối cơ sở dữ liệu của Wordpress
6
Hình 1.5. Cấu trúc tổ chức thƣ mục mặc định của Wordpress Hình 1.6. Cấu trúc tổ chức thƣ mục hiện đại của Wordpress
7 7
Hình 1.7. Mô hình hoạt động của ứng dụng web Hình 1.8. Các mã salts và khóa bảo mật trong Wordpress Hình 1.9. Phƣơng pháp phát hiện tấn công ứng dụng web
9 13 22
Hình 2.1. Hình minh họa sự bất thƣờng trong dữ liệu Hình 2.2. Hình minh họa các kỹ thuật cơ bản trong nhận dạng bất thƣờng Hình 2.3. Phân loại sự bất thƣờng Hình 2.4. Hình mô tả phân loại bất thƣờng Hình 3.1. Thông tin chi tiết một lỗ hổng đối với My Gaming Ladder Combo
26 28 28 29
System 7.5 ngày 07/4/2017 bị tấn công SQL Injection
44
Hình 3.2. Ví dụ một phần tử trong nhật ký truy cập máy chủ web Hình 3.3. Mô hình chức năng nhận dạng bất thƣờng Hình 3.4. Một phần dữ liệu đƣợc trích xuất trong giai đoạn tiền xử lý
Hình 3.5. Một phần dữ liệu mô tả kết quả dựng mô hình Hình 3.6. Mô hình chi tiết giai đoạn dự báo lớp Hình 4.1. Cách cài plugin từ thƣ viện trên Dashboard Hình 4.2. Cách cài plugin từ file .zip của plugin Hình 4.3. Cách kích hoạt plugin khi đã copy Hình 4.4. Tiền xử lý dữ liệu huấn luyện
46 51 53 53 54 55 56 57 58
Hình 4.5. Tiền xử lý dữ liệu kiểm tra Hình 4.6. Sử dụng dữ liệu huấn luyện để dựng mô hình Hình 4.7. Sử dụng mô hình để dự báo lớp cho dữ liệu kiểm tra Hình 4.8. Biểu đồ tỉ lệ dự báo từng loại tấn công trƣờng hợp 1
59 59 60 61
Hình 4.9. Biểu đồ tỉ lệ dự báo từng loại tấn công trƣờng hợp 2
63
1
MỞ ĐẦU CMS (Content Management System) hay còn gọi là hệ thống quản lý nội dung đƣợc sử dụng nhằm mục đích giúp ngƣời quản trị trang web dễ dàng quản lý, chỉnh sửa nội dung. Nội dung có thể là tin tức điện tử, báo chí hay các media hình ảnh, video, ... Nó giúp tiết kiệm thời gian quản lý, chi phí vận hành và bảo trì nên hiện nay đƣợc sử dụng rất phổ biến, bên cạnh đó còn tiết kiệm đƣợc chi phí xây dựng trang web. Trong những năm gần đây, các trang web đƣợc xây dựng dựa trên nền tảng Wordpress ngày càng chiếm ƣu thế. Hệ thống CMS của Wordpress đƣợc sử dụng rất phổ biến và chiếm thị phần cao nhất so với các hệ thống khác 59,1%, trong khi Joomla chiếm 6,9%, Drupal chiếm 4,7%, Magento chiếm 2,5% và Blogrer chiếm 2,2% [15] theo số liệu khảo sát từ đầu tháng 5 năm 2017 của w3techs, một trang web chuyên cung cấp các nguồn thông tin đáng tin cậy và phổ biến nhất về sử dụng công nghệ web. Hằng ngày có hơn 600 site Wordpress đƣợc tạo ra và trên thực tế có hơn 27% các trang web trên thế giới đang sử dụng nền tảng của Wordpress. Tuy nhiên, bên cạnh sự phát triển mạnh mẻ Wordpress luôn tìm ẩn các lỗ hổng bảo mật bên trong hệ thống và các ứng dụng đƣợc cài đặt. Những năm gần đây, các ứng dụng nói chung và các ứng dụng web nói riêng đang là mục tiêu tấn công phổ biến [5] của bọn tin tặc nhằm khai thác các lỗ hổng. Qua tìm hiểu và nghiên cứu danh sách các lỗ hổng ứng dụng đã bị khai thác tại trang web nổi tiếng và cơ sở dữ liệu các lỗ hổng đã đƣợc công bố tại [16] dành riêng cho Wordpress có thể thấy kẻ tấn công đang có xu hƣớng tập trung tấn công vào các ứng dụng của Wordpress nhƣ nhằm vào các plugin đƣợc viết với mã không an toàn về bảo mật. Các hình thức tấn công chủ yếu tập trung vào các kiểu tấn công phổ biến nằm trong danh sách OWASP Top 10 [11] nhƣ: chèn mã, thực thi mã lệnh xấu, phá vỡ xác thực và quản lý phiên làm việc… Do đó sớm phát hiện các
dấu hiệu tấn công từ bên ngoài vào hệ thống để đƣa ra chính sách cách ly hoặc theo dõi tự động là một nhu cầu cấp thiết. Chính vì vậy, tôi chọn đề tài “Xây dựng công
2
cụ nhận dạng tấn công ứng dụng Wordpress dựa trên sự bất thƣờng” để làm đề tài luận văn. Qua tìm hiểu thông tin trên các trang diễn đàn, trang chuyên bảo mật Wordpress trong nƣớc dễ dàng nhận thấy đội ngũ phát triển ứng dụng và các chuyên gia bảo mật chúng ta ít tham gia và xây dựng các plugin bảo mật xuất bản lên kho plugin chính thức của Wordpress tại Phần lớn chỉ nghiên cứu các giải pháp sẵn có và triển khai áp dụng vào hiện trạng đơn vị, chƣa tập trung nghiên cứu các giải pháp mới để phát hiện và ngăn chặn các tấn công mới. Để bảo vệ các ứng dụng Wordpress cần xây dựng một lớp bảo vệ có khả năng tùy biến cao, dễ dàng cài đặt và cập nhật cơ chế phát hiện kịp thời nhằm sớm nhận biết các dấu hiệu bất thƣờng của các tấn công mới. Đề tài này tập trung nghiên cứu và xây dựng công cụ nhận dạng các tấn công phổ biến từ bên ngoài vào hệ thống Wordpress dựa trên các mô hình học các hành vi bình thƣờng, từ đó đƣa ra các thông báo, chính sách ngăn chặn hoặc cách ly theo dõi tự động trên hệ thống. Phạm vi luận văn nghiên cứu các dấu hiệu bất thƣờng của các truy vấn từ bên ngoài về dữ liệu học dựa trên phân tích các yêu cầu HTTP đƣợc gởi tới các ứng dụng Wordpress. Ý nghĩa khoa học: kết quả nghiên cứu có thể dùng làm báo cáo tổng quan về bảo mật, tài liệu tham khảo về các giải pháp nhận dạng tấn công, tài liệu kỹ thuật cho việc xây dựng hệ thống nhận dạng bất thƣờng, phát hiện xâm nhập các ứng dụng Wordpress. Ý nghĩa thực tiễn của đề tài: sản phẩm của đề tài đƣợc triển khai thử nghiệm trên nền tảng Wordpress. Sản phẩm đạt hiệu quả cao sẽ là cơ sở để xây dựng hệ
thống an toàn an ninh thông tin cho các Website chạy trên nền tảng Wordpress.
3
CHƢƠNG 1 – TỔNG QUAN VỀ BẢO MẬT VÀ CÁC GIẢI PHÁP NHẬN DẠNG TẤN CÔNG ỨNG DỤNG WEB Chƣơng này, trình bày tổng quan về vấn đề bảo mật Website, hệ thống quản lý nội dung CMS, kiến trúc Wordpress, mô hình hoạt động của ứng dụng web, phƣơng pháp bảo mật quan trọng, tổng quan học máy và các ứng dụng của học máy.
1.1. Những vấn đề bảo mật Website và CMS 1.1.1. Khái niệm về Website và CMS Website là một “trang web” trên mạng Internet, là nơi giới thiệu những thông tin, hình ảnh về một tổ chức, đơn vị, doanh nghiệp… và sản phẩm, dịch vụ của họ để khách hàng (ngƣời dùng) có thể truy cập ở bất kỳ nơi đâu, bất cứ lúc nào khi đƣợc kết nối Internet. Website là tập hợp nhiều trang [web page]. Khi 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 sau: Tên miền (domain – là địa chỉ Website để truy cập từ trình duyệt). Nơi lƣu trữ Website (hosting – là nơi chứa nội dung hay dữ liệu Website). Nội dung các trang thông tin [web page]. Trong khi đó, CMS (Content Management System) là hệ thống quản trị nội dung nhằm mục đích giúp ngƣời quản trị dễ dàng quản lý, chỉnh sửa nội dung. Nó cung cấp cho chúng ta các tính năng nhƣ hệ thống quản lý media, hình ảnh, trình soạn thảo văn bản và điều đáng nói nhất là khả năng tùy biến giao diện phải cao [17]. Có rất nhiều CMS trên thế giới, nhƣng thông dụng nhất hiện nay vẫn là Wordpress. Wordpress là một phần mềm nguồn mở (Open Source Software) đƣợc viết bằng ngôn ngữ lập trình PHP (Hypertext Preprocessor) và sử dụng hệ quản trị cơ sở dữ liệu MySQL. Wordpress đƣợc ra mắt lần đầu tiên vào ngày 27/5/2003 bởi
tác giả Matt Mullenweg và Mike Little. Hiện nay Wordpress đƣợc sở hữu và phát triển bởi công ty Automattic có trụ sở tại San Francisco, California thuộc hợp chủng quốc Hoa Kỳ.
4
Wordpress đƣợc xem nhƣ là một hệ quản trị nội dung vƣợt trội để hỗ trợ ngƣời dùng tạo ra nhiều thể loại Website khác nhau nhƣ blog, Website tin tức/tạp chí, giới thiệu doanh nghiệp, bán hàng – thƣơng mại điện tử, thậm chí với các loại Website có độ phức tạp cao nhƣ đặt phòng khách sạn, thuê xe, đăng dự án bất động sản,…Hầu nhƣ mọi hình thức Website với quy mô vừa và nhỏ đều có thể triển khai trên nền tảng Wordpress. Nhƣng không có nghĩa là Wordpress chỉ thích hợp với các dự án nhỏ, mà hiện nay có tới khoảng 27% Website trong danh sách 100 Website lớn nhất thế giới sử dụng mã nguồn Wordpress. Ví dụ nhƣ trang tạp chí TechCrunch, Mashable, CNN, BBC America, Variety, Sony Music, MTV News, Bata, Quartz. Ở Việt Nam hiện nay Wordpress đang chiếm ƣu thế nhất bởi tính dễ sử dụng, dễ xây dựng và nâng cấp thêm các chức năng mới thông qua một thành phần gọi là plugin. Plugin là một trình cắm thêm vào Website để bổ sung các chức năng. Plugin đơn giản là những plugin không cần tƣơng tác với cơ sở dữ liệu, nhƣ plugin tạo ra các icons social, chèn link để truy cập tới facebook đƣợc chỉ định. Ngƣợc lại những plugin phức tạp có tƣơng tác với cơ sở dữ liệu, hỗ trợ tạo ra các trang shopping, social network,…Hình 1.1 cho thấy vị trí plugin đƣợc nạp trong quá trình xử lý dữ liệu của Wordpress. Wordpress URL
wp-config Loaded
Functions Loaded
Translations Loaded
Pluggables Loaded
Plugins Loaded
Theme Loaded
Page Content Hình 1.1: Quy trình xử lý dữ liệu Wordpress
Nhìn vào sơ đồ trên, đầu tiên khi nhập địa chỉ Website đƣợc xây dựng bằng mã nguồn Wordpress thì hệ thống sẽ nạp các cấu hình nằm trong file wpconfig.php, tiếp đến nạp tiếp các cấu hình nằm trong cơ sở dữ liệu. Nạp xong 2
5
phần này sẽ gọi các hàm xử lý chính trong lõi Wordpress. Nạp tiếp toàn bộ plugin vào hệ thống. Ở bƣớc này các plugin vẫn chƣa hoạt động. Plugin chỉ hoạt động khi hệ thống Wordpress gọi đến action hook (action hook cho phép kích hoạt các mã plugin bổ sung tại các vị trí đƣợc chỉ định) hoặc các filter hook (filter hook có nhiệm vụ thay đổi nội dung của các bài viết trƣớc khi lƣu vào database). Sau cùng nạp các phƣơng thức chính nằm trong file pluggable.php, phần định dạng ngôn ngữ, themes và hiển thị tất cả nội dung thông qua Page content.
1.1.2. Kiến trúc của Wordpress Wordpress đƣợc xây dựng dựa vào kiến trúc nhƣ hình 1.2 sau:
Hình 1.2: Kiến trúc tổng quan của Wordpress
(Nguồn: />
6
Không nhƣ kiến trúc của các nền tảng web khác, Wordpress xử lý các chức năng độc lập trên từng ứng dụng nhƣ: post.php, wp-login.php,...Ứng dụng index.php của Wordpress không thực hiện gì cả, chỉ nạp ứng dụng wp-blogheader.php lên để tạo môi trƣờng và giao diện chuẩn của Wordpress. Hình 1.3 cho thấy trình tự tạo môi trƣờng thông qua các hàm và lời gọi các ứng dụng tƣơng ứng. /** * Loads the WordPress environment and template. * @package WordPress */ if ( !isset($wp_did_header) ) { $wp_did_header = true; // Load the WordPress library. require_once( dirname(__FILE__) . '/wp-load.php' ); // Set up the WordPress query. wp(); // Load the theme template. require_once( ABSPATH . WPINC . '/template-loader.php' ); }
Hình 1.3: Chi tiết nạp môi trƣờng trong Wordpress
Tiếp đến sẽ nạp lần lƣợt các chƣơng trình wp-config.php, wp-settings.php để thiết lập môi trƣờng làm việc của Wordpress. Ứng dụng wp-config.php là tập tin cấu hình để Wordpress có thể hoạt động và tƣơng tác với cơ sở dữ liệu. Bên trong tập tin này bao gồm các giá trị bắt buộc và quan trọng nhƣ hình 1.4 dƣới đây. /** The name of the database for WordPress */ define('DB_NAME', 'wp'); // Thông tin cơ sở dữ liệu
/** MySQL database username */ define('DB_USER', 'mysql'); // User để kết nối với cơ sở dữ liệu /** MySQL database password */ define('DB_PASSWORD', ' mysql '); // Mật khẩu của user /** MySQL hostname */ define('DB_HOST', 'localhost'); // Để mặc định là localhost
Hình 1.4: Các giá trị cần có để kết nối cơ sở dữ liệu của Wordpress
Cấu trúc thƣ mục và tập tin mặc định của Wordpress đƣợc tổ chức nhƣ hình 1.5 sau đây:
7
wp-admin wp-content mu-plugins plugins plugin-name plugin-file.php themes parent-theme child-theme uploads wp-includes wp-config.php Hình 1.5: Cấu trúc tổ chức thƣ mục mặc định của Wordpress
Cấu trúc mặc định này đƣợc định nghĩa trong quá trình nạp bởi các hàm:
Wp_initial_constants(), Wp_plugin_directory_constants(), Wp_temlating_constant(). Cấu trúc hiện đại đƣợc tổ chức nhƣ hình 1.6 dƣới đây: wp wp-admin wp-content (no constant! Just happens to be here) themes (register_theme_directory()) twentyfifteen wp-includes content (WP_CONTENT_DIR) mu-plugins plugins plugins-name plugins-file.php themes twentyfifteen-child uploads wp-config.php (dirname(ABSPATH).’/wp-config.php’) Hình 1.6: Cấu trúc tổ chức thƣ mục hiện đại của Wordpress
8
Cấu trúc trên cho thấy các thay đổi nhƣ: lõi Wordpress có thƣ mục riêng; thƣ mục nội dung đƣợc cấu hình cùng cấp thƣ mục lõi, không lồng bên trong lõi nhƣ cấu trúc chung; thƣ mục themes đƣợc cấu hình riêng nhƣ thƣ mục bổ sung riêng biệt; tập tin cấu hình đƣợc đặt ở mức trên thƣ mục chính. Việc tách thƣ mục lõi và thƣ mục nội dung ra có lợi ở chổ: -
Cấu trúc rõ ràng hơn;
-
Quản lý công việc đơn giản và thuận tiện hơn (ví dụ nhƣ sao lƣu);
-
Áp dụng các nguyên tắc phát triển hiện đại.
Nhìn chung hệ thống Wordpress gồm 3 thƣ mục chính: wp-admin, wpcontent, wp-includes và một số tập tin chạy ngoài thƣ mục gốc, mỗi loại tập tin (ứng dụng) sẽ phục vụ cho một mục đích cụ thể của Wordpress nhƣ đã đề cặp.
1.1.3. Mô hình hoạt động của ứng dụng web Ứng dụng web là một ứng dụng chủ/khách sử dụng giao thức HTTP để tƣơng tác với ngƣời dùng hay hệ thống khác thông qua Internet hay intranet. Ứng dụng web cho phép ngƣời dùng gửi và lấy dữ liệu đến/từ một cơ sở dữ liệu thông qua trình duyệt web. Dữ liệu sẽ đƣợc hiển thị trong trình duyệt ngƣời dùng, thông tin đƣợc tạo ra một cách tự động (theo một định dạng cụ thể nhƣ định dạng CSS trong HTML) bởi vì ứng dụng web phải thông qua một máy chủ web. Ứng dụng web thông thƣờng đƣợc cấu trúc nhƣ một ứng dụng ba lớp. Lớp đầu tiên thƣờng là một trình duyệt Web hoặc giao diện ngƣời dùng dạng Winform, lớp thứ hai là công cụ sử dụng công nghệ tạo ra các nội dung động nhƣ Java serverlets (JSP) hoặc Active Server Pages (ASP), lớp thứ ba là cơ sở dữ liệu chứa nội dụng (nhƣ tin tức, sản phẩm) và dữ liệu khách hàng (ví dụ nhƣ tên ngƣời dùng và mật khẩu, thông tin cá nhân,…). Hình 1.2 bên dƣới mô tả chi tiết mô hình ứng dụng web ba lớp.
9
Trình duyệt phía ngƣời dùng
Ngƣời dùng gửi các yêu cầu theo giao thức HTTP/ HTTPs đến máy chủ web
Hệ thống phía máy chủ
Internet Phản hồi từ máy chủ web (HTML, CSS, JavaScript, hình ảnh )
Máy chủ web Máy chủ ứng dụng web
Máy chủ cơ sở dữ liệu
Hình 1.7: Mô hình hoạt động của ứng dụng web (Nguồn: windowsecurity.com)
Các ứng dụng web truy cập vào các máy chủ cơ sở dữ liệu để thực hiện các nhiệm vụ nhƣ cập nhật và lấy các thông tin trong cơ sở dữ liệu. Sau đó các ứng dụng web chuyển thông tin đến trình duyệt web để cung cấp cho ngƣời dùng. Luồng thông tin giữa máy chủ web và ngƣời dùng (máy khách) là luồng thông tin hợp lệ. Nếu tin tặc tìm thấy lỗ hổng trong ứng dụng web thì hệ thống sẽ dễ bị khai thác. Các kỹ thuật tấn công thƣờng tập trung vào những lỗ hổng trong quá
trình tạo ứng dụng của nhà phát triển web hơn là tấn công trực tiếp vào hệ thống mạng, hệ điều hành. Tuy nhiên, tin tặc 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.4. Vấn đề bảo mật Website và CMS Có một mối tƣơng quan giữa sự an toàn và tính tiện dụng của bất kỳ hệ thống thông tin nào. Đôi khi việc làm hạn chế các tính năng trên Website lại khiến cho nó an toàn hơn, nhƣng lại khó sử dụng hơn. Và đôi khi cấu hình cho Website dễ sử dụng lại làm cho nó kém an toàn hơn và dễ bị tin tặc khai thác hơn. Có ba giai đoạn quan trọng để đảm bảo an toàn cho Website: bảo vệ, phát hiện và phục hồi. Nếu thực sự muốn an toàn, chúng ta cần phải thực hiện cả ba.
10
Bảo vê: Điều tiên quyết là cấu hình và phân quyền chặc chẻ trên Website để giữ cho nó an toàn. Cần đƣa ra chính sách “bế môn tỏa cảng”, giảm thiểu số port (cổng) đƣợc mở, tạo lớp bảo vệ và thực hiện bất cứ giải pháp nào có thể để ngăn chặn các cuộc tấn công trƣớc khi chúng bắt đầu. Đây là bƣớc đầu tiên tất yếu và không thể lơ là bỏ qua. Phát hiện: Điều quan trọng là cần biết khi nào một cuộc tấn công sẽ xảy ra. Các cuộc tấn công không phải lúc nào cũng diễn ra một cách rầm rộ và phô trƣơng, đôi khi chúng âm thầm lén lút và các “bots” (bots là một phần mềm thực hiện nhiệm vụ tự động trên Internet có tính lặp lại cao) sẽ cài đặt các đoạn mã ẩn vào Website. Các chƣơng trình độc hại và tin tặc có thể đã xâm nhập vào Website, và chúng ta sẽ không bao giờ biết nếu không sớm phát hiện ra chúng. Trong phạm vi luận văn, đây là giai đoạn tôi tập trung nghiên cứu và phát triển ứng dụng.
Phục hồi: Cuối cùng là cần có một kế hoạch để phục hồi lại Website và vận
hành lại sau khi nó đã bị đánh gục. Đây là một thực tế, cho dù các chính sách bảo vệ và phát hiện tốt nhất đƣợc áp dụng vẫn có thể thất bại và các nhà quản trị cần phải chuẩn bị sẵn sàng cho điều này. Một bản sao lƣu cẩn thận sẽ rất quan trọng đối với các nguyên nhân khác bên cạnh vấn đề an ninh.
1.2. Phƣơng pháp bảo mật quan trọng Dựa vào danh sách kiểm tra bảo mật của Wordpress [18], có nhiều vấn đề cần phải đặc biệt quan tâm để thực hiện các chính sách bảo mật phù hợp nhƣ: Phần mềm bị lỗi thời (Out-of-date): Đây là một trong những lỗ hổng bảo mật lớn nhất trong Wordpress. Có ba thành phần chính của Wordpress cần phải đƣợc xem xét khi triển khai thực hiện các giải pháp đó là: 1. Core (lõi): các tập tin đƣợc cài đặt mặc định cơ bản để cung cấp hầu hết các chức năng trên hệ thống 2. Plugins: mã đƣợc viết đặc biệt để cải thiện và mở rộng các chức năng cơ bản
11
3. Themes: lớp trình bày giao diện của Wordpress với một số chức năng mở rộng hạn chế Cập nhật: việc cập nhật có tầm quan trọng sống còn để giữ cho lõi Wordpress, plugins và các themes đƣợc an toàn. Một khi một bản cập nhật đƣợc phát hành, cần phải đƣợc áp dụng càng sớm càng tốt để hạn chế bất kỳ lỗ hổng nào. Vấn đề chức năng với bản cập nhật cũng cần đƣợc cân nhắc trƣớc khi áp dụng vì có thể một bản cập nhật sẽ phá vỡ một số chức năng hiện tại trên hệ thống. Vì vậy cần tạo một bản sao lƣu trƣớc khi cập nhật phần lõi. Cốt lõi Wordpress có ba loại khác nhau của các cập nhật: 1. Cập nhật phát triển cốt lõi, đƣợc gọi là "bleeding edge" 2. Cập nhật lõi nhỏ, chẳng hạn nhƣ bảo trì và bảo mật phát hành
3. Cập nhật phát hành lõi chính Bắt đầu với phiên bản 3.7, cập nhật nền tự động đã đƣợc tích hợp mặc định cho phần cập nhật lõi nhỏ. Hành động mặc định này có thể đƣợc ghi đè bằng cách chỉnh sửa nội dung file wp-config.php nhƣ sau: define ( 'WP_AUTO_UPDATE_CORE', true); Khi thiết lập đúng tất cả các bản cập nhật sẽ đƣợc kích hoạt. Các theme và plugin có thể đƣợc cập nhật tự động bằng cách sử dụng các bộ lọc (filter). Nơi tốt nhất để đặt bộ lọc là trong mục quản lý plugin. Wordpress khuyên không nên đặt bộ lọc trong file wp-config.php vì sẽ xung đột với các phần khác của mã nguồn. Để kích hoạt cập nhật tự động cho các theme và plugin, thêm đoạn mã sau: add_filter ( 'auto_update_plugin', '__return_true'); add_filter ( 'auto_update_theme', '__return_true'); Nên giữ các bản sao lƣu và di chuyển chúng đến một vị trí không thể tiếp cận từ bản cài đặt Wordpress.
12
Loại bỏ các plugin và các theme không sử dụng: nếu ai đó biết đƣợc vị trí của các plugin và theme càng làm tăng cơ hội trong việc xâm nhập một trƣờng hợp cụ thể. Nhìn vào danh sách CVE [25] cho Wordpress ta thấy trong những năm qua hầu hết các lỗi bảo mật đều ảnh hƣởng từ các plugin, theme chứ không phải ở lõi Wordpress. Khi sử dụng một plugin cần kiểm tra độ an toàn của nó trƣớc. Các điểm cần chú ý gồm: -
Plugin có đƣợc xuất bản trong kho plugin chính thức tại hay không?
-
Các đánh giá và bình luận của ngƣời dùng về plugin đó nhƣ thế nào?
-
Số phiên bản?
-
Cập nhật bản cuối cùng và tần suất cập nhật nhƣ thế nào?
-
Khả năng tƣơng thích với các phiên bản hiện tại của lõi Wordpress?
Mật khẩu: nếu sử dụng mật khẩu đơn giản, Website sẽ dễ bị tấn công với kỹ thuật Brute Force (Brute Force Attacks là kỹ thuật dò mật khẩu bằng cách thử đúng sai liên tục). Mật khẩu đủ mạnh phải chứa số, chữ hoa, ký tự đặc biệt (@, #, *, v.v…) dài và độc đáo. Mật khẩu Wordpress thậm chí có thể chứa các khoảng trắng và có cả cụm từ mật khẩu “passphrase”. Không nên sử dụng cùng một mật khẩu ở nhiều nơi. Ghi nhớ mật khẩu khác nhau là điều khó khăn, nhƣng Website bị tấn công thì còn tồi tệ hơn. Thay đổi các khóa (keys) bảo mật và mã muối (salts) của Wordpress: Wordpress sử dụng thông tin đƣợc lƣu trữ trong trình duyệt là cookie để xác minh những ngƣời dùng đã đăng nhập và bình luận trên trang. Các mã salts và khóa bảo mật đƣợc thêm vào Wordpress để mã hóa và bảo vệ thông tin tốt hơn. Về cơ bản, các khóa này là một chuỗi dữ liệu chứa các mật khẩu dài, ngẫu nhiên và phức tạp, gần nhƣ không thể phá vỡ đƣợc chứa trong tập tin wp-config.php. Chi tiết về kỹ thuật này có thể tìm hiểu thêm tại
Việc cập nhật khóa bảo mật và mã salts sẽ buộc tất cả ngƣời dùng đã đăng nhập phải đăng nhập lại, bởi thay đổi chúng sẽ tự
13
động làm mất hiệu lực phiên đăng nhập của bất kỳ ngƣời dùng đang đăng nhập. Hình 1.8 cho thấy các mã đƣợc sử dụng trong Wordpress. define('AUTH_KEY','pK/7r(|,BK+X=|dzrK}Y|ttP%+8u<$so#|`zUrA*RIxNSfgo$-w|UrQ# )RR8+DEz'); define('SECURE_AUTH_KEY',')|IL/>/**t|;6/z,LMC3xs>X5#+,?>ZH#>2F8ik|LziZhk+YogWdefine('LOGGED_IN_KEY','w3+SAaRLl]22i{|#-7>76i>qHV-P5d<{Q3tRh5D2|<L>XKHpbD-I@(51Rd2W|Z#7'); define('NONCE_KEY','SPD.R?ynL?qf|NXW#n(jO%kmz=]_+n|DiHrN549u>Ea{v!${-9lhoZ# .z7k(85n:'); define('AUTH_SALT','|6f>K{-aje<define('SECURE_AUTH_SALT','mo>b+|dr(mY??KSkZe[dOmuoAu|qla<4q]>=EY;6&-YXt#: ],T<)0FJuc9FdwtG'); define('LOGGED_IN_SALT','*8u:v_n,-L`FJ+qyE*fm`kzw|G%m!B^J|!8?]kK?,#5vO2#*f~ PL=|tw?Chg+{o)'); define('NONCE_SALT','7+%dZ!tcm{2K+l(JPL7d<-B;.Jb7Cx.lj%9xQ|(ftY*|1+Qgl6q*m% L,n<.8?WXI');
Hình 1.8: Các mã salts và khóa bảo mật trong Wordpress
Dù mật khẩu có mạnh cũng vô nghĩa nếu quản trị viên yếu kém kiến thức về bảo mật. Hiểu đƣợc vai trò và gán đúng cách quyền truy cập cho ngƣời dùng là điều cần thiết để tách biệt quá trình phân quyền. Càng nhiều ngƣời có quyền truy cập admin, cơ hội bị tấn công càng cao. Thực hiện cơ chế xác thực 2 bƣớc (Two-Factor Authentication): lợi ích của phƣơng pháp này là ngay cả nếu ai đó đoán đƣợc mật khẩu của ngƣời dùng (quản trị viên) thì họ cũng cần phải có đƣợc điện thoại của ngƣời đó để đột nhập trái phép vào tài khoản. Di chuyển hoặc thay đổi tài khoản quản trị mặc định là điều cần thiết. Có hai lý do chính cho việc tạo mới một tài khoản quản trị hoặc sửa đổi cái cũ: 1. Sau khi cài đặt tên ngƣời dùng mặc định là "admin"; kẻ tấn công cố
gắng dò mật khẩu để thử tên ngƣời dùng mặc định này. 2. Các id mặc định của tài khoản quản trị là 1; khi kẻ tấn công phát hiện ra một lỗi SQL injection (xem mục 1.2.1.1) thì sẽ cố gắng cập nhật cho ngƣời dùng id = 1 này. Cả hai công việc có thể đƣợc thực hiện thủ công trong cơ sở dữ liệu mà không cần phải xóa các tài khoản quản trị hoặc có thể đƣợc thực hiện trong giao diện quản lý ngƣời dùng.
14
Một số chính sách bảo mật quan trọng khác cũng đƣợc khuyến nghị nhƣ: thay đổi tiền tố (prefix) cơ sở dữ liệu; kiểm soát các bình luận; kiểm tra quyền truy cập file; xóa file readme.html và install.php; di chuyển tập tin wpconfig.php ra bên ngoài thƣ mục web gốc; thực thi mã hóa lớp vận chuyển cho các tác vụ quản trị; sử dụng một tƣờng lữa ứng dụng web (WAF); vô hiệu hoá chế độ chỉnh sửa các plugin và theme cần đƣợc áp dụng.
1.2.1. Danh sách rủi ro bảo mật cho ứng dụng Wordpress OWASP [11] OWASP viết tắt của Open Web Application Security Project (dự án mở về bảo mật ứng dụng web), dự án là một sự cố gắng chung của cộng đồng nhằm giúp các tổ chức có thể phát triển, mua hoặc bảo trì các ứng dụng an toàn. Mục tiêu chính của OWASP Top 10 là để hƣớng dẫn các lập trình viên, ngƣời thiết kế, kỹ sƣ, quản lí và cả tổ chức về hậu quả của những điểm yếu quan trọng nhất trong ứng dụng web. OWASP Top 10 xuất hiện lần đầu tiên vào năm 2003, đƣợc cập nhật sửa đổi cho phù hợp với từng giai đoạn trong những năm 2004, 2007, 2013 và đến nay phiên bản 2017 sắp đƣợc chính thức ra mắt.
1.2.1.1. Chèn mã Rủi ro chèn mã (Injection) xảy ra trong các ứng dụng nhƣ SQL, LDAP khi dữ liệu không xác thực đƣợc gửi tới hệ thống biên dịch nhƣ một phần của mã lệnh.
Những dữ liệu này của kẻ tấn công có thể lừa hệ thống biên dịch thực hiện những mã lệnh độc hại hoặc giúp kẻ tấn công xâm nhập đến những dữ liệu quan trọng một cách trái phép. - Ví dụ kịch bản tấn công: + Kịch bản 1: ứng dụng sử dụng dữ liệu không tin cậy String query = “SELECT * FROM accounts WHERE custID='“ + $id + “'“;
+ Kịch bản 2: tƣơng tự nhƣ vậy, sự tin cậy mù quáng của ứng dụng vào các framework có thể dẫn đến các truy vấn mà vẫn còn dễ bị tổn thƣơng, ví dụ HQL:
Trong cả hai trƣờng hợp, kẻ tấn công có thể thay đổi giá trị tham số “id” trong trình duyệt của mình để gửi đi: 'or' 1 '=' 1. Ví dụ: or '1'='1
Thay đổi này có ý nghĩa là cả hai câu truy vấn đều trả về kết quả tất cả các bản ghi từ bảng “accounts”. Các tấn công nguy hiểm hơn có thể sửa đổi dữ liệu hoặc thậm chí gọi các thủ tục lƣu trữ.
1.2.1.2. Phá vỡ xác thực và quản lý phiên làm việc Rủi ro phá vỡ xác thực và quản lý phiên làm việc (Broken Authentication and Session Management) xảy ra khi những đoạn chƣơng trình kiểm tra danh tính và quản lý phiên làm việc của ngƣời dùng thực hiện không đúng cách và thiếu chính xác, giúp kẻ xâm nhập có thể ăn cắp mật mã, khóa, mã của các phiên làm việc hoặc tận dụng những lỗi khác để giả mạo danh tính các ngƣời dùng khác, cho phép kẻ tấn
công từ bên ngoài có thể truy cập vào những tài nguyên nội bộ trái phép (ví dụ: trang quản trị). Ngoài ra kẻ tấn công còn có thể thực hiện các hành vi nâng quyền quản trị hoặc tấn công dựa vào các dạng nhƣ ấn định phiên (session fixation). - Ví dụ kịch bản tấn công: + Kịch bản 1: ứng dụng đặt vé máy bay hỗ trợ URL viết lại (rewrite), đặt mã phiên (session id) trong URL: />?dest=Nhatrang
Một ngƣời sử dụng Website này đã chứng thực và muốn cho bạn bè của mình biết về chƣơng trình khuyến mãi. Anh ta gửi mail chia sẻ liên kết trên mà không biết rằng cũng đã gởi đi ID phiên của mình. Khi bạn bè anh ta sử dụng liên kết đó, họ sẽ sử dụng đƣợc phiên và thẻ tín dụng của anh ta. + Kịch bản 2: thời gian chờ (timeout) của ứng dụng không đƣợc thiết lập đúng cách. Trƣờng hợp ngƣời dùng sử dụng máy tính công cộng để truy cập
16
Website mà chỉ đóng trình duyệt và bỏ đi thay vì “Thoát” (logout) đúng cách. Kẻ tấn công sử dụng cùng trình duyệt trên máy đó một giờ sau đó, và trình duyệt vẫn còn đƣợc chứng thực. + Kịch bản 3: kẻ tấn công truy cập vào cơ sở dữ liệu mật khẩu của hệ thống. Mật khẩu ngƣời dùng không đƣợc mã hóa thích hợp, để lộ mật khẩu ngƣời dùng cho kẻ tấn công.
1.2.1.3. Thực thi mã lệnh xấu Rủi ro thực thi mã lệnh xấu (Cross-Site Scripting) xảy ra khi một ứng dụng tiếp nhận những dữ liệu không đáng tin cậy và gửi chúng đến cho trình duyệt web mà không kiểm duyệt. XSS cho phép kẻ tấn công thực hiện mã độc trên trình duyệt của nạn nhân và lợi dụng ăn cắp phiên truy cập để mạo danh, phá hoại Website hoặc
lừa ngƣời sử dụng đến những Website chứa mã độc khác. - Ví dụ kịch bản tấn công: ứng dụng sử dụng dữ liệu không tin cậy trong việc xây dựng đoạn mã sau mà không kiểm tra tính hợp lệ: (String) page += “request.getParameter(“CC”) + “'>“;
Kẻ tấn công sửa đổi tham số “CC” trong trình duyệt của mình thành: '><script>document.location = ' /> Đây là nguyên nhân mà ID phiên của nạn nhân đƣợc đƣa đến Website của kẻ tấn công, cho phép kẻ tấn công chiếm quyền điều khiển phiên của ngƣời dùng.
1.2.1.4. Tham chiếu đối tượng trực tiếp không an toàn Tham chiếu đối tƣợng trực tiếp không an toàn (Insecure Direct Object References) xảy ra khi ngƣời phát triển ứng dụng để lộ một tham chiếu đến những đối tƣợng trong hệ thống nhƣ các tập tin, thƣ mục hay khóa dữ liệu. Nếu không có một hệ thống kiểm tra truy cập, kẻ tấn công có thể lợi dụng những tham chiếu này để truy cập dữ liệu trái phép. Trƣờng hợp kẻ tấn công xác định đƣợc cấu trúc truy