Lỗ hổng Heartbleed là một lỗ hổng nghiêm trọng trong thư viện phần mềm mã hoá phổ biến là OpenSSL. Điểm yếu này cho phép ăn cắp những thông tin đã được bảo vệ, trong điều kiện bình thường, bởi mã hoá SSLTLS được sử dụng để đảm bảo an toàn cho Internet. SSLTLS cung cấp an toàn thông tin liên lạc và sự riêng tư trên Internet cho các ứng dụng như web, email, tin nhắn tức thời (IM) và một số mạng riêng ảo (VPNs). Lỗ hổng Heartbleed được độc lập tìm ra bởi nhóm các chuyên gia bảo mật (Riku, Antti, 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. Lỗ hổng được công bố vào ngày 7 tháng 4 năm 2014 với CVE20140160.
Trang 1Mục lục
Mục lục 1
CHƯƠNG 1 TỔNG QUAN 2
1 Lỗ hổng Heartbleed 2
2 Độ nguy hiểm của lỗ hổng Heartbleed 3
3 Tác động của Heartbleed trên phạm vi toàn cầu 4
CHƯƠNG II HEARTBLEED ATTACK 6
1 Cơ bản về mã hoá SSL/TLS 6
2 Heartbeat Extension 10
Chương III Demo 16
1 Xây dựng lab phục vụ cho demo 16
2 Thực hiện tấn công: 24
3 Khắc phục lỗ hổng Heartbleed và hậu quả do lỗ hổng gây ra 29
IV TỔNG KẾT 31
TÀI LIỆU THAM KHẢO 31
Trang 2Lỗ hổng Heartbleed được độc lập tìm ra bởi nhóm các chuyên gia bảo mật (Riku,Antti, Matti) tại công ty Codenomicon, trong quá trình nâng cấp tính năngSafeGuard của công ty quét lỗi bảo mật Defensics Lỗ hổng được công bố vàongày 7 tháng 4 năm 2014 với CVE-2014-0160.
Trang 32 Độ nguy hiểm của lỗ hổng Heartbleed
Hình 2: Độ nguy hiểm của lỗ hổng Heartbleed
Lỗ hổng Heartbleed cho phép bất kỳ ai trên Internet đọc bộ nhớ của hệ thống đượcbảo vệ bằng điểm yếu trên một vài phiên bản của phần mềm OpenSSL Điều nàygây ảnh hưởng đến các khoá bí mật được sử dụng để xác định các nhà cung cấpdịch vụ và mã hoá đường truyền, tên đăng nhập và mật khẩu của người dùng vàcác nội dung thực tế Nó cho phép kẻ tấn công nghe trộm các thông tin liên lạc,đánh cắp dữ liệu trực tiếp từ các dịch vụ và người dùng và để mạo danh các dịch
vụ và người dùng
Bruce Schneier, nhà mật mã học nổi tiếng đánh giá lỗi Heartbleed “Nếu theo thangđiểm từ 0 tới 10, tôi sẽ đánh giá tính nguy hiểm của điểm yếu này là 11” Do đó,người dùng cần ngay lập tức update chương trình OpenSSL, thay đổi khóa, dùngcác chứng chỉ an toàn mới, thay đổi mật khẩu trên tất cả các website vì trong vòng
2 năm qua điểm yếu có thể đã được khai thác và sử dụng bởi những kẻ xấu
Trang 4Cũng đã có các bằng chứng cho thấy việc quét bộ nhớ của các máy chủ sử dụngđiểm yếu này đã xuất hiện từ năm 2013 Điều này chứng tỏ rằng, ai đó đã biết đếnđiểm yếu này từ trước đó.
Sau một vài ngày công khai về lỗ hổng bảo mật này, chuyên gia lập trình ngườiĐức, Robin Seggelmann đã nói: chính anh ta, ngày 01/01/2012 đã đề xuất mã mởrộng Heartbeat cho giao thức TLS (RFC 6520) và một trong các tiến trình của nó
đã không thực hiện việc kiểm tra các giới hạn cần thiết
Seggelmann cũng nói rằng, việc bỏ sót lỗi này trong đoạn mã là do sơ xuất, anh ta
và cả nhóm kiểm tra chương trình đã để cho mã này đi vào hoạt động mà khôngnhận ra lỗi Việc kiểm tra giới hạn này lẽ ra phải được thực hiện theo các nguyêntắc xây dựng mã nguồn mở
Robin Seggelmann là một trong những chuyên gia lập trình nổi tiếng trong thế giới
mã nguồn mở Sau sự việc này, Robin Seggelmann hy vọng nhiều chuyên gia sẽquan tâm và tham gia vào việc hạn chế cũng như nhanh chóng phát hiện các lỗitrong các dự án mã nguồn mở
3 Tác động của Heartbleed trên phạm vi toàn cầu
OpenSSL là thư viện mã hoá phổ biến nhất được sử dụng trên máy chủ webApache và Nginx, sử dụng dịch vụ bảo mật tầng giao vận (TLS) tên là Heartbeat -một phần mở rộng được thêm vào TLS vào năm 2012 Theo nghiên cứu củaNetcraft (năm 2014) thì pache và Nginx chiếm 66% dịch vụ máy chủ sử dụng trêncác trang web đang hoạt động trên Internet
Ngoài ra, OpenSSL còn được sử dụng để bảo vệ máy chủ email, máy chủ tin nhắn(giao thức XMPP), mạng riêng ảo (SSL VPN), thiết bị mạng và rất nhiều phầnmềm khác
Trang 5Nhà nghiên cứu bảo mật Robert Graham đã thực hiện việc “quét Internet” và pháthiện ra có hơn 600.000 máy chủ bị lỗi Heartbleed, bao gồm cả yahoo.com,mgur.com, flickr.com, hidemyass.com Do lỗi Heartbleed mà Cơ quan ThuếCanada phải tạm dừng dịch vụ thu thuế điện tử và dịch vụ Soundcloud cũng phảiđăng xuất tất cả người dùng để sửa lỗi bảo mật này Yahoo với hơn 800 triệu ngườidùng cũng gặp phải lỗi này.
Hình 3: Phạm vi ảnh hưởng của lỗ hổng Heartbleed
Trang 6CHƯƠNG II HEARTBLEED ATTACK
1 Cơ bản về mã hoá SSL/TLS
SSL/TLS được sử dụng chính để mã hoá dữ liệu bí mật gửi đi thông qua một mạnglưới không an toàn ví dụ như Internet Trong giao thức HTTPS, SSL/TLS được sửdụng để mã hoá bao gồm URL, HTTP header, cookies và dữ liệu được nhập vàothông qua các mẫu Một trang web được đảm bảo an toàn với SSL/TLS có mộtURL bắt đầu với "https://"
Giao thức bảo mật SSL/TLS hoat động giữa lớp ứng dụng và lớp giao vận, nơi mà
nó có thể bảo mật, sau đó gửi dữ liệu ứng dụng tới tầng giao vận Vì SSL/TLS làmviệc giữa lớp ứng dụng và lớp giao vận, SSL/TLS có thể phục vụ rất nhiều giaothức tầng ứng dụng
Giao thức SSL/TLS có thể được chia thành 2 lớp nhỏ hơn Lớp đầu tiên là lớp giaothức bắt tay, lớp này chứa ba giao thức nhỏ: giao thức bắt tay, giao thức chuyểnđổi mã đặc tả, và giao thức cảnh báo Lớp thứ hai là giao thức bản ghi
Trang 7a, Lớp bắt tay
Lớp bắt tay chứa ba giao thức nhỏ:
- Bắt tay: được sử dụng để dàn xếp thông tin phiên giữa máy trạm và máy chủ.Thông tin phiên chứa một định danh phiên (session ID), chứng chỉ ngang hàng, đặc
tả bản mã được sử dụng, thuật toán nén được sử dụng và những bí mật chia sẻđược sử dụng để tạo khoá
- Chuyển đổi mã đặc tả: được sử dụng để thay đổi dữ liệu tạo khoá sử dụng để mãhoá giữa máy chủ và máy trạm Dữ liệu tạo khoá là dữ liệu thô được sử dụng chotạo khoá mà quá trình mã hoá sử dụng Giao thức chuyển đổi mã đặc tả bao gồmmột thông điệp duy nhất để nói với bên kia trong một phiên SSL/TLS, hay cũngđược gọi là một ngang hàng, khi người gửi muốn thay đổi một tập khoá mới Khoá
sẽ được tính toán từ thông tin trao đổi bằng giao thức bắt tay
- Cảnh báo: tin nhắn cảnh báo được sử dụng để biểu thị một thay đổi trong trạngthái hoặc một lỗi điều kiện tới bên ngang hàng Có rất nhiều dạng của các cảnh báo
để nhắc nhở bên ngang hàng của khi bình thường và lỗi điều kiện Danh sách đầy
đủ có thể tìm thấy ở RFC 2246: "Giao thức TLS phiên bản 1.0" Cảnh báo phổ biếngửi khi kết nối bị đóng, nhận được một tin nhắc không xác định, một tin nhắnkhông thể giải mã, hoặc người dùng thoát ứng dụng
Chức năng của giao thức bắt tay:
Giao thức bắt tay cung cấp một số chức năng bảo mật vô cùng quan trọng Nó thựchiện một chuỗi trao đổi bắt đầu xác thực và thoả thuận mã hoá, mã băm, và thuậttoán nén
* Xác thực:
Với mục đích xác thực, giao thức bắt tay sử dụng chứng chỉ X.509 để cung cấp
Trang 8chứng cứ mạnh tới bên thứ hai, giúp định danh bên giữ chứng chỉ và mã bí mậttương ứng Một chứng chỉ là một dạng định danh số mà thường được đảm bảo bởi
cơ quan chứng thực (CA) và chứa thông tin định danh, thời hạn có hiệu lực, khoácông khai, một chuỗi số, và chữ ký số của người phát hành
Một CA là một tổ chức thứ ba đáng tin cậy mà xác nhận định danh của một ngườiyêu cầu chứng chỉ (thường là một người hay một máy tính), và cung cấp cho ngườiyêu cầu một chứng chỉ Chứng chỉ liên kết định danh của người yêu cầu với mộtkhoá công khai Các CA cũng cấp mới và thu hồi các chứng chỉ khi cần thiết
* Mã hoá:
Có hai loại mã hoá chính: khoá đối xứng ( cũng được biết đến như khoá bí mật) vàkhoá bất đối xứng ( cũng được biết đến như khoá công khai và khoá bí mật).SSL/TLS sử dụng cả mã hoá khoá đối xứng và khoá bất đối xứng
- Khoá đối xứng: trong mã hoá khoá đối xứng, khoá giống nhau được sử dụng để
mã hoá và giải mã tin nhắn Nếu cả hai phần muốn trao đổi tin nhắn đã được mãhoá an toàn, chúng cần sở hữu một khoá đối xứng giống nhau Mật mã khoá đốixứng thường được sử dụng cho mã hoá lượng lớn dữ liệu vì quá trình tính toánnhanh hơn so với mật mã khoá bất đối xứng Thuật toán cơ bản bao gồm DES( Data Encryption Standard), 3-DES (Triple DES), RC2, RC4 và AES (AdvancedEncrypt Standard)
- Khoá bất đối xứng: Khoá bất đối xứng hay mà mã hoá khoá công khai sử dụngmột cặp khoá mà có nguồn gốc với nhau thông qua một quá trình tính toán phứctạp Một khoá được công khai, thường bằng cách hỏi CA để xuất bản một khoácông khai trong một chứng chỉ cho người giữ chứng chỉ ( cũng được gọi là một chủthể) Khoá bí mật được giữ bí mật bởi chủ thể và không bao giờ chia sẻ cho bất kỳ
ai Các khoá làm việc cùng nhau, với một được sử dụng cho quá trình trái ngược
Trang 9nhau: Nếu khoá công khai được sử dụng để mã hoá dữ liệu, chỉ có khoá bí mật củacặp khoá có thể giải mã nó; nếu khoá bí mật được sử dụng để mã hoá, khoá côngkhai được sử dụng để giải mã Mối quan hệ này cho phép chương trình mã hoákhoá công khai làm hai việc quan trọng Đầu tiên, bất kỳ ai có khoá công khai củamột chủ thể và sử dụng nó để mã hoá dữ liệu mà chỉ người dùng với khoá bí mật
có thể giải mã Thử hai, nếu một chủ thể mã hoá dữ liệu sử dụng khoá bí mật, bất
kỳ ai cũng có thể giải mã dữ liệu bằng sử dụng khoá công khai đúng đắn Cái này
là nền tảng cho chữ ký số Thuật toán phổ biến nhất là RSA (Rivest, Shamir vàAdleman)
SSL/TLS sử dụng khoá công khai để xác thực một máy chủ tới một máy trạm, vàkhông bắt buộc máy trạm tới máy chủ Mật mã khoá công khai cũng được sử dụng
để thiết lập một khoá phiên Khoá phiên được sử dụng trong thuật toán đối xứng để
mã hoá khối lượng lớn dữ liệu Điều này kết hợp lợi ích của mã hoá bất đối xứngcho xác thực nhanh hơn, ít xử lý chuyên sâu cho mã hoá khoá đối xứng với khốilượng lớn
* Thuật toán băm
Trong quá trình bắt tay, thuật toán băm cũng được thảo thuận Một băm là một ánh
xạ một chiếu của một giá trị cho một tập nhỏ giá trị cung cấp ban đầu, cũng nhưkích thước của kêt quá băm là nhỏ hơn tin nhắn ban đầu và băm là duy nhất cho dữliệu nguyên thuỷ Một băm giống với một vân tay: một vân tay là duy nhất cho mộtngười và nhỏ hơn so với thân thể con người Quá trình băm được sử dụng để thiếtlập tính toán vẹn của dữ liệu trong khi chuyển đi Hai thuật toán băm phổ biến nhất
là MD5 (Mesage Digest) và SHA-1 ( Standard Hash Algorithm 1) MD5 cung cấpmột giá trị băm 128 bit và SHA-1 cung cấp một giá trị 160 bit
Thuật toán băm bao gồm một giá trị được sử dụng để kiểm tra tính toàn vẹn của dữliệu trao đổi Giá trị này được thiết lập sử dụng một MAC hoặc một HMAC MAC
Trang 10sử dụng một chức năng ánh xạ để biểu diễn dữ liệu tin nhắn dưới dạng độ dài cốđịnh, tốt hơn là nhỏ hơn, tính toán sau đó băm tin nhắn MAC đảm bảo rằng dữliệu sẽ không bị thay đổi trong quá trình truyền thông Sự khác nhau giữa MAC vàchữ ký số là một chữ ký số cũng là một phương pháp xác thực SSL sử dụng MAC.
HMAC cũng giống với MAC nhưng sử dụng một thuật toán băm kết hợp với khoá
bí mật Khoá bí mật được thêm vào dữ liệu để băm Điều này làm cho băm an toànhơn vì cả hai bên cần có giống khoá bí mật để chứng minh dữ liệu là xác thực TLS
sử dụng HMAC
b, Lớp bản ghi
Giao thức tại lớp bản ghi nhận và mã hoá dữ liệu từ lớp ứng dụng, sau đó chuyển
nó tới lớp giao vận Giao thức bản ghi phân mảnh dữ liệu tới một kích thước phùhợp với thuật toán mã hoá, tuỳ chọn nén nó (hoặc với dữ liệu nhận được thì giảinén nó), gắn vào một MAC hoặc HMAC (HMAC chỉ được cung cấp bởi TLS) sau
đó mã hoá (hoặc giải mã) dữ liệu sử dụng thông tin thoả thuận trong giao thức bắttay
2 Heartbeat Extension
HeartBeat Extension được thiết kế cho Transport Layer Security (TLS) vàDatagram Transport Layer Security (DTLS) DTLS đưcọ thiết kế để bảo vệ chogiao thức gửi không tin cậy Thông thường, các giao thức dạng này không có quản
lý phiên Cơ chế này chỉ khả dụng nếu ở lớp DTLS tìm ra một đối tượng còn sống.TLS thì dựa trên giao thức đáng tin cậy Tuy nhiên nó không phù hợp để giữ kếtnối sau khi quá tình truyền tin kết thúc
Heartbeat Extension ra đời nhằm khắc phục những nhược điểm trên Người dùng
sẽ sử dụng một tin nhắn HeartbeatRequest gửi đến các máy khác để kiểm tra và sẽnhận lại được một tin nhắn HeartbeatResponse
Trang 11a Heartbeat Hello Extensions
Sự hỗ trợ của Heartbeats được thể hiện với Hello Extensions Một ngang hàngkhông chỉ có thể chỉ ra việc hỗ trợ của Heartbeats, nó cũng có thể lựa chọn nó sẵnsàng nhận thông điệp HearbeatRequest và hồi đáp với HeartbeatResponse hoặc chỉsẵn sàng để gửi thông điệp HeartbeatRequest Các dạng được chỉ ra bằng cách sửdụng peer_allowed_to_send như là HeartbeatMode; sau này đã được chỉ định bằng
sử dụng peer_not_allowed_to_send như HeartbeatMode Quyết định này có thể
thay đổi mỗi khi có sự thoả thuận lại Thông điệp HeartbeatRequest không phải để
gửi tới một ngang hàng để chỉ ra peer_not_allowed_to_send Nếu một thiết bị đầucuối đã chỉ ra peer_not_allowrd_to_send và nhận được một thông điệpHeartbeatRequest, nó nên xoá bỏ thông điệp nhận được một cách âm thầm và cóthể gửi lại thông điệp cảnh báo unexpected_message
Định dạng của Heartbeat Hello Extension được định nghĩa bởi:
Trang 12gồm 2 loại thông điệp chính là:
HeartBeatRequest gần như có thể đến bất kỳ khi nào trong một chu kỳ kết nối Bất
cứ một thông điệp HeartBeatRequest nào cũng cần được có mộtHeartBeatResponse tương ứng Tuy nhiên, HeartBeatRequest không nên gửi trongquá trình bắt tay, vì nếu quá trình bắt tay diễn ra trong lúc gói tinHeartBeatRequest đang gửi thì bên gửi phải dừng DTLS
Sẽ không có nhiều gói tin HeartBeatRequest được gửi trong cùng một thời gian,một gói tin HeartBeatRequest sẽ hợp lệ nếu bên gửi nhận được mộtHeartBeatResponse tương ứng hoặc đến khi thời gian truyền hết hạn
Khi sử dụng giao thức vận chuyển không đáng tin DCCP hoặc UDP, tin nhắnHeartBeatRequest sẽ có một khoảng thời gian timeout để truyền lại gói tin, nếutrong khoảng thời gian timeout mà không nhận được gói tin HeartBeatResponse thìkết nối DTLS được chấm dứt để bắt đầu gửi lại Trong các chương trình gửi lại sẽ
có cơ chế để đảm bảo không có nhiều gói tin HeartRequest được gửi cùng một lúc,đảm bảo việc kiểm soát tắc nghẽn được xử lý thích hợp
Đối với các giao thức truyền tin đáng tin cậy như Stream Control TranmissionProtocol (SCTP) hoặc TCP, HeartBeatRequest chỉ cần gửi lại một lần nữa tầnggiao vận (transport layer) sẽ kiểm soát việc truyền lại Nếu không nhận được thông
Trang 13báo HeatBeatResponse trong một thời gian tương ứng thì kết nối DTLS/TLS sẽđược chấm dứt bởi chương trình gửi gói tin HeartBeatRequest.
c Tin nhắn Heartbeat Request và Response
Một tin nhắn HeartbeatRequest sẽ bao gồm loại gói tin, payload và padding:
• type: loại gói tin (request hoặc response)
• payload_length: độ dài của payload
• payload: chứa các nội dung tuỳ ý
• Padding: chứa nội dung ngẫu nhiên sẽ bị bỏ qua bởi người nhận Độ dài củamột tin nhắn Heartbeat là TLSPlaintext.length cho TLS vàDTLSPlaintext.length cho DTLS
Tổng chiều dài của một Heartbeat Messages không được vượt quá 2^14 haymax_fragment_length được định nghĩa trong RFC 6066 Người gửi các tin nhắnHeartBeat phải gửi một padding ngẫu nhiên ít nhất là 16 bytes Padding đã nhậnphải được bỏ qua
Nếu độ dài payload_length của một tin HeartBeat quá lớn, các tin Heartbeat đãnhận phải bị bỏ đi Khi một HeartBeatRequest được nhận hợp lệ thì người nhậnphải gửi một tin HeartBeatResponse tương ứng mang theo một bản sao chính xácpayload của gói tin HeartBeatRequest đã nhận
Trang 14Nếu HeartBeatResponse không chứa payload như trong HeartBeatRequest thì nóphải bị loại bỏ và bộ đếm thời gian để phát lại gói tin sẽ dừng lại.
3 Tấn công Heartbleed
Chuẩn SSL mặc định bao gồm tuỳ chọn “Heartbeat” Chức năng này rất hữu ích vìmột vài router trên internet sẽ cắt một kết nối nếu thời gian im lặng quá dài Tómlại, giao thức Heartbeat làm việc giống như sau:
Tin nhắn heartbeat gồm có ba phần: một yêu cầu để hỏi, một tin nhắn ngẫu nhiên(trong ví dụ trên là “banana”), và số ký tự của tin nhắn ngẫu nhiên Máy chủ sẽ đơngiản cung cấp lại một hồi đáp theo như yêu cầu nhận được và gửi phản hồi lại chomáy trạm
Tấn công Heartbleed lợi dụng việc trên thực tế là các máy chủ tin tưởng khi hồiđáp Khi một ai đó nói rằng tin nhắn có 6 ký tự, máy chủ sẽ tự động gửi lại 6 ký tựtrong khi phản hồi Một người dùng có mục đích xấu sẽ tận dụng tối đa tính cả tincủa máy chủ:
Trang 15Hiển nhiên, từ “giraffe” không dài 100 ký tự Nhưng máy chủ không kiểm tratrước khi gửi lại phản hồi, và nó gửi lại 100 ký tự Cụ thể, nó sẽ gửi lại 7 ký tự
“giraffe” theo sau là 93 ký tự đã được lưu trữ sau từ “giraffe” trong bộ nhớ củamáy chủ Máy tính thường lưu trữ thông tin theo một thứ tự lộn xộn trong cố gắnglàm bộ nhớ của nó càng chặt càng tốt, do đó, không thể nói được thông tin nào cóthể được trả lại Trong trường hợp này, các bit của bộ nhớ đằng sau từ “giraffe”chứa thông tin cá nhân nhạy cảm thuộc về người dùng John Smith
Trong tấn công Hearbleed thực tế, kẻ tấn công không chỉ yêu cầu 100 ký tự Kẻ tấncông có thể yêu cầu lên đến 64000 ký tự của bản rõ Và họ không dừng lại ở đây,
họ có thể gửi tin nhắn heartbeat độc hại qua lại liên tục, cho phép họ lấy đượcnhững mảnh khác của bộ nhớ máy chủ mỗi lần Trong quá trình này, họ có thể đạtđược một lượng lớn dữ liệu mà không bao giờ được công khai
Trang 16Chương III Demo
1 Xây dựng lab phục vụ cho demo
Chuẩn bị:
Mã khai thác: http://www.garage4hackers.com/entry.php?b=2551
Máy chủ chứa lỗi: Ubuntu 12.04 LTS http://www.ubuntu.com/download/server
Đầu tiên, chúng ta sẽ cấu hình dịch vụ Apache với SSL phục vụ trên Ubuntu đểkhám phá lỗ hổng Heartbleed Trên máy chủ ubuntu, chúng ta sẽ thực hiện cácbước sau:
• Kích hoạt module SSL và khởi động lại máy chủ web Apache:
root@ubuntu:~# a2enmod ssl
root@ubuntu:~# service apache2 restart
• Tạo thư mục chứa khoá của máy chủ web và chứng chỉ của nó(/etc/apache2/ssl):
root@ubuntu:~# mkdir /etc/apache2/ssl
• Tạo chứng chỉ và khoá cho máy chủ:
root@ubuntu:/etc/apache2/ssl# openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/apache2/ssl/webserver.key -out /etc/apache2/ssl/webserver.crt
Generating a 2048 bit RSA private key
+++
+++
writing new private key to 'webserver.key'
-You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-Country Name (2 letter code) [AU]:VN
State or Province Name (full name) [Some-State]:HN
Locality Name (eg, city) []:Ha Noi
Organization Name (eg, company) [Internet Widgits Pty Ltd]:KMA