суббота, апреля 12, 2008

IT-Безопасность: Что такое DoS,DDoS ?

Популярность атак, направленных на отказ в обслуживании, растет с каждым днем. При этом о них опубликовано крайне мало действительно полезной информации. В основном доступны лишь поверхностные описания удачных атак или негодования пострадавших. Этот материал поможет тебе разобраться в DoS/DDoS-атаках.

Цель

Основная цель DoS/DDoS-атак - вывести объект из рабочего состояния. Конечно, в большинстве случаев глобальная атака приводит к большим финансовым потерям со стороны атакуемого. Например, если какой-либо коммерческий сайт упадет на несколько часов, то это нанесет вред бизнесу, а если на неделю, то владелец ресурса вполне может разориться. Или взять локальные сети. Дело в том, что одним из эффектов популярных атак на Denial of Service (DoS) является огромный трафик, направляемый на жертву. Если для крупной западной фирмы это мелочь, то для небольшой отечественной домашней сети средняя атака может грозить разорением. Кроме огромного вреда, наносимого жертве, такие нападения отличаются простотой и огромной эффективностью. Против них нет стопроцентной защиты. Именно названные выше факторы привлекают к DoS внимание специалистов по сетевой безопасности и... DoS'еров.

Принцип работы

Для того чтобы обнаружить, а уж тем более организовать DoS/DDoS-атаку, нужно разобраться в ее принципах. Эти атаки не направлены на получение доступа к ресурсам или к важной информации. Атака DoS делает ресурс недоступным для использования путем нарушения его нормальной работы. Атаку на отказ в обслуживании можно провести всего двумя способами: использовав уязвимости в программном обеспечении жертвы и при помощи отсылки большого количества определенно составленных сетевых пакетов (флуд). Первый способ состоит в том, чтобы, используя уязвимости типа переполнения буфера, отослать код, выполняющий DoS на сервере. Поскольку атака будет проводиться "изнутри", то через очень короткое время объект зависнет или будет отключен от интернета. Этот способ не требует больших вычислительных ресурсов нападающего, однако такая атака предполагает использование уязвимостей, что само по себе усложняет задачу. Поскольку никто не хочет излишне заморачиваться, в народе более популярен второй способ, которому мы и уделим основное внимание. Это пример применения простой грубой силы, которая практически не нуждается в приложении ума. Идея состоит в том, чтобы переслать как можно больше "кривых" запросов серверу (впрочем, не только "кривых": от огромного количества нормальных пакетов, например GET-запросов для HTTP-сервера хосты падают с таким же успехом). Дело в том, что при получении сервером пакета данных происходит его обработка. Если приходит пакет, но сервер занят приемом или обработкой другого пакета, то вновь приходящий запрос ставится в очередь, занимая при этом часть ресурсов системы. При проведении DoS-атаки серверу отсылается большое количество пакетов определенного размера. При этом ответ сервера не ожидается (обычно адрес отправителя фальсифицируется - спуфинг). В результате, из-за того что сервер оказывается перегружен информацией, он либо отключается от интернета, либо зависает. В любом случае, нормальные пользователи некоторое время (иногда довольно продолжительное) не могут пользоваться услугами пострадавшего сервера. Просто и со вкусом :). Однако если сервер атакует одна "точка", он вполне может закрыться от нее фаерволом. Кроме того, для проведения качественной DoS-атаки необходима довольно высокая пропускная способность канала. Поэтому атака на отказ в обслуживании в большинстве случаев проводится сразу с нескольких машин. Атака, в проведении которой участвует много машин (обычно это затрояненные десктопы, их называют "зомби"), получила название DDoS (Distributed Denial of Service). Для сколь угодно мощного сервера всегда можно подобрать достаточное количество зомбиков (благо дырявых систем и ушастых юзверей по миру много развелось).

Есть несколько способов получения "зомби". Во-первых, это массовое внедрение трояна на компьютеры мирных пользователей. Самый популярный способ управления троянами - IRC, то есть организация ботнета. При посылке определенных команд троян активируется и мирный домашний компьютер (с широкополосным выходом в интернет) становится источником большого количества мусора, съедающего ресурсы атакуемого сервера.

Чтобы более детально разобраться в DoS-атаках, рассмотрим их наиболее известные разновидности. Выделяют пять наиболее популярных:

TCP SYN Flood;
TCP flood;
Ping of Death;
ICMP flood;
UDP flood.

