1. Trang chủ
  2. » Công Nghệ Thông Tin

Báo cáo Heartbleed MS12 020

19 497 7

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 19
Dung lượng 796 KB

Nội dung

Nó là một lỗ hổng nằm trong phần mềm mã nguồn mở Open SSL, một thư viện phần mềm của Google, Facebook, Yahoo, Amazon và rất nhiều trang web lớn nhất thế giới khác sử dụng để đảm bảo việc

Trang 1

Giảng viên : Huỳnh Thanh Tâm

CSDL

Nhóm 3

Đề tài

Lỗ Hổng Heartbleed và

MS12-020 BÁO CÁO CUỐI KỲ

Học viện Công nghệ Bưu chính Viễn

thông TPHCM

Trang 2

- -MỤC LỤC

Trang 3

LỖ HỔNG HEARTBLEED

Heartbleed hay còn gọi là "Trái tim rỉ máu" là một lỗ hổng bảo mật cực kỳ nghiêm trọng, gây ảnh hưởng đến hai phần ba thiết bị Internet toàn cầu được phát hiện vào Ngày 7 tháng 4 năm 2014 Nó là một lỗ hổng nằm trong phần mềm mã nguồn mở Open SSL, một thư viện phần mềm của Google, Facebook, Yahoo, Amazon và rất nhiều trang web lớn nhất thế giới khác sử dụng để đảm bảo việc truyền tải thông tin cá nhân của người dùng Đối với nhiều người, khái niệm OpenSSL có vẻ khá xa lạ nhưng thực

tế chúng ta nhìn thấy chúng hàng ngày ngay trên thanh địa chỉ của bạn,

đó chính là biểu tượng ổ khóa nhỏ, bên cạnh HTTPS khi truy cập vào các trang có chứng chỉ mã hóa

Trước khi tìm hiểu lỗi Heartbleed ta sẽ tìm hiểu sơ lược một số khái niệm liên quan tới lỗ hổng trên

1. Khái niệm

1.1. Giao thức (Protocol) là gì?

Việc trao đổi thông tin dù là đơn giản nhất cũng phải tuân theo những nguyên tắc nhất định Đơn giản như hai người nói chuyện với nhau, muốn cho cuộc nói chuyện có kết quả thì ít nhất cả hai người phải ngầm tuân thủ quy ước : Khi một người nói thì người kia phải biết lắng nghe và ngược lại Việc truyền thông trên mạng cũng vậy Cần có các quy tắc, quy ước truyền thông về nhiều mặt : khuôn dạng cú pháp của dữ liệu, các thủ tục gửi, nhận dữ liệu, kiểm soát hiệu quả nhất chất lượng truyền thông tin Tập hợp những quy tắc, quy ước truyền thông đó được gọi là giao thức của mạng (protocol)

Một tập hợp tiêu chuẩn để trao đổi thông tin giữa hai hệ thống máy tính hoặc hai thiết bị máy tính với nhau được gọi là giao thức Các giao thức còn được gọi là các nghi thức hoặc định ước của máy tính

1.2. Giao thức HTTP

HTTP (Tiếng Anh: HyperText Transfer Protocol - Giao thức truyền tải siêu văn bản) là một trong năm giao thức chuẩn về mạng Internet, được dùng để liên hệ thông tin giữa Máy cung cấp dịch vụ (Web server) và Máy

Trang 4

sử dụng dịch vụ (Web client) là giao thức Client/Server dùng cho World Wide Web-WWW, HTTP là một giao thức ứng dụng của bộ giao thức TCP/IP (các giao thức nền tảng cho Internet) thường sử dụng ở port 80

Thông điệp HTTP được viết bằng văn bản ASCII thông thường, do vậy người dùng có thể đọc được Có 2 dạng thông điệp HTTP: thông điệp HTTP yêu cầu và thông điệp HTTP trả lời

a. Thông điệp HTTP yêu cầu:

