Tiếng huýt sáo của điện thoại trường học cũ đã trở lại!
Chà, gần như vậy, nhưng âm thanh bên dưới này không còn xa nữa.
Vào ngày 13 tháng 7, chúng tôi đã phát hiện ra một lỗ hổng thú vị. Một trang web cụ thể đang theo dõi cuộc nói chuyện vô tuyến kỹ thuật số và nó sẽ hiển thị nhật ký đang chạy về những gì đài của nó đang nghe. Đây là một công cụ hữu ích nếu bạn thích những thứ này; xét cho cùng, thật tuyệt khi biết liệu cuộc gọi của bạn có được nghe hay không hoặc liệu có cuộc trò chuyện nào đang diễn ra mà bạn có thể muốn tham gia hay không. Công cụ này ghi lại bất cứ thứ gì nó nghe được và chèn nó vào trang web. Gửi một tin nhắn và một vài giây sau nó sẽ hiển thị ở đó. Nếu thông báo bao gồm HTML, thì nó cũng sẽ xuất hiện trên trang web. Chèn HTML cổ điển.
Vì vậy, làm thế nào để làm việc này?
Để thực hiện một cuộc tấn công như thế này, bạn thực sự không cần internet - bạn chỉ cần một đoạn dây dài. Trong loạt bài Tấn công trên không, xuất bản vào tháng 2 năm 2023, chúng tôi đã thảo luận về các sự cố không dây do bảng điểm bóng rổ có bộ điều khiển hoạt động ở tần số 913 MHz gây ra. Trong bài đăng này, chúng ta sẽ di chuyển dần dần về tần số, xuống dải tần vô tuyến sóng ngắn. Cuộc tấn công này hoạt động ở 7,078 và 14,078 MHz.
Có nhiều tín hiệu kỹ thuật số thú vị ở đây và JS8 là một trong số đó. JS8 là một công cụ trò chuyện bàn phím với bàn phím phổ biến dành cho đài phát thanh nghiệp dư. Nó hoàn toàn vượt trội trong việc cho phép đàm thoại trực tiếp ở khoảng cách xa và thông qua các điều kiện liên kết rất kém. Bản thân JS8 dựa trên FT8, một công cụ cực kỳ phổ biến để thực hiện các liên lạc đơn giản giữa các trạm hầu như không thể nghe thấy nhau. Ngày và đêm, FT8 và JS8 liên tục được sử dụng.
Một số điều kỳ lạ xảy ra với tín hiệu xuống trong dải sóng ngắn. Đó là một tần số thấp đến mức ở độ cao 100 dặm bên trên chúng ta, các lớp E và F của tầng điện ly của Trái đất bắt đầu phản xạ tín hiệu vô tuyến trở lại mặt đất một lần nữa. Các tín hiệu dội lại giữa Trái đất và mặt đất nhiều lần, giống như ném một hòn đá lên khỏi mặt nước. Nó cho phép chúng tôi nghe các đài AM thương mại ở phía bên kia hành tinh vào ban đêm. Vào ban ngày, độ nảy này cũng hoạt động ở tần số cao hơn, cho phép liên lạc trên một khoảng cách rộng lớn. Máy phát ở sân sau của tôi và trạm của trang web cách nhau 674 dặm. Một lần nảy bao phủ khoảng cách đó một cách dễ dàng.
Vậy làm thế nào để bạn tấn công một trang web bằng tín hiệu sóng ngắn?
Thông báo JS8 được xây dựng bằng văn bản ASCII, tất cả các ký tự viết hoa. Hầu hết các tin nhắn được gửi đến nhiều nhóm, chẳng hạn như Skywarn, JS8Chess hoặc, để tham khảo mọi người, chỉ cần GỌI TẤT CẢ. Sau đó, tin nhắn có thể là bất cứ điều gì. Trước tiên, chúng tôi xây dựng tải trọng HTML trong trình chỉnh sửa. Chúng tôi phải cung cấp hợp pháp tên gọi vô tuyến nghiệp dư của mình để nhận dạng (một bước sẽ bị kẻ tấn công thực sự bỏ qua) và cuối cùng, thông báo cuối cùng của chúng tôi trông như thế này:
KJ7YLS: @TEST <DIV STYLE="WIDTH: 500PX;HEIGHT:100PX;COLOR:RED;">THÊM HTML!</DIV>
Bây giờ chúng tôi đã sẵn sàng để truyền tải. Phần mềm JS8 chuyển đổi văn bản này thành nhị phân, thêm sửa lỗi chuyển tiếp và điều chỉnh kết quả bằng cách sử dụng Khóa dịch chuyển tần số Gaussian, (GFSK). Sản phẩm cuối cùng nghe rõ như tiếng huýt sáo kỳ lạ. Nếu chúng tôi mở âm thanh bằng Audacity và mở một biểu đồ quang phổ, nó sẽ trông như thế này:
Nhìn kỹ hơn, bạn có thể thấy điều chế GFSK đang chuyển dần từ tần số này sang tần số khác. Nó cũng giữ ở mỗi tần số trong một khoảng thời gian cụ thể. Có tám tần số khác nhau được sử dụng ở đây và do đó mỗi biểu tượng có tám trạng thái riêng biệt. Kết quả là, mỗi biểu tượng có thể mang ba bit cùng một lúc. Điều này được minh họa bằng một số nhãn:
Sau đó, chúng tôi có thể gửi tiếng huýt sáo vào micrô của máy phát radio. Giống như hầu hết các tín hiệu nghiệp dư và quân sự, âm thanh được phân phối bằng điều chế dải biên trên, đây là một phần của loại tín hiệu phát sóng AM. Các tin nhắn JS8 được chuẩn hóa ở một số tần số và mục tiêu của chúng tôi nghe ở 7,078 MHz và 14,078 MHz. Chúng tôi điều chỉnh radio theo một trong hai tần số và gửi âm thanh bằng cách sử dụng công suất 20 watt vào một sợi dây 16 AWG ở độ cao khoảng 30 feet trong không khí. Tín hiệu phát ra ngoài không khí, bật ra khỏi tầng điện ly và ăng-ten của chúng nhận được tín hiệu đó. Phần mềm JS8 của họ đảo ngược quy trình và lấy ra thông báo ASCII. Tại thời điểm này, chúng ta thấy vấn đề.
Trang web (liên kết được giữ lại trong bài viết này không liên quan đến tác giả của nó) ghi lại lưu lượng truy cập JS8. Về cơ bản, nó được cung cấp bởi JS8Net , một công cụ Python hữu ích giao tiếp trực tiếp với API của phần mềm JS8. Trong kho lưu trữ, tập lệnh monitor.py lấy các thông báo JS8 và đặt chúng trên trang web. Tại thời điểm viết bài, nó chứa các dòng mã sau tại dòng 859:
# Text j['text']=j['stuff']['params']['TEXT'] key=str(j['stuff']['time']) j['id']=':'.join([fmcall,tocall,key,str(j['freq'])]) traffic[key]=json.dumps(j)
j['stuff']['params']['TEXT'] là thông báo ASCII JS8 được lấy từ Collector.py , được lấy từ API của phần mềm JS8. Sau bước này, văn bản trong traffic[key] được đặt trên trang bằng Javascript. Các bước này là tốt. Sự cố xảy ra khi thay đổi ngữ cảnh vì có một giả định rằng lưu lượng truy cập JS8, đã được phần mềm JS8 xử lý đầy đủ, sẵn sàng hoạt động và sẽ không ảnh hưởng đến ngữ cảnh của trang web. Đây là hành vi mà sau đó chúng ta có thể khai thác.
Từ đầu đến cuối, cuộc tấn công của chúng tôi trông như thế này:
Vài phút sau, tin nhắn của chúng tôi được đăng trên trang web...
Kết quả cuối cùng chủ yếu là thẩm mỹ. Đây là trang công khai, vì vậy không có cookie phiên nào để đánh cắp hoặc giả mạo quyền kiểm soát. XSS được lưu trữ cũng là một khả năng thực sự, nhưng sau một buổi sáng khó chịu khi gửi rất nhiều tải trọng tốn thời gian (mỗi tin nhắn JS8 mất vài phút để gửi), chúng tôi không thể bắt Javascript hoạt động để thực thi trên trang. Tôi nghi ngờ rằng phần mềm JS8net đã vô tình chặn nhiều từ và ký tự chính và cách giải quyết của chúng tôi dường như không kích hoạt.
Tuy nhiên, Burp Suite có ích ở đây. Tầng điện ly đã hợp tác vào ngày cụ thể đó và truyền tín hiệu khá tốt. Tôi biết từ các công cụ khác rằng các trạm ở các quốc gia khác đang nghe thấy lưu lượng truy cập JS8 từ Hoa Kỳ. Vì vậy, tải trọng tiếp theo của tôi là
KJ7YLS: @ALLCALL <img src="http://727k2w1hfoamqewpm7rpiocu0l6cu2ir.oastify.com" alt="@HB DN13">
URL này trỏ đến trình nghe DNS và HTTP do công cụ Cộng tác viên của Burp Suite chạy, chúng tôi thường sử dụng công cụ này trong quá trình kiểm tra thâm nhập để tìm rò rỉ thông tin ngoài băng tần. Điều này không có gì khác biệt. Trong vòng vài phút, lưu lượng truy cập DNS và HTTP đã được Máy chủ Cộng tác viên ghi lại từ những người dùng truy cập trang ở Chile. Tôi cũng đã xem trang để kiểm tra việc tiêm và cũng đã được ghi lại.
Đây là khoảng chừng mực mà tôi muốn thực hiện về mặt đạo đức với việc tiêm thuốc. Tôi đã báo cáo vấn đề này cho chủ sở hữu của trang web, Jeff, kèm theo các đề xuất về cách khắc phục. Anh ấy quay lại với tôi vào ngày hôm sau, nói:
Bản thân tôi làm việc trong lĩnh vực bảo mật (tôi làm R&D cho một công ty an ninh mạng ở Bay Area), nhưng tôi phải thừa nhận rằng việc gửi JS qua radio để hack một trang web hoàn toàn nằm ngoài tầm ngắm của tôi.
Trong khi chờ bản vá phát hành, tôi đã suy nghĩ về một vài dòng từ JS8Net README:
It's important to note that this part of the software is still very much in the development stage, and may have critical vulnerabilities that make exposing the exposed services to the open Internet a Very Bad Idea. While it certainly will work, it's intended for protected, internal LAN use at this time.
Thành thật mà nói, đây là một cảnh báo tuyệt vời nói chung, đặc biệt là đối với các dự án đang được triển khai và chưa được kiểm tra kỹ lưỡng. Các lỗ hổng tại thời điểm này là một “ẩn số chưa biết” nhưng tác giả chủ yếu nghĩ về các trình nghe và API bị lộ trong phần mềm của mình. Tuy nhiên, chúng tôi đã khai thác một loại vấn đề hơi khác. README cảnh báo rằng dịch vụ nên được chạy bên trong mạng LAN và điều này thực sự sẽ bảo vệ những người khác khỏi việc tiêm HTML và làm ô uế trang web. Tuy nhiên, tải trọng với tải trọng Cộng tác viên cũng sẽ làm rò rỉ địa chỉ IP công cộng của bất kỳ ai đang xem trang trong mạng LAN riêng của họ, vì vậy điều đó khó giải quyết hơn một chút.
Tóm lại, đây là tín hiệu vô tuyến tấn công một trang web trên Internet. Kẻ tấn công không cần phải loay hoay với VPN, Tor hoặc botnet để cố gắng che giấu danh tính của chúng trên Internet. JS8 rất hiệu quả trong việc trích xuất các thông báo -24dB dưới mức ồn sàn (không thể nghe rõ tiếng huýt sáo ở mức này) đến mức cần rất ít năng lượng để truyền tới các trạm ở xa. Một watt công suất truyền tải, trong điều kiện tầng điện ly tốt, có thể đi từ bờ biển này sang bờ biển khác trên khắp nước Mỹ. Kẻ tấn công có thể ở bất cứ đâu trên thế giới. Một tin nhắn liên tục là tất cả những gì cần thiết, vì vậy việc tìm hướng cũng sẽ khó khăn. Tôi nghĩ rằng đó là gần như không thể theo dõi như bạn có thể nhận được với một cái gì đó như thế này.
Mốc thời gian: