Tuesday, April 27, 2010

В бой идут старики?

Друг и коллега предполагал, что антивирусные производители немного халтурят, выкидывая из своих антивирусных баз "старые" сигнатуры. В целом, понятно, а что им делать? Обыватель, выбирая антивирус, при компромиссе полнота сигнатурной базы - производительность, очевидно, выберет более производительное решение. Логично, что чем меньше база сигнатур, тем производительность - выше (я помню то светлое время, когда я впервые услышал о cureit, это было где-то в 2005, тогда ее размер был ~5Mb, а что сейчас - 38Mb! Всего-то 5 лет прошло.)
Вот и мне стало казаться, что старые сигнатуры все-таки выкидывают.


Смотрел в логи интернет-прокси и обнаружил тьму обращений на следующие сайты:

www.riyadh-cables.com
www.sabic.com
www.savola.com
Я так и не понял, что это за сайты, но чтобы не погубить прокси закрыл доступ к ним.
Затем посетил компьютер, с которого это все летело. Увидел примерно следующее (привожу реальный фрагмент, заменив IP-адреса):
....
TCP X.Y.Z.A:1071 112.9.10.0:80 FIN_WAIT_2

TCP X.Y.Z.A:1072 85.158.165.102:80 FIN_WAIT_2
TCP X.Y.Z.A:1073 85.158.165.102:80 FIN_WAIT_2
TCP X.Y.Z.A:1074 85.158.165.102:80 FIN_WAIT_2
TCP X.Y.Z.A:1075 85.158.165.102:80 FIN_WAIT_2
TCP X.Y.Z.A:1076 77.95.217.15:80 TIME_WAIT
TCP X.Y.Z.A:1077 85.158.165.102:80 FIN_WAIT_2
TCP X.Y.Z.A:1078 136.9.10.0:80 FIN_WAIT_2
TCP X.Y.Z.A:1079 85.158.165.102:80 SYN_SENT TCP X.Y.Z.A:1080 213.210.229.148:80 FIN_WAIT_2
TCP X.Y.Z.A:1081 213.210.229.148:80 FIN_WAIT_2
...
И такого безобразия ~ 5000 строк. IPS генерил кучу SYN_Flood-ов на те же адреса.
Название процесса мне так и не показали ни netstat -ano, ни tcpview. TcpView показало "неизвестный процесс". При перезагрузке все повторилось, решил, что оно где-то в авторане записано. Запустил autoruns, и после недолгого изучения нашел подозрительный сервис "Microsoft security update service", затем файлик mssrv32.exe в system32. Файлик сразу не удалился, так как был занят. Поубивал все "неизвестные процессы" вручную через TCPView, файлик стал дотупен. По дате и времени создания файлика понял, что это то, что я ищу:

Послал этот файлик на Virustotal.com, жаль отчет не сохранил (не до этого было), - из всего набора движков, только 4 в нем что-то нашли. Я сразу решил, что я на пороге "великого" открытия: мой пользователь словил вирус, о котром никому из великих не известно, ибо ни Kaspersky, ни DrWeb, ни McAfee не входили в перечень четырех.
Но... я поискал в Google, и увидел, что проблема эта - старая и, очевидно, сигнатура под это безобразие тогда же и была создана (Наместников Юрий из Лаборатории Касперского 15.09.2007 04:20 пишет: "mssrv32.exe_ - Backdoor.Win32.Kbot.d. Детектирование файла будет добавлено в следующее обновление."). Тем не менее, по мотивам высылки нами "образца" mssrv32.exe, сигнатура появилась в Kaspersky вместе с описанием.
Сегодня Virustotal вернул уже не 4, а 20.

Выводы, которые я для себя сделал:

  1. Антивирусы умрут рано или поздно. Чем заменить - системами "белых списков", - уже давно перечислить все хорошее и разрешить его проще, чем все плохое - и запретить.
  2. Антивирусные вендоры как-то обмениваются информацией. Мы послали "образец" только в McAfee, DrWeb и Kaspersky, но сигнатуры появились и у многих других участников Virustotal.com. Учитывая то, что проблема известна с 2007 года, у меня нет объяснений, почему многие другие именно сейчас "заопределяли" этот "образец".
  3. Если у вас есть антивирус, или даже три разных (оборона должна быть эшелонированной :-) ), вы не защищены от вредоносного ПО.

Friday, April 16, 2010

Каша из топора

Сегодня поговорим о том, как подрядчику делать проекты силами заказчика, естественно, не за бесплатно. Для потенциальных неблагонадежных подрядчиков - руководство как обманывать, для заказчиков - как не быть обманутым.


