31 мар. 2011 г.
Урра! Я выиграл $50 000. Кому отсыпать? :)
P.S. Гмыльный спамфильтр на высоте.
27 мар. 2011 г.
Конференция Req Labs 25.03.2011
Req Lab. Киев. 25.03.2011 |
Сама конференция имела тематикой работу с требованиями в сфере ПО. Некоторые доклады были откровенно притянуты за уши к этой тематике. Некоторые напрямую касались этой темы. В общем и целом, из 9 докладов, на которых я присутствовал, 1 был откровенной пургой, и 1, состоявший из двух частей (про психологическую составляющую комндной работы) мог бы занять раза в 3 меньше времени. Остальные доклады были вполне полезные и интересные.
Организация конференции понравилась. Всё вовремя, продуманы перерывы, перекусы, перепивы...
Очередной раз удивился (хотя уж пора бы и привыкнуть) быдлости некоторых товарищей. Этому вот нужно припереться на первый ряд, достать ноги из-под юбки, чтобы заслонить ими докладчика, открыть ноут и с гламурно непосредственным выражением лица свистеть в аське. Или порадовали товарищи, которые положили на стулья свои вещи (мол занято), а сами съе#лись пить шаровый кофе, в то время, как народу пришлось тащить стулья с другого этажа, чтобы послушать интересный доклад.
Да и про необходимость выключения звука у мобилки мало кто из высокообразованных и гламурных гиков знает. А хуле?! Мне тут корешь должен звонить!
Но это так - накипело.
Порадовало оформление анонса одного из докладов. Фото тётеньки как раз для рассказов о юзабилити и интерфейсах.
Несколько докладов было про Agile. Тренд. Ничего не поделаешь. Модно.
В общем и целом - полезная поездка.
18 мар. 2011 г.
IE6 has been the victim... (IE6 стал жертвой...)
Порадовала табличка сравнения IE6 с остальными популярными обозревателями. Особенно первый пункт:
Размещает на рабочем столе иконку интернета (голубая E) - эту функцию удалось реализовать только авторам IE6 и IE7. (долго смеялсо)
Примерно туда же относится пункт "Поддержка ActiveX".
Порадовал так же один из пунктов таблички раздела "Почему ты должен пользовать IE6?":
The most aesthetically pleasing web browser logo. (Самый эстетически приятный логотип программы).
P.S. Судя по надписи "A site from the geeks at Pingdom." в подошве сайта тут не обошлось без скрытой рекламы того самого Pingdom. А может всё и делается для этого...
17 мар. 2011 г.
Copypast: Плюс 100 к защите: Круговая оборона Linux десктопа
Плюс 100 к защите: Круговая оборона Linux десктопаОткрытые UNIX-системы всегда славились своей безопасностью. Постоянный аудит кода, молниеносные выходы багфиксов, хорошо продуманная политика разграничения прав доступа – все это сделало их очень привлекательным продуктом, которому можно доверить хранение даже самой конфиденциальной информации. Но значит ли это, что мы можем полностью положиться на разработчиков и не должны «допиливать» свою систему самостоятельно? Нет, каждый случай установки ОС уникален и требует подкручивания винтиков. Безопасность машины – понятие весьма многогранное, для разных людей оно может иметь совершенно разные значения. В рамках одной статьи мы не сможем охватить их все, поэтому давай сразу определимся с тем, что и от кого будем защищать:
Это и есть пять основных рубежей, грамотно организовав защиту каждого из которых, ты сведешь вероятность быть поломанным к цифре, маячащей где-то далеко позади 0,1%. От машины руки прочь!Методы защиты от физического проникновения на твою машину весьма просты. Достаточно представить себя на месте подлеца, и все становится предельно ясно. Во-первых, мы можем просто продолжить работу с системой, потому как многие даже не удосуживаются заблокировать экран во время своего ухода. Правило первое: всегда блокируй экран (в большинстве сред Увидев, что GRUB запаролен, мы можем войти в меню BIOS, установить в качестве первого загрузочного устройства CD-ROM и загрузиться с LiveCD, получив полный доступ к содержимому жесткого диска. Правило четвертое: настрой загрузку только с жесткого диска и поставь пароль на BIOS. Но это нас не остановит: мы снимем крышку с корпуса и сбросим настройки CMOS вместе с паролем, просто вынув батарейку на несколько секунд. Правило пятое: покупай корпус с замком. Увидев замок на корпусе, мы забираем весь системник с собой и разбираем его на ближайшей свалке. Правило шестое: всегда пристегивай системник к батарее с помощью цепи. Последнее правило, конечно же, шутка, но и в ней есть доля правды: эффективность защиты от физического доступа падает прямо пропорционально росту наглости взломщика. Кстати, есть еще одна рекомендация, связанная с запираемыми на замок системниками. Большинство из них имеют переднюю крышку, которая также обеспечивает некоторую защиту CD-привода, USB-разъемов и кнопок включения/сброса. Однако мы всегда можем зажать Угроза извнеТе, кто пролезает на машину жертвы из Сети, обычно используют несколько простых и проверенных приемов. Самое простое, что может сделать злоумышленник – просканировать твою машину на открытые порты и попытаться найти уязвимый сетевой сервис. В борьбе с такими экземплярами фауны кул-хацкеров поможет отключение ненужных демонов, своевременные обновления дистрибутива и чтение моей статьи «Огненная дуга», посвященной правильной настройке брандмауэра (см. ][ от 06.2010). Обломавшись на этом пути, хацкер может попытаться подсунуть тебе троян под видом легальной программы или использовать дыру в браузере. В этом случае все просто: ставь софт из официальных репозиториев дистрибутива, используй правильные браузеры свежей версии. Поняв безуспешность своих попыток проникновения, взломщик может попробовать провести DoS/DDoS. От хорошей распределенной атаки ты, скорее всего, не спасешься, а вот небольшую волну вполне сможешь выдержать, если будешь следовать рекомендациям, описанным в статье «Устоять любой ценой» (][ от 09.2009). Хорошей практикой в борьбе с дырами является настройка автоматического обновления ОС, благодаря которому система всегда будет оставаться в свежайшем состоянии. Такие дистрибутивы, как Ubuntu, Fedora, OpenSuSE, уже имеют в своем составе графические напоминалки, которые время от времени выскакивают из трея и сообщают об очередном обновлении. Это удобно, но быстро надоедает, гораздо эффективнее сделать так, чтобы система сама производила обновления в фоне, не отвлекая пользователя от работы. В Ubuntu это делается через графический интерфейс (System -> Administration -> Software Sources -> Updates -> Automatic updates, Install security updates without confirmation) или с помощью модификации файла /etc/apt/apt.conf.d/10periodic:
Замечу, что это относится только к обновлениям безопасности, простой апдейт софта придется производить руками. От возможных дыр в софте также очень эффективны такие системы, как SELinux или AppArmor (уже интегрированные в Ubuntu, OpenSuSE и Fedora), которые просто не позволят уязвимому сервису выполнить код, подсунутый взломщиком (мы не раз писали о настройке популярных расширений безопасности для ОС Linux, подними архив ][). Свой личный бастионПосле проникновения в машину через уязвимый сервис взломщик скорее всего будет иметь очень ограниченные права и возможности (почти все сетевые сервисы в UNIX работают от какого-либо специального пользователя, не имеющего серьезных полномочий в системе), поэтому первое, что он попытается сделать – повысить свои права до root. Наша задача – приложить все силы для того, чтобы помешать ему это сделать, иначе машина окажется полностью в чужих руках. Ниже мы рассмотрим типичные приемы злоумышленников, направленные на получение root, и методы защиты от них. 1. Первым делом хацкер попытается выполнить команду su в надежде на то, что пароль root окажется пустым или настолько простым, что он сможет его подобрать. Мы обезопасим систему, просто добавив в файл /etc/pam.d/su строку «auth required pam_wheel.so» сразу после строки «auth sufficient pam_rootok.so». Теперь право использовать su будет только у пользователей, состоящих в группе wheel (естественно, ты должен себя в нее добавить). 2. Потерпев неудачу в получении прав root обычными методами, взломщик попытается залить на твою машину эксплойт, чтобы добыть права root'а через локальные дыры в безопасности. Но так как его права сильно ограничены, он сможет использовать всего несколько мест для заливки вредоносного кода: общедоступный каталог /tmp и приватный каталог взломанного сервиса (например, корневой каталог веб-сервера или FTP-сервера). Защититься довольно просто, достаточно вынести эти каталоги на отдельные разделы и подключить с опциями noexec (а для верности и nosuid,nodev). Например:
Так взломщик не сможет выполнить свой эксплойт в указанном каталоге. Но не все так просто – знающий человек запустит программу с помощью динамического линковщика и легко обойдет данное ограничение:
К сожалению, в стандартном ядре Linux защиты от данного вида атак нет, но она есть в патче RSBAC (www.rsbac.org), который в любом случае рекомендуется к установке. 3. Если каким-либо образом взломщику удастся обойти проблему запуска эксплойта, он сможет направить его действие всего в две стороны: ядро ОС или программы, имеющие SUID-бит. Только эти два компонента ОС могут дать ему заветный root-доступ. Но если с ядром все ясно (уязвимость либо есть, либо ее нет), то с SUID-софтом все немного сложнее. Даже если в одной из них будет найдена уязвимость, взлома можно легко избежать, просто сняв SUID-бит с программы. Для этого получи список SUID-софта с помощью find:
А затем лиши некоторые из программ привилегий исполнения с правами root: $ sudo chmod a-s /путь/к/бинарнику Будь осторожным – оставив без прав важные системные программы, ты можешь обрушить всю систему. Как всегда, man в помощь. 4. Один из способов проползти в систему находится в области человеческой безалаберности. Чтобы заставить прочитать свои данные какие-либо важные системные утилиты и таким образом привести их в желаемое состояние, взломщик может найти открытые для всеобщей записи файлы и вставить в них какой-либо код (например, добавить в опции сетевого сервиса возможность входа без пароля или записать в файл код, который сорвет стек утилите, прочитавшей ее). Чтобы избежать такой ситуации, достаточно найти все общедоступные файлы и снять бит записи для всех:
5. Потерпев фиаско в борьбе за права суперпользователя, взломщик попытается разнюхать побольше информации о системе и утащить важные данные. В первую очередь это касается данных взломанного сервиса, например, файлов, выложенных на FTP-сервер, или страниц веб-сайта. Фактически защититься от этого можно только вовремя распознав атаку и запретив все подключения с помощью файера (либо просто вытащив кабель из сетевой карты). Второе – это данные о самом сервере, маршрутизация, ближайшие машины и т.д. Обычно их тоже невозможно скрыть без нарушения работоспособности системы. Третье – личные данные пользователей. В большинстве дистрибутивов файлы, создаваемые в домашнем каталоге пользователя, остаются видимыми всем подряд (маска 022), поэтому даже не имея каких-либо серьезных прав в системе, взломщик сможет их прочитать (кроме архиважных файлов с паролями различных программ, которые при создании защищают файл от посторонних). В борьбе с этим поможет одна коротенькая строчка, записанная в файл ~/.profile:
Теперь все вновь создаваемые файлы пользователя будут защищены от посторонних глаз. Вообще, по-настоящему безопасная домашняя машина не должна иметь на своем борту никаких сетевых сервисов, кроме совсем важных и необходимых (OpenSSH, например), а если уж припрет выложить в локальную сеть свой файловый архив или сайт, воспользуйся системой виртуализации уровня ОС, такой как FreeBSD Jail или Linux VServer (обе они уже были подробно описаны на страницах журнала). Кроме сетевых сервисов не исключена возможность подцепить заразу прямо через дыру в веб-браузере или каком-нибудь pidgin. Если такое произойдет – пиши пропало. Взломщик унесет все, включая пароли, сохраненные браузером, личную переписку и всю прочую конфиденциальщину (о методах получения root в этом случае я вообще молчу, их сотни). Даже если твои пароли будут зашифрованы, никто не помешает хацкеру унести все настройки того же Firefox, положить их на свою машину и броузить интернет от твоего имени. Единственное, что можно порекомендовать для защиты от такой ситуации – хранить все конфиденциальные данные на виртуальном разделе и подключать его к системе только по мере необходимости (полное шифрование /home не спасет, потому что взломщик окажется на уже расшифрованном разделе). Хорошей идеей будет установка модуля Linux-ядра Yama (http://lkml.org/lkml/2010/6/23/25), созданного разработчиками из Canonical. Yama по умолчанию включен в дистрибутив Ubuntu и позволяет защитить систему от некоторых видов локальных атак:
Истребляем нечистьЧто ж, мы защитили систему снаружи и внутри, но как обезопасить себя в том случае, если все это не поможет, и взломщик таки проникнет в систему? Попробуем разобраться. Даже мало-мальски образованный хацкер прекрасно понимает, что через уже использованную дыру в безопасности он не сможет ходить вечно (если это уже опубликованная уязвимость, ее исправят буквально через час-два, и ты получишь заплатку в виде баг-фикс обновления, если же это неизвестная сообществу дыра, информация о ней рано или поздно всплывет), поэтому, скорее всего, он попытается установить в систему бэкдор, который позволит без всяких проблем ходить на твою машину, или бота, рассылающего спам. Бэкдоры, трояны, боты и все остальные «нелегалы» могут быть как совсем простыми, так и весьма изощренными, выполненными в виде отдельной программы/скрипта, внедренными в легальные программы или же подключенными к ядру с помощью модуля. Однако это не имеет никакого значения, потому как любой нелегал может быть отловлен через анализ системы на модификации (никакой код не может быть внедрен в ОС на любом уровне без модификации окружения исполнения). А главное, что такой анализ легко провести через заблаговременную установку специальных систем, называемых HIDS (Локальные системы обнаружения вторжений). Одна из самых популярных HIDS, доступных в UNIX-системах, носит имя Tripwire, однако в последнее время она потеряла свои позиции в пользу более открытого аналога под названием AIDE (Advanced Intrusion Detection Environment – продвинутая система обнаружения вторжений). Как и Tripwire, AIDE основана на простом предположении: если какие-то файлы в системе изменились без предупреждения – значит, произошло вторжение. На деле это выглядит еще проще: при первом запуске AIDE создает базу с контрольными суммами всех сколько-нибудь значимых для взломщика системных файлов и периодически сверяет ее состояние с актуальным состоянием системы. Если что-то изменилось, на предварительно указанный e-mail отправляется письмо с предупреждением и деталями изменения. AIDE доступна в виде прекомпилированных пакетов для любого дистрибутива и может быть установлена с помощью стандартного пакетного менеджера:
Конфигурация AIDE располагается в двух конфигурационных файлах:
Первый хранит основную конфигурацию AIDE и обычно даже не требует правки. Единственная опция, которую имеет смысл изменять, носит имя MAILTO и содержит адрес электронной почты, на который будут отправлены все отчеты об изменениях в файлах (по умолчанию – root). Второй хранит список правил, на основании которых ведется анализ состояния системы (права доступа, контрольные суммы и т.д.) В нем же задано место хранения базы данных, хранящей предыдущее согласованное состояние системы (/var/lib/aide/aide.db). Популярные дистрибутивы уже содержат список необходимых правил (которые могут быть вынесены в отдельные файлы каталога /etc/aide/aide.conf.d), поэтому мы не будем что-либо в них менять.
После окончания ее работы в каталоге /var/lib/aide будет создана новая база с именем aide.db.new. Чтобы сделать ее базой согласованного состояния системы, произведем переименование:
После этого можно произвести первую проверку системы:
При установке AIDE помещает себя в список заданий cron, поэтому проверки будут происходить каждый день. Однако не следует полностью полагаться на систему. Если взломщик сможет модифицировать системные файлы для установки бэкдора, он также сможет модифицировать и сам AIDE, включая базы данные и бинарные файлы, поэтому лучший способ использования AIDE заключается в помещении ее на USB-флешку и ручной запуск в случае необходимости (не забыв исправить путь поиска баз данных в файле aide.conf):
Конечно же, после каждого намеренного изменения состояния системы (установка пакетов, изменение конфигов и т.д.) базу придется пересоздавать. Такова уж расплата за гарантию безопасности. Кроме HIDS общего назначения для UNIX-систем разработано несколько утилит, специализирующихся исключительно на руткитах. Программы chkrootkit и rkhunter используют базу сигнатур для поиска и обнаружения вредоносного ПО (rkhunter также проверяет целостность исполняемых файлов, загрузочных скриптов и анализирует сетевые интерфейсы на предмет прослушиваемых портов). Обычно их используют совместно с AIDE для создания дополнительного слоя безопасности. Доступны в любом дистрибутиве. Использовать предельно просто:
На экране появится информация о проверяемых бинарниках, файлах доступа, проверки на известные типы руткитов и т.д. Обе программы написаны на языке shell, поэтому используют стандартные утилиты командной строки (awk, cat, grep, …) для выполнения проверок. Если ты не уверен в целостности этих утилит, помести их заведомо «чистые» версии на флешку и вызывай программы следующим образом:
ВыводыПри должном терпении организовать действительно прочную защиту домашней машины не так сложно. И я надеюсь, что смог это доказать, даже несмотря на то, что далеко не все из задуманного удалось поместить в статью. В частности, пришлось опустить целый раздел, посвященный аудиту происходящих в системе действий, но это настолько обширная тема, что ей лучше посвятить отдельную статью, и я надеюсь, что в одном из ближайших номеров она будет опубликована. Пароль на GRUBДля установки пароля на GRUB необходимо сделать две вещи:
Tiger – анализатор локальной безопасностиTiger – это пакет, состоящий из коллекции shell-скриптов, бинарных файлов и файлов данных, используемый для поиска проблем безопасности UNIX-систем. Он производит сканирование конфигурационных файлов, файловых систем, конфигурационных файлов пользователя и генерирует отчеты. В своей работе использует chkrootkit и John the ripper. Zeppoo – поиск руткитов на уровне ядраZeppoo позволяет найти Linux руткиты, скрытые процессы и сетевые соединения, новые системные вызовы и многое другое, используя прямой доступ к памяти ядра с помощью файлов /dev/kmem и /dev/mem. Исходный код доступен на сайте проекта: http://sourceforge.net/projects/zeppoo. INFOЕсли с придумыванием сложных паролей туго, воспользуйся утилитой APG, которая поможет сгенерировать весьма сложный, но притом вполне читаемый пароль. Поиск suid/sgid-файлов с несколькими ссылками:
|
3 мар. 2011 г.
25 цитат о программировании
25 моих любимых цитат о программировании. Не без юмора.
Намедни я подыскивал интересные цитаты о программировании для своей презентации. Я был в восторге от найденных фраз, которые действительно интересны и требуют некоторого напряжения серого вещества для осознания шутки юмора в них.
Вот 25 из них (в рандомном порядке):
• Самая приятность в булевом типе данных состоит в том, что даже ежели ты ошибся, то всего лишь на один бит (bit в аглицком переводится, в том числе, как "небольшой кусочек"). Анонимус.
• Без толково описанных требований и дизайна программирование превращается в искусство добавления багов в пустой текстовый файл. (Louis Srygley)
• До того, как софт станет многократно используемым, он сперва должен стать используемым. (Ralph Johnson)
• Самый лучший способ разгона компа разгоняет его с ускорением 9.8 м/сек2. (Anonymous)
• Предполагаю, что Мелкософт назвали .Net .Net-ом для того, чтобы его небыло видно при листинге директорий в Unix. (Oktal)
• Ежели б строители строили строения така же как программисты программируют программы, от первого же дятла цивилизация бы рухнула. (Gerald Weinberg)
• Существует два метода написания программ без ошибок. Но работает только третий. (Alan J. Perlis)
• Тофсь! Цельсь! Пли! - быстрый подход к программированию.
Тофсь! Цельсь, цельсь, цельсь, цельсь, цельсь, цельсь... - медленный подход к программированию. (Anonymous)
• Это не бага - это фича. (Anonymous)
• Кому "дерьмовый софт", а кому и полная занятость на работе. (Jessica Gaston)
• Хороший программер всегда смотрит в обе стороны, когда переходит дорогу с односторонним движением. (Doug Linder)
• Пиши свой код так, как будто хлопец, который будет его сопровождать, - психопат-насильник, который знает где тебя найти. (Martin Golding)
• Программирование похоже на секс. Одна ошибка, и тебе придется поддерживать эту хрень всю оставшуюся жизнь. (Michael Sinz)
• Удаленный код - надежный код. (Jeff Sickel)
• Гулять по воде и писать софт по спецификации очень легко. Ежели и то, и то заморожено. (Edward V Berard)
• Ежели отладка - это процесс вылавливания багов из кода, то кодирование, должно быть, процесс внесения багов в программу. (Edsger Dijkstra)
• Обычно софт проходит этап бета-тестирования перед редизом. Beta по латински значит "все еще не работает". (Anonymous)
• Программирование сегодня - это состязание между программерами, пытающимися создавать все более удобные идиото-ориентированные программы, и Вселенной, создающей все более тупых идиотов. Пока что Вселенная ведет. (Rick Cook)
• Любопытное замечание про нашу индустрию. Мы не только не учимся на своих ошибках, мы еще и не хотим учиться на собственном успехе! (Keith Braithwaite)
• Есть только два типа языков программирования: те, на которые все жалуются, и те, которые никто не пользует. (Bjarne Stroustrup)
• Чтобы понять, что такое рекурсия, сначала нужно понять что такое рекурсия. (Anonymous)
• Самый недорогой, наибыстрейший и наиудобнейший из компонентов не существует. (Gordon Bell)
• Самое лучшее увеличение производительности - это перевод из состояния неработоспособности в рабочее состояние. (J. Osterhout)
• Одна из проблем с программистами состоит в том, что никогда не можешь сказать, чем же программер занимался до тех пор, пока не стало слишком поздно. (Seymour Cray)
• Не беспокойся, если оно не работает правильно. В противном случае у тебя небыло бы работы. (Mosher’s Law of Software Engineering)
И еще несколько высказываний из комментариев:
Говорить, что Java - хороший язык из-за того, что он работает на разных платформах, примерно то же самое, что говорить, что анальный секс хорош, потому что он не зависит от пола.
Единственный способ делать меньше багов - писать меньше кода.
"А вы слышали про самый быстрый мегасуперпупер компьютер? Он из вечного цикла возвращается через 6 секунд!"
Некоторые люди встречая проблему думают: "Я знаю. Я заюзаю регулярки." Теперь у них две проблемы.
Сколько программеров нужно, чтобы поменять лампочку? Ни одного. Это хардварная проблема.
Есть два метода конструирования софта. Первый: делать софт таким простым, что в нем не будет явных дефектов. Второй: делать софт настолько сложным, чтобы в нем небыло явных дефектов. (C.A.R. Hoare)