TCP SYN Flood и TCP flood

Основная цель этого вида атак - превысить ограничение на количество соединений, которые находятся в состоянии установки. В результате, система не может устанавливать новые соединения. После этого каждый дополнительный запрос еще сильнее увеличивает нагрузку. Для того чтобы достичь желаемого результата, при проведении атаки направляется большое количество запросов на инициализацию TСP-соединения с потенциальной жертвой. Такие атаки не нуждаются в обратной связи с атакующим, и поэтому можно не использовать настоящий адрес источника.

TCP flood - это вид атаки, при котором потенциальной жертве отправляется множество TCP-пакетов, что приводит к связыванию системных ресурсов.

Следующие виды DoS-атак основаны на совершенно другом принципе. При помощи таких атак можно переполнить сеть или отдельно взятую мишень абсолютно бесполезными ping-пакетами. Для реализации следующих видов атаки достаточно нескольких строк кода. Итак, это атаки, основанные на протоколе ICMP:

Ping of Death и ICMP flood

Большое количество DoS-атак основывается на протоколе ICMP. Некоторые его функции могут быть полезны для создания нападений такого рода.

ICMP flood - это далеко не новый вид атаки, который, тем не менее, не теряет популярности. Здесь используется ping. Ping изначально задумывался для проверки качества соединения с удаленным компьютером. Принцип работы следующий: программа отсылает некое сообщение, на которое удаленный компьютер автоматически отвечает. Вроде бы все нормально. Однако при атаке используются большие (64 кБ), сильно фрагментированные ICMP-пакеты. При получении таких пакетов удаленная машина зависает.

Ping of Death основывается на ICMP flood, однако усиливает атаку за счет того, что ping-запросы пересылаются по адресу широковещательной рассылки. Используемый в пакетах запроса адрес - это адрес атакуемого сервера. Получившие такие "посылки смерти" системы отвечают на них и забивают жертву. Это очень серьезный вид атаки, который, правда, требует длительной подготовки. Требуется много "зомби", необходимо собрать достаточное количество информации о жертве и посредниках.

UDP flood

Это наиболее опасный вид атаки. UDP-сервис одной машины генерирует последовательность символов для каждого получаемого системой пакета. Делается это в целях тестирования. Далее связывается с echo-сервисом другой машины, которая повторяет эти символы. В результате, передается большое количество UDP-пакетов с подделанным IP источника. Основная проблема для защиты состоит в том, что протокол UDP не устанавливает соединения и нет никаких индикаторов состояния, чтобы помочь межсетевой защите выявить нападение. Чтобы с большей долей вероятности избежать такой атаки, нужно удалить все ненужные UDP-сервисы, а остальным сервисам использовать механизм прокси-сервера.

Атаки на отказ в обслуживании, несомненно, большое зло на просторах интернета. И если отдельно взятую пользовательскую машину можно защитить с помощью фаервола, то для серверов стопроцентной защиты нет и в скором времени не предвидится. Так что с DoS/DDoS-атаками сложилась довольно грустная (или веселая? :)) ситуация. Многие хостеры при обнаружении атаки просто выключают сервера. Это о чем-то говорит ;).

Главной особенностью DDoS-атак является то, что для них не существует сервера, который нельзя "завалить".

Автор: Ермолаев Евгений
Источник: xakep.ru

пятница, апреля 11, 2008

IT-Безопасность: Ботнет Kraken догоняет Stormbot

По оценке компании Damballa, ботнет Kraken, первоначально названный исследователями «Mayday» («SOS») за многообещающий потенциал, в настоящее время насчитывает свыше 400000 инфицированных машин и к середине апреля пополнит свои ряды еще 200000 жертвами.

Специалисты Damballa впервые зафиксировали результаты деятельности операторов нового ботнета еще в конце 2006 года, но с уверенностью установить его уникальность смогли только в этом году. Долгое время исследователи не исключали возможность, что он является одним из сегментов «штормового» ботнета. Последний, по их предположениям, в настоящее время объединяет около 200000 зомби-компьютеров (по другим оценкам – 85000).

Метод инфицирования, применяемый операторами ботнета Kraken, до конца не выяснен. Предполагается, что заражение происходит при открытии вложения в спамовое письмо, замаскированного под файл изображения (с такими расширениями, как «.jpeg» или «.png»). Вместо указанного изображения на машину жертвы загружается исполняемый файл, классифицируемый в «Лаборатории Касперского» как Virus.DOS.I13.Kraken и Virus.Unix.Kraken. В настоящее время он детектируется только 20% антивирусных программ.