Cấu trúc chung của thông điệp HTTP yêu cầu

 Request line: dòng đầu tiên của thông điệp HTTP yêu cầu Request line bao gồm có 3 trường như: cách thức (method), URL, phiên bản (version) Trường cách thức (method) có thể chứa các giá trị khác nhau, bao gồm GET, POST, HEAD Phần lớn các thông điệp HTTP yêu cầu điều sử dụng phương thức GET Các phương thức GET được sử dụng khi trình duyệt yêu cầu một đối tượng được xác định trong trường URL Phương thức POST là những phương thức mà HTTP client sử dụng khi người dùng điền vào một biểu mẫu (form) nào đó, chẳng hạn như người dung muốn nhập một từ khóa nào đó vào google.com đề tìm kiếm thông tin Nếu phương thức là POST thì Entity body của thông điệp yêu cầu sẽ chứa thông tin mà người dùng đã điền Phương thức HEAD tương tự như GET, nhưng Khi server nhận được yêu cầu bằng phương thức HEAD, nó sẽ trả về thông điệp HTTP và không chứa đối tượng được yêu cầu

 Header line: là các dòng tiếp theo

Trang 5

 Sp: bao gồm các giá trị về khoảng trống.

 Blank line: bao gồm các giá trị điều khiển trở về đầu dòng, xuống hang (cr,lf)

 Entity Body (nếu có): là phần thân của thông điệp HTTP yêu cầu Sau đây là một ví dụ về thông điệp HTTP yêu cầu:

 GET: Trong ví dụ này, trình duyệt đang yêu cầu các đối tượng /somedir/page.html

 Host www.ptithcm.edu.vn: chỉ định các server mà trên đó các đối tượng được lưu trữ

 Connection: close trình duyệt báo cho máy chủ là nó không muốn sử dụng kết nối liên tục và muốn máy chủ đóng kết nối sau khi gửi các đối tượng được yêu cầu

 User-agent : chỉ thị loại trình duyệt gửi yêu cầu đến server, ở đây dùng trình duyệt Mozilla/5.0

 Accept-language (fr): chỉ thị người dùng muốn nhận được phiên bản tiếng Pháp của đối tượng chứa trên server, nếu không server sẽ gửi phiên bản mặc định của đối tượng

b. Thông điệp HTTP trả lời

Thông điệp HTTP trả lời có ba phần: dòng trạng thái (status line), dòng tiêu đề (header lines), thân thông điệp (entity body) Thân (Body) là thành phần chính của thông điệp Status line có 3 trường: phiên bản của giao thức (version), mã trạng thái (status code), trạng thái tương ứng (phrase) và các giá trị khoảng trống (sp), điều khiển trở về đầu dòng, xuống hàng (cr,lf)

Trang 6

Cấu trúc chung của một thông điệp HTTP trả lời.

Sau đây là ví dụ về thông điệp HTTP trả lời

Trong ví dụ trên, cho thấy:

 Status line thể hiện server đang sử dụng HTTP/1.1

 Header line bao gồm:

 Connection: close báo cho client rằng server sẽ đóng kết kết TCP sau khi gửi thông điệp

 Date: cho biết thời gian mà thông điệp HTTP trả lời được tạo và gửi bởi server Đó là thời gian mà server lấy đối tượng từ hệ thống tập tin của nó, chèn vào thông điệp và gửi cho client

 Server: cho biết đây là Apache Web server, tương tự như User-agent trong thông điệp yêu cầu

 Last-Modified: cho biết thời gian đối tượng được tạo hay sửa đổi lần cuối

 Content-Length: cho biết số bytes của đối tượng được gửi

 Content-Type: cho biết đối tượng trong phần entity body là HTML

 Entity body chứa đối tượng yêu trong trường hợp ví dụ trong hình 9.6 được đại diện bởi các data data data data………

c. HTTP Status Code

Trang 7

Các giá trị chữ số đầu tiên của mã trang thái (status code) có 5 giá trị:

 1xx_Thông tin: khôngđược sử dụng, chỉ dự phòngtrong tương lai

 2xx_Thành công: hành độngđã nhận đượcthành công và đươc chấp nhận

 3xx_Chuyển hướng: hành động tiếp theo phải được thực hiện để hoàn tất yêu cầu

 4xx_Clien lỗi: chứa cú pháp sai có thể không thực hiện được

 5xx_ Server lỗi: các máy server không thực hiện một yêu cầu rõ ràng đối với các yêu cầu hợp lệ

