понедельник, 26 апреля 2010 г.

Рабочие процессы в Sharepoint

Есть такая категория людей, которые умеют сделать такое криворукое решение, что потом иначе как по кривому его поддерживать не получится...
Ну не об этом. У нас есть раболчий процесс, который состоит из множества действий, условий окончания, подвязано множество людей, выполняется в среднем за 2-5 дней. Процесс прикручен к типу контента, на основе которого в итоге получаются библиотеки документов. Процесс используется в работе более чем 200 людьми, постоянно в запущенном состоянии находится более 100 таких процессов.
И тут всплывает криворукость, даже хуже, вылезает просто тупой баг - в одном месте (да ладно уж, везде) разработчики забыли проверить переменную на null. Это всё рушит в 10% случаев. 10% - это то число библиотек, где забыли включить обязательное заполнение поля, поле остаётся null, а оно в коде используется...
Что делать-то? Остановить все рабочие процессы, исправить и запустить заново с потерей состояния? Исправить в этих 10% списков требования к полю и забыть это сделать в следующие сто раз?
Криворукий код и подход к разработке не дают сделать по простому - сделать новую сборку и провести апгрейд - всё молча рушится.
Как ни странно, но в этой ситуации нам на помощь приходит Sharepoint, который (опять как ни странно) рассчитан даже на самое тупое использование - можно в GAC удалить dll с кодом и вставить новую, перезагрузить пул веб-приложения. Все запущенные рабочие процессы продолжат работать по старому сценарию, даже после перезагрузки, а новые будут по новому рабочему процессу. Данные о рабочем процессе, логике и т.п. сохраняются всегда для каждого элемента. Странно... но логично.

суббота, 17 апреля 2010 г.

ReSharper

Ах, как же хорошо - вышла новая Visual Studio 2010.
Несмотря на то, что Microsoft стала открыто воровать фишки у конкурентов и вставлять их в свои продукты, интерфейс уродский, юзабилити как всегда. Но сразу же вышла и финальная версия ReSharper (и кряк к ней =) ).
До этого приходилось сидеть на бета и хуже сборках ReSharper - глюков целая гора было. Помнится, когда ReSharper для 2008 был в разработке, глюков было очень мало и я долго сидел на предрелизных сборках. В сегодняшней ситуации я удосужился познакомиться с новым интерфейсом студии, ибо пользоваться ей вместе с ReSharper было невозможно - лики памяти, баги, вылеты и т.п. Посмотрим, что они там в релизе сделали...

среда, 14 апреля 2010 г.

Бэкдор в active directory своими руками

Итак, мы все знаем про подлых пользователей c UID=0 в unix, которых может быть больше одного.

Посмотрим, как такое же (а на самом деле, даже более страшное) организовывается в инфраструктуре Windows. Разумеется, мы говорить будем не про локальные виндовые учётные записи, а про Active Directory, т.е. говорить будем об администраторе домена. Или, даже, хуже, об enterprise administrator.

Итак, истина номер один: у объектов в active directory есть атрибуты и права доступа.
Истина номер два: эти атрибуты можно менять.

Как легко понять, мы МОЖЕМ сделать учётную запись с фантастическими правами, к которой не будет доступа НИ У КОГО. Однако, он сможет логиниться, блокировать, разблокировать, менять свои атрибуты и атрибуты чужих людей.

В самом страшном случае, это будет пользователь с волшебным SID-*500, которого не позволяет удалить уже сама винда. (Для этого нужно переименовать, а на его место положить другого пользователя с ником Administrator и с полными правами).

Таким образом, мы получим формально чистенький беленький пушистенький домен, внутри которого живёт большой, жирный… м… даже не знаю кто. Ну, пусть он будет называться северным пушным зверем.

Шаги для выполнения:
1) Создайте учётную запись или переименуйте администратора. Назовите её очень… странно. Например, ExchangeLegacyReciver. В обычном эксчейнже есть ExchangeLegacyInterop, так что понять о чём тут речь будет очень и очень сложно.
2) Задайте ей соотвествующее имя. Типа, Exchange Legacy Connection Reciver. 
3) Задайте ей пароль, укажите «пароль никогда не истекает» и т.д.
4) Включите её в все нужные группы. Реально, для контроля над доменом достаточно вхождения в Remote Desktop Users (или другую группу, указанную в свойствах tcp-RDP) и Enterprise Administrator. Чем меньше

Дальше начинается магия:

1) Логинимся под этой учёткой.
2) Запускаем ads* (если не знаете, что там на месте звёздочки, вам это не нужно. Тем кто знает и понял о чём речь, просьба не отвечать на вопросы школьных хэккеров про пропущенную часть)
3) Ищем себя в нужном OU. Первым делом идём в свойства и меняем владельца на некую другую учётную запись с достаточными правами (чтобы, если ошибёмся, могли поменять или удалить)
4) Снимаем галку наследования, копируем атрибуты.
И… Ну вы поняли. Удаляем всё лишнее. Удаление SYSTEM из тех, кто имеет право, приведёт к странной ситуации: даже учётная запись не сможет изменить свои атрибуты через оснастки, однако, может их редактировать через ads*; добавляем себе полные права на себя.
5) Создайте в ou=Program data новый контейнер System
5) Переместите объект (правой кнопкой, move) в, например, Program Data. Это место никому и никогда НЕ видно. Т.е. ваш объект будет существовать «где-то», где его видно будет только через ads* или подобные утилиты. Альтернативно, переместите просто в корень домена.
6) Проверьте права после перемещения (их любят дописывать)
7) проделайте трюк с правами с контейнером. Это не позволит посторонним людям не только менять атрибуты или их читать, но и видеть сам факт существования.

