KARMAгеддон. Атакуем клиентские устройства с помощью Karma

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

  • Теория
  • Причина
  • Реализация
  • Практика
  • Утечка PNL
  • Known beacons
  • Атаки
  • Karma-OPN
  • Эксплуатация
  • Karma-WPA
  • Karma-EAP
  • Выводы

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

KARMA, Karma Attacks Radioed Machines Automatically, — это рекур­сивный акро­ним, рас­шифро­выва­ющий­ся при­мер­но как «Karma ата­кует ради­оус­трой­ства авто­мати­чес­ки». И сло­во «авто­мати­чес­ки» име­ет тут клю­чевой смысл.

info

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

warning

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

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

Дру­гое дело — кли­ент­ские устрой­ства. Что они могут дать хакеру? Эти устрой­ства менее замет­ны, ведь они не шлют в ради­оэфир пакеты столь же активно. Тем не менее кли­ент­ские устрой­ства мож­но отыс­кать пов­сюду — это и ноут­буки, и телефо­ны, и IP-камеры, и куча раз­нооб­разных embedded-девай­сов. И Karma — это, пожалуй, луч­шая ата­ка, которую мож­но при­менить на кли­ент­ские устрой­ства самого широко­го спек­тра. Такая ата­ка слож­нее в реали­зации, зато ее экс­плу­ата­ция откры­вает широкий прос­тор для твор­чес­тва.

 

Теория

Все ата­ки на кли­ентов — как поль­зовате­лей, так и их устрой­ства — реали­зуют­ся через RoqueAP (мошен­ничес­кие точ­ки дос­тупа). Они так или ина­че исполь­зуют факт доверия к вре­донос­ной бес­про­вод­ной сети. Пос­коль­ку имен­но кли­ент­ская сто­рона ини­циирует под­клю­чение, то без доверия тут не обой­тись. При этом доверие необя­затель­но может исхо­дить от поль­зовате­ля, доверять может и само устрой­ство. И Karma как раз нацеле­на на то, что­бы вынудить то или иное устрой­ство под­клю­чить­ся по Wi-Fi, при­чем авто­мати­чес­ки, без прив­лечения его вла­дель­ца.

Karma — это под­мно­жес­тво RoqueAP-атак, наряду с ата­ками Evil Twin. Но не сто­ит путать эти два метода. Evil Twin — наибо­лее широко извес­тная ата­ка на кли­ентов, по сути пред­став­ляющая собой бес­про­вод­ной фишинг, то есть соци­аль­ную ата­ку, тре­бующую учас­тия поль­зовате­ля. В то вре­мя как Karma — это ата­ка исклю­читель­но на само кли­ент­ское устрой­ство, при­чем ата­ка авто­мати­чес­кая, она не тре­бует учас­тия поль­зовате­ля. Неваж­но, работа­ет жер­тва в дан­ный момент с устрой­ством или нет, раз­бло­киро­вано оно или заб­локиро­вано, находит­ся оно в руках или в кар­мане, — все может быть ата­кова­но с помощью Karma.

 

Причина

Ес­ли верить источни­кам, эта ата­ка воз­можна бла­года­ря двум осо­бен­ностям поведе­ния кли­ент­ских устрой­ств:

  • тран­сля­ция в ради­оэфир так называ­емо­го спис­ка пред­почти­тель­ных сетей (Preffered Network List, PNL), содер­жащего име­на извес­тных кли­енту бес­про­вод­ных сетей, к которым ранее он уже под­клю­чал­ся;
  • ав­томати­чес­кое под­клю­чение к таким сетям.

В раз­личных опи­сани­ях Karma глав­ным обра­зом акцент дела­ется на пер­вом пун­кте — раз­гла­шении PNL, одна­ко сущес­тву­ют ата­ки и на устрой­ства, не тран­сли­рующие этот спи­сок. И на мой взгляд, куда более важен вто­рой пункт — авто­мати­чес­кое под­клю­чение.

Не под­клю­чен­ные к сети кли­ент­ские устрой­ства не столь «раз­говор­чивы», как точ­ки дос­тупа, одна­ко пери­оди­чес­ки они шлют в ради­оэфир probe-пакеты, содер­жащие PNL — те самые сети, к которым они могут под­клю­чить­ся без учас­тия поль­зовате­ля.