По данным исследователей, создатели Kraken предусмотрели возможность изменения структуры кода, что затрудняет работу статических анализаторов и детекторов сигнатур. После активации вредоносная программа копирует себя на жесткий диск компьютера жертвы в несколько измененном формате – на случай обнаружения оригинала антивирусными средствами. В качестве дополнительной меры защиты резидентная программа периодически обращается к командному серверу за обновлениями. Эксперты Damballa отмечают большое количество вариантов Kraken и высокую скорость их обновления.

Внутренний трафик ботнета шифруется, для передачи управляющих команд используется специальный протокол, работающий поверх UDP и TCP. При выходе из строя командного сервера его функции автоматически переносятся на другой узел внутри ботнета в соответствии с жестко заданным алгоритмом. По данным Damballa, основные командные серверы Kraken находятся на территории Франции, России и США. В настоящее время в состав данного ботнета входят не менее 50 компьютеров, принадлежащих компаниям из списка «Fortune 500», сети которых оборудованы новейшими антивирусными средствами.

Основной деятельностью операторов ботнета Kraken пока является рассылка спам-рекламы займов и ссуд на выгодных условиях, медицинских препаратов для сильной половины интернет-сообщества, поддельных часов и онлайн-казино. Специалисты Damballa отмечают высокую производительность используемых ботнетом программ для рассылки спама, которая может составлять 500000 писем в сутки. Однако они не исключают возможность использования ботнета для выполнения и других криминальных задач.

четверг, апреля 10, 2008

IT-Безопасность: GnuPG (GPG) - Цифровая подпись, шифрование

GnuPG (GNU Privacy Guard, «Страж безопасности GNU», или просто GPG) – это открытый эквивалент PGP (Pretty Good Privacy), известной и широкоиспользуемой программы для Windows, DOS и других операционных систем. Он распространяется в открытых исходниках и имеет те же самые функции, что и PGP, основанные на стандарте OpenPGP. У GnuPG есть несколько применений – он может использоваться либо для шифрования писем и файлов, либо для их цифровой подписи. Первый вариант применения GnuPG – шифрование писем и файлов на вашем жестком диске – очевиден, и он обычно применяется для защиты секретных сообщений или документов. Цифровая подпись информации необходима для сохранения целостности сообщений и файлов, особенно при передаче их через незащищенный канал. Она гарантирует, что:
1) Письмо было отправлено именно этим человеком, и
2) Что информация по пути не была изменена.

Скачать можно отсюда: http://www.gnupg.org/download/index.en.html

Использовать GnuPG очень просто. Сама программа – консольная, но существуют frontend'ы к GPG, делающие его использование еще проще. GPG основан на принципе открытых ключей (Public Key Infrastructure) – то есть, существуют 2 ключа: закрытый ключ используется для подписи и шифрования, а открытый ключ – для расшифровки и проверки правильности подписи.

Генерация ключа:



Чтобы начать работу с GPG, вам нужно создать пару ключей. Сделать это очень легко – просто наберите в командной строке:

gpg --gen-key

Если вы еще не работали с GPG, то эта команда сначала создаст директорию ~/.gnupg с файлом настроек ~/.gnupg/options. После этого вам придется запустить команду --gen-key еще раз для создания двух наборов ключей: ~/.gnupg/secring.gpg and ~/.gnupg/pubring.gpg. Затем вам будет задан вопрос: какой тип ключей вам нужен - «DSA and ElGamal», «DSA», или «ElGamal». Первый тип используется по умолчанию, и именно он позволяет использовать все возможности GPG. Ключ DSA используется только для цифровой подписи. ElGamal может быть использован для подписи и шифрования. Почти всегда следует выбирать «DSA and ElGamal».

После этого вам нужно выбрать размер ключа. Рекомендуемый размер ключа – 1024 бита. Этот размер довольно неплохо подходит для надежного шифрования, и он является самым распространенным. Вы можете выбрать и другой размер: 2048 – для улучшенной безопасности (практически невозможно сломать или подделать), или даже 4096 (хотя его и нет в списке). При увеличении размера ключа все операции производятся медленнее, и ваш открытый ключ становится намного больше. Рекомендуемые варианты – 1024 или 2048; выбор полностью за вами.

