Apple 裝置有一個很棒的功能叫做 Airdrop,旨在在裝置之間傳輸資料。此外,不需要設定或初步配對設備;只需點擊兩次,一切即可完成。使用 Wi-Fi 附加元件來傳輸數據,因此數據傳輸速度非常快。而且,透過一些技巧,你不僅可以發送文件,還可以查出和你同乘一節地鐵車廂的人的電話號碼。
在過去的一年裡,我一直使用此功能在上班途中、公共交通工具上、餐廳裡結識有趣的人。平均而言,我每天都會認識幾個新朋友,有時我也會和新朋友一起下地鐵。
下面我將向你介紹所有的柿子。
AirDrop 的工作原理

AirDrop 是一種在對等網路內傳輸檔案的協定。它既可以透過常規本地網路運作,也可以透過任何 Apple 裝置之間的無線方式運作。我們將分析最後一種情況,即兩個設備沒有連接到公共網絡,而只是在附近,例如,兩個人帶著手機乘坐地鐵車廂,並且沒有連接到公共 Wi-Fi。

AirDrop 傳輸的第一階段是傳送 BLE 封包
要啟動 AirDrop 傳輸,發起者的手機會發送 BLE 廣播包,其中包含有關 iCloud 帳戶和發起者設備所有者的電話號碼的散列信息,並提供通過 AWDL(Apple Wireless Direct Link)協議建立連接,類似於 Android 世界中的 Wi-Fi Direct。這個BLE資料包的結構非常有趣,我們將進一步分析它。
在接收方,AirDrop 可以處於三種狀態:
- 已關閉 - 根本不會被偵測到
- 限聯絡人 - 僅接受來自通訊錄中的聯絡人的文件。在這種情況下,聯絡人被視為與 iCloud 帳戶關聯的電話號碼或電子郵件。這裡連結帳戶的邏輯與 iMessages 信差相同。
- 為了所有人 - 每個人都能偵測到手機

AirDrop 隱私設定。預設狀態設定為「對於聯絡人」。
根據您的隱私設置,手機將繼續透過 AWDL 建立連接或直接忽略 BLE 資料包。如果將 AirDrop 設定為“針對所有人”,那麼下一步,設備將透過 AWDL 相互連接,在它們之間建立一個 IPv6 網絡,其中 AirDrop 將透過標準 IP 協定使用 mDNS 作為普通應用協定工作。

為了進行實驗,您可以查看 AWDL 在 MacBook 上的運作情況。該協定下的所有交換都透過介面進行。 awdl0,可以使用 Wireshark 或 tcpdump 輕鬆嗅探。
在這個階段我們知道三個實體:
低功耗藍牙 (BLE) 套件 - 此數據包包含數據,手機將根據該數據判斷發起者是否在其聯絡人清單中。
Apple 無線直連 (AWDL) — Apple Wi-Fi Direct 的專有替代品,如果透過 BLE 通訊成功,則會啟用。
空投 — 使用 mDNS、HTTP 等在常規 IP 網路內運作的應用協定。可以在任何乙太網路內運作。
BLE封包結構
看起來這個 BLE 封包只從發起者飛到接收者一次,然後交換僅透過 AWDL 進行。實際上,AWDL 連接的壽命非常短,只有幾分鐘或更短。所以如果文件的接收者想要回應你,他也會作為發起者,發送一個BLE封包。
接收端的手機如何知道發起者的號碼/電子郵件是否在其聯絡人清單中?當我得知答案時我非常驚訝: 發起者以 sha256 哈希的形式發送他的號碼和電子郵件,但不是全部,只有前3個位元組。

