воскресенье, 27 июня 2010 г.

Интерфейс. Новые направления в проектировании компьютерных систем

Для профессии программиста можно придумать достаточно много ассоциаций. Одной из популярных является отождествление программиста с переводчиком. По сути дела задача программиста заключается в переводе какой-то жизненной проблемы или процесса на магический язык, понятный всем этим железкам, несущих гордое название вычислительная техника. Результаты программ так же требуется донести до конечного пользователя, причем в приемлемом и понятном для него виде (ну только, если вы не пишете программу для другого программиста). Ни для кого не секрет, что точка соприкосновения пользователя с программой называется интерфейсом. Если программу сравнивать с айсбергом, то интерфейс - это его верхушка. Именно этой верхушке посвящена книга Джефа Раскина, всемирно признанного специалиста по компьютерным интерфейсам.
Интерфейс, как одежка программы, по которой встречают, является одной из наиболее значимой части программы. И вот тут, возникают проблемы. Причина как мне кажется, заключается в сложной формализации такого понимания как интерфейс. Программисты с их любовью к формальным подходам, качественным и количественным оценкам, не находят привычных метрик в задачах создания интерфейсов. Типичным в данной ситуации является копирование существующих шаблонов, что не всегда приводит к положительным результатам. Мне кажется, книга Джефа Раскина "Интерфейс", достаточно удачный способ внести в данную область долю формализма. Ценность данной книги заключается в том, что она не является набором удачных шаблонов в области дизайна интерфейсов, а раскрывает основополагающие принципы построения интерфейсов. Читателя знакомят с такими понятиями как режим и квазирежим, локус внимания, монотонность, видимость. Любителям формальных метрик предложат модель скорости печати GOMS, законы Фитса и Хика. Дабы теория не выглядела голословной, книга содержит простую задачку, имеющую различные реализации интерфейсов. Каждый интерфейс оценивается согласно представленным методам, читателю предлагается на их основе улучшить интерфейс задачи.
Стоит отметить, что автор книги также является создателем знаменитого Apple Macintosh. Если вами овладеет желание познать в рамках какой религии создавался интерфейс Mac Os, почему в данной ОС меню приложений находится у верхней границы экрана, почему iphone не нужны файловые менеджеры, а мышка от Apple имеет только одну кнопку, то вам достаточно будет прочитать данную книгу.
Также данная книга сможет быть вам интересна в случаях, если вы:
  • не можете без эмоций с около-научной точки зрения объяснить почему CapsLock - зло;
  • не понимаете причину, по которой пользователям приходится раз за разом искать кнопку вызова функции в вашей программе;
  • неудовлетворенны интерфейсами программ, которые вы создаете;
  • хотите хоть одним глазком заглянуть в возможное будущее интерфейсов и подчерпнуть оттуда новых идей ;
  • освободиться от навязанных шаблонов и вникнуть в суть формальных способов построения интерфейсов.

    четверг, 3 июня 2010 г.

    Сквозная аутенфикация при помощи JA-SIG CAS. Часть первая - сборка

    Небольшое руководство по внедрению в инфраструктуру информационной среды предприятия сервера кроссдоменной сквозной аутенфикации на базе JA-SIG CAS.
    В моем конкретном случае, решение данной задачи заняло несколько больше времени, чем я расчитывал. Буду рад, если данная статья поможет более четко представить объем необходимых работ, а возможно сэкономит несколько часов поиска в интернет разрозненной информации по этапам настройки CAS сервера.

    Для простоты, я бы выделил следующие основные подзадачи:
    1. Сборка сервиса JA-SIG CAS и тестирование на работоспособность;
    2. Реализация требуемого обработчика аутенфикации JA-SIG CAS;
    3. Настройка Tomcat 6 и развертывание CAS web-приложения;
    4. Реализация клиента для конечного сервиса;
    5. Добавление плюшек и бантиков.
    Каждый пункт думаю раскрыть в отдельной статье. Данная статья, в частности, посвящена первому этапу, а именно - подготовке среды для создания собственного сервера CAS.

    JA-SIG CAS Server реализован на языке java и в качестве инфраструктуры сборки использует Maven2. Так что, знания данных инструментов вам будет необходимо в ходе работы.

    Прежде всего необходимо скачать дистрибуцию самого cas севрера. Сделать это можно с официального сайта. На момент написания статьи на странице скачивания последняя доступная версия CAS сервера имела номер 3.4.2. Распространяется как обычный zip или tar.gz архив.
    После распаковки архива, вы должны получить директорию cas-server-3.4.2, которая является корнем maven2 проекта. Данный проект состоит из нескольких модулей. Наше внимание в основном будет сосредоточено на модуле cas-server-webapp.

    Я бы настоятельно рекомендовал импортировать корневую директорию в качестве проекта вашей любимой IDE. Насколько мне известно, все они успешно работают с проектами maven2. Так же не лишним будет натянуть страховочную сеть в виде системы контроля версий, особенно если вы любите экспериментировать.
    В зависимостях проекта прописаны 2 дополнительных maven репозитория, а именно JA-SIG Maven Repository(http://developer.ja-sig.org/maven2) и JBoss Repository(http://repository.jboss.com/maven2). Так что, если вы используете внутренний кэширующий maven репозиторий, не забудьте добавить данные репозитории в списки индексируемых. Мой выбор в данном плане sonatype nexus. Именно на этом шаге меня подвела моя забывчивость - в случае с nexus недостаточно просто добавить репозитории, их надо прописать как публично доступные. На выяснение причин, по которым сборка не может выгрузить зависимости я потратил около часа. Так что, будьте осторожны.

    Архив дистрибуции уже идет с собранными модулями, поэтому не вижу особой необходимости делать пересборку проекта с корня. Предлагаю обратить внимание непосредственно на cas-server-webapp. Для того, чтобы убедиться что проект может быть собран, необходимо перейти в директорию cas-server-3.4.2/cas-server-webapp и набрать в консоли mvn package. Еще лучше провести данную операцию из любимой IDE. Если сборка прошла успешно, значит проблемы с видимостью maven репозиториев и наличия зависимостей на них нас миновали.

    Следующим шагом является непосредственное тестирование веб-приложения cas. Для простоты тестирования веб-приложений могу рекомендовать использовать maven-jetty-plugin. Легковесный web-контейнер разворачивается в считанные секунды и идеально подходит для вопросов тестирования. Для подключения плагина необходимо отредактировать cas-server-3.4.2/cas-server-webapp/pom.xml в секции build. В моем случае секция biuld выглядела следующим образом:





    org.mortbay.jetty
    maven-jetty-plugin
    6.1.24

    10



    org.apache.maven.plugins
    maven-war-plugin

    cas







    При подключении данного плагина появляются цели jetty:run и jetty:stop. Соответсвенно первая запускает легковесный контейнер jetty на локальной машине на порту 8080. Для тестового запуска достаточно выполнить цель jetty:run. После старта сервера можно открыть в браузере http://localhost:8080/cas/. Вы должны увидеть форму аутенфикации. Для демонстрационных целей в поставке реализован простой обработчик аутенфикации, допускающий пользователей, у которых login совпадает с password. Введя в форму аутенфикации, например, test/test вы должны увидеть сообщение об успешной аутенфикации. На ввод test/123456 система должна ответить об ошибочной попытке аутенфикации.
    Формально, если вы добрались до данного момента и у вас все работает, то вы можете вызвать цель package модуля cas-server-webapp и в директории cas-server-3.4.2/cas-server-webapp/target получить файл cas.war, который и будет нашим экземпляром cas-server-а.
    В следующей статье собираюсь остановиться на вопросе реализации обработчика аутенфикации.

    вторник, 1 июня 2010 г.

    Хакинг. Искусство эксплойта

    На полках книжных магазинов не часто можно наблюдать новинки, посвященные вопросам компьютерной безопасности. Видимо так сложилось, что данная тематика не находит стабильного спроса среди российских читателей. За практически полным отсутствием оригинальных изданий, приходится довольствоваться редкими переводами зарубежных книг. В данных условиях просто не мог отказать себе в удовольствии приобрести перевод второго издания Hacking. The Art of Exploitation от no starch press. По сравнению с первым изданием, книга серьезно набрала в весе. По субъективным ощущениям стала толще раза в 2.
    В книге покрывается достаточно широкий спектр вопросов компьютерной безопасности, начиная от неформального введения в программирование, что, на мой взгляд, в данной книге лишнее, продолжая вопросами низкоуровневых уязвимостей системных приложений, безопасности в сетях TCP/IP, криптографии и безопасностью wifi-сетей. В книге описываются наиболее популярные инструменты и библиотеки, используемыми хакерами, приводится достаточно большое количество простых и понятных примеров эксплоитов и сетевых утилит.
    В 500 страниц сложно было бы уложить все нюансы и аспекты каждой темы, поэтому книгу стоит рассматривать как отправную точку на пути получения знаний в области компьютерной безопасности.
    На мой взгляд, книга очень хорошо подойдет студентам, специальность которых тем или иным образом связанна с компьютерной безопасностью. Будет не лишним ознакомится с данной книгой C/C++ разработчикам, дабы посмотреть на ситуацию с другой стороны баррикад и, возможно, открыть для себя целый ряд, невидимых до этого проблем. Тестировщикам программного обеспечения (преимущественно разработанного на C) данная книга может дать представление о методах тестирования, направленного на проверку соответствия продукта требованиям безопасности.
    Если же вы знакомы с gdb, знаете что такое format string vulnerability, имеете представление о libpcap, libnet, nmap видели не только в "Матрице", в курсе чем симметричное шифрование отличается от асимметричного, int $0x80, 0x90, 0xdeadbeaf - для вас не просто набор символов, то найти что-то новое в данной книге будет сложно. Лучше в данном случае, мне кажется, обратить свое внимание на The shellcoder's handbook. Жаль только эта книга, видимо на русский язык, если и будет переведена, то очень не скоро.
    Не могу не упомянуть об еще одном переводе от издательства Символ, посвященному вопросам безопасности программного обеспечения. Fuzzing. Исследование уязвимостей методом грубой силы, несмотря на характерное для переводных IT-книжек отставание в 3 года от зарубежного издания, содержит достаточно интересные идеи поиска уязвимостей в программном обеспечении, не получившие широкого освещения в российской компьютерной литературе. По крайней мере мне среди русско-язычных изданий и статей упоминание о fuzzing-е, как технике тестирования ПО на безопасность не встречалось. Обе книги, на мой взгляд, являются удачным дополнением друг друга - первая описывает основные классы уязвимостей системного ПО, вторая - раскрывает одну из методик поиска данных уязвимостей.