1. Giao thức ARP
Đây là một giao thức mạng dùng để tìm ra địa chỉ MAC của một thiết bị từ một IP nguồn.
VD: Thiết bị sẽ gửi 1 ARP request chưa IP của thiết bị nhận. Tất cả các mạng trong local network sẽ nhận đc gói tin nhưng chỉ có thiết bị khớp với IP trong gói ARP mới có thể phản hồi lại thông tin với thông điệp chứa địa chỉ MAC của nó.
2. ARP Spoofing

ARP Spoofing cho phép chuyển hướng các packet cho nên thay vì các packet được gửi thẳng đến máy victim (như sơ đồ), nó sẽ đi qua máy tính của hacker. Như vậy các request cũng như respond sẽ đều phải đi qua máy tính của hacker → Cho phép hacker đọc, chỉnh sửa cũng như chặn các gói tin này.
3. ARPSPOOF Tool
Máy thực hiện tấn công: Kali linux 2022
Máy mục tiêu: Windows 10
Để hiển thị bảng dữ liệu arp, chúng ta sử dụng lệnh: arp -a

Sử dụng arpspoof:
arpspoof -i [name_interface] -t [IP_victim] [IP_gateway]: Gửi request đến máy nạn nhân nói rằng mình là router
arpspoof -i [name_interface] -t [IP_victim] [IP_gateway] Gửi request đến router nói rằng mình là máy victim


Vì kali linux không phải router nên khi có request nó sẽ không cho những request này qua và chặn chúng lại( tính năng của kali). Vì vậy để những request này đến router chúng ta phải mở cổng chuyển tiếp giống như 1 bộ định tuyến

ARP Spoofing using Bettercap
Đây là một framework để tấn công mạng
Nó có thể được dùng cho:
- ARP Spoof ( chuyển hướng các packet)
- Sniff data
- Bypass HTTPS
- DNS Spoofing
- Inject code in loaded pages
- Nhiều cái khác nữa
Thực hành
Khởi động bettercap: bettercap -iface [name_interface_network]

Có thể dùng lệnh help để xem tất cả những command có thể dùng với bettercap
Bettercap có những modules chúng ta có thể dùng, ở chế độ mặc định thì có module events.stream đang được chạy ngầm để handle tất cả các events

Ở đây chúng ta sẽ sử dụng modules net.probe. Module này được sử dụng để gửi các gói UDP để tìm ra các thiết bị mạng trong local network
Start net.probe: net.probe on

Có thể thấy ip 192.168.245.133 là ip của máy windows 10 mà chúng ta đã sử dụng ở phần trên.
Khi start net.probe, net.recon sẽ tự động start. Net.probe gửi request đến tất các các ip trong mạng và khi có respond, net.recon sẽ phát hiện respond bằng cách theo dõi arp cache và sau đó thêm những IP này vào 1 danh sách để ta có thể nhắm vào tấn công.
Thực hiện lệnh: net.show để xem tất cả các thiết bị được kết nối

Tiếp theo, chúng ta cần trở thành Man in the middle, ở đây sẽ sử dụng module arp.spoof
Trước khi start arp.spoof, chúng ta cần thiết lập lại một số thành phần trong module arp.spoof
Thứ nhất, set arp.spoof.fullduplex true, hiểu đơn giản là sẽ spoof cả router và máy victim như chúng ta đã thực hiện ở phần trên với arp spoofing tool. Ở mặc định thì biến này sẽ được gán là false và nó sẽ chỉ spoof target machine
Thứ hai, set arp.spoof.targets [IP_victim_machine]
Cuối cùng, start arp.spoof

Sau khi hoàn thành, kiểm tra lại máy windows 10 sẽ được kết quả:

