Unix-истории в картинках: Маленький человек

CLI-комикс: сага о пользователе, осознавшем свое бесправие.

15 Sep 2013


On every system there’s a nobody who dreams of being a somebody.

В каждой системе есть никто, отчаянно пытающийся стать кем-то.

 

Что происходит?

$ id
uid=1002(guest) gid=1002(guest) groups=1002(guest)

$ sudo -l 
[sudo] password for guest: 
Sorry, user guest may not run sudo on server.

Пользователь выясняет, каков его логин, uid, в какие группы он входит (как выясняется – ни в какие, за исключением его собственной).

Пользователь хочет узнать, какие команды он может выполнить через sudo. Оказывается – никаких.

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

Пользователь начинает собирать определенную информацию о системе, записывая все найденное в файл /tmp/inf, очевидно, рассчитывая затем спокойно изучить полученные данные.

Список пользователей, входящих в группу 0 (суперпользователи):

$ echo +++ super-users >>/tmp/inf; grep -v -E "^#" /
etc/passwd |awk -F: '$3 == 0 { print $1}' >>/tmp/inf

Файлы, на которых установлен бит setuid или setgid, то есть файлы, которые исполняются не с правами того, кто запускает, а с правами владельца файла:

$ echo +++ sgid-suid >>/tmp/inf; find / -perm -g=s -
o -perm -4000 ! -type l -maxdepth 3 -exec ls -ld {}
\; 2>/dev/null >>/tmp/inf

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

$ echo +++ world-writeable-dirs >>/tmp/inf; find / -
perm -o+w -type d 2>/dev/null >>/tmp/inf

$ echo +++ world-writeable-files >>/tmp/inf; find / 
-xdev -type f \( -perm -0002 -a ! -perm -1000 \) -pr
int 2>/dev/null >>/tmp/inf

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

$ echo +++ writeable-configurations >>/tmp/inf; ls -
aRl /etc/ | awk '$1 ~ /w.$/' 2>/dev/null >>/tmp/inf

Процессы, запущенные в данный момент от root‘а. Если в соответствующих программах есть известные уязвимости, их можно попытаться использовать.

$ echo +++ processes-running-by-root >>/tmp/inf; ps 
aux |grep root >>/tmp/inf

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