Будь как дома, путник или о фиче с домашней директорией на сайте

By 1 июня 2014 9 марта, 2016 Blog

Бонжур, %username%! С этого дня к каждому посту я буду прикладывать какую-нибудь песенку. Таки дела. Запускай и читай дальше.

Давеча я столкнулся с такой фичей, о которой вкраце рассказал в докладе на PHDays IV  (тут слайды короч)- сам доклад о различных файлах которые могут помочь злоумышленнику, а вот на одной группе хочу остановиться и рассказать поподробнее, суть в том, что некоторые администраторы создают отдельного пользователя для сайта…

«А что тут такого? — спросишь ты, — это ж замечательно, наоборот мало кто так делает и это дополнительный плюсик к безопасности!».

Возможно. Просто некоторые огурцы для удобства назначают директорию сайта домашней для созданного пользователя. Ну то есть, был у нас сайт, директория его, допустим, /var/www/ololo.site. Создаём пользователя ololosha и в /etc/passwd меняем его домашнюю директорию (/home/ololosha/) на /var/www/ololo.site.
Я не знаю, зачем это делают, но скорее всего работать с этой учёткой становится удобнее. Заходишь на SSH (удалённая консоль типа) и ты сразу в директории с сайтом, правильно настроил права и другие пользователи не смогут повлиять на файлы в его директории. Шик. Блеск. Но не тут-то было.

А теперь вспомним, какие вещи творятся в домашней директории пользователя.

Начнём с того, что команды в терминале записываются. Не-не-не, АНБ не атакует, это создано для удобства пользователя. Вводишь ты какую-нибудь длинную команду в консоли (например через тот же SSH) и тебе её снова нужно повторить — нажал вверх и в терминале появилась предыдущая команда, потыкал ещё пару раз вверх, а там команды как ты удалял мультики ещё на прошлой неделе. А значит история этих команд подгружается, а именно из файла .bash_history (именно с точкой, ибо скрытый).

Посмотреть примерное содержимое такого файла можно с помощью дорка filetype:bash_history. Там могут палиться имена файлов, пути к ним, логины и пароли, в общем красота. Что ещё хочу сказать. Даже если файл пустой сейчас, это не значит, что он будет оставаться пустым через неделю, месяц, год.

Какой-то рандомный bash_history из гугла

Какой-то рандомный bash_history из гугла

Для пользовавшихся командой less — для вас есть отдельный файлик .lesshst, а вот тем, кто работает с СУБД, вам тоже отдельно .psql_history и .mysql_history

 

Ещё есть такой файлик как .viminfo (filetype:viminfo) и его задача — хранить сессии при редактировании файлов, там тоже могут быть пути к файлам, в том числе и очень интересным. Файлы в директории сайта обозначаются со знака ~ (в линухе это обозначение домашней директории текущего пользователя, кагбе).

Если приглядеться, вы увидите веб-шелл в директории

Если приглядеться, вы увидите веб-шелл в директории

Иногда вообще можно встретить планировщик заданий — crontab или неотправленное письмо, которое будет лежать в файле dead.letter

А теперь вернёмся к SSH. В «хомяке» юзверя обычно лежит папочка .ssh, где лежит криптографическое добро.

Например, authorized_keys — паблик ключи администраторов, которым можно подключаться удалённо к этой машине. В них можно узнать логины админов (а иногда и их email’ы) и… (внезапно) приватные ключи. Серьёзно, я встречал сайты, в файле /.ssh/authorized_keys лежали как паблик так и приват ключи, видимо администраторы не могли выбрать что туда засунуть 🙂

Как-то так

Как-то так. Потёрт домен в логинах

А теперь подробнее о ключах. Да не от квартиры, блин, если ты не знаешь о каких нахрен ключах я говорю, можешь тыкнуть сюда. Так вот. Ключи обычно генерируются командой ssh-keygen, а теперь посмотри с каким именем файла сохраняются ключи? Правильно — id_rsa и id_rsa.pub (для приватного и публичного ключа соответственно). А это значит, что многие администраторы, которые подключались на другие хосты могли их просто-напросто не переименовать. Кстати, храняться они не только в папке .ssh но и в главной директории сайта.

Crypto fail

Crypto fail

А вот узнать хосты, к которым он подключался можно с помощью файла known_hosts, в итоге можно подключиться, управлять системой, взрывать дома, захватить мир. Разумеется, это список далеко не полный, можно продолжить той же папкой .config, где софт хранит свои настройки или всякие там .thunderbird, .subversion, .mozilla, .skype, .filezilla (тысячи их), но врят-ли они будут установлены на сервачке. Хотя…

В докладе я хотел показать так же статистику данного явления, но к сожалению времени итак было мало и я не успел предупредить администраторов сайтов ибо их очень много. Поможешь мне %username%?
Вот скачанные bash_history, id_rsa и authorized_keys для сайтов входящих в TOP 1,000,000 по версии Alexa.

 

[lock]

bash_history: https://mega.co.nz/#!rQMGGSYB!TC6O7SWeE2Sna1OHTxhlDcSp72QIOVoaE0m77jhrtuk

id_rsa: https://mega.co.nz/#!SJ1iwLbS!cEmFE_eU8liduR083AEIkIc_DvWyL3Cuwa297fgwGl8

authorized_keys: https://mega.co.nz/#!GF0gwKKJ!qqXf7YdShr7T7qHtfZ3pk6l7gPUWOl9cFeb2yah1fqo

[/lock]

 
Какой итог? Можно, конечно, запрещать доступ к данным файлам, но мало ли какой софт может создать файл новый, неизвестный тебе файлик, который злоумышленник в итоге может прочитать. Лучше перенести home на директорию выше. От греха подальше.

 

Leave a Reply