Có thể thấy địa chỉ MAC của router sẽ giống với địa chỉ MAC của IP: 192.168.245.132 (là địa chỉ của máy kali).
5. Sniff data
Trong bettercap, sử dụng module net.sniff
Khởi động net.sniff: net.sniff on
Truy cập web browser trong windows 10. Ở đây chúng ta sẽ truy cập vào một trang web (http://testphp.vulnweb.com/)

Có thể thấy ở đây máy nạn nhân đã truy cập đến trang web test.vulweb.com
Tiếp theo hãy thử bắt username và password mà nạn nhân đăng nhập vào trang web trên

Kết quả là ta đã bắt được username và password.
6. Create custom spoofing script
Có thể sử dụng caplet để làm các bước ở phần 4 và 5 một cách tự động
Caplet là một tệp văn bản bao gồm các câu lệnh mà bạn sử dụng để tấn công man in the middle attack
Thực hiện: Tạo một file văn bản và viết ra những câu lệnh sẽ sử dụng

Tiếp theo, khởi động bettercap với caplet đã tạo:
bettercap -iface [network_interface] -caplet [file_path_caplet]

7. Bypass HTTPS
Khi sử dụng giao thức HTTP, dữ liệu được truyền đi dưới dạng plain text do đó chúng ta có thể đọc và chỉnh sửa
HTTPS đã khắc phục được điều này và hiện nay đa số các website đều sử dụng HTTPS. Về cơ bản cách HTTPS hoạt động là thêm 1 lớp layer sau HTTP và lớp bổ sung này sẽ mã hóa các văn bản thuần túy → Do đó chúng ta sẽ không thể đọc được dữ liệu
HTTPS dựa vào TLS hoặc SSL để mã hóa dữ liệu. Cách dễ dàng nhất để bypass là downgrade HTTPS thành HTTP. Nếu người dùng truy cập đến một trang web HTTPS thì chúng ta sẽ cung cấp cho người dùng một phiên bản HTTP thay vì HTTPS. Để làm được điều đó thì chúng ta sẽ sử dụng tool có tên là SSL Strip. Tuy nhiên cách sử dụng của SSL Strip sẽ được đề cập đến trong các bài viết sau, ở bài viết này chúng ta sẽ sử dụng những caplet có sẵn của bettercap để downgrade https to http.
Đầu tiên, chũng ta sẽ phải sửa đổi một vài câu lệnh đã viết trong caplet đã tạo ở phần 6
Trước khi khởi động net.sniff, hãy set giá trị cho thông số net.sniff.local là true. Option này sẽ nói với bettercap rằng sẽ sniff tất cả data kể cả local data. Khi chúng ta sử dụng caplet của bettercap để downgrade https, bettercap sẽ nghĩ rằng những dữ liệu bắt được là được gửi từ chĩnh máy chúng ta và sẽ không hiển thị trên màn hình.

Sử dụng lệnh caplets.show để hiển thị list caplet mà máy có. Caplet mà chúng ta sẽ sử dụng là hstshijack/hstshijack. Các bạn cũng có thể download caplet này trên mạng hoặc download tại đường link: (https://drive.google.com/file/d/19NsOnD4Obuezr0nKWbBxtngoqM_OwWKU/view?usp=share_link)
Ở máy tính nạn nhân, truy cập vào 1 trang web https VD: linkedin.com

Có thể thấy website hiển thị not secure là đã thành công downgrade. Sau đó thử đăng nhập với username và mật khẩu bất kỳ trong linkedin

Và cuối cùng chúng ta đã ấy được mật khẩu và password
8. Bypass HSTS
Một số trang web như facebook, twitter sử dụng HSTS là những trang web only-load HTTPS
Solution: Thay thế link của những trang web HSTS thành những website có đường link gần giống. VD: facebook.com → facebook.corn
Chúng ta vẫn sẽ sử dụng caplet “hstshijack” như phần 7
Đầu tiên, truy cập vào file config của caplet “hstshijack” theo đường dẫn /root/usr/local/share/bettercap/caplets/hstshijack và chỉnh sửa giống như hình dưới đây

Ở đây targets sẽ là những trang web mục tiêu mà chúng ta muốn thay thế. Phần replacements sẽ là tên miền các trang web mà chúng ta sẽ thay thế vào targets. Các options obfuscate và encode để là false bởi vì một số trình duyệt như firefox sẽ chặn mã bị xáo trộn hoặc mã hóa. Tại phần payloads bạn có thể đưa vào một số javascript code để inject. Cuối cùng ở phần dns.spoof.domains cũng tương tự như phần replacements
Bắt đầu tấn công, chúng ta sẽ khởi động bettercap và sử dụng caplet “hstshijack” như đã làm ở trên
Ở máy windows 10, chúng ta sẽ không thể vào fb một cách thông thường mà phải thông qua một số search engine như google.ie

Chúng ta sẽ thấy hiện not secure và khi người dùng search facebook vào ô tìm kiếm trên google.ie thì đoạn script mà chúng ta chèn vào trong caplet hstshijack sẽ chạy ngầm và tự động thay thế tất cả các link facebook.com được tìm kiếm thành link replacements là facebook.corn

Và khi nhấn vào link tìm kiếm chúng ta sẽ được kết quả

Làm theo hướng dẫn như phần 7 chúng ta có thể lấy được username và password của facebook.
So sánh bypass HSTS firefox và chrome

9. DNS Spoofing
Như chúng ta đã biết, DNS có nhiệm vụ convert domain name ví dụ như google.com thành IP hosing.
Khi tấn công man in the middle, request sẽ không được gửi thẳng đến DNS server mà sẽ thông qua chúng ta vì vậy chúng ta có thể respond bất kỳ IP nào mà chúng ta muốn. Chúng ta có thể điều hướng đến một trang web giả mạo…
Ở phần này, chúng ta sẽ điều hướng user đến trang web của chúng ta (apache2 server có sẵn trên kali)
Khởi động bettercap như bình thường với caplet chúng ta đã tạo ở những phần trước. Chúng ta sẽ dùng module dns.spoof.
Set dns.spoof.address: [IP_kali]
Set dns.spoof.all true → Respond đối với tất cả các DNS Request
Set dns.spoof.domains [domain_name]
Ví dụ ở đây chúng ta sẽ set domains là linkedin.com
Cuối cùng khởi dộng dns.spoof: dns.spoof on

Có thể thấy khi chúng ta truy cập đến tên miền linkedin.com thì sẽ tự động chuyển hướng đến apache2 server.
10. Injecting javascript code
Về phần này, hiểu đơn giản là chúng ta sẽ chèn một đoạn code bất kỳ mà chúng ta muốn và trình duyệt sẽ thực thi đoạn mã đó
Ở đây chúng ta sẽ thực hiện một đoạn javascript đơn giản có chức năng hiển thị thông báo

Chúng ta vẫn sẽ tiếp tục sử dụng caplet hstshijack. Truy cập vào đường dẫn /root/usr/local/share/bettercap/caplets/hstshijack để hiển thị file config. Thêm domains name và đường dẫn của file javascript vào phần set hstshijack.

Như ở đây, mình để * tượng trưng cho tất cả các trang web và đường dẫn file là /root/alert.js
Tiếp theo, khởi động bettercap và sử dụng caplet hstshijack như các phần trên
Ở máy windows 10 khi truy cập vào các website https sẽ hiển thị thông báo
Chú ý: Các website HSTS sẽ không hiệu quả bởi vì chúng only-loaded https nên chúng ta sẽ không thể inject code