Следующий шаг – выбрать срок действия ключа. Некоторые предпочитают сделать срок действия своего ключа бесконечным, и выбирают 0. Другие создают новый ключ каждый год, и для этого они выбирают значение «1y». Здесь все так же зависит от ваших персональных предпочтений. Одни не обращают внимания на срок действия, а другие считают, что более безопасно для них – создавать новые ключи каждый год или каждые 2 года. Тогда, если кто-нибудь и украдет ваш секретный ключ, он сможет пользоваться им только ограниченное количество времени до истечения срока действия ключа. Так же установка срока действия позволяет вам работать с ключами более гибко – если через некоторое время вам захочется иметь ключ большего или меньшего размера, то вам нужно просто дождаться истечения срока действия текущего ключа. (А если вы уже сделали срок действия вашего ключа бесконечным, то вам придется уничтожать ваш ключ, что может вызвать трудности для людей, работающих с ним). Здесь снова выбор полностью за вами.

После этого вам будет предложено ввести вашу личную информацию для нового ключа. Идентификатор пользователя составляется из трех полей: Имя, Комментарий и Email-адрес. После того, как вы введете информацию для каждого поля, идентификатор пользователя будет выглядеть так: «Имя (Комментарий) ». (Пример: Joe User (My First GPG Key!) ). Желательно использовать свое реальное имя и свой главный Email-адрес. Комментарий может быть абсолютно любым.

После создания идентификатора пользователя вам нужно будет ввести ключевую фразу. Она будет использоваться каждый раз, когда вы захотите что-нибудь зашифровать или подписать. Так же вам нужно будет вводить ключевую фразу для расшифровки данных, зашифрованных с использованием вашего открытого ключа. Ключевая фраза – очень важная деталь для обеспечения вашей секретности, потому что ее подбор часто бывает намного проще, чем подбор всего ключа. Поэтому она должна быть длинной, сложной и практически не подбираемой. В ней должны присутствовать как буквы (верхнего и нижнего регистров) и цифры, так и специальные символы (например, «}» или «|»).

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

После того, как создание ключа закончится, вы можете использовать GPG для просмотра его характеристик. Это выглядит примерно так:

[user@mdk]$ gpg --list-keys
/home/user/.gnupg/pubring.gpg
-------------------------------
pub 1024D/9B1386E2 2002-04-07 Joe User (My First GPG Key!)
sub 1024g/7F72A50F 2002-04-07

Эта команда дает вам как открытую, так и закрытую информацию о вашем ключе. Сразу же после создания нового ключа вам обязательно нужно записать его идентификатор. Когда вы передаете кому-нибудь ваш ключ, то для проверки достоверности они могут сравнить идентификатор вашего ключа с тем идентификатором, который вы передали им отдельно. Таким образом можно проверить правильность ключа. Для получения идентификатора наберите:

[user@mdk]$ gpg --fingerprint user@mdk.host
pub 1024D/9B1386E2 2002-04-07 Joe User (My First GPG Key!)
Key fingerprint = 88A9 166B 13E6 516A 87C8 F127 5CA9 2D9E 9B13 86E2
sub 1024g/7F72A50F 2002-04-07

Идентификатор для этого ключа – 88A9 166B 13E6 516A 87C8 F127 5CA9 2D9E 9B13 86E2. Вам нужно распечатать его и хранить в надежном месте. Так же его можно вставить в вашу подпись. Тогда люди смогут использовать его для подтверждения того, что сообщение, подписанное вами – настоящее, если ключ, с помощью которого подписывалось это сообщение, имеет тот же самый идентификатор. Конечно же, при построении сети доверия совпадение идентификаторов – это не основание для полного доверия.

Использование GnuPG для подписи/шифрования.



Теперь, когда у вас есть пара ключей, вы можете ставить цифровую подпись на ваших сообщениях и файлах, и зашифровывать данные. Многие Email-клиенты поддерживают шифрование и цифровую подпись ваших писем; обычно все это конфигурируется в разделе «Security». Короче говоря, использовать GPG при работе с Email очень просто. Теперь рассмотрим, как происходит процесс шифрования и подписывания обычного текстового файла. Чтобы зашифровать текстовый файл, введите:

[user@mdk]$ gpg -ea -r Joe test.file