來自 AirDrop 發起者的 BLE 封包結構。透過電話號碼和電子郵件的雜湊值,受訪者可以了解發起人是否在他的聯絡人清單中。
例如,如果您的 Apple 帳戶(又稱 iCloud、又稱 iMessages)連結到號碼 +79251234567,則其雜湊值將如下計算:
echo -n "+79251234567" | shasum -a 256
07de58621e5d274f5844b6663a918a94cfd0502222ec2adee0ae1aed148def36
因此,該值將在 BLE 資料包中消失 07de58 電話號碼。這看起來可能不算多,但通常這三個位元組足以找出真實的電話號碼。
還需要記住的是,AirDrop 隱私設定不會影響 BLE 封包中的資料。即使設置了“針對所有人”設置,其中仍將包含電話號碼的雜湊值。此外,當開啟共用視窗並輸入 Wi-Fi 網路密碼時,會傳送帶有電話號碼雜湊的 BLE 資料包。
有關 BLE 資料包結構及其可能遭受的攻擊的詳細分析,請閱讀研究 和俄語 .
Apple Bleee 的研究發布了現成的 Python 腳本,用於自動分析 BLE 資料包中的資料。我強烈建議您查看研究並嘗試程序,那裡有很多有趣的東西。
AWDL(Apple 無線直接連結)
AWDL 是 Apple 專有的常規 Wi-Fi 插件,可實現類似 Wi-Fi Direct 的功能。我不完全了解它是如何運作的,有一種特殊的方式來宣布和協調管道,並且它只適用於 Apple 的專有驅動程式。也就是說,只有 MacBook/iPhone 可以透過 AWDL 連線。
可悲的是,Android 手機用戶仍然只能夢想著 Wi-Fi Direct 功能能夠正常運作。

但不久前, 編寫了一個完全開源的 AWDL 實作並將其命名為 (貓頭鷹)。要運行 OWL,Wi-Fi 適配器必須支援監控模式和資料包注入,因此它不能在所有硬體上運行。網站包含在樹莓派上設定的範例。它的效果比原始的 AWDL 差很多,例如,連接建立時間延長了約 10 秒,而不是原來的幾秒鐘,但它仍然有效。

這些人也用 Python 從頭編寫了 AirDrop 協定的實現,稱為 。它既可以與 OWL 結合使用在 Linux 上啟動 AirDrop,也可以與 macOS 上的原始 AWDL 結合使用。
如何透過 AirDrop 進行捲動

透過 AirDrop 滾動的典型情況
無聊的理論已經講夠了,現在該開始實踐了。因此,您已經配備了所有必要的設備,並準備好在高科技的幫助下開始滾動球。
首先,你需要記住要點:
- 只有當手機解鎖時,AirDrop 才會起作用。 - 最好讓目標一直看著手機。這種情況最常發生在無聊的地方,例如地鐵。
- 這需要時間 — 通常,在發送第 3-5 張圖片時會發生積極的轉變,因此您需要在一個地方平靜地停留至少 5 分鐘。我認為積極的轉變就是當您同意透過 AirDrop 繼續在 Messenger 中通訊時。這很難即時實現,因為無法立即確定誰接受了你的有效載荷,而且很可能在你們就任何事情達成一致之前就互相錯過。
- 個性化創意作品更佳 — 我將您透過 AirDrop 發送的媒體內容稱為有效載荷。一張簡單的帶有表情包的圖片很可能不會帶來任何效果;內容必須與情況相關,並具有明確的行動號召。
經典方法就是一部電話
適合任何擁有 iPhone 的人,除了社交技能外不需要任何特殊技能。我們將 AirDrop 切換到 Everyone 模式,然後下樓到地鐵。在一個普通的日子裡(自我隔離之前),我在莫斯科地鐵車廂裡看到了這樣的事:

