Tải bản đầy đủ (.docx) (19 trang)

Báo cáo Heartbleed MS12 020

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 (547.25 KB, 19 trang )

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

BÁO CÁO CUỐI KỲ
Đề tài
Lỗ Hổng Heartbleed và MS12020
Giảng viên
:
Huỳnh Thanh Tâm
Môn học
CSDL

:

An toàn ứng dụng Web và

Lớp

:

D14CQAT01

Nhóm 3
Nguyễn Phước Duy

N14DCAT014

Ka Lê Anh Tài

N14DCAT012



Nguyễn Hoàn Sơn

N14DCAT021

Nguyễn Anh Phụng

N14DCAT023

Dương Quang Khang

N14DCAT008

Bùi Anh Thắng

N14DCAT119

Trần Trí Nguyên

N14DCAT085


MỤC LỤC

2


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

3


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.
4



 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).

5



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
6


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
301
400
403

OK: Yêu cầu thành công
Moved Permanently: đối tượng yêu cầu đã được chuyển.
Bad Request: server không hiểu được thông điệp yêu cầu.
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

7



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
8


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

9


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?

10


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.

11


Bộ nhớ trên một máy chủ bị rò rỉ
2.4. Tác động của Heartbleed trên phạm vi toàn cầu


OpenSSL là thư viện mã hóa phổ biến nhất được sử dụng trên máy
chủ web Apache và Nginx, sử dụng dịch vụ bảo mật lớp Transport (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ủa Netcraft năm 2014 thì Apache và Nginx chiếm 66%
dịch vụ máy chủ sử dụng trên cá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 (giao
thức SMTP, POP và IMAP), máy chủ tin nhắn (giao thức XMPP), các mạng
riêng ảo (SSL VPN), các thiết bị mạng và rất nhiều các phần mềm người
dùng khác.
Nhà nghiên cứu bảo mật Robert Graham đã thực hiện việc “quét
Internet” và phát hiệ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.
Tại Việt Nam, hơn 10 trang Cổng Thông Tin Điện Tử, Hộp Thư Điện
Tử và 8 trang ngân hàng điện tử Internet Banking tất cả đều bị ảnh hưởng
lỗ hổng này.
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 trên.

12


Trang Soundcloud bảo trì hệ thống lỗi heartbleed
Tuy nhiên, ngay sau đó các trang web lớn như Google, Youtube,
Facebook, Tumblr, Yahoo và Dropbox đã thực hiện sửa lỗi này, những vẫn
có hàng nghìn website chưa thực hiện việc này. Người dùng được khuyên
thực hiện đổi mật khẩu trên những website đã sửa lỗi này.
2.5. Những máy chủ nào có nguy cơ bị lỗ hổng ?


Phiên bản tồn tại lỗ hổng là OpenSSL 1.0.1 đến 1.0.1f. Các phiên bản
trước đó và sau đó không bị.
Một số hệ điều hành có cài đặt sẵn OpenSSL sau đây có thể bị:






Debian Wheezy (stable), OpenSSL 1.0.1e-2+deb7u4
Ubuntu 12.04.4 LTS, OpenSSL 1.0.1-4ubuntu5.11
CentOS 6.5, OpenSSL 1.0.1e-15
Fedora 18, OpenSSL 1.0.1e-4
OpenBSD 5.3 (OpenSSL 1.0.1c 10 May 2012) and 5.4 (OpenSSL

1.0.1c 10 May 2012)
 FreeBSD 10.0 – OpenSSL 1.0.1e 11 Feb 2013
 NetBSD 5.0.2 (OpenSSL 1.0.1e)
 OpenSUSE 12.2 (OpenSSL 1.0.1c)
2.6. Cập nhật bản vá cho lỗ hổng như thế nào ?
Đầu tiên, cần kiểm tra phiên bản hiện tại trên máy là bao nhiêu
bằng câu lệnh:
openssl version – a
Nếu kết quả ví dụ là
OpenSSL 1.0.1e 11 Feb 2013 (phiên bản 1.0.1e có lỗi)
Sau đó tùy vào OS của bạn, sẽ cập nhật với câu lệnh tương ứng
Ví dụ trên CentOS là yum update openssl
Ví dụ trên Ubuntu là apt-get upgrade openssl
2.7. Giải pháp
 Update phiên bản OpenSSL từ 1.0.1f lên 1.0.1g để vá lỗi bảo mật

13


 Sử dụng các dịch vụ và website uy tín
 Ngừng sử dụng các dịch vụ proxy chưa được vá lỗi
 Tránh truy cập vào những tên miền lạ với bất kỳ phần mềm trình

khách nào

14


LỖ HỔNG MS12-020
Năm 2012, trên máy tính sử dụng hệ điều hành Microsoft Windows
mới được phát hiện lỗ hổng bảo mật rất nguy hiểm. Lỗ hổng này cho phép
tin tặc từ xa có thể kiểm soát, ăn cắp hoàn toàn dữ liệu máy tính bằng
cách cài mã độc đối với các máy tính sử dụng hệ điều hành Microsoft
Windows có mở dịch vụ Remote Desktop thông qua giao thức Remote
Desktop Protocol (RDP).
Đây là lỗi zero day khá nổi tiếng ở năm 2012 được Microsoft xếp
hạng ở mức cao (Critical) với số điểm là 9.3.
Theo thống kê nắm 2012 có tới 32% máy chủ web .gov.vn mắc lỗ
hổng nghiêm trọng này.
1. Một số khái niệm

Remote Desktop Protocol (RDP) là một giao thức độc quyền được
phát triển bởi Microsoft, cung cấp cho người dùng giao diện đồ họa để kết
nối với máy tính khác thông qua kết nối mạng. Người sử dụng sử dụng
phần mềm RDP client cho mục đích này, trong khi máy tính khác phải
chạy phần mềm RDP server. RDP client có trong hầu hết các phiên bản

của Microsoft Windows (bao gồm Windows Mobile), Linux, Unix, macOS,
iOS, Android và các hệ điều hành khác. RDP server được tích hợp vào hệ
điều hành Windows, Unix và OS X. Theo mặc định, RDP server sử dụng
cổng TCP 3389 và cổng UDP 3389.
2. Nguyên lý hoạt động của lỗi này như sau:

Tận dụng lỗi tràn bộ đệm và Use-After-Free để dump máy.
 Mỗi khi có kết nối tới, RDP sẽ sử dụng hàm NM_Connect(), lợi dụng

điều này hacker sẽ gửi nhiều kết nối RDP đến server làm cạn kiệt các
cổng kết nối.
 Sau khi số kết nối tới RDP đạt tối đa, RDP sẽ dùng lệnh

NMAbortConnect() để ngắt các kết nối tới tiếp theo tới RDP.
 Lúc này hacker thực hiện kỹ thuật tràn bộ đệm của RDP để RDP lại

sử dụng tiếp hàm NMDetachUserReq() – Hàm này tương tự như hàm

15


NM_Connect() và lại tiếp tục nhận tiếp những kết nối làm server bị
dump.

Hình ảnh khi server bị dump
3. Những hệ điều hành bị lỗi
 Windows XP Service Pack 3
 Windows XP Professional x64 Edition Service Pack 2
 Windows Server 2003 Service Pack 2
 Windows Server 2003 x64 Edition Service Pack 2

 Windows Server 2003 with SP2 for Itanium-based Systems
 Windows Vista Service Pack 2
 Windows Vista x64 Edition Service Pack 2
 Windows Server 2008 32-bit Systems Service Pack 2*
 Windows Server 2008 x64-based Systems Service Pack 2*
 Windows Server 2008 Itanium-based Systems Service Pack 2
 Windows 7 32-bit Systems và Windows 7 32-bit Systems Service

Pack 1
 Windows 7 32-bit Systems và Windows 7 32-bit Systems Service
Pack 1
 Windows 7 x64-based Systems và Windows 7 x64-based Systems
Service Pack 1
 Windows 7 x64-based Systems và Windows 7 x64-based Systems
Service Pack 1
16


 Windows Server 2008 R2 x64-based Systems và Windows Server

2008 R2 x64-based Systems Service Pack 1
 Windows Server 2008 R2 x64-based Systems và Windows Server

2008 R2 x64-based Systems Service Pack 1
 Windows Server 2008 R2 Itanium-based Systems và Windows Server

2008 R2 Itanium-based Systems Service Pack 1
 Windows Server 2008 R2 Itanium-based Systems và Windows Server

2008 R2 Itanium-based Systems Service Pack 1

4. Giải pháp khắc phục
• Bước 1: Tắt dịch vụ Remote Desktop trên máy tính (nếu đang bật).
a. Trên hệ điều hành Windows XP
Mở Control Panel từ Start\Settings.
Mở cửa sổ tường lửa (Windows Firewall)
Trong windows Firewall chọn thẻ Exceptions và bỏ chọn dấu kiểm
dịch vụ Remote Desktop.

b. Trên hệ điều hành Windows 7, Vista

Nhấp chuột phải lên biểu tượng Computer từ màn hình desktop hoặc
từ thanh menu Start rồi chọn Properties.

17


Sau đó, nhấp lên liên kết Advanced system settings.

Tiếp tục chọn thẻ Remote và tại thẻ này, lựa chọn nút radio "Don’t
allow connections to this computer”, sau đó nhấn “OK”.

18




Bước 2: Cài đặt bản vá lỗi của lỗ hổng được MS.Windows phát hành

vào ngày 13/3/2012. Thực hiện cập nhật bằng cách:
 Dùng dịch vụ tự động cập nhật có sẵn của Windows.

 Tải
bản

để
cài
đặt
trực
tiếp
tại

địa

/>
19

chỉ:



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

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