Крас­ным на рисун­ке отме­чены кли­енты с вклю­чен­ным Wi-Fi, но не под­клю­чен­ные ни к одной сети. Имен­но эти устрой­ства явля­ются глав­ной целью для Karma.

Име­на, содер­жащи­еся в probe-зап­росах сетей, могут быть ста­рыми и выведен­ными из экс­плу­ата­ции (corp_old), тем не менее они по‑преж­нему сох­ранены на кли­ентах. Так­же кли­енты могут пом­нить домаш­ние (home) или гос­тевые (hotel) сети, которые в текущем рас­положе­нии отсутс­тву­ют.

Для нас­трой­ки раз­личных устрой­ств, нап­ример IP-камер, адми­нис­тра­торы мог­ли исполь­зовать тес­товые сети, которые оста­лись в памяти устрой­ств.

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

 

Реализация

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

Тех­ничес­ки ата­ку Karma мож­но реали­зовать дву­мя спо­соба­ми:

  • На каж­дый probe-зап­рос кли­ента запус­кает­ся пол­ноцен­ная бес­про­вод­ная сеть с зап­рашива­емым име­нем.
  • На каж­дый probe-зап­рос кли­ента отправ­ляет­ся толь­ко probe-ответ (иног­да еще beacon-пакет), при этом новая сеть уже не переза­пус­кает­ся каж­дый раз.
  • Пер­вый спо­соб дос­таточ­но прос­той. Он тре­бует наличия mon-интерфей­са для отсле­жива­ния probe-зап­росов и WLAN-интерфей­са для запус­ка точ­ки дос­тупа. Далее точ­ка дос­тупа уже сама отправ­ляет probe-отве­ты и beacon, которые могут прив­лечь того или ино­го кли­ента. Такую ата­ку мож­но выпол­нить, исполь­зуя самое обыч­ное ПО: tcpdump, hostapd и dnsmasq.

    Но у это­го спо­соба есть недос­татки:

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

    Вто­рой спо­соб более раци­ональ­ный. Что­бы кли­ент под­клю­чил­ся к точ­ке дос­тупа, ее необя­затель­но переза­пус­кать каж­дый раз — тре­бует­ся лишь на probe-зап­рос кли­ента отпра­вить соот­ветс­тву­ющий probe-ответ. Некото­рым кли­ентам может пот­ребовать­ся еще отправ­ка соот­ветс­тву­ющих beacon-пакетов. Воз­можность посылать кли­ентам про­изволь­ные probe- и beacon-пакеты реали­зова­на в нем­ного про­пат­ченной вер­сии hostapd-mana. Более того, для при­ема и переда­чи probe-, а так­же beacon-пакетов не нужен режим monitor, все реали­зует­ся на стан­дар­тном режиме сетевой кар­ты.

    Со­общить кли­енту о наличии точ­ки дос­тупа мож­но дву­мя спо­соба­ми:

  • Probe-ответ — тар­гетиро­ван­ный ответ на probe-зап­рос кли­ента.
  • Beacon — широко­веща­тель­ный анонс бес­про­вод­ной сети.
  • Обыч­но точ­ки дос­тупа реали­зуют анонс сво­его при­сутс­твия, рас­сылая широко­веща­тель­ные beacon-пакеты, которые слы­шат все бес­про­вод­ные кли­енты в окру­ге. Но для эко­номии вычис­литель­ных мощ­ностей кли­ентов при­думан аль­тер­натив­ный режим поис­ка. Он зак­люча­ется в том, что кли­ент теперь отправ­ляет широко­веща­тель­ный probe-зап­рос с име­нем инте­ресу­ющей его сети и уже точ­ки дос­тупа дол­жны сре­аги­ровать на него probe-отве­том.

    Воз­можность под­клю­чить кли­ент толь­ко по probe-отве­ту име­ет дос­таточ­но инте­рес­ную осо­бен­ность — о наличии точ­ки дос­тупа узна­ет толь­ко один кли­ент. Это дела­ет ата­ку Karma, исполь­зующую лишь probe-зап­росы, бес­шумной.

    Но не все кли­ент­ские устрой­ства под­держи­вают такой режим работы, поэто­му им нужен еще и клас­сичес­кий beacon-пакет. Ата­ка с исполь­зовани­ем beacon более шум­ная, так как о наличии сети в этом слу­чае ста­нет извес­тно всем кли­ентам (Loud Karma).

     

    Практика

    Пе­рей­дем от теории к прак­тике и поп­робу­ем вос­поль­зовать­ся Karma. Узнать об инте­ресу­ющих кли­ента име­нах сетей мож­но дву­мя спо­соба­ми.

     

    Утечка PNL

    Ес­ли точ­ки дос­тупа выда­ют свое при­сутс­твие beacon-пакета­ми, то кли­енты — probe-зап­росами. Пос­мотреть, какие PNL содер­жатся в этих самых зап­росах, мы можем с помощью раз­ных ути­лит — airodump-ng, hcxdumptool или даже tcpdump:

    wifi/roque_ap/karma/PNL.sh
    #!/bin/bashsudo tcpdump -i mon0 -e -nn 2> /dev/null | grep Probe | sed -rn 's/.* ([^s]+) signal .*SA:(.+) Probe Request .*(([^)]+)).*/1 2 3/p'

    Мы уви­дим, что мно­гие устрой­ства дей­стви­тель­но отправ­ляют непус­той PNL.

    Этот метод эффекти­вен и поз­воля­ет сра­зу же перей­ти к ата­ке на устрой­ство через запуск бес­про­вод­ной сети с соот­ветс­тву­ющим име­нем. Но исполь­зование probe-зап­росов для опре­деле­ния имен бес­про­вод­ных сетей не поз­воля­ет узнать тип зап­рашива­емой кли­ентом сети. В иде­але ата­кующий дол­жен запус­тить одновре­мен­но сра­зу три бес­про­вод­ные сети с иден­тичным име­нем (OPN, WPA и EAP).

     

    Known beacons

    Не все устрой­ства на деле отправ­ляют probe-зап­росы, содер­жащие спи­сок сетей. Устрой­ства, отправ­ляющие пус­той PNL, счи­тают­ся как бы неуяз­вимыми к Karma. Одна­ко их спо­соб­ность к авто­мати­чес­кому под­клю­чению по‑преж­нему может пред­став­лять инте­рес для хакера. А это зна­чит, что к Karma уяз­вимы куда боль­ше устрой­ств, чем при­нято счи­тать. Мы не зна­ем, к каким сетям под­клю­чал­ся кли­ент, но что, если мы уга­даем?

    Имея спи­сок наибо­лее час­то встре­чающих­ся имен бес­про­вод­ных сетей, мы можем прос­то переб­рать их, отправ­ляя beacon-пакеты до тех пор, пока кли­ент­ское устрой­ство не под­клю­чит­ся к нам.

    Единс­твен­ный пуб­личный инс­тру­мент, спо­соб­ный выпол­нять ата­ку known beacons на все три типа сетей, — это hostapd-eaphammer. Эта модифи­циро­ван­ная реали­зация hostapd уме­ет сре­ди про­чего отправ­лять про­изволь­ные beacon-пакеты по спис­ку. Исполь­зуем сле­дующий инте­рак­тивный скрипт для перебо­ра beacons по сло­варю с ука­зани­ем типа сети:

    wifi/roque_ap/karma/known_beacons.sh
    #!/bin/bash[[ $# -ge 1 ]] && essids="$1" || read -p 'essids file: ' essids
    [[ $# -ge 2 ]] && type="$2" || read -p 'type (opn/wpa/eap): ' typeIFACE='wlan1'sudo ifconfig $IFACE up
    case "$type" in 'opn'|'OPN') cp hostapd-eaphammer-known_beacons-opn.conf /tmp/hostapd-eaphammer.conf;; 'wpa'|'WPA') cp hostapd-eaphammer-known_beacons-wpa.conf /tmp/hostapd-eaphammer.conf;; 'eap'|'EAP') cp hostapd-eaphammer-known_beacons-eap.conf /tmp/hostapd-eaphammer.conf;;esacsed -i "s/interface=.*/interface=$IFACE/g" /tmp/hostapd-eaphammer.conf
    sed -i "s|known_ssids_file=.*|known_ssids_file=$essids|g" /tmp/hostapd-eaphammer.conf
    sudo hostapd-eaphammer -x /tmp/hostapd-eaphammer.conf -d | grep 'GENERATING RESPONSE:'

    За­пус­каем и видим, что неп­риступ­ный на пер­вый взгляд заб­локиро­ван­ный ноут­бук с Windows готов к нам под­клю­чить­ся.

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

    Для экспе­римен­тов с known beacons я написал прос­тую Python-реали­зацию с помощью scapy.

     

    Атаки

    В Wikipedia ска­зано, что Karma нацеле­на на откры­тые сети, но на деле нич­то не меша­ет при­менить ата­ку и к зак­рытым сетям. В зависи­мос­ти от типа под­нима­емой нами сети воз­можны три сце­нария:

    • OPN — под­нятие откры­той сети, при­ем тра­фика устрой­ства, сетевые ата­ки на устрой­ство;
    • WPA — зах­ват сох­ранен­ного пароля в виде half-handshake, брут­форс, переход к сце­нарию с OPN;
    • EAP — при­ем учет­ных дан­ных.

    В общем, мат­рица воз­можных с Karma атак дос­таточ­но обширна.

    Од­нако все пуб­личные инс­тру­мен­ты, уме­ющие выпол­нять ата­ку Karma, не дела­ют ничего пос­ле под­клю­чения кли­ента. При реали­зации такой ата­ки некор­рек­тно про­водить чер­ту пос­ле под­клю­чения устрой­ства, ведь в этот момент хакер может при­менить некото­рые при­емы, спе­цифич­ные толь­ко в этом слу­чае. Да и самое инте­рес­ное начина­ется пос­ле под­клю­чения кли­ента. Но обо всем по поряд­ку.

     

    Karma-OPN

    Ата­ка Karma через откры­тые сети поз­воля­ет получить сетевой канал вза­имо­дей­ствия с кли­ентом. А учи­тывая, что ата­кующий в отно­шении кли­ента находит­ся в позиции шлю­за, то есть он пересы­лает тра­фик кли­ента, на него могут быть нап­равле­ны мно­гочис­ленные ата­ки — от прос­тых сетевых до MITM. Так­же в момент под­клю­чения кли­ента с помощью осо­бых нас­тро­ек сети, задава­емых пос­редс­твом DHCP, ста­новит­ся воз­можным зас­тавить кли­ента пус­тить сетевой тра­фик дру­гих интерфей­сов через ата­кующе­го, дос­тигая эффекта сверх-MITM. Теперь нем­ного под­робнее.

    Attack OPN → Overlap

    Час­то под­клю­чаемые к откры­той сети устрой­ства будут либо с нес­конфи­гури­рован­ными нас­трой­ками, либо с уже истекшим сро­ком арен­ды IP-адре­са. Как извес­тно, дефол­тным для сетевых интерфей­сов явля­ется зап­рос нас­тро­ек по DHCP. Тот факт, что кли­ент­ское устрой­ство поп­росит у нас парамет­ры нашей сети, поз­воля­ет при­менить дос­таточ­но хит­рый и опас­ный при­ем. Вмес­то стан­дар­тной мас­ки 0.0.0.0/0 (default, на все адре­са) мы можем выразить то же самое через две мас­ки 0.0.0.0/1 + 128.0.0.0/1, которые в совокуп­ности обра­зуют тот же дефол­тный мар­шрут:

    0.0.0.0/0 via 10.10.0.1 <- исходный дефолтный маршрут, все пакеты изначально идут по нему
    0.0.0.0/1 via 1.0.0.1 <- новый маршрут, перекрывающий первые 50% IPv4-сетей
    128.0.0.0/1 via 1.0.0.1 <- второй маршрут, перекрывающий вторые 50% IPv4-сетей (маска короче, и такие маршруты окажутся приоритетнее)

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

    Ответить

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