目標清單
如你所見,幾乎所有手機都會播報機主的姓名,透過姓名我們可以輕鬆確定其性別並準備相應的有效載荷。
有效載荷
正如我上面所寫,獨特的有效載荷效果更好。理想情況下,照片上應該標明主人的姓名。以前,我必須使用「筆記」應用程式中的圖形編輯器和一些移動 Photoshop 的殘片來塑造創造力。結果等到畫完要求的圖的時候,就已經到了下馬車的時間了。
我的朋友安雅 ,特別應我的要求,編寫了一個 Telegram 機器人,可以動態產生帶有標題的必要圖像: 。我非常感謝她,因為我現在滾球的技術比以前好多了。
您所要做的就是向機器人發送一行文本,它將其生成為與 AirDrop 視窗中預覽的縱橫比相符的圖像。您可以按下按鈕來選擇圖片中的字元。您也可以選擇將您的 Telegram 登入資訊新增到角落的圖片中。

有效載荷產生器
最好的部分是,圖片會立即顯示在受害者的螢幕上,無需任何操作。甚至不需要點擊「接受」。當有效載荷裝載時,您可以看到臉上的即時反應。不幸的是,從 iOS 13 開始,螢幕上不再顯示來自未知聯絡人的圖片。之前的樣子是這樣的:

iOS 12 及以下版本交付的有效載荷
現在,不再顯示預覽,而只顯示發送者的裝置名稱。因此,稱呼 iOS ≥13 的受害者的唯一方法是在設備設置中設置,例如對著手機喊“Yulia,你好”。提示:您可以在裝置名稱中使用表情符號。當然,這種方法不如帶圖片那麼醒目,但卻大大增加了點擊「接受」按鈕的幾率。
動作的進一步描述超出了技術文章的範圍,僅取決於您的想像、即興和幽默感。我只能說,那些進入這個遊戲並開始用圖片或發送便條回答你的人通常都是非常開朗、開放和有趣的人。那些在看完圖片後根本不回复,甚至更糟的是,直接拒絕訊息的人,通常都是些無聊的勢利小人和假正經的人。恐懼因素也常常起到一定作用:脆弱、膽小的人害怕與這種無禮、匿名的陌生人互動。
自動陰莖勃起機
如果您懶得手動產生和發送有效載荷,並且想要自動化該過程,您可以製作一個自動 dickpic 機器,它將在後台透過 AirDrop 將圖片發送給範圍內的每個人。我們將使用 raspberry pi zero 作為硬體平台,但任何裝有 Linux 的電腦都可以,最主要的是 Wi-Fi 卡支援監控模式和封包注入。

基於 Raspberry Pi Zero W + UPS Lite 電池擴充板的 Airdrop Dick Picker
有適用於越獄 iPhone 的 AirDrop 洪水程序,它們比 Raspberry Pi 上的開放版本運行更穩定
在樹莓派上設定 OWL 的詳細說明如下: ,但我更喜歡使用 Raspberry Pi Zero 的 Kali Linux 版本,因為它已經安裝了 nexmon 補丁以在 rpi0 上啟用 Wi-Fi 監控模式。
重要的是要記住,只有在收到 BLE 資料包後才會為患者啟動 Airdrop(或更確切地說是 AWDL)。因此,我們必須每隔幾秒鐘發送一次。這可以使用實用程式來完成 。使用start_le_advertising()函數,我發送了一串來自蘋果bleee的範例的資料: 000000000000000001123412341234123400.
一旦你有一個可以運行的 OWL 守護進程,你就可以運行我的 fork 。儲存庫中有一個腳本 flooder.py,向每個人發送一張圖片 kak_dela.jpeg.
據我觀察,raspberry pi zero w 在監控模式下工作不穩定。大約 20 分鐘的主動泛洪作業後,Wi-Fi 子系統崩潰。問題由作者描述 ,並被認為是由於過熱造成的。有必要提供看門狗或使用更穩定的硬件
Maniacello 模式——我知道你的號碼
如果你想讓自己看起來像個無能的瘋子並且永遠打消繼續與你交流的願望,你可以嘗試找出附近的人的電話號碼。
前面我們了解到,發起方發送的BLE資料包包含了電話號碼sha256的前三個位元組。當受害者按下「分享」按鈕並開始掃描空投裝置或點擊新網路的 Wi-Fi 密碼輸入欄位時(這是 Apple 在範圍內搜尋可以向其要求網路密碼的朋友的方式),可以擷取此雜湊值。
您需要以某種方式觸發受害者發送哈希並捕獲它。我使用存儲庫中的實用程序 。由於裝置的藍牙 MAC 位址是隨機的且不斷變化,因此您必須找到另一種方法來識別此清單中所需的裝置。由於 iOS 會廣播手機的當前狀態,例如:螢幕關閉、螢幕開啟、螢幕鎖定、解鎖等,因此這項任務變得簡單。因此,只需觀察受害者的行為,就可以將設備的當前狀態與表中的設備進行比較。最簡單的方法就是捕捉用戶從口袋中拿出手機、打開螢幕並用手指或臉部解鎖手機的瞬間。所有這些都可以在嗅探器中看到。

