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

HC VIN KTHUT MT MÃ  
KHOA AN TOÀN THÔNG TIN  
  
BÀI TP LN MÔN AN TOÀN MNG MÁY TÍNH  
ĐỀ TÀI  
TÌM HIU TN CÔNG HEARTBLEED VÀ PHƯƠNG PHÁP PHÒNG CHỐNG  
Giáo viên hướng dn:  
CAO MINH TUN  
Nhóm thc hin  
:
NGUYN HÀ AN  
VŨ HOÀNG ĐẠT  
LÊ THLINH  
LÊ VĂN PHƯƠNG  
Lp  
:
AT8C  
Hà Ni, tháng 6 năm 2015  
Tìm hiu tn công HeartBleed và phương pháp phòng chống  
Ý KIN CA GIÁO VIÊN  
2
Tìm hiu tn công HeartBleed và phương pháp phòng chống  
MC LC  
3
Tìm hiu tn công HeartBleed và phương pháp phòng chống  
LỜI NÓI ĐẦU  
Mng Internet mang lại cho con người nhng li ích to ln, nó giúp mi  
ngưi trên thế gii xích li gần nhau hơn, chia sẻ thông tin và liên lc vi nhau  
mt cách dễ dàng hơn. Lượng thông tin được chia sẻ và trao đổi ngày càng ln,  
trong đó có rất nhiu thông tin nhy cm, quan trọng. Do đó môi trường kết ni  
Internet vô hình chung li là một môi trường ddàng cho nhng kxu li dng  
để tn công khai thác nhng dliu quan trng hay thc hin nhng mục đích  
phá hoi. Do vy nhu cầu đặt ra là tìm ra nhng gii pháp bo vthông tin nhy  
cm, quan trọng được truyền trong môi trường mng.  
Để bo vthông tin trên mng, chúng ta có thcan thip mt mã vào  
trong môi trường internet nhằm đảm bo thông tin, dliệu tránh được nhng kẻ  
xu có mục đích tấn công khai thác dliệu cũng như phá hoại.Trong đó, giải  
pháp sdng bgiao thꢀc SSL để thiết lp các kênh truyn tin an toàn trên  
Internet là gii pháp được sdng rng ri và hiu quả. Khi đó, dliu trên  
kênh liên lc sꢂ được mhóa và xác thực để đảm bo san toàn. Tuy nhiên,  
trong bgiao thc này vn có mt lhng bo mt khá nghiêm trọng đó là lỗ  
hng heartbleed . Xut phát từ lý do trên, nhóm em đꢁ chọn đề tài “Tìm hiểu tn  
công heartbleed và phương pháp phòng chốngđể hiểu rõ hơn về lhng và  
dng tn công này. Ni dung ca bài tp ln gm có 3 chương:  
Chương I: Nghiên cứu phương pháp tấn công heartbleed vào bgiao  
thc SSL/TLS: Chương này giới thiu phương pháp tấn công heartbleed vào bộ  
giao thc SSL/TLS  
Chương II: Cài đặt, thc hin tn công HeartBleed và phương pháp  
phòng chng : Chương này trình bày nhng vấn đề cơ bản về cài đặt và thc  
hin tn công HeartBleed và đưa ra một slời khuyên để phong chng.  
Chương III: kịch bn demo: chương này nhóm sꢂ trình bày chi tiết  
nhng ni dung mà nhóm thc hin demo trong báo cáo.  
Do thi gian và kiến thc còn hn chế, nên không thtránh khi nhng  
thiếu sót trong ni dung cũng như hình thꢀc, mong thy và các bn xem xét và  
bổ sung để nhóm hoàn thiện hơn bản báo cáo ca mình.  
Chúng em xin chân thành cꢅm ơn !!!  
4
 
