Tải bản đầy đủ (.doc) (21 trang)

Tấn công heartbleed

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (567.41 KB, 21 trang )

KHOA AN TOÀN THÔNG TIN


BÁO CÁO BÀI TẬP LỚN MÔN HỌC
Chủ đề số 06

TÌM HIỂU TẤN CÔNG HEARTBLEED

Giảng viên:
Thực hiện:

HÀ NỘI, 2016

1


Ý KIẾN CỦA GIẢNG VIÊN

2


MỤC LỤC
1.2.
1.3.
2.1.
2.2.

Phương thức tấn công và khai thác lỗ hổng......................................................8
Phướng pháp khắc phục và ngăn chặn............................................................13
Mô hình triển khai...........................................................................................15
Thiết lập máy chủ Webserver..........................................................................15



3


DANH MỤC HÌNH ẢNH

4


LỜI NÓI ĐẦU
Hiện nay mạng internet phát tiển mạnh mẽ, nó đem lại lợi ích to lớn về vật
chất cũng như tinh thần cho người sử dụng như :giao dịch chứng khoán,thương
mại điện tử ,mua bán, các dịch vụ giải trí trên internet....trên internet. Bên cạnh đó
thì có những rủ ro xuất hiện đó là vấn đề bảo mật thông tin cá nhân người dùng(tên
tài khoản, passwork,thông tin cá nhân ) để giải quyết vấn đề này người ta sử dụng
mật mã vào trong 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ải pháp sử dụng bộ giao thức SSL để thiết lập các kênh truyền
tin an toàn trên Internet là giải pháp được sử dụng rộng rãi và hiệu quả. Khi đó, dữ
liệu trên kênh liên lạc sẽ được mã hóa và xác thực để đảm bảo sự an toàn. Nhưng
bên cạnh đó xuất hiện lỗ hổng thư viện OPEN SSL khiến cho hạng triệu website
trong nước cũng như ngoài nước chịu ảnh hưởng nghiêm trọng và gây thiệt hại
nặng thế về kinh tế.
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” . Nội dung của đề tài gồm có 2 chương:
Chương 1: Phương pháp tấn công Heartbleed và bộ giao thức SSL/TLS.
Chương 2: Thực hiện tấn công Heartbleed.

5



CHƯƠNG 1. PHƯƠNG PHÁP TẤN CÔNG
HEARTBLEED VÀ BỘ GIAO THỨC SSL/TLS
1.1.

Tổng quan Heartbleed.

1.1.1. Lỗ hổng bảo mật 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ộng rã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ính năng mở rộng heartbeat
trên TLS (nguồn gốc cho tên gọi của lỗ hổng heartbleed). Lỗ hổng này cho phép
đối phương lấy được những thông tin bí mật như: khóa riêng của máy chủ, cookies
và mật khẩu phiê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.
Lỗ hổng Heartbleed là cực kỳ nghiêm trọng, nó làm lộ một lượng lớn các
khóa mã cá nhân và các thông tin bí mật khác lên Internet do để lộ nội dung trên
bộ nhớ của máy chủ, nơi lưu trữ các thông tin nhạy cảm nhất, bao gồm thông tin cá
nhân như tên truy cập, mật khẩu, số thẻ tín dụng. Điều này cho phép những kẻ tấn
công có thể lấy được mã cá nhân và giải mã các thông tin đã được mã hóa trên máy
chủ, thậm chí giả mạo máy chủ.

Hình 1 Minh họa về heartbleed.
6


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ác liê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ỗi lần kết nối.
Antti Karjalainen cùng hai đồng nghiệp Riku Hietamäki và Matti Kamunen
tại hãng bảo mật Codenomicon cũng như kỹ sư Neel Mehta của Google (hoạt động
độc lập với Codenomicon) được xem là những người đầu tiên phát hiện lỗ hổng.
Karajalainen cho biết anh đang cùng Hietamäki cập nhật tính năng mới cho bộ thử
nghiệm giao thức của Codenomicon thì tìm ra Heartbleed.