Итак, я подрядчик на сложный проект, вы - заказчик, для простоты, - некого программного обеспечения. У меня нет ресурсов генерить хорошие привильные идеи, ну, например, у меня нет квалифицированных разрабочиков и вообще штата, а под каждый проект я иду в государственный институт и набираю студентов первого курса за соответствующую плату. В качестве решения я выдаю то, что мне выгоднее (действительно, - это же бизнес!). Теперь уже это ваша головная боль показать мне почему то, что я сделал, нехорошо. Очевидно, что мне выгоднее делать негибкое решение: его делать банально дешевле, к тому же, легкие изменения, которые в случае настраиваемого решения можно было бы выполнить конфигурацией, для вас обернутся необходимостью разработки, на которой, очевидно, я могу заработать. А куда вам деваться, если я уже выбран? Если вы ничего не понимаете и/или не хотите разбираться/думать, вы согласуете мой вариант "наименьших затрат". Если вы разбираетесь в вопросе (хотя бы на уровне фильтрации бреда), вы будете вынуждены тратить время на проработку со мной предлагаемых мною вариантов: объективно доказывать, что они не соответствуют каким-то там стандартам/практикам (просто сказать, что так "плохо" не получится, так как предложение будет воспринято мною как "дополнительное требование", которое "out of scope"), тратить время на детальное объяснение своих требований, поскольку я, прикрываясь словами "наша работа используется во всем мире (!), и только у вас такие требования", буду поначалу "не понимать" все о чем вы меня просите (особенно здорово, если мы с вами банально говорим на разных языках, это - небольшое, но преимущество, опять же мое). В конечном счете ваша деталлизация спустится до уровня работы моего архитектора, и вы сами за него сделаете его работу. Как видите, в любом случае вы в проигрыше. Что плохого для вас:
- вы тратите свои ресурсы. Поскольку очевидно, что это - моя работа, вы их в таком объеме не планировали;
- как бы ни был я плох как подрядчик, в любом случае я более профессионален в предметной области (ибо я все-таки успешен на рынке, иначе вы бы меня не выбрали), а обмануть любителя профессионалу проще;
- свои непрофессиональные решения я буду потом оправдывать вашими же согласованиями.


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

Вы ссылаетесь на требования международных стандартов (вам повезло и свой "здарвый смысл" вы можете объективно подтвердить), я легко обосную вам то, как дорого мне (собственно, вам) дорабатывать мой продукт до общепризнанных "Security in depth" (ибо в depth залазить не хочется, например, студенты которые раньше у меня работали и которых я увлоил после проекта уже бородатые дядьки и покупать их уже отнюдь не дешево) и т.п. В итоге, вы снова вынуждены разбираться в предлагаемых мною компромиссных вариантах.


Ну и последнее, если даже вы меня выгнули и я вам за уговоренную ранее цену делаю именно том, что вам нужно, неся при этом какие-либо потери, я сделаю так, что эти потери я отобью на поддержке своего детища. Я ВСЕГДА смогу сделать так, чтобы наша с вами история имела продолжение либо в части поддержки, либо в части доработок, просто плохо выполняя свою работу.


Как же вам со мной бороться? Лучше вам, конечно, меня не выбирать, но как это можно сделать:
1. Я должен выбираться в объективном тендере, исключающем коррупцию.
2. Я должен иметь подтвержденный опыт, иметь в штате нужных вам специалистов с подтвержденными компетенциями.
3. Мои подходы к разработке должны соответствовать имеющимся практикам и стандартам, впрочем как и продукты, которые я делаю.
4. Я не должен быть уникальным в каком-либо виде, должна быть настоящая конкуренция. Идеально, если вы как-то проверите, что я не "договорился" со своими конкурентами. Следствие: берите лучше коробочные варианты, а не заказывайте мне разработку, либо держите своих разработчиков и обспечивайте среди них отсутствие "ключевых" фигур.
5. Четко разделяйте ответственность меня и свою. Контролируйте это разделение постоянно.
6. Четко формируйте свои требования, чтобы они не допускали хоть сколько-нибудь свободного толкования. Четко определите что входит в объем проекта и убедитесь в том, что я с этим согласен.
7. Имейте четкое представление о том, что хотите получить. Будьте уверены, что вашими требованиями это покрывается. Можете нанять какого-нибудь стороннего эксперта, обязательно квалификацией не ниже меня и имеющего аналогичный опыт, который поможет вам сформирвоать требования, покрывающие ваши желания, а так же быть экспертом с вашей стороны.
8. Позаботьтесь о том, чтобы у вас были рычаги давления на меня.


Как это не прискорбно сознавать, бизнес циничен. Нам всем нужно смотреть в корень.