Tìm hiu tn 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 BGIAO THC SSL/TLS  
1.1. Tn công HeartBleed  
1.1.1. Tn công OpenSSL da trên lhng Heartbleed  
Heartbleed tm dịch là “trái tim rỉ máu” là một li vbo mật trong thư  
vin mt mã dng mã ngun mở OpenSSL, thư viện này được sdng rng  
rꢁi để phát trin giao thc bo mt tng truyn ti (TLS) trên Internet. Lỗ  
hng này chính là kết quca vic thiếu hàm kim tra gii hn khi xlý tính  
năng mở rộng heartbeat trên TLS. Tính năng heartbeat chính là nguồn gc  
cho tên gi ca lhng heartbleed. Lhổng này cho phép đối phương lấy  
được nhng thông tin bí mật như: khóa riêng của máy ch, cookies và mt  
khu phiên liên lc của người sdng. Nhiều cơ quan bảo mt uy tín trên thế  
giới đꢁ đưa ra cảnh báo và tư vấn bo mật đối vi những người qun trhệ  
thng vli nghiêm trng này.  
1.1.2. Quá trình phát hin  
Tính năng mở rng Heartbeat trong các giao thc TLS và DTLS là mt  
btiêu chuẩn được mô tcthtrong RFC 6520, công bố vào tháng 2 năm  
2012. Nó cho phép ddàng kim tra và gitrạng thái “sống” (alive) cho các  
liên kết thông tin bo mt mà không cn phi tiến hành tha thun li cho mi  
ln kết ni.  
6
   
Tìm hiu tn công HeartBleed và phương pháp phòng chống  
Năm 2011, Robin Seggelmann tại trường Đại hc Duisburg-Essen đꢁ  
phát triển tính năng mở rng Heartbeat cho bộ thư viện mã ngun mở  
OpenSSL. Sau khi Seggelmann yêu cầu đưa tính năng mới này ca mình vào  
OpenSSL, thay đổi của ông đꢁ được Stephen N. Henson, mt trong bn nhà  
phát trin chính ca OpenSSL tiến hành xem xét, đánh giá. Henson đꢁ không  
phát hin ra li trong quá trình phát trin của Seggelmann và đꢁ đưa đoạn mã  
ngun không hoàn thiện này vào thư viện mã ngun mca OpenSSL vào  
ngày 31 tháng 12 năm 2011. Đoạn mã cha lhng bo mật này được sử  
dng rng 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 hot và chính là nguyên nhân gây ra các phiên  
bn OpenSSL cha lhng bo mt Heartbleed.  
Neel Mehta thành viên nhóm bo mt 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ỗ hng này kéo theo li  
nghiêm trng khi xlý bnhdo thc hiện tính năng mở rng Heartbeat gây  
ra. Đối phương có thể ăn cắp lượng thông tin lên đến 64KB tbnhca ng  
dng vi mi ln thc hin hàm heartbeat.  
Lhng do mt kỹ sư tại công ty Codenomicon, mt công ty an ninh  
mng ca Phần Lan đặt tên đồng thi gn vi logo trái tim rmáu. Họ đꢁ lấy  
tên min là Heartbleed.com nhm gii thích li này cho công chúng.  
1.1.3. Phương pháp tấn công và khai thác lhng  
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ế để gikết ni TLS/DTLS (mt tiêu  
chun an ninh công nghtoàn cu to ra mt liên kết được mã hóa gia client  
và server) mà không cn to ra mt liên kết mi vì các thtc to mi liên kết  
qua SSL/TLS phc tp và mt nhiu thời gian. Thông điệp Heartbeat Request  
được gi tphía client ti server bao gm dliu tùy chọn và độ dài ca dữ  
liu. Server nhận được thông điệp này sphi gi li phía client chính xác dữ  
liu yêu cu (hình 1.1):  
7
 