圖標 Х 意味著捕獲了帶有電話哈希值的資料包。
他們的解析器有時會崩潰,但大多數時候都能正常運作。我不會完整複述該漏洞的本質,因為 Apple Blee 的作者已經對其進行了詳細分析,我只會描述我的經歷。我只想說,我在 CSR 8510 晶片上使用 USB 藍牙適配器,因為對我來說,它比傳遞給虛擬機器的 MacBook 內建藍牙適配器工作得更穩定。
因此,我們從受害者的手機中獲取了哈希值,並從電話號碼的哈希值中獲得了珍貴的三個位元組。

使用實用程式攔截帶有電話號碼雜湊的 BLE 資料包
我們知道,在俄羅斯,所有手機號碼都以 +79 開頭,而且我們的受害者的手機很可能也有相同的代碼。事實證明,我們的數字範圍是從 +79000000000 到 +79999999999,大約有十億個數字。
為了縮小範圍,我們只採用為特定運營商實際註冊的代碼,並丟棄其餘代碼。結果,範圍變小了一半,大約有五億個數字。
接下來,我們從所有數字產生 sha256,並僅保存每個雜湊的前 3 個位元組。我們將這個清單輸入到Sqlite資料庫中,並建立索引,以加快搜尋速度。
資料庫中的資料如下:

所有俄羅斯電話號碼和哈希值的前三個位元組
接下來,有了受害者的雜湊值,我們就可以在資料庫中搜尋所有匹配項。通常每個哈希有 15-30 個匹配。

所有與受害者哈希值匹配的數字
顯然,並非所有這些數字都實際使用。我們可以使用 HLR 請求或隱形簡訊來切斷不必要的簡訊。在這 30 個號碼中,有 5 個是在網路上找到的。

執行HLR請求的結果。網路中的數字以綠色突出顯示。
我可以繼續篩選這些號碼,例如,將它們全部添加到 Telegram/Whatsapp 並查看頭像,檢查 Getcontact 等資料庫等等。但事實證明,更簡單的方法是逐一撥打所有五個號碼,然後看看受害者的電話何時響起。

目標位置
所有
- 樹莓派上的flooder很不穩定,需要嘗試其他單板電腦。
- 原生的 iOS 泛洪程序會更好,但我找不到一個可以在 iOS 12-13 上運行的程序,即使越獄也是如此。
- flooder.py腳本非常愚蠢。也許它可以透過從收件者的裝置名稱中取出名稱並剪掉「iPhone」這個字來產生一個名稱圖片。
- 可以透過僅檢查號碼是否與 iMessage 關聯來優化確定電話號碼的方法。這很可能會使命中率接近 100%。
結論
這是地鐵的完美娛樂。有一種令人驚嘆的效果,好奇的人會發現這很有趣。其中有很多即興表演,也發生了一些非常有趣的事件。事實證明,許多人都願意配合,甚至取消在你的地鐵站下車的計劃,去喝杯咖啡。在過去的一年裡,我遇到了許多人,並與其中一些人繼續交流。
有時我會關閉 Telegram 登入顯示,然後享受樂趣 .
來源: www.habr.com