Một vài mã trạng thái thông dụng thường gặp:

 200 OK: Yêu cầu thành công

 301 Moved Permanently: đối tượng yêu cầu đã được chuyển

 400 Bad Request: server không hiểu được thông điệp yêu cầu

 403 Forbidden: server từ chối yêu cầu.(thông thường nếu đăng nhập không thành công máy chủ sẽ trả về mã lỗi này)

 404 Not Found: đối tượng được yêu cầu không có trong server

 505 HTTP Version Not Supported: server không hỗ trợ phiên bản giao thức HTTP này

1.3. Giao thức HTTPS

HTTPS, viết tắt của Hypertext Transfer Protocol Secure, là một giao thức kết hợp giữa giao thức HTTP và giao thức bảo mật SSL hay TLS cho phép trao đổi thông tin một cách bảo mật trên Internet Giao thức HTTPS thường được dùng trong các giao dịch nhạy cảm cần tính bảo mật cao

Giao thức HTTPS sử dụng port 443, giúp đảm bảo các tính chất sau của thông tin:

Confidentiality: sử dụng phương thức mã hóa (encryption) để đảm

bảo rằng các thông điệp được trao đổi giữa client và server không bị

kẻ thứ ba đọc được

Integrity: sử dụng phương thức hashing để cả người dùng (client)

và máy chủ (server) đều có thể tin tưởng rằng thông điệp mà chúng nhận được có không bị mất mát hay chỉnh sửa

Authenticity: sử dụng chứng chỉ số (digital certificate) để giúp

client có thể tin tưởng rằng server/website mà họ đang truy cập thực

Trang 8

sự là server/website mà họ mong muốn vào, chứ không phải bị giả mạo

Việc nhờ đến bên thứ 3 (thường là CA) để xác thực danh tính của website cộng thêm sự chú ý của người dùng rằng website đó có sử dụng HTTPS và SSL certificate của nó còn hiệu lực sẽ giúp loại bỏ hoàn toàn nguy cơ bị lừa đảo

1.4. Giao thức SSL/TLS

TLS (tiếng Anh: Transport Layer Security: "Bảo mật tầng truyền tải"), cùng với SSL (Secure Sockets Layer: "Tầng ổ bảo mật") dẫn trước, là các giao thức mật mã nhằm mục đích bảo mật sự vận chuyển trên Internet.[1] Các giao thức này mật mã hóa khóa bất đối xứng bằng các chứng thực X.509 để xác thực bên kia và để trao đổi một khóa đối xứng Sau đó, khóa phiên được dùng để mã hóa các dữ liệu được truyền qua lại hai bên Phương pháp này cho phép bảo mật dữ liệu hoặc thông điệp và xác thực tính toàn vẹn của các thông điệp qua các mã xác thực thông điệp (message authentication code) Vài biến thể được sử dụng rộng rãi trong các ứng dụng như duyệt Web, thư điện tử, fax qua Internet, nhắn tin nhanh, và VoIP Một chính sách quan trọng, bí mật chuyển tiếp (forward secrecy),làm cho không thể tính ra khóa phiên ngắn hạn từ khóa bí mật bất đối xứng dài hạn.[2]

Do sử dụng các chứng thực X.509, giao thức này cần các nhà cung cấp chứng thực số và hạ tầng khóa công khai để xác nhận mối quan hệ giữa một chứng thực và chủ của nó, cũng như để tạo, ký, và quản lý sự hiện lực của các chứng thực Tuy quá trình này có thể tốt hơn việc xác nhận các danh tính qua một mạng lưới tín nhiệm, nhưng vụ tai tiếng do thám bí mật người dân 2013 đã báo động công cộng rằng các nhà cung cấp chứng thực là một điểm yếu về bảo mật vì cho phép các tấn công xen giữa (man-in-the-middle attack).[3][4]