Эта команда шифрует файл test.file с использованием открытого ключа Joe. Вообще, эта команда означает, что только Joe сможет расшифровать этот файл. А в нашем примере это значит, что этот файл сможете расшифровать только вы. Эта функция полезна для защиты важных документов. Опция «-e» (encrypt) означает, что файл нужно зашифровать, а опция «-a» – что будет использован режим ASCII. Этот режим позволяет вставлять зашифрованный файл в письма и просматривать его в текстовых редакторах. Без указания режима ASCII файл шифруется в бинарном виде, и некоторые текстовые редакторы не смогут с ним работать. Опция «-r» указывает получателя. Мы указали здесь просто «Joe», потому что Joe User – единственный ключ в нашей связке. Вы можете указать любое имя или адрес для определения получателя. После шифрования будет создан новый файл, содержащий зашифрованные данные – test.file.asc.

Теперь, если вы хотите расшифровать эти данные, введите:

[user@mdk]$ gpg -d test.file.asc >test.file

Опция «-d» указывает GPG на то, что данные из файла test.file.asc должны быть расшифрованы. По умолчанию GPG отправляет расшифрованные данные на stdout, поэтому мы перенаправляем поток данных в test.file. После этого вам нужно ввести ключевую фразу, и, когда вы успешно ее введете, данные будут расшифрованы и детали ключа будут выведены на экран. Пример:

[user@mdk]$ gpg -d test.file.asc >test.file

You need a passphrase to unlock the secret key for
user: "Joe User (My First GPG Key!) "
1024-bit ELG-E key, ID 7F72A50F, created 2002-04-07 (main key ID 9B1386E2)

gpg: encrypted with 1024-bit ELG-E key, ID 7F72A50F, created 2002-04-07
"Joe User (My First GPG Key!) "

Здесь вы можете увидеть приглашение GPG к вводу ключевой фразы для секретного ключа, принадлежащего Joe User'у. Так же здесь показано, что данные были зашифрованы с помощью секретного ключа Joe User'а.

Использование GnuPG для цифровой подписи файлов.



Если вы хотите просто добавить цифровую подпись к файлу, то это можно сделать двумя путями. Вы можете вставить подпись в сам файл – это подходит для текстовых документов. Так же вы можете создать подпись в виде отдельного файла – это используется для бинарных файлов. Предположим, что у вас есть текстовый файл, содержащий текст «This is a text document». Если вы хотите подписать этот файл, вы можете использовать команду:

[user@mdk]$ gpg --clearsign -a test.file

Это создаст новый файл под названием test.file.asc, который будет выглядеть так:

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

This is a text document
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.0.6 (GNU/Linux)
Comment: For info see http://www.gnupg.org

iD8DBQE8r8scXKktnpsThuIRAksEAJ9nziWMquPWD2GH57Oyr9LaXIMJLgCcCi3J
uN8rDO8WOBK3GDp69lvi8Co=
=lz2x
-----END PGP SIGNATURE-----

Как вы видите, текст документа остался без изменений, только теперь он окружен информацией цифровой подписи. Если вы захотите изменить хотя бы небольшую часть этого текста, например, вставить лишний пробел в начале предложения, и затем попытаетесь удостовериться в правильности подписи этого файла, то GnuPG обнаружит, что подпись неверна. Чтобы удостовериться в правильности подписи, используйте команду:

[user@mdk]$ gpg --verify test.file.asc

GPG обьявит вам, правильна ли эта подпись, и кто подписывал этот файл. Если файл был изменен, то GPG предупредит вас о том, что подпись неправильна. Большинство почтовых клиентов поддерживают проверку прозрачных подписей, и поэтому вы сразу же сможете проверить правильность пришедшего к вам письма.

Так же вы можете подписывать сообщения непрозрачной подписью. При этом создается еще один .asc файл, который с виду кажется зашифрованным. Но на самом деле он не зашифрован, и каждый может «расшифровать» его с помощью опции «-d», или использовать опцию «--verify» для проверки его достоверности. Чтобы подписать файл таким образом, используйте «-s» вместо «--clearsign».

Если вы хотите создать цифровую подпись для бинарного файла, используйте опцию «-b», которая создает отдельную подпись. Пусть у вас есть архив под названием somefile-0.01.tar.gz, и вы хотите создать для него отдельную подпись, чтобы люди, скачивающие его, знали, что этот архив гарантированно останется таким, каким вы его запланировали (обычно это делается для защиты от троянов, и т.д). Пример:

