Điều này được thực hiện bằng cách phá vỡ kênh gốc, sau đó chặn các tin nhắn từ một bên và chuyển tiếp chúng đôi khi có thay đổi cho bên kia Hình 1.1 : Mô hình tấn công Man-in-the-Middle
Trang 1SSL
HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
KHOA CÔNG NGHỆ THÔNG TIN I
-🙞🙜🕮🙞🙜 -
Học phần : AN TOÀN MẠNG
Bài báo cáo: SSLsplit Giảng viên : Đặng Minh Tuấn Sinh viên : Nguyễn Thu Trang-B18DCAT246
Hà Nội, tháng 11/2021
Trang 2Em xin gửi lời cảm ơn sâu sắc tới thầy đã tạo điều kiện cho em được tiếp xúc thực tế với môn học và cung cấp tài liệu để em hoàn thành bản báo cáo này Trong quá trình báo cáo, có đôi lúc em còn mắc những sai lầm thiếu sót trong hoàn thiện bài báo cáo, nhưng cũng từ sai lầm đó mà em rút ra được nhiều bài học kinh nghiệm quý báu cho bản thân em Em tin những điều mình học hỏi được hôm nay sẽ là hành trang theo em suốt những chặng đường còn lại Cuối cùng, em xin gửi đến thầy lời cảm ơn đã giúp
đỡ em trong quá trình làm báo cáo Em xin chân thành cảm ơn!
Trang 3Mục Lục
LỜI MỞ ĐẦU 1
Chương 1: Giới thiệu, lịch sử hình thành 4
1.1 Khái niệm về tấn công Man in the Middle 4
1.2 Khái niêm về SSLsplit 5
Chương 2: Hướng dẫn cài đặt 7
2.1 Hướng dẫn cài đặt Kali Linux 7
2.2 Hướng dẫn cài đạt SSLsplit 10
Chương 3: Kịch bản demo 19
Chương 4: So sánh với MITMproxy 27
Trang 4Chương 1 : Giới thiệu, lịch sử hình thành
1.1 Khái niệm về tấn công Man in the Middle
- Tấn công Man in the Middle (MITM) là kiểu tấn công trong đó kẻ tấn công đặt mình ở giữa đường truyền thông tin giữa hai bên, thường là máy khách và máy chủ Điều này được thực hiện bằng cách phá vỡ kênh gốc, sau đó chặn các tin nhắn từ một bên và
chuyển tiếp chúng (đôi khi có thay đổi) cho bên kia
Hình 1.1 : Mô hình tấn công Man-in-the-Middle
Alice được kết nối với một máy chủ web và Bob muốn biết Alice đang gửi thông tin gì nên Bob đã thiết lập một cuộc tấn công MITM bằng cách nói với máy chủ rằng anh ta là Alice và nói với Alice anh ta là máy chủ Bây giờ, tất cả các yêu cầu của Alice sẽ được chuyển đến Bob và Bob sẽ gửi lại chúng (được thay đổi hoặc không) đến máy chủ web, thực hiện tương tự với phản hồi của máy chủ Bằng cách này, Bob sẽ có thể chặn, đọc và sửa đổi tất cả lưu lượng giữa Alice và máy chủ
Mặc dù các cuộc tấn công MITM không phải là các cuộc tấn công web cụ thể, nhưng điều quan trọng đối với bất kỳ người kiểm tra thâm nhập nào cũng phải biết về chúng, cách thực hiện chúng và cách ngăn chặn chúng vì chúng có thể được sử dụng để đánh cắp mật khẩu, chiếm quyền điều khiển phiên hoặc thực hiện các hoạt động trái phép trong các ứng dụng web
1.2 Giới thiệu về SSLsplit
Trang 5- SSLsplit là một công cụ dành cho các cuộc tấn công trung gian chống lại các kết nối mạng được mã hóa SSL/TLS Nó được thiết kế để hữu ích cho việc chuẩn đoán mạng, phân tích bảo mật ứng dụng và thử nghiệm thâm nhập
SSLsplit được thiết kế để chấm dứt một cách minh bạch các kết nối được chuyển hướng đến nó bằng cách sử dụng công cụ dịch địa chỉ mạng Sau đó SSLsplit chấm dứt
SSL/TLS và bắt đầu kết nối SSL/TLS mới đến địa chỉ đích ban đầu, đồng thời ghi nhật
ký tất cả dữ liệu được truyền Bên cạnh hoạt động dựa trên NAT, SSLsplit cũng hỗ trợ các đích tĩnh và sử dụng tên máy chủ được chỉ ra bởi SNI làm đích ngược dòng SSLsplit hoàn toàn là một proxy minh bạch và không thể hoạt động như một proxy HTTP hoặc SOCKS được định cấu hình trong trình duyệt
SSLsplit hỗ trợ kết nối TCP, SSL thuần, HTTP và HTTPS qua cả IPv4 và IPv6 Nó cũng
có khả năng nâng cấp động TCP đơn giản lên SSL để hỗ trợ chung SMTP STARTTLS và các cơ chế nâng cấp tương tự SSLsplit hỗ trợ đầy đủ Server Name Indication (SNI) và có thể hoạt động với các khóa RSA, DSA và ECDSA cũng như bộ mật mã DHE và ECDHE Tùy thuộc vào phiên bản OpenSSL được xây dựng dựa trên, SSLsplit hỗ trợ SSL 3.0, TLS 1.0, TLS 1.1 và TLS 1.2 và cả SSL 2.0
Đối với kết nối SSL và HTTPS, SSLsplit tạo và ký nhanh các chứng chỉ X509v3 giả mạo, bắt chước chủ đề DN, phần mở rộng subjectAltName của máy chủ gốc và các đặc điểm khác SSLsplit có khả năng sử dụng các chứng chỉ hiện có chứa khóa cá nhân, thay
vì tạo các chứng chỉ giả mạo SSLsplit hỗ trợ chứng chỉ NULL-prefix CN nhưng mặt khác không triển khai khai thác các lỗ hổng xác minh chứng chỉ cụ thể trong ngăn xếp SSL/TLS
SSLsplit thực hiện một số biện pháp bảo vệ chống lại các cơ chế thường ngăn chặn các cuộc tấn công MITM hoặc làm cho chúng khó khăn hơn SSLsplit có thể từ chối các yêu cầu OCSP theo cách chung chung Đối với các kết nối HTTP và HTTPS, SSLsplit xử lý các tiêu đề để ngăn server-instructed public key pinning (HPKP), tránh các hạn chế bảo mật truyền tải nghiêm ngặt (HSTS), tránh Certificate Transparency enforcement (Expect-CT) và ngăn chuyển sang QUIC/SPDY, HTTP/2 hoặc WebSockets (Nâng cấp, Giao thức Thay thế) Tính năng nén, mã hóa và lưu giữ HTTP bị vô hiệu hóa để làm cho các log dễ đọc hơn
Các tùy chọn ghi nhật ký bao gồm kết nối SSLsplit truyền thống và các tệp nhật ký nội dung cũng như các tệp PCAP và phản chiếu lưu lượng đã được giải mã vào giao diện mạng Ngoài ra, các chứng chỉ và thông tin tiến trình cục bộ có thể được ghi lại
Để tối đa hóa cơ hội kết nối thành công tách, SSLsplit không xác minh chứng chỉ máy chủ ngược dòng bằng vỡ nợ Thay vào đó, tất cả các chứng chỉ bao gồm cả tự ký đều
Trang 6được chấp nhận và nếu tên máy chủ dự kiến được báo hiệu trong SNI bị thiếu trong chứng chỉ máy chủ, nó sẽ được thêm vào chứng chỉ giả mạo động- cates
SSLsplit không tự động chuyển hướng bất kỳ lưu lượng mạng nào Để hành động- đồng minh thực hiện một cuộc tấn công, bạn cũng cần phải chuyển hướng lưu lượng truy cập đến hệ thống chạy sslsplit Các tùy chọn của bạn bao gồm chạy sslsplit trên bộ định tuyến hợp pháp, giả mạo ARP, giả mạo ND, DNS, triển khai một điểm truy cập giả mạo (ví dụ:
sử dụng chế độ bản đồ máy chủ), khôi phục vật lý, cấu hình lại VLAN độc hại hoặc chèn đường dẫn, sửa đổi /etc/hosts
SSLsplit hoạt động khá giống với các công cụ proxy SSL minh bạch khác: Nó hoạt động như một người trung gian giữa máy khách và máy chủ thực tế Với điều kiện lưu lượng truy cập đang được chuyển hướng đến máy chủ mà SSLsplit đang chạy (bằng cách thay đổi cổng mặc định, giả mạo ARP hoặc các phương tiện khác ), SSLsplit chọn các kết nối SSL và giả vờ là máy chủ mà máy khách đang kết nối Để làm như vậy, nó sẽ tự động tạo một chứng chỉ và ký nó bằng khóa riêng của chứng chỉ CA mà máy khách phải tin cậy Một số cách khác nhau để thực hiện chuyển hướng lưu lượng truy cập:
Sử dụng giả mạo ARP để chuyển hướng lưu lượng truy cập của nạn nhân bằng cách xuất bản ánh xạ sai từ địa chỉ MAC cổng chuẩn đến địa chỉ IP của kẻ tấn công Bạn không cần truy cập vật lý vào thiết bị của nạn nhân để làm điều
đó Kiểm tra công cụ arpspoof
Thay đổi địa chỉ cổng mặc định trong cài đặt mạng của nạn nhân Đây là phương pháp dễ dàng nhất nếu bạn có quyền truy cập vào thiết bị của nạn nhân
Giả mạo các mục nhập DNS với máy chủ DNS trả về địa chỉ IP của kẻ tấn công cho một số miền (hoặc tất cả) Xem hướng dẫn của tôi về giả mạo DNS với
Dnsmasq để tìm hiểu cách thực hiện điều đó
Chuyển hướng lưu lượng truy cập cho các miền riêng lẻ bằng cách sửa đổi các mục nhập trong temp/etc/host của máy nạn nhân
Ví dụ: nếu khách hàng muốn gửi e-mail bằng máy chủ SMTP Gmail bảo mật
(smtp.gmail.com trên cổng 465), SSLsplit sẽ tạo chứng chỉ cho “smtp.gmail.com” và
do đó giả mạo là Gmail máy chủ thư về phía máy khách Theo hướng ngược dòng (hướng tới máy chủ thư Gmail thực tế), SSLsplit kết nối với máy chủ giống như một ứng dụng khách bình thường - chuyển tiếp tất cả lưu lượng mà ứng dụng khách thực
sự ghi trên SSL socket
Trang 7Chương 2 : Hướng dẫn cài đặt và sử dụng
2.1 Setting up Kali Linux
Trang 84 Sau khi cập nhật xong, hãy chạy lệnh sau để cập nhật các gói không thuộc hệ thống lên phiên bản ổn định cuối cùng của chúng: apt-get upgrade:
Trang 95 Khi được yêu cầu tiếp tục, hãy nhấn Y rồi nhấn Enter
6 Tiếp theo, hãy nâng cấp hệ thống của chúng tôi Nhập lệnh sau và nhấn Enter: get dist-upgrade
apt-2.2 Cài đặt SSLsplit
Để xem các câu lệnh của SSlsplit, ta sử dụng câu lệnh: sslsplit –h:
Trang 11-c pemfile : sử dụng chứng chỉ CA từ pemfile để ký các chứng chỉ được giải mạo khi
-D : chạy ở chế độ gỡ lỗi, ghi nhiều thông tin gỡ lỗi và lỗi chuẩn
-e engine : sử dụng engine như là công cụ NAT mặc định cho proxypecs không có công
cụ NAT rõ ràng, địa chỉ đích tĩnh hoặc chế độ SNI
-E : Liệt kê tất cả các công cụ NAT được hỗ trợ có sẵn trên hệ thống và thoát
-F logspec : Ghi nhật ký nội dung kết nối để tách các tệp nhật ký với đặc điểm kỹ thuật
đường dẫn nhất định
-g pemfile : Sử dụng các tham số nhóm Diffie-Hellman từ pemfile cho bộ mật mã
Ephemereal Diffie-Hellman (EDH / DHE)
-G curve : Sử dụng đường cong được đặt tên cho bộ mật mã Ephemereal Elliptic Curve
Diffie-Hellman (ECDHE) Nếu -G không được cung cấp, một đường cong mặc định (prime256v1) được sử dụng tự động Tùy chọn -G chỉ khả dụng nếu SSLsplit được xây dựng dựa trên phiên bản OpenSSL hỗ trợ bộ mật mã Elliptic Curve Diffie-Hellman -h : Hiển thị trợ giúp về cách sử dụng và thoát
Trang 12-i : Đối với mỗi kết nối, hãy tìm tiến trình cục bộ sở hữu kết nối Điều này làm cho thông tin quy trình như pid, chủ sở hữu: nhóm và đường dẫn thực thi cho các kết nối có nguồn gốc trên cùng một hệ thống như SSLsplit có sẵn cho nhật ký kết nối và bật các chỉ thị đặc
tả đường dẫn -F tương ứng
-j jaildir : Thay đổi thư mục gốc thành jaildir bằng chroot (2) sau khi mở tệp
-k pemfile : Sử dụng khóa cá nhân CA từ pemfile để ký các chứng chỉ được giả mạo khi
đang di chuyển
-K pemfile : Sử dụng khóa riêng tư từ pemfile cho các chứng chỉ lá được giả mạo khi
đang di chuyển Nếu -K không được cung cấp, SSLsplit sẽ tạo một khóa RSA 1024 bit ngẫu nhiên
-l logfile : Ghi nhật ký các kết nối vào tệp nhật ký ở một dòng duy nhất cho mỗi định
dạng kết nối, bao gồm địa chỉ và cổng và một số thông tin HTTP và SSL
-L logfile: Ghi nội dung kết nối vào logfile Nhật ký nội dung sẽ chứa định dạng nhật ký
có thể phân tích cú pháp với dữ liệu đã truyền, có thêm tiêu đề xác định kết nối và độ dài
dữ liệu của mỗi phân đoạn đã ghi
- m group : Khi bỏ đặc quyền bằng -u, hãy ghi đè nhóm chính mục tiêu được đặt thành group
-O : Từ chối tất cả các yêu cầu Giao thức Trạng thái Chứng chỉ Trực tuyến (OCSP) trên tất cả proxyspec và đối với tất cả các máy chủ OCSP có phản hồi OCSP của tryLater, khiến các ứng dụng khách OCSP tạm thời chấp nhận các chứng chỉ đã bị thu hồi
-p pidfile: Ghi ID quy trình vào pidfile và từ chối chạy nếu pidfile đã được một quy trình
khác sử dụng
-P: Các kết nối SSL / TLS chuyển qua không thể tách rời thay vì loại bỏ chúng
-S logdir : Ghi nhật ký nội dung kết nối để tách các tệp nhật ký theo logdir Đối với mỗi
kết nối, một tệp nhật ký sẽ được ghi, tệp này sẽ chứa cả hai hướng dữ liệu khi được truyền Thông tin về kết nối sẽ chỉ có trong tên tệp
-t certdir: Sử dụng khóa cá nhân, chứng chỉ và chuỗi chứng chỉ từ các tệp PEM trong
certdir cho các kết nối với tên máy chủ phù hợp với các chứng chỉ tương ứng, thay vì sử dụng các chứng chỉ được giả mạo khi đang di chuyển
-V : hiển thị thông tin phiên bản và tính năng đã hoàn thành
Các bước để cài đặt SSLsplit:
Trang 13Để tải xuống và biên dịch SSLsplit, ta chạy các lệnh:
Trang 14
- Lệnh wget: để tải xuống, bunzip, tar : lệnh giải nén mã nguồn
- Apt-get : cài đạt các thư viện cần thiết
Trang 15- Thư mục tạm thời được tạo tại /tmp/sslsplit sau đó được sử dụng để kết xuất tệp nhật ký kết nối và dữ liệu thô của các ổ cắm SSL đến và đi: mkdir /tmp/sslsplit
2.3 Tạo và cài đặt chứng chỉ CA gốc:
Để SSLsplit hoạt động như một ngườu trung gian cho các kết nối SSl,nó cần có khả năng tạo và ký các chứng chỉ mà nạn nhân tin tưởng Để làm như vậy, nạn nhân cần phải có chứng chỉ CA gốc của kẻ tấn công trong kho tin cây của nó
Cách tạo một cứng chỉ và khóa cá nhân CA tự ký, bạn có thể tạo một chứng chỉ và khóa riêng bằng cách sử dụng các lệnh sau:
openssl genrsa -out ca.key 4096
openssl req -new -x509 -days 1826 -key ca.key -out ca.crt
Lệnh đầu tiên tạo khóa riêng RSA 4096 bit ở định dạng PEM ( ca.key ) và lệnh thứ hai sử dụng khóa riêng này để tạo chứng chỉ CA gốc tự ký ( ca.crt ) Cả hai đều được SSLsplit cần thiết sau này, nhưng chỉ tệp chứng chỉ cần được cài đặt trong trình duyệt hoặc hệ điều hành của nạn nhân
Trang 162.4 Bật chuyển tiếp IP và công cụ NAT(iptables)
Bây giờ chúng ta sẽ định cấu hình một số quy tắc để ngăn chuyển tiếp mọi thứ Đầu tiên, hãy kiểm tra xem chúng ta có bất kỳ thứ gì trong bảng nat của iptables hay không:
Trang 17Trong ví dụ này, SSLsplit sẽ chạy trên hai cổng: 8080 cho các kết nối TCP không SSL như HTTP, SMTP hoặc FTP và 8443 cho các kết nối SSL như SMTP qua SSL, HTTPS, v.v Để chuyển tiếp các gói đến máy của kẻ tấn công vào các cổng nội bộ này, công cụ NAT trong iptables có thể được sử dụng
- Khởi chạy SSLsplit :
Khi chuyển tiếp IP đang hoạt động và các gói đang được chuyển tiếp đến các cổng liên quan, bạn có thể khởi động SSLsplit Điều đó nghe có vẻ dễ dàng hơn thực tế, bởi vì SSLsplit là một công cụ rất mạnh và do đó rất linh hoạt
Ta có cấu hình tham số để Lệnh này khởi động SSLsplit trong chế độ gỡ lỗi ( -D , chạy
ở chế độ nền trước, không có daemon, đầu ra dài dòng) và xuất ra các lần thử kết nối trong tệp nhật ký “links.log” ( -l ) Nội dung thực tế của các kết nối được ghi vào “/ tmp / sslsplit / logdir - mỗi luồng TCP đến / đi của mỗi kết nối trong một tệp riêng biệt
sslsplit -D -l connections.log -j /tmp/sslsplit -S /tmp/sslsplit/lodir -k ca.key –c ca.crt ssl 0.0.0.0 8443 tcp 0.0.0.0 8080
Trang 18Chương 3: Kịch bản tấn công
3.1 Kết hợp với arpoofing để lấy mật khẩu của nạn nhân trong cùng một mạng LAN
- Lắng nghe giao tiếp giữa máy Victim ( Windown 7 ) với máy chủ
arpspoof –i eth0 –t 192.168.1.1 192.168.1.2
arpspoof –i eth0 –t 192.168.1.2 192.168.1.1
Trang 19-Kiểm tra trên máy Victim bằng câu lệnh : arp –a
Trang 20-Trên máy Vicim :
Trang 21-Qua /tmp/sslsplit/logdir để xem các file nôi dung được ghi vào logdir
Trang 23Trong hình trên, cửa sổ bảng điều khiển phía trên hiển thị đầu ra của SSLsplit Nó hiển thị Chứng chỉ máy chủ giả mạo( forged server certificate) và chứng chỉ (Fingerprint) bởi một tổ chức phát hành chứng chỉ khác
Trang 24Hình tiếp theo hiển thị nội dung của giao tiếp giữa trình duyệt và máy chủ ptit.edu.vn Ảnh chụp hiển thị Cookie, tài khoản và mật khẩu của người dùng
Trang 253.2 Sniffing IMAP over SSL (imap.gmail.com):
Trong ví dụ thứ hai, sử dụng Thunderbird để kết nối với tài khoản Gmail của
mình Không giống như ứng dụng thư khách dựa trên web
Thunderbird kết nối với máy chủ Google / Gmail qua IMAP trên cổng 143 hoặc qua IMAP qua SSL trên cổng 993 Trong khi giao tiếp trên cổng 143 không được mã hóa và
có thể được đọc bằng các công cụ khác (Wireshark, tcpdump, v.v .), IMAP qua SSL yêu cầu proxy man-in-the-middle để phân chia giao tiếp SSL
Trang 27Chương 4: So sánh SSLsplit với MITMproxy
SSLsplit: là công cụ dùng để chặn kết nối TLS bằng cách sử dụng một cuộc tấn công trung gian SSLsplit hỗ trợ TCP, TLS và HTTP Các kết nối bị chặn có thể được đổ vào logfiles SSLsplit được viết bằng C do đó nó khá hiệu quả
MITMproxy là một công cụ có nhiều tính năng hơn và do đó phức tạp hơn nhiều Trái ngược với SSLsplit, MITM có giao diện người dùng tương tác và cho phép bạn tạm dừng, kiểm tra, chỉnh sửa, phát lại hoặc thả các luồng Mặc dù nó có thể được dsuwr dụng như một proxy nhưng MITMproxy cũng có thể chạy như một HTTP, SOCKS, proxy ngược hoặc ngược dòng Ngoài ra, có một giao diện kịch bản đơn giản Python Tóm lại:
-Cả MITMproxy và SSLsplit đều thực hiện cùng một kiểu tấn công trung gian vào TLS
- MITMproxy mạnh hơn và có nhiều tính năng hơn
-SSLsplit có mục đích chuyên dụng hơn, đơn giản hơn và nhanh hơn
- Cả hai đều là (IMHO) công cụ tuyệt vời