Tìm hiu tn 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:  
struct {  
HeartbeatMessageType type;  
uint16 payload_length;  
opaque payload[HeartbeatMessage.payload_length];  
opaque padding[padding_length];  
} HeartbeatMessage;  
1 byte  
hb type  
2 byte  
payload len  
n byte <= 64KB  
payload  
2 byte  
padding  
Theo như cấu trúc này thì độ dài dliu payload_length tối đa là 16-bit  
usigned integer, tc là Heartbeat request có thyêu cu server trli dliu  
có thlên tới 64KB. Chính điều này là nguyên nhân gây ra lhng  
Heartbleed.  
8
Tìm hiu tn công HeartBleed và phương pháp phòng chống  
Cơ chế phát sinh lhng Heartbleed  
Lhổng này được bt ngun thai hàm tls1_process_heartbeat/dtls1  
_process_heartbeat cha trong hai file ssl/t1_lib.c ssl/dl_both.c của thư  
vin OpenSSL.  
Nidung ca  
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 */  
hbtype = *p++;  
n2s(p, payload);  
pl = p;  
...  
if (hbtype == TLS1_HB_REQUEST)  
{
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;  
/* Enter response type, length and copy payload */  
*bp++ = TLS1_HB_RESPONSE;  
s2n(payload, bp);  
memcpy(bp, pl, payload);  
bp += payload;  
/* Random padding */  
RAND_pseudo_bytes(bp, padding);  
r = dtls1_write_bytes(s, TLS1_RT_HEARTBEAT, buffer, 3 + payload +  
9
Tìm hiu tn công HeartBleed và phương pháp phòng chống  
padding);  
if (r >= 0 && s->msg_callback)  
s->msg_callback(1, s->version, TLS1_RT_HEARTBEAT,  
buffer, 3 + payload + padding,  
s, s->msg_callback_arg);  
OPENSSL_free(buffer);  
if (r < 0)  
}
return r;  
Cu trúc bn ghi ca 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;  
Bn ghi SSLv3 này bao gm 3 thành phn chính: type, length data.  
Khi client gi tới server thông điệp Heartbeat request: thành phn data  
trongbn ghi SSLv3 mà server nhận được chính là dliu mà Heartbeat  
request. Con trp được dùng bởi server để xlý bn ghi này theo cu hình  
mặc định strtới byte đầu tiên trong bn ghi này, có cấu trúc được mô tả  
như sau:  
^
payload byte  
data  
1 byte  
hb req  
2 byte  
payload len  
2 byte  
padding  
p
Server stiến hành xlý yêu cu với đoạn code trong hàm  
dtls1_process_heartbeat:  
/* Read type and payload length first */  
hbtype = *p++;  
n2s(p, payload);  
pl = p;  
10  
Tìm hiu tn công HeartBleed và phương pháp phòng chống  
Ba dòng lnh sꢂ gán byte đầu tiên ca bn ghi SSLv3 là Heartbeat type.  
Hàm n2s sly 2 byte tcon 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 bn ghi  
SSLv3 không được kim tra xem có trùng với độ dài thc tế ca Heartbeat  
data trong Heartbeat request hay không). Kết qudòng lnh th3 là con trpl  
strvào thành phần Heartbeat data được mô tnhư sau:  
^
1 byte  
hb req  
2 byte  
Payload len  
payload byte  
data  
2 byte  
padding  
pl  
Xem xét đoạn code tiếp theo:  
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;  
/* Enter response type, length and copy payload */  
*bp++ = TLS1_HB_RESPONSE;  
s2n(payload, bp);  
memcpy(bp, pl, payload);  
Đoạn code này to ra mt mảng động buffer hay chính là cu trúc ca  
1+ 2 + 65535 +16  
Heartbeat response và có kích thước ln nht là  
. Khi đó  
con trỏ bp được trỏ vào buffer và dùng để ghi thông tin vào trong buffer. Byte  
đầu tiên được ghi vào buffer slà Heartbeat type: TLS1_HB_RESPONSE.  
Hàm s2n thì ngược vi hàm n2s, nó sly 16 bit giá trị trong payload đặt vào  
2 bytes tiếp theo ca buffer Hàm memcpy(bp, pl, payload) sthc hin sao  
chép các byte payload tpl vào bp (tc là sao chép toàn bHeartbeat data ca  
Heartbeat request).  
Điều gì sxy ra nếu như độ dài thc tế ca Heartbeat data không bng  
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 cphn dữ  
liu tiếp theo ngay sau Heartbeat data trong bnhớ đang hoạt động ca tiến  
trình.  
11  
Tìm hiu tn công HeartBleed và phương pháp phòng chống  
data  
leak data  
^
1 byte  
hb res  
2 byte  
payload len  
2 byte  
padding  
pl  
Như vậy hacker có thdùng Heartbeat request vi việc khai độ dài  
payload tăng lên tối đa là 64KB tới server thì có thlấy được nhng thông tin  
bí mt trong bnhhoạt động của server. Đây chính là lỗ hng Heartbleed  
(hình 1.2):  
Hình 1.2. Tn công Heartbleed  
12  
Tìm hiu tn công HeartBleed và phương pháp phòng chống  
Nhng thông tin rò rqua lhng  
Bnhpayload trong Heartbeat request trtớ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 sdng trong mt thi gian dài.  
Khóa phiên TLS.  
Dliu bí mật như: mật khu.  
Session ID (dãy giá trphiên liên lc).  
Như vậy vi tn công thông qua lhng Heartbleed thì hacker có thể  
có được nhng thông tin bí mt này.  
13  
Tìm hiu tn công HeartBleed và phương pháp phòng chống  
CHƯƠNG II: CÀI ĐẶT VÀ THC HIN TN CÔNG HEARTBLEED  
Lhng Hearbleed có thể được khai thác theo nhng kch bn khác  
nhau như: tấn công dch vweb an toàn, tn công dch vụ thư điện tan toàn  
hoc tn công mô hình mng riêng o trin khai bi phn mm OpenVPN.  
Nội dung chương này trình bày việc cài đặt và thc hin tn công Heartbleed  
để tn công dch vweb an toàn bao gm các ni dung chính sau:  
Mô hình cài đặt và thc hin tn công.  
Cài đặt máy chweb.  
Cài đặt máy trm.  
Thc hin tn công khai thác lhng Heartbleed.  
2.1. Mô hình cài đặt và thc hin tn công  
HTTP + SSL/TLS  
192.168.2.0/24  
.10  
.30  
Window XP  
Client  
Switch  
CentOS 6.5  
WebServer (HTTPS)  
OpenSSL, CA-X509  
Firefox  
.20  
Window 7  
Attacker  
OpenSSLHeartBleedExploit.exe  
Hình 2.1. Mô hình cài đặt và thc hin tn công Heartbleed  
Theo hình 2.1, máy chchy hệ điều hành CentOS 6.5, được cài đặt bộ  
mã ngun mOpenSSL, htng khóa công khai X509 cung cp dch vweb  
an toàn (https) và DNS server. Máy trm chy hệ điều hành Window XP,  
được cài đặt trình duyệt Firefox để sdng dch vweb tmáy ch. Máy cài  
đặt tn công chy hệ điều hành Win7, được cài đặt công cụ  
OpenSSLHeartbleedExploit.exe để tn công và khai thác nhng thông tin bí  
mt trong bnhRAM ca máy ch.  
14  
   