[user@mdk]$ gpg -ba somefile-0.01.tar.gz

Подпись будет храниться в файле somefile-0.01.tar.gz.asc. Теперь, если кто-нибудь скачал ваш файл вместе с его подписью, он должен просто запустить:

[user@mdk]$ gpg --verify somefile-0.01.tar.gz.asc

GPG сравнит подпись с файлом и выведет результат. Если файл подписи или бинарный файл будут любым образом изменены, то подпись будет признана неправильной. Например, при скачивании файла с исходниками openssh вы так же можете скачать и его цифровую подпись в формате GPG для того, чтобы проверить правильность этого файла.

Импорт и работа с ключами GPG.



Теперь, когда вы разобрались, как шифровать, дешифровать, подписывать и проверять подписи с помощью GPG, пришло время подключить открытые ключи других людей к вашему набору ключей. Обмен открытыми ключами совершенно безопасен. Вы можете отдать ваш открытый ключ кому угодно, в отличии от закрытого ключа, который вы должны хранить в полной секретности. Существует несколько способов обмена открытыми ключами. Вы можете закачать свой ключ на специальный PGP/GPG сервер, созданный специально для хранения открытых ключей. Тогда другие смогут быстро найти и скачать ваш открытый ключ. Так же вы можете поместить его на своем сайте. Использование открытого ключа GPG в качестве вашей подписи нежелательно из-за его большого размера.

Чтобы экспортировать ваш открытый ключ, запустите:

[user@mdk]$ gpg --export -a user@mdk.host >user.asc

Эта операция производит экспорт открытого ключа, принадлежащего user@mdk.host (то есть – вам :), который записывается в файл user.asc. Вам нужно раздать всем именно этот файл с вашим открытым ключом. Так же вы можете поместить ваш открытый ключ сразу же на сервер для обмена ключами:

[user@mdk]$ gpg --send-keys --keyserver wwwkeys.pgp.net user@mdk.host

Эта команда отправит ваш открытый ключ на сервер wwwkeys.pgp.net. Вы можете заменить этот адрес на адрес любого другого сервера для обмена ключами PGP/GPG.

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

[user@mdk]$ gpg --import user.asc

где user.asc – файл с открытым ключом. Эта команда добавляет ключ к вашему набору открытых ключей. Так же вы можете скачать ключи с сервера:

[user@mdk]$ gpg --recv-keys --keyserver wwwkeys.pgp.net someuser@somedomain.com

Эта команда импортирует открытый ключ пользователя someuser@somedomain.com с сервера wwwkeys.pgp.net. Так же вы можете использовать идентификатор ключа вместо Email-адреса. Например, идентификатор ключа Joe User'а – это 9B1386E2. Если вы посмотрите на вывод «--list-keys», то вы увидите строку с идентификатором вашего ключа. (Например, строка «pub 1024D/9B1386E2» расшифровывается так: открытый ключ, 1024 бита, DSA, идентификатор ключа – 9B1386E2).

Чтобы посмотреть все ключи из вашего набора открытых ключей, используйте «gpg --list-keys». Если вы хотите посмотреть все закрытые ключи, используйте «gpg --list-secret-keys». Если вы хотите посмотреть открытый ключ конкретного пользователя, используйте команду «gpg --list-keys someuser@somedomain.com».

Когда вы скачиваете ключи, вы можете изменить их настройки в вашем GPG. Эта операция называется редактированием ключа. Вы можете редактировать чужие ключи, но некоторые вещи можно изменить только при наличии секретного ключа. Чтобы отредактировать ключ, наберите:

[user@mdk]$ gpg --edit-key someuser@somedomain.com

Эта команда перенесет вас в интерактивную систему редактирования параметров ключа. Чтобы получить список всех команд, наберите в командной строке «help». Существует несколько информационных команд, например, «fpr» выводит идентификатор ключа, а «check» выводит подписи ключа. Другие команды – административные, и именно с помощью них меняются параметры ключа. Многие из опций будут рассмотрены ниже.