Учтите, во время всего этого — одна ошибка — и вы больше не владелец самого себя без права восстановления.

Собственно, можно сказать, почти всё. Можете (проверив, что логин и т.д. хорошо), менять владельца пользователя на самого себя. Точка, цепочка замкнулась. Дальше только восстановление из бэкапа. Самое что смешное, другие пользователи с полными правами вас даже не будут видеть в active directory. Даже в ads*.

Дальше остаётся только секьюритизировать главное — это членство в группах (один неверный шаг — и вы труп, восстанавливать из бэкапа). 

Итак:

1) Переименовываем группу (через ads) в что-то своё. Например, Builtin Security Principial.
2) Создаём Enterprise Administrator. Включаем его в Builtin Security Principial.
3) Перемещаем Builtin Security Principial в program data\system
4) делаем ему аналогичную «магию» с правами.
5) PROFIT???

ВИДНО это будет. Увы. Спрятать до конца членство мне не удалось (хотя можно создать цепочку...) Однако, при попытке удалить вас из членов группы, будет появляться ошибка there is no such object on server.

При этом:

1) энтерпрайзнутые и доменные админы по-прежнему имеют право на существование. Группа есть, права её правильные, домен работает как положено (не проверял установку эксчейнжа, правда).
2) Есть учётная запись, которую НЕВОЗМОЖНО увидеть. Никак. Ни из ads* ни из чего-либо другого (можно увидеть странный контейнер, но не более).
3) Членство в группах у этой учётки не заметно.

Дальнейший уровень стелса — попытаться сменить тип группы и пользователя на что-то другое (например, на компьютер). Не уверен, что это можно, и что это будет адекватно воспринято компьютерами в сети.

P.S. Прошу прощения, писал сумбурно по мере поиска решения проблем. Завтра если будет время, подниму виртуалку с 2008, проверю это там в полном объёме.


(перепост с habrahabr.ru/blogs/infosecurity/90990/)

пятница, 9 апреля 2010 г.

Конференция "Образование в 21 веке"

Конференция будет 29 апреля (четверг).
Очень насыщенная, много информационных докладов. Особенно хочу послушать вот эти:

Стратегия Microsoft в области образования: взгляд в будущее.
(Энтони Сальсито, Вице-президент Microsoft по работе с системой образования)
Сотрудничество Microsoft c российской системой образования: итоги и перспективы
(Баландин И.Э. Директор по работе с системой образования Microsoft в России)

Более подробно тут


Конференция известная, приедет много интересных людей, надеюсь зацепить парочку вузов и компаний-разработчиков.
Всем советую посетить!
Регистрация


А ещё на логотипе конференции знакомые лица =)





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

В Windows 7 есть замечательная утилита записи всех действий пользователя - psr.exe. Официально называется "Средство записи действий по воспроизведению неполадок".


Утилита позволяет записывать последовательность действий пользователя за компьютером с помощью скриншотов и текста.

Кнопки всего три, а возможности очень большие:
На каждое действие (клик мышкой) делается скриншот и выделяется зона активности.

Параллельно дублируются действия в виде текста.
Этап проблемы 6: (09.04.2010 15:19:08) Пользователь щелкнул "6 (кнопка)" левой кнопкой мыши в "Калькулятор" 

Ведётся подробный лог всех запущенных процессов.
Сеанс записи: 09.04.2010 15:18:49 - 15:19:14
Этапы проблемы: 10, Пропущенные этапы: 0, Другие ошибки: 0
Операционная система: 7600.16481.x86fre.win7_gdr.091207-1941 6.1.0.0.2.48
Этап проблемы 1: Пользователь вводит данные с клавиатуры в "Выполнить" [... Enter]
Программа: Проводник, 6.1.7600.16385 (win7_rtm.090713-1255), Microsoft Corporation, EXPLORER.EXE, EXPLORER.EXE
Элементы пользовательского интерфейса: Edit, ComboBox, Выполнить, #32770
Этап проблемы 2: Начало перетаскивания пользователем в "Калькулятор"
Программа: Калькулятор Windows, 6.1.7600.16385 (win7_rtm.090713-1255), Microsoft Corporation, CALC.EXE, CALC.EXE
Элементы пользовательского интерфейса: Калькулятор, CalcFrame
Этап проблемы 3: Завершение перетаскивания пользователем в "Калькулятор"
Программа: Калькулятор Windows, 6.1.7600.16385 (win7_rtm.090713-1255), Microsoft Corporation, CALC.EXE, CALC.EXE
Элементы пользовательского интерфейса: Калькулятор, CalcFrame
...