Hình 2 Logo heartbleed.
Tính năng này được thiết kế để nhận ra các loại lỗ hổng phần mềm mới. Ban
đầu, Karjalainen nhận ra lỗi khi thêm hỗ trợ cho tính năng Heartbeat của
OpenSSL. Heartbeat cho phép một máy chủ gửi dữ liệu tùy ý đến máy chủ khác.
Người nhận sau đó gửi trả lại bản sao chính xác của dữ liệu tới người gửi để xác
nhận kết nối an toàn và không có gì bị xâm nhập.

7


Codenomicon bắt đầu một số thử nghiệm mới với giao thức Heartbeat. Sau
khi nhận thấy một phản hồi lớn bất thường, Karjalainen và Hietamäki thử bài kiểm
tra khác. Thử nghiệm mới xác nhận lỗ hổng trong Heartbeat đang làm lộ dữ liệu
ngoại lai. Ngày tiếp theo, chuyên gia bảo mật Marko Laakso của Codenomicon
phát hiện phiên bản OpenSSL mà bộ giao thức thử nghiệm đang sử dụng làm lộ
khóa cá nhân từ máy chủ.
“Khóa cá nhân là “báu vật đế vương” của Internet. Chúng được dùng để
khẳng định bạn đích thực là bạn. Vì thế, nó có thể trở thành lỗ hổng tồi tệ nhất
trong lịch sử Internet”, Karjalainen giải thích.
Codenomicon ngay lập tức vá lỗ hổng và thông báo cho các hãng khác.
Công ty đặt tên cho nó là Heartbleed, mua tên miền heartbleed.com.

1.2.

Phương thức tấn công và khai thác lỗ hổng.