Так же вы можете отредактировать свой ключ, чтобы добавить к нему дополнительные параметры или подключи. Это может быть полезным, если вы используете один и тот же ключ с несколькими Email-адресами. Чтобы создать подключ для вашего ключа, войдите в меню команд в режиме редактирования ключа, и выберите команду «adduid». У вас спросят те же самые 3 параметра, что и для создания нового ключа: Имя, Email-адрес и комментарий. После ввода ключевой фразы вы увидите новый пользовательский идентификатор (User ID) внутри ключа (перед каждым идентификатором пользователя стоит его номер). Если вы хотите удалить идентификатор пользователя, используйте команду «deluid <номер uid, который вы хотите удалить>»

В версиях GnuPG до 1.0.6 включительно за первичный uid считается самый последний из номеров созданных подключей, и изменить его невозможно. Но в новой версии 1.0.7 создатели GnuPG пообещали сделать команду «primary», с помощью которой можно будет выбрать первичный подключ. В списке ключей (его можно получить с помощью команды «list») вы увидите символ «.» перед первичным ключом.

Валерий Качуров
Softerra.ru

пятница, апреля 04, 2008

40 советов по оптимизации PHP-кода

Перевод заметки "40 Tips for optimizing your php code". Автор - Reinhold Weber.

  1. Если метод может быть статическим, объявляйте его статическим.

  2. echo быстрее, чем print.

  3. Передавайте в echo несколько параметров, вместо того, чтобы использовать конкатенацию строк.

  4. Устанавливайте максимальное количество проходов ваших циклов for до цикла, а не во время его выполнения.

  5. Удаляйте свои переменные для освобождения памяти, тем более, если это большие массивы.

  6. Остерегайтесь магических методов, таких как __set, __get, __autoload.

  7. require_once дорого обходится.

  8. Указывайте полные пути в конструкциях include/require, меньше времени будет тратится на поиск файла.

  9. Если вам необходимо определить время, когда скрипт был запущен, используйте $_SERVER[’REQUEST_TIME’] вместо time().

  10. Старайтесь использовать strncasecmp, strpbrk и stripos вместо регулярных выражений.

  11. str_replace быстрее, чем preg_replace, но strtr быстрее, чем str_replace.

  12. Если функция, как и функции замены строк, может принимать в аргументы как массивы, так и одиночные символы, и если ваш список аргументов не слишком длинный, подумайте над тем, чтобы записать несколько одинаковых выражений замены, проходя один символ за раз, вместо одной строки кода, которая принимает массив как аргумент поиска и замены

  13. Лучше выбирать утверждения при помощи конструкции else if, чем использовать несколько конструкций if.

  14. Подавление ошибок при использовании @ работает очень медленно.

  15. Используйте модуль Apache mod_deflate.

  16. Закрывайте свои соединения с БД, когда закончите работать с ними.

  17. $row['id'] в семь раз быстрее, чем $row[id].

  18. Сообщения об ошибках дорого стоят

  19. Не используйте функции внутри условия цикла for, например как здесь: for ($x=0; $x < count($array); $x). В данном случае функция count() будет вызываться с каждым проходом цикла.

  20. Инкремент локальной переменной в методе - самый быстрый. Почти также работает инкремент локальной переменной в функции.


  21. Инкремент глобальной переменной в два раза медленее, чем локальной.


  22. Инкремент свойства объекта (т.е. $this->prop++) в три раза медленнее, чем локальной переменной.

  23. Инкремент неопределённой переменной в 9-10 раз медленнее, чем заранее инициализированной.

  24. Объявление глобальной переменной, без использования её в функции, также замедляет работу (примерно на ту же величину, что и инкремент локальной переменной). Вероятно, PHP осуществляет проверку на существование переменной.

  25. Скорость вызов метода, судя по всему, не зависит от количества методов, определённых в классе. Я добавил 10 методов в тестовый класс (до и после тестового метода), без изменения производительности.

  26. Методы в производных классах работают быстрее, чем они же, определённые в базовом классе.

  27. Вызов функции с одним параметром и пустым телом функции в среднем равняется 7-8 инкрементам локальной переменной ($localvar++). Вызов похожего метода, разумеется, около 15 инкрементов.

  28. Ваши строки, определённые при помощи ', а не ", будут интерпретироваться чуть быстрее, т.к. PHP ищет переменные внутри "..", но не '...'. Конечно, вы можете использовать это только тогда, когда в вашей строке нет переменных.


  29. Строки, разделённые запятыми, выводятся быстрее, чем строки, разделённые точкой. Примечание: это работает только с функцией echo, которая может принимать несколько строк в качестве аргументов.

  30. PHP-скрипты будут обрабатываться, как минимум, в 2-10 раз медленнее, чем статические HTML-страницы. Попробуйте использовать больше статических HTML-страниц и меньше скриптов.

  31. Ваши PHP-скрипты перекомпилируются каждый раз, если скрипты не кэшируются. Кэширование скриптов обычно увеличивает производительность на 25-100% за счёт удаления времени на компиляцию.

  32. Кэшируйте, насколько это возможно. Используйте memcached — это высокопроизводительная система кэширования объектов в памяти, которая повышает скорость динамических веб-приложений за счёт облегчения загрузки БД. Кэшированный микрокод полезен тем, что позволяет вашему скрипту не компилироваться снова для каждого запроса.

  33. При работе со строками, когда вам понадобится убедиться в том, что строка определённой длины, вы, разумеется, захотите использовать функцию strlen(). Эта функция работает очень быстро, ведь она не выполняет каких-либо вычислений, а лишь возвращает уже известную длину строки, доступную в zval-структуре (внутренняя структура C, используемая при работе с переменными в PHP). Однако потому, что strlen() — функция, она будет работать медленно за счёт вызова некоторых операций, таких как приведение строки в нижний регистр и поиска в хэш-таблице, только после которых будут выполнены основные действия функции. В некоторых случаях вы сможете ускорить свой код за счёт использования хитрости с isset().

    Было: if (strlen($foo) < 5) { echo "Foo is too short"; }

    Стало: if (!isset($foo{5})) { echo "Foo is too short"; }

    Вызов isset() быстрее, чем strlen() потому, что, в отличие от strlen(), isset() - не функция, а языковая конструкция. За счёт этого isset() не имеет практически никаких накладных расходов на определение длины строки.

  34. Инкремент или декремент переменной при помощи $i++ происходит немного медленнее, чем ++$i. Это особая специфика PHP, и не нужно таким образом модифицировать свой C и Java-код думая, что он будет работать быстрее, этого не произойдёт. ++$i будет быстрее в PHP потому, что вместо четырёх команд, как в случае с $i++, вам понадобится только три. Пост-инкремент обычно используется при создании временных переменных, которые затем увеличиваются. В то время, как пре-инкремент увеличивает значение оригинальной переменной. Это один из способов оптимизации PHP-кода в байт-код утилитой Zend Optimizer. Тем не менее, это хорошая идея, поскольку не все байткод-оптимизаторы оптимизируют это, также остаётся немало скриптов, работающих без оптимизации в байткод.

  35. Не всё должно быть ООП, часто это излишне, поскольку каждый метод и объект занимает много памяти.

  36. Не определяйте каждую структуру данных как класс, массивы бывают очень полезны

  37. Не слишком разбивайте методы. Думайте, что вы действительно будете повторно использовать.

  38. Вы всегда можете разбить код на методы позже, по необходимости.

  39. Используйте бесчисленное количество предопределённых функций.

  40. Если в вашем коде есть функции, выполняющиеся очень долго, обдумайте их написание на C в виде расширения

  41. Профилируйте свой код. Профилирование покажет вам, как много времени выполняются части вашего кода.

  42. mod_gzip — модуль Apache, который позволяет сжимать ваши данные на лету и может уменьшить объем передаваемых данных до 80%.

IT-Безопасность: Памятка для SEO оптимизаторов

Полезная схема для SEO оптимизаторов, легко с ореинтироватся что еще не сделано и за что взятся

вторник, апреля 01, 2008

IT-Безопасность: Червь Storm вновь активизировался

Компания PC Tools сообщила о повторной активизации червя Storm, приуроченной ко Дню первого апреля.

Распространяется червь путем рассылки сообщений электронной почты с темой "All Fool's Day" и содержащих прямые ссылки на сайты, где предлагается скачать вредоносные программы. Данные файлы имеют имена funny.exe, ecard.exe, foolsday.exe и kickme.exe.

После запуска любого из вышеперечисленных файлов создаётся специальное правило для фаерволла, благодаря которому вирус либо отправляет на исходный компьютер собранные ценные данные, либо делает зараженную систему частью бот-сети, распространяющую спам. При попадании на машину, червь осуществляет «саморассылку» по всем электронным адресам, найденным на компьютере.

PC Tools сообщает, что наиболее эффективным методом борьбы с вирусом Storm является применение антивирусов с эвристическими сканерами.