Trong khung nhìn mô hình TCP/IP, TLS và SSL đều mã hóa dữ liệu của các kết nối mạng trên một tầng phụ thấp của tầng ứng dụng Theo hệ thống tầng cấp của mô hình OSI, TLS/SSL được khởi chạy ở tầng 5 (tầng phiên) rồi hoạt động trên tầng 6 (tầng trình diễn): trước tiên tầng phiên bắt tay dùng mật mã bất đối xứng để đặt cấu hình mật mã và chìa khóa

Trang 9

chia sẻ dành cho phiên đó; sau đó, tầng trình diễn mã hóa phần còn lại của thông điệp dùng mật mã đối xứng và khóa của phiên đó Trong cả hai

mô hình, TLS và SSL phục vụ tầng giao vận bên dưới, các đoạn trong tầng này chứa dữ liệu mật mã hóa

Giao thức TLS trực thuộc chương trình tiêu chuẩn của IETF Nó được định rõ lần đầu tiên năm 1999 và cập nhật lần cuối cùng trong RFC 5246 (tháng 8 năm 2008) và RFC 6176 (tháng 3 năm 2011) TLS phỏng theo các bản định rõ SSL về trước (1994, 1995, 1996) do Netscape Communications phát triển[5] nhằm thực hiện giao thức HTTPS trong trình duyệt Navigator 1.5. OpenSSL là gì?

OpenSSL là một thư viện phần mềm cho các ứng dụng bảo mật truyền thông qua mạng máy tính chống nghe trộm hoặc cần phải xác định phe truyền thông ở bên đầu kia Nó được sử dụng rộng rãi trong các máy chủ web internet, phục vụ phần lớn tất cả các trang web

OpenSSL bao gồm phần mềm nguồn mở cho việc triển khai các giao thức mạng và mã hóa khác nhau như SSL và TLS Thư viện gốc được viết bằng ngôn ngữ lập trình C, có sẵn những phần mềm cho phép sử dụng thư viện OpenSSL trong nhiều ngôn ngữ, cung cấp các chức năng mật mã tổng quát để mã hóa và giải mã OpenSSL cũng được sử dụng từ dòng lệnh để yêu cầu, tạo và quản lý các chứng thực số

Có sẵn phiên bản cho phần nhiều hệ điều hành tương tự Unix (bao gồm Solaris, Linux, Mac OS X, và các hệ điều hành BSD nguồn mở), OpenVMS, và Microsoft Windows IBM cung cấp một phiên bản tương thích với Hệ thống i (OS/400) OpenSSL dựa trên SSLeay do Eric A Young và Tim Hudson phát triển cho đến vào khoảng tháng 12 năm 1998, khi RSA Security bắt đầu mướn Young và Hudson

2. Heartbleed

2.1. Khái niệm

Như đã nói ở trên giao thức SSL và TLS là các giao thức cung cấp tính năng bảo vệ tính bí mật và riêng tư cho các ứng dụng như website, email, tin nhắn instant message (IM) và cả mạng riêng ảo VPN Heartbleed

là một lỗi rất nghiêm trọng (CVE-2014-0160) của thư viện mã hóa

Trang 10

OpenSSL, xảy ra khi triển khai thêm tính năng mở rộng TLS và DTLS heartbeat của OpenSSL

Lỗi bảo mật này được độc lập tìm ra bởi nhóm các chuyên gia bảo mật (Riku, Antti và Matti) tại công ty Codenomicon, trong quá trình nâng cấp tính năng SafeGuard của công ty quét lỗi bảo mật Defensics Chuyên gia Neel Mehta thuộc bộ phận bảo mật của Google – người đầu tiên thông báo lỗi đến nhóm OpenSSL

Lỗi Heartbleed là cực kỳ nghiêm trọng do nó phơi bày một số lượng lớn các khóa 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ủ, và thậm chí giả mạo máy chủ

Lỗi Heartbleed cho phép mọi người trên Internet có thể đọc được bộ nhớ của các hệ thống được bảo vệ bởi phiên bản lỗi của phần mềm OpenSSL phiên bản 1.0.1 đến 1.0.1f Kẻ tấn công có thể lấy được mã bí mật – mã được sử dụng để định danh máy chủ dịch vụ và để mã hóa thông tin được chuyển đi, mã hóa tên mà mật khẩu người dùng và cả bản thân thông tin Từ đó, kẻ tấn công có thể lấy trộm được thông tin, dữ liệu