1.2.1. Tính năng heartbleed trên TLS.
Heartbeat là cơ chế được thiết kế để giữ kết nối TLS/DTLS (một tiêu chuẩ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ết qua SSL/TLS
phức tạp và mất nhiều thời gian.
Cơ chế TLS Hearbeat được thiết kế để cho phép kết nối vẫn được lưu giữ
trong trường hợp không có dữ liệu trong kênh truyền. Heartbeat messages sẽ được
gửi từ một đầu kết nối (Peer_1) với dữ liệu bất kỳ và độ dài payload. Đầu kia
(Peer_2) sau khi nhận được message sẽ trả lời chính xác phần dữ liệu bất kỳ mà nó
nhận được từ peer_1.

8


Hình 3 Tính năng heartbleed trên TLS.
Cấu trúc của request trên được RFC 6520 định nghĩa như sau:
struct {
HeartbeatMessageType type;
uint16 payload_length;
opaque payload[HeartbeatMessage.payload_length];
opaque padding[padding_length];
} HeartbeatMessage;
Thông điệp heartbleed request:

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 Heartbleed.
1.2.2. Cơ chế phát sinh lỗi 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.
/* Read type and payload length first */
9


+
hbtype = *p++;
+
n2s(p, payload);
+
pl = p;
+
+
if (s->msg_callback)
+
s->msg_callback(0, s->version, TLS1_RT_HEARTBEAT,
+
&s->s3->rrec.data[0], s->s3->rrec.length,
+
s, s->msg_callback_arg);
+
+
if (hbtype == TLS1_HB_REQUEST)
+
{
+

unsigned char *buffer, *bp;
+
int r;
+
+
/* Allocate memory for the response, size is 1 bytes
+
* message type, plus 2 bytes payload length, plus
+
* payload, plus padding
+
*/
+
buffer = OPENSSL_malloc(1 + 2 + payload + padding);
+
bp = buffer;
+
+
/* Enter response type, length and copy payload */
+
*bp++ = TLS1_HB_RESPONSE;
+
s2n(payload, bp);
+
memcpy(bp, pl, payload);
+
+
r = ssl3_write_bytes(s, TLS1_RT_HEARTBEAT, buffer, 3 +
payload + padding);
Bản ghi SSLv3 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 trong bả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:

10


Server sẽ tiến hành xử lý yêu cầu với đoạn code trong hàm
dtls1_process_heartbeat:
/* Read type and payload length first */
hbtype = *p++;
n2s(p, payload);
pl = p;
Byte đầu tiên chứa heartbleed type. Hàm n2s đẩy giá trị 2 byte từ p sang
payload.p chính là biến chứa độ dài payload.

Xét đoạn code sau:
unsigned char *buffer, *bp;
int r;
/* Allocate memory for the response, size is 1 byte
* message type, plus 2 bytes payload length, plus
* payload, plus padding
*/
buffer = OPENSSL_malloc(1 + 2 + payload + padding);
bp = buffer;
Đoạn code này cho ta thấy, chương trình cấp phát một vùng nhớ theo yêu
cầu của request từ client có kích thước lên tới 1+ 2 + 16 + 65535, hơn 64kb. Bến
con trỏ bp thành pointer để truy xuất vùng nhớ này.
Xét tiếp:

/* Enter response type, length and copy payload */
*bp++ = TLS1_HB_RESPONSE;
s2n(payload, bp)
11


memcpy(bp, pl, payload);
Hàm s2n là hàm đảo của hàm n2s, nó sẽ lấy 16 bit giá trị trong payload đặt vào 2
bytes bp. Như vậy là đã đẩy chính xác độ dài payload của request. Sau đó hàm
memcpy() sẽ chép payload bytes từ pl(phần dữ liệu đầu vào request) sang bp là
con trỏ tời buffer. Sau đó chính vùng nhớ đó sẽ trả ngược về chính xác cho peer
client.
Điều gì sẽ xảy ra nếu như độ dài thực tế của Heartbeat data không bằng vớ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ến trình.

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 4 Cơ chế phát sinh lỗi heartbleed.

12


1.2.3. Thông tin rò rỉ qua lỗ hổng heartbleed.
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.
Session ID (dãy giá trị phiên liên lạc).
Các dữ liệu nhạy cảm khác : ví dụ Password, Cookie.

Bất cứ phần thông tin nào liệt kê phía trên đều cho phép kẻ tấn công giải mã
dữ liệu trong phiên SSL hoặc ăn trộm các thông tin nhạy cảm. Tuy nhiên, kịch bản
lấy được private key của server là kịch bản tồi tệ nhất. Khi đã có được private key,
kẻ tấn công có thể thực hiện giải mã các session đã thực hiện trao đổi trước đó (nếu
như sử dụng cơ chế bắt tay non-PFS ) hoặc tiến hành mạo danh server để kết nối
với client. Nguy hiểm nhất là khi việc khai thác không để lại bất kỳ dấu vết gì.

Hình 5 Thông tin bị rò rỉ qua lỗ hổng heartbleed.
1.3.

Phướng pháp khắc phục và ngăn chặn.
 Sửa code
13


Bổ sung thêm ràng buộc cho pl:
/* Read type and payload length first */
if (1 + 2 + 16 > s->s3->rrec.length)
return 0; /* silently discard */
hbtype = *p++;
n2s(p, payload);

if (1 + 2 + payload + 16 > s->s3->rrec.length)
return 0; /* silently discard per RFC 6520 sec. 4 */
pl = p;
 Nâng cấp lên phiên bản mới 1.0.1g đã được vá lỗ hổng Heartbleed.
Tính năng Heartbeat được bổ sung vào thư viện OpenSSL từ 03/2012. Vì
vậy các phiên bản OpenSSL trong thời gian từ 03/2012 đến 04/2014 sẽ bị ảnh
hưởng ngoại trừ phiên bản OpenSSL 1.0.1g đã được vá lỗ hổng:
• OpenSSL 1.0.1 tới 1.0.1f bị ảnh hưởng.
• OpenSSL 1.0.1g đã vá lỗ hổng nên không bị ảnh hưởng.
• OpenSSL 1.0.0 và các phiên bản cũ hơn không bị ảnh hưởng.
Heartbleed không phải là lỗ hổng trong giao thức SSL/TLS mà là lỗi lập
trình trong thư viện mã nguồn mở OpenSSL. Vì vậy có thể khẳng định rằng giao
thức SSL/TLS là không bị phá vỡ và nó vẫn được coi là tiêu chuẩn vàng trong việc
mã hóa thông tin để truyền trên mạng Internet theo đánh giá của hãng bảo mật
Synmatec. Tuy nhiên, hơn 66% website trên toàn cầu sử dụng thư viện OpenSSL
và rất nhiều website đang sử dụng phiên bản cũ OpenSSL (từ phiên bản 1.0.1 tới
1.0.1f) mang nguy cơ bị tấn công khai thác lỗ hổng Heartbleed. Cho nên, yêu cầu
đặt ra là các công ty cần cập nhật ngay lập tức phiên bản mới nhất của OpenSSL là
phiên bản 1.0.1g đã được vá lỗ hổng Heartbleed hoặc sử dụng những phiên bản
không bị ảnh hưởng bởi lỗ hổng này.

14


CHƯƠNG 2. THỰC HIỆN TẤN CÔNG HEARTBLEED
2.1.

Mô hình triển khai.

Hình 6 Mô hình thực hiện tấn công.

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ụ WireShark,
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ủ.

2.2.

Thiết lập máy chủ Webserver.
a. Thiết lập cấu hình IP tĩnh.
Thiết lập cấu hình mạng IP tĩnh cho máy chủ Web trong tập tin ifcfg-eth0
#nano /etc/sysconfig/network-scripts/ifcfg-eth0

15


Hình 7 Thiết lập IP tĩnh cho server.
b. 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:
#nano /etc/named.conf

16


Hình 8 Cấu hình DNS.
Thiết lập cấu hình các tập tin zone thuận và zone nghịch cho tên miền
www.heartbleed.net:
• Zone thuận heartbleed.db

/var/named/heartbleed.db như sau:

được

khai

báo

trong

tập

tin
17


Hình 9 Thiết lập zone thuận.
• Zone nghịch heartbleednghich.db được khai báo trong tập tin
/var/named/heartbleednghich.db như sau:

Hình 10 Thiết lập zone nghịch.
18


Cấu hình cài đặt name server trong máy chủ Web, trong tập tin
/etc/resolv.conf:
nameserver 172.16.1.10
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 heartbleed.net


19


KẾT LUẬN

KẾT LUẬN
Sau thời gian tìm hiểu và nghiên cứu đề tài kết chúng em đạt được
là :
- Nghiên cứu phương pháp tấn công bộ giao thức SSL/TLS. Trong phần này
em đã nghiên cứu được những vấn đề cơ bản về những tấn công điển hình lên bộ
giao thức SSL/TLS.
- Cài đặt và thực hiện tấn công Heartbleed: Do kiến thức có hạn nên chúng
em gặp khó khăn trong việc cài đặt và thực hiện tấn công lỗ hổng OPEN SSL nên
phần demo chưa được hoàn thiện , chúng em sẽ cố gắng nghiên cứu và hoàn thiện
demo một cách sớm nhất để báo cáo với thầy .
Kết luận: Trong nội dung đề tài nhóm em đã cố gắng tìm hiểu và nghiên cứu
các vấn đề cơ bản nhất của các phương pháp tấn công bộ giao thức SSL/TLS. Tuy
nhiên, do thời gian và kiến thức có hạn nên đề tài không thể tránh được những
thiếu sót nhất định. Rất mong sự đóng góp ý kiến của các thầy cô và các bạn để đề
tài được hoàn thiện hơn. Nhóm em xin chân thành cảm ơn!

20


TÀI LIỆU THAM KHẢO
[1] />[2] />[3] />[4] />ck_version_a_1.pdf
[5] Một số tài liệu tham khảo khác trên internet.

21




Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay
×