Đề tài Tìm hiểu tấn công heartbleed và phương pháp phòng chống

HỌC VIỆN KỸ THUẬT MẬT MÃ KHOA AN TOÀN THÔNG TIN  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 Giáo viên hướng dẫn: CAO MINH TUẤN Nhóm thực hiện : NGUYỄN HÀ AN VŨ HOÀNG ĐẠT LÊ THỊ LINH LÊ VĂN PHƯƠNG Lớp : AT8C Hà Nội, tháng 6 năm 2015 Tìm hiểu tấn công HeartBleed và phương pháp phòng chống Ý KIẾN CỦA GIÁO VIÊN 2 Tìm hiểu tấn công HeartBleed và phương pháp phòng chống MỤC LỤC LỜI NÓI ĐẦU

pdf34 trang | Chia sẻ: huong20 | Ngày: 07/01/2022 | Lượt xem: 445 | Lượt tải: 0download
Tóm tắt tài liệu Đề tài Tìm hiểu tấn công heartbleed và phương pháp phòng chống, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
U .......................................................................................................... 4 1.1.1. Tấn công OpenSSL dựa trên lỗ hỗng Heartbleed ....................................................................... 6 1.1.2. Quá trình phát hiện ..................................................................................................................... 6 1.1.3. Phương pháp tấn công và khai thác lỗ hổng ............................................................................... 7 CHƯƠNG II: CÀI ĐẶT VÀ THỰC HIỆN TẤN CÔNG HEARTBLEED ........... 14 2.1. Mô hình cài đặt và thực hiện tấn công ....................................................................................... 14 2.2. Cài đặt máy chủ .......................................................................................................................... 15 2.2.1. Thiết lập cấu hình mạng ............................................................................................................ 15 2.2.2. Thiết lập cấu hình dịch vụ DNS................................................................................................. 15 2.2.3. Thiết lập Web site chứa lỗ hổng bảo mật heartbleed ................................................................ 18 2.2.4. Cài đặt cơ sở dữ liệu cho trang web www.test.com .................................................................. 22 2.2. Cài đặt máy trạm ........................................................................................................................ 25 2.2.1. Thiết lập cấu hình mạng ............................................................................................................ 25 2.2.2. Truy cập www.test.com ............................................................................................................. 26 2.3. Tấn công khai thác lỗ hổng Heartbleed ...................................................................................... 26 2.3.1. Cài đặt mạng trên máy thực hiện tấn công ............................................................................... 26 2.3.2. Tấn công khai thác lỗ hổng Heartbleed .................................................................................... 27 2.4. Phương pháp phòng chống .................................................................................................... 28 2.4.1. Lời khuyên cho các doanh nghiệp ............................................................................................. 28 2.4.2. Lời khuyên cho người dùng cuối ............................................................................................... 29 2.4.3. Lời khuyên khác......................................................................................................................... 29 CHƯƠNG III. KỊCH BẢN DEMO ........................................................................ 30 KẾT LUẬN ............................................................................................................. 34 TÀI LIỆU THAM KHẢO ....................................................................................... 35 3 Tìm hiểu tấn công HeartBleed và phương pháp phòng chống LỜI NÓI ĐẦU Mạng Internet mang lại cho con người những lợi ích to lớn, nó giúp mọi người trên thế giới xích lại gần nhau hơn, chia sẻ thông tin và liên lạc với nhau một cách dễ dàng hơn. Lượng thông tin được chia sẻ và trao đổi ngày càng lớn, trong đó có rất nhiều thông tin nhạy cảm, quan trọng. Do đó môi trường kết nối Internet vô hình chung lại là một môi trường dễ dàng cho những kẻ xấu lợi dụng để tấn công khai thác những dữ liệu quan trọng hay thực hiện những mục đích phá hoại. Do vậy nhu cầu đặt ra là tìm ra những giải pháp bảo vệ thông tin nhạy cảm, quan trọng được truyền trong môi trường mạng. Để bảo vệ thông tin trên mạng, chúng ta có thể can thiệp 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. Tuy nhiên, trong bộ giao thức này vẫn có một lỗ hổng bảo mật khá nghiêm trọng đó là lỗ hổng heartbleed . 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 và phương pháp phòng chống” để hiểu rõ hơn về lỗ hổng và dạng tấn công này. Nội dung của bài tập lớn gồm có 3 chương: Chương I: Nghiên cứu phương pháp tấn công heartbleed vào bộ giao thức SSL/TLS: Chương này giới thiệu phương pháp tấn công heartbleed vào bộ giao thức SSL/TLS Chương II: Cài đặt, thực hiện tấn công HeartBleed và phương pháp phòng chống : Chương này trình bày những vấn đề cơ bản về cài đặt và thực hiện tấn công HeartBleed và đưa ra một số lời khuyên để phong chống. Chương III: kịch bản demo: chương này nhóm sẽ trình bày chi tiết những nội dung mà nhóm thực hiện demo trong báo cáo. Do thời gian và kiến thức còn hạn chế, nên không thể tránh khỏi những thiếu sót trong nội dung cũng như hình thức, mong thầy và các bạn xem xét và bổ sung để nhóm hoàn thiện hơn bản báo cáo của mình. Chúng em xin chân thành cảm ơn !!! 4 Tìm hiểu tấn 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 BỘ GIAO THỨC SSL/TLS 1.1. Tấn công HeartBleed 1.1.1. Tấn công OpenSSL dựa trên lỗ hỗng 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. Tính năng heartbeat chính là 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. 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. 6 Tìm hiểu tấn công HeartBleed và phương pháp phòng chống Năm 2011, Robin Seggelmann tại trường Đại học Duisburg-Essen đã phát triển tính năng mở rộng Heartbeat cho bộ thư viện mã nguồn mở OpenSSL. Sau khi Seggelmann yêu cầu đưa tính năng mới này của mình vào OpenSSL, thay đổi của ông đã được Stephen N. Henson, một trong bốn nhà phát triển chính của OpenSSL tiến hành xem xét, đánh giá. Henson đã không phát hiện ra lỗi trong quá trình phát triển của Seggelmann và đã đưa đoạn mã nguồn không hoàn thiện này vào thư viện mã nguồn mở của OpenSSL vào ngày 31 tháng 12 năm 2011. Đoạn mã chứa lỗ hổng bảo mật này được sử dụng rộng 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 hoạt và chính là nguyên nhân gây ra các phiên bản OpenSSL chứa lỗ hổng bảo mật Heartbleed. Neel Mehta thành viên nhóm bảo mật 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ỗ hổng này kéo theo lỗi nghiêm trọng khi xử lý bộ nhớ do thực hiện tính năng mở rộng Heartbeat gây ra. Đối phương có thể ăn cắp lượng thông tin lên đến 64KB từ bộ nhớ của ứng dụng với mỗi lần thực hiện hàm heartbeat. Lỗ hổng do một kỹ sư tại công ty Codenomicon, một công ty an ninh mạng của Phần Lan đặt tên đồng thời gắn với logo trái tim rỉ máu. Họ đã lấy tên miền là Heartbleed.com nhằm giải thích lỗi này cho công chúng. 1.1.3. Phương pháp tấn công và khai thác lỗ hổng 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ế để 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. Thông điệp Heartbeat Request được gửi từ phía client tới server bao gồm dữ liệu tùy chọn và độ dài của dữ liệu. Server nhận được thông điệp này sẽ phải gửi lại phía client chính xác dữ liệu yêu cầu (hình 1.1): 7 Tìm hiểu tấn 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 2 byte n byte <= 64KB 2 byte hb type payload len payload padding 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. 8 Tìm hiểu tấn công HeartBleed và phương pháp phòng chống Cơ chế phát sinh lỗ hổng 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. Nộidung của 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 hiểu tấn 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; } Cấu trúc bản ghi của 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; Bản ghi SSLv3 này 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 trongbả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: ^ p 1 byte 2 byte payload byte 2 byte hb req payload len data padding 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; 10 Tìm hiểu tấn công HeartBleed và phương pháp phòng chống Ba dòng lệnh sẽ gán byte đầu tiên của bản ghi SSLv3 là Heartbeat type. Hàm n2s sẽ lấy 2 byte từ con 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 bản ghi SSLv3 không được kiểm tra xem có trùng với độ dài thực tế của Heartbeat data trong Heartbeat request hay không). Kết quả dòng lệnh thứ 3 là con trỏ pl sẽ trỏ vào thành phần Heartbeat data được mô tả như sau: 1 byte 2 byte ^ payload byte 2 byte hb req Payload len pl data padding 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 tạo ra một mảng động buffer hay chính là cấu trúc của Heartbeat response và có kích thước lớn nhất là 126553516+++ . 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 sẽ là Heartbeat type: TLS1_HB_RESPONSE. Hàm s2n thì ngược với hàm n2s, nó sẽ lấy 16 bit giá trị trong payload đặt vào 2 bytes tiếp theo của buffer Hàm memcpy(bp, pl, payload) sẽ thực hiện sao chép các byte payload từ pl vào bp (tức là sao chép toàn bộ Heartbeat data của Heartbeat request). Đ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. 11 Tìm hiểu tấn công HeartBleed và phương pháp phòng chống data leak data 1 byte 2 byte ^ 2 byte hb res payload len pl padding 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 1.2): Hình 1.2. Tấn công Heartbleed 12 Tìm hiểu tấn công HeartBleed và phương pháp phòng chống Những thông tin rò rỉ qua lỗ hổng 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. • Dữ liệu bí mật như: mật khẩu. • Session ID (dãy giá trị phiên liên lạc). Như vậy với tấn công thông qua lỗ hổng Heartbleed thì hacker có thể có được những thông tin bí mật này. 13 Tìm hiểu tấn công HeartBleed và phương pháp phòng chống CHƯƠNG II: CÀI ĐẶT VÀ THỰC HIỆN TẤN CÔNG HEARTBLEED Lỗ hổng Hearbleed có thể được khai thác theo những kịch bản khác nhau như: tấn công dịch vụ web an toàn, tấn công dịch vụ thư điện tử an toàn hoặc tấn công mô hình mạng riêng ảo triển khai bởi phần mềm OpenVPN. Nội dung chương này trình bày việc cài đặt và thực hiện tấn công Heartbleed để tấn công dịch vụ web an toàn bao gồm các nội dung chính sau: • Mô hình cài đặt và thực hiện tấn công. • Cài đặt máy chủ web. • Cài đặt máy trạm. • Thực hiện tấn công khai thác lỗ hổng Heartbleed. 2.1. Mô hình cài đặt và thực hiện tấn công HTTP + SSL/TLS 192.168.2.0/24 .30 .10 Window XP Switch CentOS 6.5 Client WebServer (HTTPS) Firefox OpenSSL, CA-X509 www.test.com .20 Window 7 Attacker OpenSSLHeartBleedExploit.exe Hình 2.1. Mô hình cài đặt và thực hiện tấn công Heartbleed Theo hình 2.1, 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ụ 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ủ. 14 Tìm hiểu tấn công HeartBleed và phương pháp phòng chống 2.2. Cài đặt máy chủ 2.2.1. Thiết lập cấu hình mạng Thiết lập cấu hình mạng IP tĩnh cho máy chủ Web trong tập 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. 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: #vi /etc/named.conf Chương trình thực hiện như sau: 15 Tìm hiểu tấn 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 "/var/named"; dump-file "/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 lập cấu hình các tập tin zone thuận và zone nghịch cho tên miền www.test.com: • Zone thuận test.db được khai báo trong tập tin /var/named/test.db như sau: 16 Tìm hiểu tấn 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 192.168.2.10 www IN A 192.168.2.10 • Zone nghịch test.nghich được khai báo trong tập tin /var/named/test.nghich như sau: $TTL 1D @ IN SOA test.com. root@test.com ( 2014111301 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum IN NS test.com. 10 IN PTR test.com. 10 IN PTR www.test.com. Cấu hình cài đặt name server trong máy chủ Web, trong tập tin /etc/resolv.conf: nameserver 192.168.2.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 test.com Hình 2.2. Kiểm tra dịch vụ DNS 17 Tìm hiểu tấn công HeartBleed và phương pháp phòng chống Như vậy dịch vụ DNS đã được cài đặt thành công. 2.2.3. Thiết lập Web site chứa lỗ hổng bảo mật heartbleed Tạo thư mục chứa website: #mkdir /var/www/html/web Thông qua công cụ vi 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. Nội dung các trang web này xem phụ lục 1. Kiểm tra các gói openssl, mod_ssl đã được cài đặt trên máy chủ web bằng các câu lệnh 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 sẵn 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 lỗ hổng bảo mật Heartbleed. Tạo khóa công khai RSA 2048 bit cho máy chủ web bằng câu lệnh: #openssl genrsa –des3 –out ca.key 2048 Hình 2.4. Tạo khóa công khai cho máy chủ web 18 Tìm hiểu tấn công HeartBleed và phương pháp phòng chống Tạo một Certificate Signing Request (CSR) kết hợp với server key vừa tạo bằng câu lệnh: #openssl req –new –key ca.key –out ca.csr Hình 2.5. Tạo chứng chỉ số tự ký Tạo một chứng chỉ số Certificate: Gửi tập tin ca.csr đến CA được ký tên –signed, sau khi được ký tên và trả về, tập tin sẽ có phần mở rộng .crt. Đặt chứng 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. Tạo một chứng chỉ số được ký bởi CA trong hạ tầng khóa công khai X509 19 Tìm hiểu tấn công HeartBleed và phương pháp phòng chống Chỉnh sửa tập tin /etc/httpd/conf/httpd.conf NameVirtualHost 192.168.2.10 ServerAdmin admin@test.com DocumentRoot /var/www/html/web ServerName www.test.com 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 Chỉnh sửa tập 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 dịch vụ http bởi lệnh service httpd restart Kiểm tra việc cài đặt https bằng việc truy cập vào trang web: https://test.com Hình 2.7. Giao diện trang web: https://test.com Nhấp chuột vào biểu tượng khóa trên thanh địa chỉ để xem bộ mã dùng để bảo vệ đường truyền dữ liệu: 20 Tìm hiểu tấn công HeartBleed và phương pháp phòng chống Hình 2.8. Tham số an toàn bảo vệ www.test.com Bấm nút ‘View Certificate’ để xem chứng chỉ số của máy chủ web: Hình 2.9. Chứng chỉ số của máy chủ web www.test.com 21 Tìm hiểu tấn công HeartBleed và phương pháp phòng chống 2.2.4. Cài đặt cơ sở dữ liệu cho trang web www.test.com Đăng nhập vào MySQL Server bằng câu lệnh: #mysql –u root –p Khi đăng nhập mysql sẽ yêu cầu người dùng đặt mật khẩu cho tài khoản root. Ở đây thì tài khoản root sẽ được đặt mật khẩu là ‘123456’. Hình 2.10. Đăng nhập vào MySQL Server Tạo cơ sở dữ liệu test cho trang web www.test.com và trong cơ sở dữ liệu này chứa một bảng user chứa thông tin người dùng bao gồm username và password thông qua các lệnh: mysql>create database test; mysql> use test; mysql>create table users(id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, username VARCHAR(200) NOT NULL, password CHAR(200) NOT NULL, PRIMARY KEY(id)); Cài đặt công cụ quản lý PhpMyAdmin. Trước tiên, cài đặt PhpMyAdmin: #yum install phpmyadmin PhpMyAdmin được cài đặt thành công khi đăng nhập được vào localhost/phpmyadmin như hình 3.10. Quá trình đăng nhập sẽ sử dụng tài khoản root và mật khẩu là 123456 của MySQL Server. 22 Tìm hiểu tấn công HeartBleed và phương pháp phòng chống Hình 2.11. Cài đặt PhpMyAdmin thành công Tạo thông tin một người dùng tên ‘trung’ với mật khẩu là ‘123456’ vào trong bảng user của cơ sở dữ liệu test bằng PhpMyAdmin. Tại mục ‘Insert’ của cơ sở dữ liệu test tiến hành điền thông tin người dùng như hình 3.11, chọn ‘Go’ để hoàn thành. Hình 2.12. Thêm người dùng vào cơ sở dữ liệu 23 Tìm hiểu tấn công HeartBleed và phương pháp phòng chống Kết nối tới cơ sở dữ liệu: hiện tại thì trang www.test.com không có liên quan gì tới các cơ sở dữ liệu trong MySQL Server. Vì vậy, để www.test.com sử dụng được cơ sở dữ liệu test trong MySQL Server thì cần phải có một trang kết nối là /var/www/html/database.php có nội dung như sau: <?php ////////// Database Connection /////////// // MySQL information MODIFY IT HERE. $db_name = "test"; // Database Name $host = "localhost"; // Database host (probably won't change) $db_user = "root"; // Database username $db_password = "123456"; // Database password $dbconnect = mysql_connect("$host", "$db_user", "$db_password"); // Database Connection DON'T MODIFY if (!$dbconnect) { echo( "Unable to connect to the database server at this time."); exit(); } if (! mysql_select_db("$db_name") ) { echo( "Unable to locate the database at this time."); exit(); } ?> Khởi chạy dịch vụ mysql bằng câu lệnh service mysqld restart. Kiểm tra việc kết nối tới cơ sở dữ liệu bằng cách truy cập https://www.test.com và thực hiện đăng nhập. 24 Tìm hiểu tấn công HeartBleed và phương pháp phòng chống Hình 2.13. ‘Login OK’ kết nối tới cơ sở dữ liệu thành công 2.2. Cài đặt máy trạm 2.2.1. Thiết lập cấu hình mạng Máy trạm cài đặt hệ điều hành Window XP, việc thiết lập cấu hình mạng như trong hình 3.13: Hình 2.14. Thiết lập cấu hình mạng trên máy trạm 25 Tìm hiểu tấn công HeartBleed và phương pháp phòng chống 2.2.2. Truy cập www.test.com Máy trạm dùng tài khoản ‘trung’ để sử dụng dịch vụ web từ máy chủ web www.test.com: Hình 2.15. Đăng nhập máy chủ web thành công 2.3. Tấn công khai thác lỗ hổng Heartbleed 2.3.1. Cài đặt mạng trên máy thực hiện tấn công Máy thực hiện tấn công cài đặt hệ điều hành Window 7, việc thiết lập cấu hình mạng như hình 2.16: Hình 2.16. Thiết lập cấu hình mạng trên máy thực hiện tấn công 26 Tìm hiểu tấn công HeartBleed và phương pháp phòng chống 2.3.2. Tấn công khai thác lỗ hổng Heartbleed Đầu tiên đối phương truy cập vào máy chủ web: https://test.com, vì không có tài khoản nên đối phương sẽ không tiến hành đăng nhập (hình 2.17): Hình 2.17. Đối phương không thể đăng nhập vào https://test.com Đối phương dùng công cụ Wireshark nghe lén lưu lượng đi vào máy chủ và đối phương đã bắt được thông tin phiên liên lạc từ mày trạm (192.168.2.30) tới máy chủ web (192.168.2.10). Nhưng đối phương không thể đọc được dữ liệu trên phiên liên lạc vì dữ liệu này đã được mã hóa như hình 2.18: Hình 2.18. Đối phương không thể nghe lén được dữ liệu đi vào máy chủ web 27 Tìm hiểu tấn công HeartBleed và phương pháp phòng chống Đối phương dùng công cụ OpenSSLHeartbleedExploit.exe để tấn công máy chủ web (hình 2.19). Công cụ OpenSSLHeartbleedExploit.exe được biên dịch từ trình biên dịch gcc trên Linux với mã nguồn là tập tin heartbleed.c Hình 2.19. Tấn công khai thác lỗ hổng Heartbleed trên máy chủ web. Trên hình 2.19 cho thấy đối phương tìm ra được tài khoản ‘trung’ và mật khẩu là ‘123456’. Như vậy, đối phương đã khai thác thành công lỗ hổng Heartbleed trên máy chủ web. Kết quả thực nghiệm tấn công Heartbleed: Tấn công thành công trong 6 lần thực hiện và mất thời gian 30 giây. 2.4. Phương pháp phòng chống 2.4.1. Lời khuyên cho các doanh nghiệp • Đây là một lỗ hổng bảo mật thuộc thư viện OpenSSL và không phải là lỗi nằm trong SSL/TLS hay những chứng nhận được Symantec đưa ra. Bất kỳ ai đang sử dụng OpenSSL 1.0.1 tới 1.0.1f nên cập nhật bản vá mới nhất của phần mềm (1.0.1g) hoặc thiết lập lại OpenSSL để loại bỏ Heartbleed. • Kiểm tra độ dài thực tế của Heartbeat data (sửa trong source code) if (1 + 2 + 16 > s->s3->rrec.length) 28 Tìm hiểu tấn công HeartBleed và phương pháp phòng chống return 0; /* silently discard */ ... if (1 + 2 + payload + 16 > s->s3->rrec.length) return 0; /* silently discard per RFC 6520 sec. 4 */ • Sau khi nâng cấp lên phiên bản OpenSSL vá lỗi, nếu bạn nghi ngờ rằng chứng nhận trên máy chủ web của bạn có thể đã bị lộ, lấy cắp hoặc bị khai thác, hãy liên hệ với đơn vị cấp chứng nhận để thay thế. • Cuối cùng, các doanh nghiệp cũng nên cân nhắc thiết lập lại mật khẩu của người dùng cuối - có thể đã ịb lộ trên bộ nhớ máy chủ. 2.4.2. Lời khuyên cho người dùng cuối • Người dùng cuối nên cảnh giác rằng dữ liệu của mình có thể đã bị lộ cho một bên thứ ba vì sử dụng nhà cung cấp dịch vụ có chứa lỗ hổng bảo mật. • Theo dõi để biết bất kỳ thông báo nào từ nhà cung cấp dịch vụ bạn sử dụng. Khi nhà cung cấp dịch vụ liên hệ và thông báo với người dùng rằng nên thay mật khẩu, người dùng nên làm như vậy. • Tránh những email lừa đảo từ những kẻ tấn công yêu cầu bạn cập nhật mật khẩu, tránh truy nhập vào những website lạ, chỉ nên truy nhập vào những tên miền chính thống. • Sử dụng các dịch vụ và website uy tín bởi họ sẽ là những người đầu tiên vá lỗ hổng bảo mật này. • Theo dõi tài khoản ngân hàng và thẻ tín dụng để phát hiện những khoản chi tiêu bất thường nào. 2.4.3. Lời khuyên khác • Tránh truy nhậ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. • Ngừng sử dụng các dịch vụ proxy chưa được vá lỗi. • Cập nhật phần cứng và phần mềm ngay khi nhà sản xuất công bố bản vá. • Sử dụng một trình khách VPN và những dịch vụ được đảm bảo không bị ảnh hưởng bởi Heartbleed khi truy nhập trên các mạng công cộng. 29 Tìm hiểu tấn công HeartBleed và phương pháp phòng chống CHƯƠNG III. KỊCH BẢN DEMO MÔ HÌNH: Hình 1: Mô hình tấn công HeartBleed Trong đó : • 1 máy làm webserver chạy Fedora 18 cài Apache2, OpenSSL version 1.0.1c • 1 máy làm attacker kiểm tra và tấn công heartbleed chay Ubuntu • Script tấn công viết bằng Python heartbleed.py CÁC BƯỚC TẤN CÔNG Bước 1 : Kiểm tra xem webserver có bị lỗi Heartbleed hay không bằng câu lệnh: # python heartbleed.py 192.168.152.152 -p 443 Kết quả : Hình 2: Kiểm tra lỗi Heartbleed, script trả về server có lỗi 30 Tìm hiểu tấn công HeartBleed và phương pháp phòng chống Kiểm tra version tương ứng của OpenSSL trong webserver: # openssl OpenSSL > version Kết quả Như vậy OpenSSL có version là 1.0.1c đúng là đã bị mắc lỗi Heartbleed Bước 2: Tấn công Heartbleed - Ta kiểm tra các tùy chọn tấn công của Script bằng câu lệnh : # python heartbleed.py –h Kết quả : Hình 3: Tùy chọn tấn công heartbleed 31 Tìm hiểu tấn công HeartBleed và phương pháp phòng chống Ta tấn công thử bằng câu lệnh : # python heartbleed.py 192.168.152.152 –e –r RAM.txt –a ASCII.txt –p 443 Kết quả : Như vậy ta đã tấn công vào webserver và lấy về trạng thái RAM của server lúc đó lưu tại file RAM.txt, và ta kết xuất dữ liệu nhạy cảm ra file ASCII.txt Nội dung file RAM.txt : Vì trên server chưa có thôn

Các file đính kèm theo tài liệu này:

  • pdfde_tai_tim_hieu_tan_cong_heartbleed_va_phuong_phap_phong_cho.pdf