Tìm hiu tn công HeartBleed và phương pháp phòng chống  
2.2. Cài đặt máy chủ  
2.2.1. Thit lp cu hình mng  
Thiết lp cu hình mng IP tĩnh cho máy chủ Web trong tp tin ifcfg-  
eth0  
#vi/etc/sysconfig/network-scripts/ifcfg-eth0  
Chương trình thực hiện như sau:  
DEVICE=eth0  
HWADDR=00:0C:29:D3:EB:B0  
TYPE=Ethernet  
UUID=456dd9e1-1772-4cbf-ba0f-81c0710394e0  
ONBOOT=yes  
NM_CONTROLLED=yes  
BOOTPROTO=none  
IPADDR=192.168.2.10  
NETMASK=255.255.255.0  
DNS1=8.8.8.8  
IPV6INIT=no  
USERCTL=no  
2.2.2. Thit lp cu hình dch vDNS  
Thiết lp cu hình tp tin named.conf bng cách sdng câu lnh:  
#vi /etc/named.conf  
Chương trình thực hiện như sau:  
15  
     
Tìm hiu tn công HeartBleed và phương pháp phòng chống  
options {  
listen-on port 53 { 192.168.2.10;127.0.0.1;};  
listen-on-v6 port 53 { ::1; };  
directory  
dump-file  
"/var/named";  
"/var/named/data/cache_dump.db";  
statistics-file "/var/named/data/named_stats.txt";  
memstatistics-file "/var/named/data/named_mem_stats.txt";  
allow-query { any; };  
recursion yes;  
dnssec-enable yes;  
dnssec-validation yes;  
dnssec-lookaside auto;  
/* Path to ISC DLV key */  
bindkeys-file "/etc/named.iscdlv.key";  
managed-keys-directory "/var/named/dynamic";  
};  
logging {  
channel default_debug {  
file "data/named.run";  
severity dynamic;  
};  
};  
zone "." IN {  
type hint;  
file "named.ca";  
};  
include "/etc/named.rfc1912.zones";  
include "/etc/named.root.key";  
Thiết lp cu hình các tp tin zone thun và zone nghch cho tên min  
Zone thun test.db được khai báo trong tp tin /var/named/test.db  
như sau:  
16  
Tìm hiu tn công HeartBleed và phương pháp phòng chống  
$TTL 1D  
@ IN SOA  
test.com. root@test.com (  
2014111301  
; serial  
1D ; refresh  
1H ; retry  
1W ; expire  
3H ); minimum  
IN NS test.com.  
IN A  
IN A  
192.168.2.10  
192.168.2.10  
www  
Zone nghch test.nghich được khai báo trong tp tin  
/var/named/test.nghich như sau:  
$TTL 1D  
@ IN SOA  
test.com. root@test.com (  
2014111301  
; serial  
1D  
1H  
; refresh  
; retry  
1W  
3H )  
; expire  
; minimum  
IN NS test.com.  
IN PTR test.com.  
10  
10  
Cấu hình cài đặt name server trong máy chWeb, trong tp tin  
/etc/resolv.conf:  
nameserver 192.168.2.10  
Khi chy dch vDNS bng câu lnh service named start .  
Kim tra hoạt động ca dch vụ DNS đꢁ cài đặt thông qua câu lnh:  
# nslookup test.com  
Hình 2.2. Kim tra dch vDNS  
17  
Tìm hiu tn công HeartBleed và phương pháp phòng chống  
Như vậy dch vDNS đꢁ được cài đặt thành công.  
2.2.3. Thit lp Web site cha lhng bo mt heartbleed  
Tạo thư mục cha website:  
#mkdir /var/www/html/web  
Thông qua công cvi 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. Ni dung các trang web này xem phlc 1.  
Kiểm tra các gói openssl, mod_ssl đꢁ được cài đặt trên máy chweb  
bng các câu lnh 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 sn 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 lhng bo mt  
Heartbleed.  
To khóa công khai RSA 2048 bit cho máy chweb bng câu lnh:  
#openssl genrsa des3 out ca.key 2048  
Hình 2.4. To khóa công khai cho máy chweb  
18  
 