Khai thác lỗ hổng, hacker có thể lấy được private key của server, sử dụng để mã hóa các dữ liệu trao đổi giữa server và client Từ đó hacker có thể đọc được toàn bộ thông tin được trao đổi giữa client và server như chưa hề được mã hóa :D Dễ hiểu hơn là hacker có thể đọc được username/password, nội dung email, chat vv

Như vậy, đích nhắm của hacker sẽ là các site có thanh toán trực tuyến như: ngân hàng điện tử, chứng khoán điện tử, cổng thanh toán điện

tử, các trang về thương mại điện tử Ngoài ra, các mail server và một số dịch vụ khác có sử dụng OpenSSL để mã hóa cũng sẽ là mục tiêu tấn công

2.2. Heartbleed hay Heartbeat?

Trang 11

Vì lỗ hổng nằm trong việc xử lý TLS Heartbeat extension (RFC6520) của OpenSSL Nguyên lý hoạt động của RFC này là để client/server kiểm tra xem bạn của mình có còn sống hay không (kiểm tra nhịp tim – Heartbeat) Do lỗi ở tính năng kiểm tra heartbeat, nên người ta văn vẻ gọi

lỗ hổng là Heartbleed

Cụ thể: Client sẽ gửi 1 message heartbeat đến server với 1 kích thước nào đó (ví dụ 1KB ) thì server sẽ phản hồi chính message đó lại cho client Tạm hiểu là nếu tôi ném cho ông 1 quả táo để xem ông có còn sống hay không, ông sẽ ném lại tôi đúng quả táo đó để báo là ông còn sống

Nhưng lợi dụng việc xử lý không tốt trong OpenSSL, hacker sẽ gửi 1 message có kích thước thật là 1KB, nhưng lại lừa rằng nó có kích thước 64KB Do không kiểm tra cẩn thận, nên server sẽ trả lời bằng 1 gói tin có kích thước là 64KB (bao gồm 1KB là message thật và 63 KB trong bộ nhớ của server) Với lỗ hổng này, hacker sẽ tự nhiên nhận được 63KB dữ liệu trên RAM của server để tiếp tục khai thác

2.3 Heartbleed hoạt động như thế nào

Vấn đề lỗi ở đây không phải nằm ở công nghệ TLS/SSL hay OpenSSL

mà ở các dòng lệnh trong Heartbeat

Sử dụng phần mở rộng Heartbeat, hai máy tính sẽ truyền dữ liệu qua lại để đảm bảo đầu bên kia vẫn còn hoạt động Máy trạm sẽ truyền một mẩu tin (heartbeat) đến máy chủ (website) và máy chủ hồi đáp Trong quá trình trao đổi, nếu một trong 2 máy ngừng hoạt động thì máy còn lại

sẽ biết được nhờ vào cơ chế đồng bộ heartbeat

Khi heartbeat được gửi đi, một phần bộ nhớ tạm thời trên máy chủ (khoảng 64kbyte) chứa những thông tin nhạy cảm như nội dung của bản tin, thông tin đăng nhập, khóa phiên và khóa riêng của máy chủ sẽ bị rò rỉ

và kẻ tấn công có thế bắt được Bằng cách gửi các yêu cầu heartbleed nhiều lần, kẻ tấn công có thể lấy được nhiều thông tin hơn từ bộ nhớ máy chủ Điều đó có nghĩa là tất cả các thông tin chứa trên bộ nhớ máy chủ trở nên dễ tổn thương trước tội phạm trên mạng

Khoảng 2/3 số lượng máy chủ web trên thế giới phụ thuộc vào OpenSSL, điều đó đồng nghĩa với việc thông tin được truyền trên hàng trăm nghìn website có thể bị ảnh hưởng

Lỗ hổng Heartbleed đã được vá trong phiên bản OpenSSL v1.0.1g

Ngày đăng: 14/12/2017, 09:39

w