Page 1 of 1

Безопасный доступ к панели и SSH через Web-Knokking

Posted: Sun May 02, 2021 8:12 pm
by ...
VestaCP — это панель-"дуршлаг" для уязвимостей. Хотя бы потому, что любой пользователь на хостинге может вызывать в PHP через EXEC команды CLI-интерфейса панели: exec(/usr/bin/sudo /usr/local/vesta/bin/v-*…) и делать с сервером абсолютно всё что угодно. Ну и по умолчанию при создании сайтов и некоторых других моментов предлагаются самые небезопасные варианты. Поэтому сначала немного подкрутим гайки для безопасности:
  1. Первым делом отключаем в PHP.ini опасные функции:

    Code: Select all

    disable_functions=pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,exec,passthru,shell_exec,system,proc_open,popen,curl_multi_exec,show_source
  • Меняем для каждого сайта Web-шаблон для APACHE2 в панели с default на basedir. Вообще этот опасный шаблон не должен использоваться по умолчанию и по идее его быть не должно. Если уже используется любой другой шаблон, отличный от default, то всё должно быть в порядке.
Смысл Web-Knokking предельно прост: по умолчанию для всех закрыты порты SSH, панель на 8083 и отключен ping. Когда нужно их открыть для своего текущего IP, то просто вызываем скрипт из браузера. Он состоит из 2-х частей: 1 часть для любого пользовательского хоста, которая вызывает 2-ю часть для выполнения CLI-команд панели (т.к. по умолчанию доступа к порту панели нет и для пользовательских хостов ранее мы отключили опасные функции в PHP для выполнения CLI-команд).
  1. 1-ю часть назовём, например, Hidden.php и положим в /usr/local/vesta/web

    Code: Select all

    <?PHP
    $ip=getenv('QUERY_STRING');
    if(filter_var($ip,FILTER_VALIDATE_IP))
     {
      exec('/usr/bin/sudo /usr/local/vesta/bin/v-change-firewall-rule "2" "ACCEPT" "'.$ip.'" "8083" "TCP"',$output,$return_var);
      exec('/usr/bin/sudo /usr/local/vesta/bin/v-change-firewall-rule "11" "ACCEPT" "'.$ip.'" "22" "TCP"');
      echo'<h1><center>'.$ip.'<br>'.gethostbyaddr($ip).'<br>';
      #print_r($output);print_r($return_var);
     }
    ?>
  • 2-часть назовём как угодно и положим на любой сайт на сервере в public_html в /home

    Code: Select all

    <?PHP
    $curl=curl_init('https://localhost:8083/Hidden.php?'.getenv('REMOTE_ADDR'));
    curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);
    curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,false);
    curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,false);
    echo curl_exec($curl);
    ?>
Теперь когда нужен доступ к панели или SSH, достаточно в браузере просто открыть секретный адрес и можно спать немного спокойнее, т.к. более не страшны 0-day эксплойты и брутфорс. В принципе, теперь можно и отключить fail2ban, который жрёт память.

Re: Безопасный доступ к панели и SSH через Web-Knokking

Posted: Sun May 02, 2021 10:20 pm
by grayfolk
... wrote:
Sun May 02, 2021 8:12 pm

Code: Select all

exec('/usr/bin/sudo /usr/local/vesta/bin/v-change-firewall-rule "2" "ACCEPT" "'.$ip.'" "8083" "TCP"',$output,$return_var);
exec('/usr/bin/sudo /usr/local/vesta/bin/v-change-firewall-rule "11" "ACCEPT" "'.$ip.'" "22" "TCP"');
А каким образом у вас выполнится exec(), если вы его запретили в php.ini?
... wrote:
Sun May 02, 2021 8:12 pm
VestaCP — это панель-"дуршлаг" для уязвимостей. Хотя бы потому, что любой пользователь на хостинге может вызывать в PHP через EXEC команды CLI-интерфейса панели: exec(/usr/bin/sudo /usr/local/vesta/bin/v-*…) и делать с сервером абсолютно всё что угодно.
Именно поэтому и не следует использовать Весту для организации многопользовательского хостинга.

P.S. Если в php файле нет иного кода, кроме php, закрывающий тег ставить незачем.

Re: Безопасный доступ к панели и SSH через Web-Knokking

Posted: Mon May 03, 2021 7:03 am
by ...
grayfolk wrote:
Sun May 02, 2021 10:20 pm
А каким образом у вас выполнится exec(), если вы его запретили в php.ini?
Отключили его для пользовательских сайтов. У панели на 8083 отдельный nginx со своим php.
grayfolk wrote:
Sun May 02, 2021 10:20 pm
Именно поэтому и не следует использовать Весту для организации многопользовательского хостинга.
Так Web-Knokking и делается для себя. Если многопользовательский хостинг, то такой вариант защиты уже не применим.
Тут дело несколько в другом: если бы изначально из коробки генерелись конфиги, запрещающие всё потенциально опасное для пользователей, то в принципе панелью пользоваться можно и даже организовывать какой-то хостинг.

Re: Безопасный доступ к панели и SSH через Web-Knokking

Posted: Mon May 03, 2021 6:51 pm
by grayfolk
... wrote:
Mon May 03, 2021 7:03 am
Отключили его для пользовательских сайтов. У панели на 8083 отдельный nginx со своим php.
Ну да, вы не написали, а я не сообразил.

Кстати, у меня не получается запускать скрипты Весты не из-под рута.
Не подскажете, как запустить?

Re: Безопасный доступ к панели и SSH через Web-Knokking

Posted: Mon May 03, 2021 7:54 pm
by ...
Из-под рута запускаются если положить в /usr/local/vesta/web
У меня так же запускаются из /home/admin (если владелец admin)

Re: Безопасный доступ к панели и SSH через Web-Knokking

Posted: Mon May 03, 2021 9:20 pm
by grayfolk
... wrote:
Mon May 03, 2021 7:54 pm
Из-под рута запускаются если положить в /usr/local/vesta/web
У меня так же запускаются из /home/admin (если владелец admin)
Так в Весте admin - это администратор сервера, он и должен иметь такие права.
... wrote:
Sun May 02, 2021 8:12 pm
любой пользователь на хостинге может вызывать в PHP через EXEC команды CLI-интерфейса панели: exec(/usr/bin/sudo /usr/local/vesta/bin/v-*…) и делать с сервером абсолютно всё что угодно.
Все же, любой не может.