Để bảo vệ thông tin trên mạng, chúng ta có thể can thiệp mật mã vàotrong môi trường internet nhằm đảm bảo thông tin, dữ liệu tránh được những kẻxấu có mục đích tấn công khai thác dữ liệu
Trang 1HỌC VIỆN KỸ THUẬT MẬT MÃ KHOA AN TOÀN THÔNG TIN
BÀI TẬP LỚN MÔN AN TOÀN MẠNG MÁY TÍNH
ĐỀ TÀI
TÌM HIỂU TẤN CÔNG HEARTBLEED VÀ PHƯƠNG PHÁP PHÒNG CHỐNG
Giáo viên hướng dẫn:
Trang 2Ý KIẾN CỦA GIÁO VIÊN
2
Trang 3Tìm hiểu tấn công HeartBleed và phương pháp phòng chống
MỤC LỤC
LỜI NÓI ĐẦU 4
1.1.1 Tấn công OpenSSL dựa trên lỗ hỗng Heartbleed 6
1.1.2 Quá trình phát hiện 6
1.1.3 Phương pháp tấn công và khai thác lỗ hổng 7
CHƯƠNG II: CÀI ĐẶT VÀ THỰC HIỆN TẤN CÔNG HEARTBLEED 14
2.1 Mô hình cài đặt và thực hiện tấn công 14
2.2 Cài đặt máy chủ 15
2.2.1 Thiết lập cấu hình mạng 15
2.2.2 Thiết lập cấu hình dịch vụ DNS 15
2.2.3 Thiết lập Web site chứa lỗ hổng bảo mật heartbleed 18
2.2.4 Cài đặt cơ sở dữ liệu cho trang web www.test.com 22
2.2 Cài đặt máy trạm 25
2.2.1 Thiết lập cấu hình mạng 25
2.2.2 Truy cập www.test.com 26
2.3 Tấn công khai thác lỗ hổng Heartbleed 26
2.3.1 Cài đặt mạng trên máy thực hiện tấn công 26
2.3.2 Tấn công khai thác lỗ hổng Heartbleed 27
2.4 Phương pháp phòng chống 28
2.4.1 Lời khuyên cho các doanh nghiệp 28
2.4.2 Lời khuyên cho người dùng cuối 29
2.4.3 Lời khuyên khác 29
CHƯƠNG III KỊCH BẢN DEMO 30
KẾT LUẬN 34
TÀI LIỆU THAM KHẢO 35
Trang 4LỜI NÓI ĐẦU
Mạng Internet mang lại cho con người những lợi ích to lớn, nó giúp mọingười trên thế giới xích lại gần nhau hơn, chia sẻ thông tin và liên lạc với nhaumột cách dễ dàng hơn Lượng thông tin được chia sẻ và trao đổi ngày càng lớn,trong đó có rất nhiều thông tin nhạy cảm, quan trọng Do đó môi trường kết nốiInternet vô hình chung lại là một môi trường dễ dàng cho những kẻ xấu lợi dụng
để tấn công khai thác những dữ liệu quan trọng hay thực hiện những mục đíchphá hoại Do vậy nhu cầu đặt ra là tìm ra những giải pháp bảo vệ thông tin nhạycảm, quan trọng được truyền trong môi trường mạng
Để bảo vệ thông tin trên mạng, chúng ta có thể can thiệp mật mã vàotrong môi trường internet nhằm đảm bảo thông tin, dữ liệu tránh được những kẻxấu có mục đích tấn công khai thác dữ liệu cũng như phá hoại.Trong đó, giảipháp sử dụng bộ giao thức SSL để thiết lập các kênh truyền tin an toàn trênInternet là giải pháp được sử dụng rộng rãi và hiệu quả Khi đó, dữ liệu trênkênh liên lạc sẽ được mã hóa và xác thực để đảm bảo sự an toàn Tuy nhiên,trong bộ giao thức này vẫn có một lỗ hổng bảo mật khá nghiêm trọng đó là lỗ
hổng heartbleed Xuất phát từ lý do trên, nhóm em đã chọn đề tài “Tìm hiểu tấn công heartbleed và phương pháp phòng chống” để hiểu rõ hơn về lỗ hổng
và dạng tấn công này Nội dung của bài tập lớn gồm có 3 chương:
Chương I: Nghiên cứu phương pháp tấn công heartbleed vào bộ giao thức SSL/TLS: Chương này giới thiệu phương pháp tấn công heartbleed vào bộ
giao thức SSL/TLS
Chương II: Cài đặt, thực hiện tấn công HeartBleed và phương pháp phòng chống : Chương này trình bày những vấn đề cơ bản về cài đặt và thực
hiện tấn công HeartBleed và đưa ra một số lời khuyên để phong chống
Chương III: kịch bản demo: chương này nhóm sẽ trình bày chi tiết
những nội dung mà nhóm thực hiện demo trong báo cáo
Do thời gian và kiến thức còn hạn chế, nên không thể tránh khỏi nhữngthiếu sót trong nội dung cũng như hình thức, mong thầy và các bạn xem xét và
bổ sung để nhóm hoàn thiện hơn bản báo cáo của mình
Chúng em xin chân thành cảm ơn !!!
4
Trang 5Tìm hiểu tấn công HeartBleed và phương pháp phòng chống
CHƯƠNG I: NGHIÊN CỨU PHƯƠNG PHÁP TẤN CÔNG
HEARTBLEED VÀO BỘ GIAO THỨC SSL/TLS 1.1 Tấn công HeartBleed
1.1.1 Tấn công OpenSSL dựa trên lỗ hỗng Heartbleed
Heartbleed tạm dịch là “trái tim rỉ máu” là một lỗi về bảo mật trong thưviện mật mã dạng mã nguồn mở OpenSSL, thư viện này được sử dụng rộngrãi để phát triển giao thức bảo mật tầng truyền tải (TLS) trên Internet Lỗhổng này chính là kết quả của việc thiếu hàm kiểm tra giới hạn khi xử lý tínhnăng mở rộng heartbeat trên TLS Tính năng heartbeat chính là nguồn gốc chotên gọi của lỗ hổng heartbleed Lỗ hổng này cho phép đối phương lấy đượcnhững thông tin bí mật như: khóa riêng của máy chủ, cookies và mật khẩuphiên liên lạc của người sử dụng Nhiều cơ quan bảo mật uy tín trên thế giới
đã đưa ra cảnh báo và tư vấn bảo mật đối với những người quản trị hệ thống
về lỗi nghiêm trọng này
1.1.2 Quá trình phát hiện
Tính năng mở rộng Heartbeat trong các giao thức TLS và DTLS là một
bộ tiêu chuẩn được mô tả cụ thể trong RFC 6520, công bố vào tháng 2 năm
2012 Nó cho phép dễ dàng kiểm tra và giữ trạng thái “sống” (alive) cho cácliên kết thông tin bảo mật mà không cần phải tiến hành thỏa thuận lại cho mỗilần kết nối
Trang 6Năm 2011, Robin Seggelmann tại trường Đại học Duisburg-Essen đãphát triển tính năng mở rộng Heartbeat cho bộ thư viện mã nguồn mởOpenSSL Sau khi Seggelmann yêu cầu đưa tính năng mới này của mình vàoOpenSSL, thay đổi của ông đã được Stephen N Henson, một trong bốn nhàphát triển chính của OpenSSL tiến hành xem xét, đánh giá Henson đã khôngphát hiện ra lỗi trong quá trình phát triển của Seggelmann và đã đưa đoạn mãnguồn không hoàn thiện này vào thư viện mã nguồn mở của OpenSSL vàongày 31 tháng 12 năm 2011 Đoạn mã chứa lỗ hổng bảo mật này được sửdụng rộng rãi trong phiên bản OpenSSL 1.0.1 ngày 14 tháng 3 năm 2012.Tính năng heartbeat được kích hoạt và chính là nguyên nhân gây ra các phiênbản OpenSSL chứa lỗ hổng bảo mật Heartbleed.
Neel Mehta thành viên nhóm bảo mật của công ty Google đã công bố lỗhổng Heartbleed vào ngày 1 tháng 4 năm 2014 Lỗ hổng này kéo theo lỗinghiêm trọng khi xử lý bộ nhớ do thực hiện tính năng mở rộng Heartbeat gây
ra Đối phương có thể ăn cắp lượng thông tin lên đến 64KB từ bộ nhớ của ứngdụng với mỗi lần thực hiện hàm heartbeat
Lỗ hổng do một kỹ sư tại công ty Codenomicon, một công ty an ninhmạng của Phần Lan đặt tên đồng thời gắn với logo trái tim rỉ máu Họ đã lấytên miền là Heartbleed.com nhằm giải thích lỗi này cho công chúng
1.1.3 Phương pháp tấn công và khai thác lỗ hổng
Phương thức hoạt động của tính năng Heartbeat trên TLS
Heartbeat là cơ chế được thiết kế để giữ kết nối TLS/DTLS (một tiêuchuẩn an ninh công nghệ toàn cầu tạo ra một liên kết được mã hóa giữa client
và server) mà không cần tạo ra một liên kết mới vì các thủ tục tạo mới liên kếtqua SSL/TLS phức tạp và mất nhiều thời gian Thông điệp Heartbeat Requestđược gửi từ phía client tới server bao gồm dữ liệu tùy chọn và độ dài của dữliệu Server nhận được thông điệp này sẽ phải gửi lại phía client chính xác dữliệu yêu cầu (hình 1.1):
7
Trang 7Tìm hiểu tấn công HeartBleed và phương pháp phòng chống
Hình 1.1 Heartbeat request (dạng bình thường)
Thông điệp Heartbeat request có cấu trúc như sau:
n byte <= 64KB payload
2 byte padding
Theo như cấu trúc này thì độ dài dữ liệu payload_length tối đa là 16-bit
usigned integer, tức là Heartbeat request có thể yêu cầu server trả lại dữ liệu
có thể lên tới 64KB Chính điều này là nguyên nhân gây ra lỗ hổng
Trang 9Tìm hiểu tấn công HeartBleed và phương pháp phòng chống
Cơ chế phát sinh lỗ hổng Heartbleed
Lỗ hổng này được bắt nguồn từ hai hàm tls1_process_heartbeat/dtls1
_process_heartbeat chứa trong hai file ssl/t1_lib.c và ssl/dl_both.c của thư
viện OpenSSL
Nộidung của
hàm:“dtls1_process_heartbeat/dtls1_process_heartbeat”:
int dtls1_process_heartbeat(SSL *s){
unsigned char *p = &s->s3->rrec.data[0], *pl;
unsigned short hbtype;
unsigned int payload;
unsigned int padding = 16; /* Use minimum padding */
/* Read type and payload length first */
/* Allocate memory for the response, size is 1 byte
* message type, plus 2 bytes payload length, plus
* payload, plus padding
Trang 10if (r >= 0 && s->msg_callback)
s->msg_callback(1, s->version, TLS1_RT_HEARTBEAT, buffer, 3 + payload + padding,
Cấu trúc bản ghi của SSL/TLS:
typedef struct ssl3_record_st {
int type; /* type of record */
unsigned int length; /* How many bytes available */
unsigned int off; /* read/write offset into 'buf' */
unsigned char *data; /* pointer to the record data */
unsigned char *input; /* where the decode bytes are */
unsigned char *comp; /* only used with decompression - malloc()ed
*/ unsigned long epoch; /* epoch number, needed by DTLS1 */
unsigned char seq_num[8]; /* sequence number, needed by DTLS1
*/ } SSL3_RECORD;
Bản ghi SSLv3 này bao gồm 3 thành phần chính: type, length và data Khi client gửi tới server thông điệp Heartbeat request: thành phần data
trongbản ghi SSLv3 mà server nhận được chính là dữ liệu mà Heartbeat
request Con trỏ p được dùng bởi server để xử lý bản ghi này theo cấu hình
mặc định sẽ trỏ tới byte đầu tiên trong bản ghi này, có cấu trúc được mô tảnhư sau:
Server sẽ tiến hành xử lý yêu cầu với đoạn code trong hàm
Trang 1110
Trang 12Ba dòng lệnh sẽ gán byte đầu tiên của bản ghi SSLv3 là Heartbeat type.Hàm n2s sẽ lấy 2 byte từ con trỏ p và đặt chúng vào payload Đây là độ dàiđược khai báo trong Heartbeat request (chú ý rằng độ dài này trong bản ghiSSLv3 không được kiểm tra xem có trùng với độ dài thực tế của Heartbeatdata trong Heartbeat request hay không) Kết quả dòng lệnh thứ 3 là con trỏ plsẽ trỏ vào thành phần Heartbeat data được mô tả như sau:
/* Allocate memory for the response, size is 1 byte
* message type, plus 2 bytes payload length, plus
* payload, plus padding
2 bytes tiếp theo của buffer Hàm memcpy(bp, pl, payload) sẽ thực hiện saochép các byte payload từ pl vào bp (tức là sao chép toàn bộ Heartbeat data củaHeartbeat request)
Điều gì sẽ xảy ra nếu như độ dài thực tế của Heartbeat data không bằngvới độ dài payload_length được khai báo trong Heartbeat request?
Nếu payload_length lớn hơn thì hàm memcpy sẽ sao chép cả phần dữliệu tiếp theo ngay sau Heartbeat data trong bộ nhớ đang hoạt động của tiếntrình
11
Trang 13Tìm hiểu tấn công HeartBleed và phương pháp phòng chống
data leak data
1 byte 2 byte
hb res payload len
^
Như vậy hacker có thể dùng Heartbeat request với việc khai độ dài
payload tăng lên tối đa là 64KB tới server thì có thể lấy được những thông tin
bí mật trong bộ nhớ hoạt động của server Đây chính là lỗ hổng Heartbleed(hình 1.2):
Hình 1.2 Tấn công Heartbleed
Trang 14Những thông tin rò rỉ qua lỗ hổng
Bộ nhớ mà payload trong Heartbeat request trỏ tới cũng chính là bộ nhớ
mà OpenSSL dùng để lưu trữ nhưng thông tin bí mật khác:
• Khóa riêng của server được sử dụng trong một thời gian dài
• Khóa phiên TLS
• Dữ liệu bí mật như: mật khẩu
• Session ID (dãy giá trị phiên liên lạc)
Như vậy với tấn công thông qua lỗ hổng Heartbleed thì hacker có thể cóđược những thông tin bí mật này
13
Trang 15Tìm hiểu tấn công HeartBleed và phương pháp phòng chống
CHƯƠNG II: CÀI ĐẶT VÀ THỰC HIỆN TẤN CÔNG HEARTBLEED
Lỗ hổng Hearbleed có thể được khai thác theo những kịch bản khác
nhau như: tấn công dịch vụ web an toàn, tấn công dịch vụ thư điện tử an toàn
hoặc tấn công mô hình mạng riêng ảo triển khai bởi phần mềm OpenVPN
Nội dung chương này trình bày việc cài đặt và thực hiện tấn công Heartbleed
để tấn công dịch vụ web an toàn bao gồm các nội dung chính sau:
• Mô hình cài đặt và thực hiện tấn công
• Cài đặt máy chủ web
• Cài đặt máy trạm
• Thực hiện tấn công khai thác lỗ hổng Heartbleed
2.1 Mô hình cài đặt và thực hiện tấn công
Window 7 Attacker OpenSSLHeartBleedExploit.exeHình 2.1 Mô hình cài đặt và thực hiện tấn công Heartbleed
Theo hình 2.1, máy chủ chạy hệ điều hành CentOS 6.5, được cài đặt bộ
mã nguồn mở OpenSSL, hạ tầng khóa công khai X509 cung cấp dịch vụ web
an toàn (https) và DNS server Máy trạm chạy hệ điều hành Window XP,
được cài đặt trình duyệt Firefox để sử dụng dịch vụ web từ máy chủ Máy cài
đặt tấn công chạy hệ điều hành Win7, được cài đặt công cụ
OpenSSLHeartbleedExploit.exe để tấn công và khai thác những thông tin bí
mật trong bộ nhớ RAM của máy chủ
Trang 162.2 Cài đặt máy chủ
2.2.1 Thiết lập cấu hình mạng
Thiết lập cấu hình mạng IP tĩnh cho máy chủ Web trong tập tin eth0
2.2.2 Thiết lập cấu hình dịch vụ DNS
Thiết lập cấu hình tập tin named.conf bằng cách sử dụng câu lệnh:
#vi /etc/named.conf
Chương trình thực hiện như sau:
15
Trang 17Tìm hiểu tấn công HeartBleed và phương pháp phòng chống
Trang 19Tìm hiểu tấn công HeartBleed và phương pháp phòng chống
$TTL 1D
1D ; refresh 1H ; retry 1W ; expire 3H ); minimum
• Zone nghịch test.nghich được khai báo trong tập tin
/var/named/test.nghich như sau:
Khởi chạy dịch vụ DNS bằng câu lệnh service named start
Kiểm tra hoạt động của dịch vụ DNS đã cài đặt thông qua câu lệnh:
# nslookup test.com
Hình 2.2 Kiểm tra dịch vụ DNS
Trang 20Như vậy dịch vụ DNS đã được cài đặt thành công.
2.2.3 Thiết lập Web site chứa lỗ hổng bảo mật heartbleed
Tạo thư mục chứa website:
#mkdir /var/www/html/web
Thông qua công cụ vi tạo các trang web như index.php,
authenticate.php, backend.php, database.php, process.php, logout.php trong
thư mục /var/www/html/web Nội dung các trang web này xem phụ lục 1.
Kiểm tra các gói openssl, mod_ssl đã được cài đặt trên máy chủ webbằng các câu lệnh sau:
#rpm –qa | grep ‘openssl’
#rpm –qa | grep ‘mod_ssl’
Hình 2.3 Kiểm tra các gói cài đặt openssl và mod_ssl
Như vậy, máy chủ web đã được cài sẵn các gói openssl và mod_ssl.Gói openssl được cài đặt ở đây là phiên bản 1.0.1e có dính lỗ hổng bảo mậtHeartbleed
Tạo khóa công khai RSA 2048 bit cho máy chủ web bằng câu lệnh:
#openssl genrsa –des3 –out ca.key 2048
Hình 2.4 Tạo khóa công khai cho máy chủ web
18
Trang 21Tìm hiểu tấn công HeartBleed và phương pháp phòng chống
Tạo một Certificate Signing Request (CSR) kết hợp với server key vừatạo bằng câu lệnh:
#openssl req –new –key ca.key –out ca.csr
Hình 2.5 Tạo chứng chỉ số tự ký
Tạo một chứng chỉ số Certificate: Gửi tập tin ca.csr đến CA được kýtên –signed, sau khi được ký tên và trả về, tập tin sẽ có phần mở rộng crt Đặtchứng chỉ đã mã hóa vào nơi an toàn cùng với nơi chứa khóa riêng
#openssl x509 –in ca.csr –out ca.cert –req –signkey ca.key –days 365
Hình 2.6 Tạo một chứng chỉ số được ký bởi CA trong hạ tầng khóa công khai
X509
Trang 22Chỉnh sửa tập tin /etc/httpd/conf/httpd.conf
Khởi động dịch vụ http bởi lệnh service httpd restart
Kiểm tra việc cài đặt https bằng việc truy cập vào trang web:
https://test.com
Nhấp chuột vào biểu tượng khóa trên thanh địa chỉ để xem bộ mã dùng
để bảo vệ đường truyền dữ liệu:
20
Trang 23Tìm hiểu tấn công HeartBleed và phương pháp phòng chống
Hình 2.8 Tham số an toàn bảo vệ www.test.com
Bấm nút ‘View Certificate’ để xem chứng chỉ số của máy chủ web:
Hình 2.9 Chứng chỉ số của máy chủ web www.test.com
Trang 242.2.4 Cài đặt cơ sở dữ liệu cho trang web www.test.com
Đăng nhập vào MySQL Server bằng câu lệnh:
#mysql –u root –p
Khi đăng nhập mysql sẽ yêu cầu người dùng đặt mật khẩu cho tài khoản
root Ở đây thì tài khoản root sẽ được đặt mật khẩu là ‘123456’.
Hình 2.10 Đăng nhập vào MySQL Server
Tạo cơ sở dữ liệu test cho trang web www.test.com và trong cơ sở dữ
liệu này chứa một bảng user chứa thông tin người dùng bao gồm username và
password thông qua các lệnh:
mysql>create database test;
mysql> use test;
mysql>create table users(id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, username VARCHAR(200) NOT NULL, password CHAR(200) NOT NULL, PRIMARY KEY(id));
Cài đặt công cụ quản lý PhpMyAdmin Trước tiên, cài đặtPhpMyAdmin:
#yum install phpmyadmin
PhpMyAdmin được cài đặt thành công khi đăng nhập được vàolocalhost/phpmyadmin như hình 3.10 Quá trình đăng nhập sẽ sử dụng tài
khoản root và mật khẩu là 123456 của MySQL Server.
22