Загрузка...

Аудит безопасности хостинга и других совместно используемых систем на Linux

Тема в разделе Безопасность создана пользователем ouin 8 авг 2018. 256 просмотров

  1. ouin
    ouin Автор темы 8 авг 2018 Заблокирован(а)
    Многопользовательские системы: плюсы и минусы
    Linux – это многопользовательская операционная система. Это означает, что в одной в операционной системе может быть создан несколько учётных записей пользователей, и что с операционной системой могут одновременно работать несколько пользователей.

    Самым типичным примером многопользовательского использования Linux является виртуальный хостинг. На английском он называется shared hosting, то есть совместный хостинг. Если вы не веб-мастер и думаете, что никогда не сталкивались с совместным хостингом, то вы ошибайтесь.

    Виртуальный хостинг работает следующим образом: каждому клиенту хостера на сервере выделяется его собственная папка. В этой папке веб-мастер размещает свои сайты – один или сразу несколько. К этим папкам у веб-мастера есть FTP доступ или доступ через файловый менеджер с веб интерфейсом. Многие хостинги в настоящее время предоставляют также доступ по SSH (сразу или по запросу). По задумке, каждый веб-мастер имеет доступ только к своей папке: возится там, что-то делает, размещает сайты и так далее.

    Совместное использование одного «железного» компьютера очень экономично и удобно. Такой подход может быть реализован на компьютерах в общественных местах, в организациях, даже вы у себя дома можете настроить работу в ОС таким способом. Тот же самый сервер (если он достаточно мощный) может обслуживать сотни клиентов и хостить (размещать на себе) одновременно тысячи сайтов!

    И если на домашнем компьютере вопросы безопасности не стоят остро (хотя никому не приятно, если кто-то лазает по его личным папкам), то в корпорациях и на совместном хостинге это намного важнее: возможность «заглянуть» в чужую папку может означать разглашение конфиденциальной информации, а если кто-то получил доступ в папку с сайтами, то это означает компрометацию – утечку паролей, опасность заражением веб-ресурса вредоносным программным обеспечением и прочие негативные последствия.

    Для кого-то это может стать сюрпризом (хотя про это говорят на протяжении уже долгого времени), но плохо настроенных хостингов хватает. Я помню, как на своём первом хостинге с PHP (бесплатный, с доменом третьего уровня) я «заглядывал» в чужие папки. Больше всего там было ******овых сайтов похожих на mail.ru… Но не в этом дело – дело в том, что неправильно настроенные хостинги никто не отменял!

    Взлом хостинга
    Неприятно узнать, если вам не повезло с хотингом и ваша папка с сайтами – это проходной двор, в который заглядывают все, кому не лень. И если это так, и злоумышленник получил доступ и может, например, менять текст на страницах вашего сайта. Это не означает, что вы об этом сразу узнаете. Многие злоумышленники используют взломы в корыстных целях: размещают ссылки (я видел на форумах предложения купить ссылку или сразу доступ к админке крупных сайтов), вредоносное содержимое, используют для незаконных целей.

    Я покажу несколько простых приёмов, как узнать, насколько всё хорошо или плохо с сохранностью ваших сайтов на хостинге.

    Для затравки, создайте на своём хостинге файл с именем test.php и скопируйте в него:

    Код
    <?php

    error_reporting('ALL');



    if ($files = array_slice(scandir('/'), 2)) {

    echo 'In the <b>root</b> folder we found:';

    foreach ($files as $value) {

    echo '<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' . $value;

    }

    echo '<br /><br />';

    } else {

    echo '<br />We cannot open the root directory.';

    }



    if ($files2 = array_slice(scandir('/home'), 2)) {

    echo 'In the <b>home</b> folder we found:';

    foreach ($files2 as $value) {

    echo '<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' . $value;

    }

    echo '<br /><br />';

    } else {

    echo '<br />We cannot open the home directory.';

    }



    if ($passwd = file_get_contents('/etc/passwd')) {

    $passwd = preg_replace("/\r\n|\r|\n/", '<br />', $passwd);

    echo '<b>/etc/passwd</b> contains:<br />';

    echo "$passwd";

    } else {

    echo '<br />We cannot open the /etc/passwd file.';

    }

    Я написал все сообщения на английском, просто из-за того, что у кириллицы может возникнуть проблема с кодировкой – если вам непонятно, что они значат, используйте Гугл-переводчик.

    Теперь откройте в веб-браузере адрес вида ваш_сайт/test.php. Я выбрал для проверки первый попавшийся результат по запросу «хостинг с тестовым периодом», посмотрим, что у меня получилось.

    Содержимое корневой папки сервера – ещё раз, НЕ вашей папки, а всего сервера:
    [IMG]
    Содержимое папки /home (в этой директории находятся директории всех пользователей):
    [IMG]
    Содержимое файла /etc/passwd (только верхушка, там ещё много строк внизу):
    [IMG]

    Начало обнадёживающее!

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

    Приведённые строки кода PHP очень просты, они не делают ничего сверхъестественного – мы просто открываем папки и файлы, а права доступа на эти файлы и папки настроены так, что их может открыть кто угодно – вот и весь «фокус».

    Как на виртуальном хостинге запускать Bash команды
    Можно продолжить изучать внутренности хостинга используя PHP скрипт, можно даже забросить туда Weevely или какой-нибудь из webshells (если выберите этот путь, то рекомендую c99unlimited.php – классика!). Но я хочу вводить команды оболочки Bash – мне (может быть и вам) это привычнее – а ещё нам это в любом случае очень скоро пригодится!

    Как я уже говорил, многие хостеры предоставляют доступ по SSH – можно воспользоваться этим вариантом. Но я покажу более универсальный способ, как запускать системные команды Linux прямо через PHP – это подойдёт тем, у кого не предусмотрен SSH.

    Создайте файл test2.php и скопируйте в него:
    Код
    <?php

    error_reporting('ALL');



    $cmd = 'ping -c 4 ya.ru 2>&1';



    echo '<pre>';

    passthru($cmd);

    echo '</pre>';
    Теперь откройте в веб-браузере ссылку вида сайт.ru/test2.php. Прямо в браузере вы должны увидеть результаты пинга:
    [IMG]
    Если вы их видите – значит всё работает!

    В файле test2.php для выполнения различных команд нужно менять только строку

    Код
    $cmd = 'ping -c 4 ya.ru 2>&1';
    Точнее говоря, то, что внутри кавычек. Здесь ping -c 4 ya.ru – это команда, которую мы отправили для выполнения в операционной системе. А 2>&1означает перенаправлять ошибки в стандартный вывод – это полезно, чтобы мы могли видеть причину проблемы, если команда не сработала.

    Попробуйте ещё несколько команд:
    Код
    ls -al
    [IMG]
    Результат:
    [IMG]
    Код
    ls -al /
    [IMG]
    Результат:
    [IMG]
    Код
    cat /etc/passwd
    [IMG]
    Результат:
    [IMG]
    Информация о сетевых интерфейсах:

    ifconfig

    [IMG]
    Информация о файловой системе:

    df -a

    [IMG]


    Просмотр ARP таблицы сервера:

    arp -a

    [IMG]


    Как на виртуальном хостинге запустить Bash скрипт
    Вы также можете запускать Bash скрипты на shared-хостинге. Это удобно для выполнения автоматизированных проверок, также при запуске сложных команд из PHP файла нам нужно должным образом экранировать кавычки, что не очень удобно и требует времени.

    Нам нужно узнать абсолютный путь до папки, где мы разместим наш скрипт. Чтобы это сделать, выполните команду

    pwd

    [IMG]
    Я получил значение /home/p/pentest2ru/pentest2.ru

    [IMG]


    Допустим, файл с Bash скриптом мы назовём test.sh, тогда для его запуска нужно выполнить команду вида

    bash /путь/до/скрипта/test.sh

    В моём случае, команда будет такой:

    bash /home/p/pentest2ru/pentest2.ru/test.sh

    Итак, для запуска Bash скрипта я отредактировал файл test2.php и у меня получилось так:
    Код

    <?php

    error_reporting('ALL')

    $cmd = 'bash /home/p/pentest2ru/pentest2.ru/test.sh 2>&1';

    echo '<pre>';

    passthru($cmd);

    echo '</pre>';
    Теперь в той же папке что и test2.php, создайте файл test.sh. Запишем в него,

    ping -c 4 ya.ru

    Теперь если мы откроем в веб-браузере адрес вида сайт.ru/test2.php, то мы увидим результат выполнения скрипта test.sh.

    Проверка хостинга
    Для выполнения аудита хостинга можно воспользоваться, например, программой LinEnum.

    Эта программа предназначена для проверки многопользовательских систем на предмет неправильной настройки и возможности повышения привилегий. Она полностью написана на Bash – т.е. отлично подходит для запуска на виртуальном хостинге.

    Программа состоит из одного единственного файла и для её работы не требуются зависимости. Скачайте этот файл: https://raw.githubusercontent.com/rebootuser/LinEnum/master/LinEnum.sh и загрузите себе на хостинг.

    Запустите с помощью test2.php, указав правильный путь до файла, также используйте ключ -t.

    Мой пример (у вас будет другой абсолютный путь до скрипта):

    <?php

    error_reporting('ALL');

    $cmd = 'bash /home/p/pentest2ru/pentest2.ru/LinEnum.sh -t 2>&1';

    echo '<pre>';

    passthru($cmd);

    echo '</pre>';

    Для запуска скрипта вновь откройте в браузере ссылку вида сайт.ru/test2.php

    Когда скрипт завершит свою работу, будет выведен большой отчёт.

    Не нарушает ли LinEnum условия пользования хостингом?
    В отличие от некоторых других инструментов, которые ищут подходящие эксплойты и также пытаются их скомпилировать и выполнить на целевой системе, эта программа полностью безобидная. Тем не менее, она оставляет следы своего применения, например, в истории команд Bash.

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

    [IMG]


    [IMG]


    И тем более её заметят специализированные инструменты для наблюдения за подозрительной пользовательской активностью. Поэтому если у вас есть сомнения, не используйте описанные способы на вашем рабочем хостинг-аккаунте. Я вас предупредил!

    Анализ результатов LinEnum
    Чтобы понять результаты проверки хостинга, нужно иметь некоторые представления об операционной системе Linux.

    Права доступа к файлам в Linux

    Вы увидите, что папки (в Linux они называются директориями) и файлы выводятся примерно в следующем виде:

    Код
    drwx------ 3 pentest2ru notcustomer  4096 Jul  9 07:01 .

    drwx------ 5 pentest2ru notcustomer 4096 Jul 7 21:17 ..

    -rw-r--r-- 1 pentest2ru notcustomer 34 Jul 7 21:46 1.sh

    drwx------ 2 pentest2ru notcustomer 4096 Jul 7 20:19 cgi-bin

    -rw------- 1 pentest2ru notcustomer 35 Jul 7 20:19 .htaccess

    -rw------- 1 pentest2ru notcustomer 1055 Jul 7 20:19 index.html

    -rw-r--r-- 1 pentest2ru notcustomer 205 Jul 7 20:37 i.php

    -rw------- 1 pentest2ru notcustomer 44413 Jul 7 20:30 LinEnum.sh

    -rw-r--r-- 1 pentest2ru notcustomer 100 Jul 9 07:01 test2.php

    -rw------- 1 pentest2ru notcustomer 909 Jul 8 18:59 test.php
    Первая часть (например, drwx------) это информациях о правах доступа. Далее (например, pentest2ru) – это имя пользователя владельца файла, затем (например, notcustomer) это имя группы. Затем идёт дата, время и название файла.

    Для каждого файла в Linux можно установить разные права доступа для:

    • владельца
    • группы
    • всех
    Рассмотрим строки

    • drwx------
    • -rw-------
    • lrwxrwxrwx
    Самый первый символ (d, l или ) говорит о типе файла (в Linux вообще всё является файлами). Если это d – значит это директория (папка). Если это l – значит это символьная ссылка, и если это (прочерк), значит это самый обычный файл.

    Затем идут девять символов. Первые три показывают права доступа к файлу владельца, следующие три – права доступа у группы, и последние три – права доступа у всех.

    Буква r означает наличие права на чтение, буква w – права на запись, буква x – права на выполнение. Прочерк означает отсутствие данного разрешения.

    Пример -rw-r--r--

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

    Ещё пример: drwxr-xr-x

    Эта строка означает, что перед нами директория (d), следующие три символа (rwx) говорят о том, что владелец может читать и записывать этот файл. Буква x для директорий означает возможность зайти в неё, например, с помощью программы cd. Следующие символы (r-x) говорят о том, что члены группы могут прочитать содержимое и зайти в эту папку, но не могут записать что-либо в неё. Последние три символа (r-x) говорят о том, что кто-угодно может также прочитать содержимое папки и зайти в неё, но не может ничего туда записать.

    Доступ к чужим файлам на хостинге

    К примеру, мы в содержимом файла /etc/passwd с помощью LinEnum (или просто выполнив команду cat) увидели там следующее:

    Код
    cronosgoru:x:1074:700::/home/c/cronosgoru:/usr/bin/scponly

    oceanzayru:x:1075:701::/home/o/oceanzayru:/usr/bin/scponly

    yourissite:x:1076:701::/home/y/yourissite:/usr/bin/scponly

    bvshramkog3:x:1077:700::/home/b/bvshramkog3:/bin/bash

    dsfgfdmail:x:1078:701::/home/d/dsfgfdmail:/usr/bin/scponly

    leaderagru2:x:1079:700::/home/l/leaderagru2:/usr/bin/scponly

    masixbetru:x:1080:700::/home/m/masixbetru:/usr/bin/scponly

    pchelka222:x:1081:700::/home/p/pchelka222:/usr/bin/scponly

    split93com2:x:1082:700::/home/s/split93com2:/usr/bin/scponly

    anarimwapm:x:1083:701::/home/a/anarimwapm:/usr/bin/scponly

    sitethemru5:x:1084:700::/home/s/sitethemru5:/usr/bin/scponly
    Можно понять, что папки /home/c/cronosgoru, /home/o/oceanzayru и так далее – это каталоги пользователей, где хранятся сайты. Если мы можем посмотреть их содержимое:

    1

    ls -l /home/o/oceanzayru

    а тем более содержимое файлов сайта (например, файла wp-config.php, в котором WordPress в открытом виде хранит пароль MySQL), то это означает у хостинга очень большие проблемы в плане обеспечения безопасности клиентов и вам на таком хостинге делать нечего (кстати, о том, как сбросить пароль WordPress имея доступ к базе данных или файловой системе, можно почитать здесь).

    Другие проблемы безопасности хостинга

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



    Т.е. невозможно рассмотреть все варианты неправильной настройки сервера в одной статье – дальнейшее исследование зависит от вашей подготовленности.

    Шпаргалка по сбору информации о локальной системе и повышению привилегий
    Автор LinEnum собрал много команд, которые могут стать началом в Local Linux Enumeration. Ссылка на оригинал: https://www.rebootuser.com/?p=1623

    Информация о ядре, операционной системе и устройствах:

    [IMG]
    Пользователи и группы:

    [IMG]
    Информация о пользователях и привилегиях:

    [IMG]
    Информация о рабочем окружении:

    [IMG]
    Интересные файлы:

    [IMG]
    Информация о службах:

    [IMG]
    Установленные программы:

    [IMG]
    Common Shell Escape Sequences:

    [IMG]


    Надёжный хостинг
    Если вы можете просматривать содержимое папок других пользователей – то сразу пакуйте свой сайт в чемоданы и переезжайте на другой хостинг!

    Если вы не хотите селить свой сайт в «коммунальной квартире», то вы можете арендовать VPS – виртуальный частный сервер. Это не просто папка на сервере, а настоящая виртуальная машина, как те, которые вы можете создать в VirtualBox. На эту виртуальную машину вы можете установить любую операционную систему и настроить её на своё усмотрение. Кроме вас в этом сервере никого не будет (поэтому он и называется private, то есть «частный»).
     
  2. rscx
    rscx 8 авг 2018 2136 17 фев 2018
    хули так много
     
  3. ouin
    ouin Автор темы 8 авг 2018 Заблокирован(а)
    Аудит, всегда много)
     
Top
Загрузка...