Joe via Tails-dev (2025-06-15):

> Dear Tails Development Team,
>
> I hope this message finds you well. I am writing to bring to your attention 
> an important consideration regarding the MAC spoofing feature in Tails. The 
> existing MAC spoofing feature in Tails OS is a step in the right direction, 
> as it checks for NIC existence and retries if necessary, treating the NIC as 
> a unique identifier for WiFi cards. While the current implementation 
> effectively changes the NIC part of the MAC address, it leaves the OUI 
> (Organizationally Unique Identifier) exposed, which can potentially 
> compromise user anonymity.
>
> The OUI part of the MAC address identifies the device manufacturer, and if 
> left unchanged, it can be used for device fingerprinting. This is 
> particularly concerning for users such as journalists and whistleblowers who 
> rely on Tails for privacy. The current setup inadvertently makes these users 
> unique, as the OUI remains constant, even when the NIC is spoofed.
>
> As noted in the Tails documentation on MAC address limitations, tools like 
> Macchiato may rely on outdated OUI lists, potentially increasing uniqueness. 
> Ironically, the current Tails implementation already risks this by 
> maintaining a consistent OUI, making it trivial for entities like ISPs to 
> track devices across sessions. If you are using tails at home your ISP or 
> anyone monitoring your network that its the same device on the network since 
> the OUI is always the same. 
>
> This especially true for users on dedicated devices such as journalists or 
> whistleblowers. I'm sure many journalists, whistleblowers, or privacy folks 
> may strictly have a separate computer or throwaway dedicated device that they 
> only use with Tails. Well, those devices most likely have a common or unique 
> OUI especially if they are older devices. Many such users might also attempt 
> mitigations, like purchasing external ethernet or WiFi adapters, but this 
> often deanons them through traceable purchases since most are going to 
> purchase these through sites like Amazon which require credit cards.
>
> Mind you the best case of action would to be spoofing both OUI and NIC in the 
> mac address design. Most notably android and Iphone already support this and 
> do this though their design is flawed since it is only per network and not 
> per connection to a network. Up until recently it was discovered that iOS 
> prior to version 17.1, leaked real MAC on port 5353.
>
> * Proposed Solution *
>
> To enhance anonymity, I propose spoofing both the OUI and NIC parts of the 
> MAC address. While systems like Android and iOS have similar implementations, 
> they are limited to per-network changes. However, the approach can be adapted 
> and improved for Tails.
>
> * DHCP Considerations *
>
> When implementing full MAC spoofing, it's crucial to handle DHCP leasing 
> correctly. If a spoofed MAC is already leased, the device may fail to obtain 
> an IP address or fail to connect to the internet. To mitigate this, I suggest 
> integrating an ARP check using `arping` to ensure the new MAC is not already 
> in use before connecting.
>
> If the DHCP server detects that the MAC address is already associated with an 
> active lease, it may refuse to assign a new IP address to your system. Send a 
> DHCP NAK (negative acknowledgment) to your system, indicating that it cannot 
> assign an IP address. If does the allow you to connect with an already leased 
> MAC you most likely will not be able to connect to the internet. In 
> environments with MAC spoofing detection, such as those using Dynamic ARP 
> Inspection (DAI), the spoofed ARP requests could be ignored or flagged, 
> potentially leading to no responses. However, these advanced security 
> features are less common on public WiFi networks with captive portals, where 
> basic DHCP setups predominate, reducing the likelihood of such detections.
>
> To my knowledge NetworkManager or Linux in general will not explicitly retry 
> with a new spoofed mac if there is already is a device leased with the same 
> MAC address already on a network.
> Currently it looks like `iputils-arping` is not installed on tails but could 
> possibly be incorporated into the existing design?
>
> * Example Code Implementation *
>
> The following is example code modifications that could can be incorporated to 
> include the ARP check:
>
> **Modify `spoof_mac` Function:**
>
> ```bash
> spoof_mac() {
>     local max_retries=3
>     local attempt=1
>     local msg
>     local new_mac
>     local gateway_ip
>
>     gateway_ip=$(ip route show | grep default | awk '{print $3}')
>
>     set +e
>     while [ "${attempt}" -le "${max_retries}" ]; do
>         msg="$(macchanger -e "${1}" 2>&1)"
>         ret="${?}"
>         set -e
>
>         if [ "${ret}" != 0 ]; then
>             log "macchanger failed for NIC ${1}, returned ${ret} and said: 
> ${msg}"
>             unset NEW_MAC
>             break
>         fi
>
>         NEW_MAC="$(get_current_mac_of_nic "${1}")"
>         if [ "${OLD_MAC}" != "${NEW_MAC}" ]; then
>             log "Spoofed MAC for NIC ${1} is: ${NEW_MAC}"
>             log "Checking if MAC ${NEW_MAC} is already leased..."
>
>             if arping -c 1 -I "${1}" -s "${NEW_MAC}" "${gateway_ip}" &> 
> /dev/null; then
>                 log "MAC ${NEW_MAC} is already leased or in use on NIC ${1}."
>                 attempt=$((attempt + 1))
>                 continue
>             else
>                 log "No conflict detected for MAC ${NEW_MAC}."
>                 return 0
>             fi
>         fi
>         attempt=$((attempt + 1))
>     done
>     set +e
>     return 1
> }
> ```
>
> **Add Error Handling and Logging:**
>
> ```bash
> for i in 1 2 3; do
>     if ! spoof_mac "${NIC}"; then
>         unset NEW_MAC
>         break
>     fi
>     NEW_MAC="$(get_current_mac_of_nic "${NIC}")"
>     if [ "${OLD_MAC}" != "${NEW_MAC}" ]; then
>         log "Checking if MAC ${NEW_MAC} is already leased..."
>         if arping -c 1 -I "${NIC}" -s "${NEW_MAC}" "${gateway_ip}" &> 
> /dev/null; then
>             log "MAC ${NEW_MAC} is already leased, retrying spoofing..."
>             continue
>         fi
>         break
>     fi
> done
> ```
>
>
> Enhancing MAC spoofing to include both OUI and NIC, along with ARP checks, 
> would significantly improve user anonymity in Tails and avoid failure if a 
> leased device on a network already has the same MAC as the Spoofed one. If 
> there is not way to anonymously check DHCP leases with leaking the real MAC 
> address through ARP ping/requests then forget this but rather focus on new 
> mac spoofing design that spoofs full mac address. 
>
> Thank you for your dedication to Tails and user privacy.
>
> Namaste,
>
> Joe
> _______________________________________________
> Tails-dev mailing list
> Tails-dev@boum.org
> https://www.autistici.org/mailman/listinfo/tails-dev
> To unsubscribe from this list, send an empty email to 
> tails-dev-unsubscr...@boum.org.

-- 
intrigeri
_______________________________________________
Tails-dev mailing list
Tails-dev@boum.org
https://www.autistici.org/mailman/listinfo/tails-dev
To unsubscribe from this list, send an empty email to 
tails-dev-unsubscr...@boum.org.

Reply via email to