Tìm hiu tn công HeartBleed và phương pháp phòng chống  
To mt Certificate Signing Request (CSR) kết hp vi server key va  
to bng câu lnh:  
#openssl req new key ca.key out ca.csr  
Hình 2.5. To chng chstký  
To mt chng chsCertificate: Gi tập tin ca.csr đến CA được ký  
tên –signed, sau khi được ký tên và trv, tp tin scó phn mrộng .crt. Đặt  
chng 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. To mt chng chsố được ký bi CA trong htng khóa công khai  
X509  
19  
Tìm hiu tn công HeartBleed và phương pháp phòng chống  
Chnh sa tp tin /etc/httpd/conf/httpd.conf  
NameVirtualHost 192.168.2.10  
<VirtualHost 192.168.2.10>  
ServerAdmin admin@test.com  
DocumentRoot /var/www/html/web  
ErrorLog logs/test.error  
CustomLog logs/test.log combined  
SSLEngine on  
SSLCertificateFile /etc/pki/tls/certs/ca.crt  
SSLCertificateKeyFile /etc/pki/tls/private/ca.key  
</VirtualHost>  
Chnh sa tp tin /etc/httpd/conf.d/ssl.conf  
DocumentRoot "/var/www/html/web"  
ServerName *:443  
SSLEngine on  
SSLCertificateFile /etc/pki/tls/certs/ca.crt  
SSLCertificateKeyFile /etc/pki/tls/private/ca.key  
Khởi động dch vhttp bi lnh service httpd restart  
Kim tra việc cài đặt https bng vic truy cp vào trang web:  
Hình 2.7. Giao din trang web: https://test.com  
Nhp chut vào biểu tượng khóa trên thanh địa chỉ để xem bmã dùng  
để bo vệ đường truyn dliu:  
20  
Tìm hiu tn công HeartBleed và phương pháp phòng chống  
Hình 2.8. Tham san toàn bo vwww.test.com  
Bấm nút ‘View Certificate’ để xem chng chsca máy chweb:  
Hình 2.9. Chng chsca máy chweb www.test.com  
21  
Tải về để xem bản đầy đủ
pdf 34 trang yennguyen 29/03/2022 6940
Bạn đang xem 20 trang mẫu của tài liệu "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", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • pdfbai_tap_lon_mon_an_toan_mang_may_tinh_de_tai_tim_hieu_tan_co.pdf