Знаменитый конкурс "взломщиков".


24 марта начнется Pwn2Own 2010 - знаменитый конкурс "взломщиков", традиционно проводимый в рамках конференции по безопасности CansecWest в Ванкувере. Каждый год солидные денежные призы присуждаются тем, кто смог воспользоваться "дырками" и программными ошибками в браузерах и ОС, а также в софте для популярных мобильных устройств, таких как iPhone.

Последние 2 года чемпионом Pwn2Own становился Чарли Миллер. Тот самый Чарли Миллер, специалист по вопросам безопасности из компании Independent Security Evaluators, которому на прошлогоднем Pwn2Own потребовалось всего 10 секунд для того, чтобы захватить контроль над Macbook’ом с полностью пропатченными Mac OS X и Safari. Чарли (в соцсети Twitter известный как 0xcharlie) сейчас один из самых известных экспертов по компьютерной безопасности в мире. Недавно он дал интервью, перевод которого предлагается вашему вниманию. (оригинал интервью на англ. языке)

Вопрос: Два года вы выигрывали Pwn2Own, взламывая Safari на Mac OS X. Будет ли Safari и Mac вашей целью и в 2010 году?

Ответ: Все может быть моей целью. Хотелось бы взломать какое-нибудь из мобильных устройств, но скорее всего я остановлюсь опять на Safari. Я был одним из первых, кто взломал iPhone и Android, так что с этими платформами у меня нет проблем, однако их сложнее взломать. На каждую цель будет только один чемпион, поэтому главное - быть уверенным, что меня никто не обойдет.

Вопрос: Какую из ОС - Windows 7 или Snow Leopard - сложнее взломать и почему?

Ответ: Windows 7 взломать слегка сложнее, потому что у нее полностью случайное размещение схем адресного пространства (address space layout randomization, ASLR) и меньше возможностей для взлома (например, не установлены по умолчанию Java or Flash). Windows раньше было намного труднее взломать из-за полностью случайного размещения схем адресного пространства и предотвращения выполнения данных (data execution prevention, DEP). Однако недавно в обсуждениях на конференции Black Hat DC рассказывали как можно обойти эти меры защиты браузера в Windows.

Вопрос: На Pwn2Own 2010 Linux до сих пор не рассматривается как возможный объект для взлома. Это оттого, что для Linux сложно найти эксплойты - или оттого, что неинтересно искать эксплойты для некоммерческой ОС?

Ответ: Нет, Линукс не сложнее, а фактически возможно и проще, хотя кое-что зависит от разновидности Linux, о которой вы говорите. Организаторы конкурса не включили Linux потому что не очень много людей ставят ее на свои компьютеры. Другое дело, что уязвимости - в браузерах, и большей частью те же браузеры, что работают под Linux, работают и под Windows.

Вопрос: Ваше мнение о Chrome OS? Надежна ли эта ОС или же ее будет легко взломать в недалеком будущем?

Ответ: Я знаю недостаточно, чтобы комментировать.

Вопрос: Какое, по вашему мнению, самое безопасное сочетание браузера и операционной системы?

Ответ: Хороший вопрос. Chrome или IE8 на Windows 7 без Flash. Похоже, разница между браузерами не настолько велика, чтобы из-за нее беспокоиться. Главное - не устанавливать Flash!

Вопрос: Что касается мобильного софта, на Pwn2Own 2010 основными целями будут iPhone 3GS/iPhone OS и Android/Motorola Droid. Какую из них легче взломать?

Ответ: Обе они довольно-таки хорошо защищены. Я думаю, что iPhone, поскольку существует немного дольше и исследований проведено больше. Это не значит, что iPhone обязательно менее безопасен, просто исследователи его лучше изучили.

Вопрос: Предсказывают, что в следующем году одной из целей может быть Windows Phone 7. Что вы об этом думаете?

Ответ: Надеюсь на это. Мне очень нравится конкурс pwn2own, я думаю, это очень хорошо, что на этом конкурсе награждают исследователей и выявляются уязвимости, из-за которых, не будь они выявлены, пользователи подвергались бы риску.

Вопрос: Производство и продажа игровых приставок - масштабный бизнес, игровая приставка есть почи в каждом доме, и тем не менее для них обнаружено крайне мало эксплойтов и уязвимостей. Почему же всего несколько специалистов по безопасности - например, Джордж Хотц (George Hotz) работают над взломом игровых консолей?

Ответ: Хотя игровых приставок и много, компьютеров все равно намного больше. Опять же, игровую консоль НЕ НУЖНО подключать к Интернету. У меня около года была Wii и ее не разу не подключалась к Интернету. Сложно удаленно что-то взломать, если не можешь ничего переслать туда :) К тому же компьютеры и, в меньшей степени, телефоны, предназначены для того, чтобы их кастомизировать, чтобы с их помощью скачивать и использовать/отображать контент из сети Интернет. Именно здесь существуют уязвимости и создаются эксплойты. Игровые приставки в основном не предназначены для этого, поэтому в данном случае возможностей для взлома намного меньше. Последняя причина - это то, что консоли сложно исследовать. Например, на xbox трудно запустить отладчик.

Вопрос: И последнее, что вы можете сказать о своем инструментарии? Какое программное обеспечение вы используете для обнаружения уязвимостей?

Ответ: Почитайте книгу "Справочник хакера по Mac OS" (Mac hacker’s handbook), там описана большая часть моих секретов. В основном, я сочетаю статические и динамические методы. Для обратной разработки я пользуюсь IDA Pro, еще я использую настраиваемый частный фреймворк для «нечеткого» тестирования (custom private fuzzing framework), под названием Tiamat, который написал сам, а также терпение и труд. В том, что я делаю, нет ничего, что не могли бы сделать остальные 1000 человек, если бы захотели. Найти и взломать эти платформы все еще весьма несложно.

Составлен февральский рейтинг языков программирования

 Февральские изменения в рейтинге языков программирования, который ежемесячно составляется компанией TIOBE Software, не слишком отличаются от январского обзора.

Так, язык программирования Go, разработанный в лабораториях Google, и существующий довольно давно Apple Objective-C по-прежнему занимают 13-ю и 12-ю позиции. Если в случае Go популярность объясняется его уникальными возможностями параллельного программирования для многопоточных и многопроцессорных сред, то успех Objective-C обусловлен растущим числом девелоперов, создающих все больше iPhone-приложений, число которых в январе превысило 140 тыс.

Февральские подсчеты свидетельствуют: четыре нишевых языка программирования имеют все шансы войти в двадцатку самых популярных. Речь идет об обучающем детей Scratch, функциональном Erlang и языках на базе виртуальной Java-машины (JVM) — Scala и JavaFX.
 

Про хакеров

************************************
 
Умер Билл Гейтс, предстал перед архангелом Петром. - Ну, что скажешь в свое оправдание? - Сурово спросил Петр, покручивая на пальце ключи от Рая. - Я осчастливил все человечество! - Это как?! - удивился Петр. - Ну, так ведь умер!
 
************************************  
 
Тебя можно назвать продвинутым человеком ХХI-го века, если:
- при вызове лифта ты хочешь набрать пароль,
- для посылки письма ты не используешь конверт,
- попытка знакомства для тебя - клик в чате,
- мечтаешь, чтобы у каждого начальника была встроенная функция CTRL+ALT+Del,
- о твоей работе родители говорят "что-то делает с компьютерами",
- никто из твоих подруг не боится мышей,
- Клава - неженское имя
- подхватив вирус, ты не пьешь чай с малиной и паришь ноги, а чистишь жесткий диск,
- читаешь этот список, кивая головой.

**********************************

Звонок на фирму, которая занимается ремонтом компьютеров:
- Мой принтер начал плохо печатать!
- Вероятно, его надо просто почистить. Это стоит $50. Но для вас будет лучше, если вы прочтете инструкцию и выполните эту работу сами.
Клиент, удивленный такой откровенностью спрашивает:
- А ваш босс знает, что вы таким образом препятствуете бизнесу?
- На самом деле, это его идея. Мы получаем куда больше прибыли, когда позволяем нашим клиентам сначала самим попытаться что-то отремонтировать.

**********************************

Магазин по продаже компьютеров. Продавец подбирает богатой, но не понимающей в компьютерах даме:
- Ну вот, я вам подобрал жесткий диск получше...
- Получше - это пожестче?

***********************************

Дополнительные возможности cin и cout.

В данной статье я расскажу о дополнительных возможностей входного(cin) и выходного(cout) потоков. Обычно в программах cin используется для ввода информации с клавиатуры, а cout для вывода информации на дисплей. На самом деле cin и cout являются объектами классов istream и ostream описанных в заголовочном файле iostream.h . I это input-ввод, O это output-вывод, а stream-поток. Как и все нормальные объекты cin и cout поддерживают разные опреаторы и операции. Я расскажу про основные методы классов cin и cout. Методами называются функции входящие в класс. Итак начнёмс…..
Метод cout.width (int i) позволяет указать минимальное количество символов, которое cout будет использовать для вывода следующего значения. Пример:

#include"iostream.h"
#include"conio.h"


void main()
{
for(int i=1; i<5; i++) { cout<<"Моё число:"; cout.width(i); cout<<9<<'\n'; } _getch(); }



Результатом будет следующее:

Моё число:9
Моё число: 9
Моё число: 9
Моё число: 9


Такую же работу выполняет функция setw(int i) определённая в iomanip.h.
По умолчанию используется пробел, но если хотите изменить,то для этого есть метод cout.fill(char t). Например следующая программа меняет пробел на точки.

#include"iostream.h"
#include"conio.h"


void main()
{
cout.fill('.');
for(int i=4; i<8; i++) { cout<<"Моё число:"; cout.width(i); cout<<9<<'\n'; } _getch(); }



Результатом будет:

Моё число:...9
Моё число:....9
Моё число:.....9
Моё число:......9


Точки будут использоваться в программе до тех пор пока вновь не будет вызвана функция cout.fill c новым аргументом.

При использовании cout для чисел с плавающей запятой трудно предположить сколько символов будет после запятой. При помощи функциии setprecision(int i) определённой в iomanip.h можно задать ограничение на количество цифр после запятой. Следующая программа демонстрирует вышесказанное:

#include"iostream.h"
#include"iomanip.h"
#include"conio.h"


void main(void)
{
float value = 1.23456;
int i;
for(i=1; i<6; i++) cout<


Результат будет:


1.2
1.23
1.235
1.2346
1.23456


Если вашей программе нужно выводить символы на дисплей по одному символу за раз, то для этого в iostream.h опредена функция cout.put(). Например:


#include"iostream.h"
#include"conio.h"


void main(void)
{
char string[]="Эта строка выводится по одному символу";
int i;


for(i=0; string[i];i++)
{cout.put(string[i]);
_getch();
}
}


Если необходимо вводить символы по одному, то для этого есть функция cin.get(), которая считывает символ с клавиатуры и возвращает его в программу,где символ присваивается переменной.


simbol=cin.get();


Например:


#include"iostream.h"
#include"ctype.h" // прототип toupper()
#include"conio.h"


void main(void)
{
char simbol;


cout<<"Continue? (Y/N): "; do{ simbol=cin.get(); simbol=toupper(simbol); }while((simbol!='Y')&&(lettter!='N')); cout<<"Your answer: "<


В предыдущей программе была ипользованна функция touper(), которая преобразовывает символ в верхний регистр. Прототип этой функции хранится в ctype.h.

Для чтения с клавиатуры целой строки используется метод cin.getline().

cin.getline(string, 64);

Например:


#include"iostream.h"
#include"conio.h"


void main(void)
{
char string[128];


cout<<"Введите строку символов и нажмите Enter"; cin.getline(string,128); cout<<"Вы ввели: "<


Для определения размера массива очень удобно использовать оператор с++ sizeof().


cin.getline(string,sizeof(string));


Есть ещё один параметр метода cin.getline(). С его мощью можно указать символ, после ввода которого последующие введённые символы не считываются.

Например:


#include"iostream.h"
#include"conio.h"


void main(void)
{
char string[128];
cout<<"Введите строку текста и нажмите Enter"; cin.getline(string,128,'a'); cout<<"вы ввели: "<


Ну вот и всё... Вообще есть и другие методы cin и cout, но эти наиболее часто используемые.

Структура reg-файлов

В данной статье будет рассмотрена внутренность и свойства reg-файлов.Reg-файл это файл содержащий информацию,котурую можно импортировать в реестр.Он имеет определённую структуру, о которой я расскажу.Знание структуры файла реестра может быть полезным. К примеру если заблокирован редактор реестра, то можно создать reg-файл и импортировать его в реестр. Хотя есть и другие способы для выхода из положения,но этот-самый быстрый. Итак начнём.
Как и во многих файлах у этого типа файла есть своя грамматика написания и структура. На первой строчке всегда должно быть написано:
Windows Registry Editor Version 5.00

и ничего более! В старых версиях винды писали: REGEDIT4. Это название и версия стандартного редактора реестра винды(regedit).Для Windows 7 это будет :
Windows Registry Editor Version 6.00

Затем вторую строчку оставляем пустой. На третьей строчке пишем раздел реестра ,где будут производиться изменения. Раздел надо указывать с полным путём к нему и заключать в квадратные скобки […].Например:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths]

На следующих строках пишем названия параметров,тип и значение, которые мы хотим править или добавить в раздел. Название параметра надо заключать в кавычки.Тип параметра должен быть обозначен маленькими буквами!Если надо править в нескольких разделах, то между их названиями надо пропускать одну строку.Например:
Windows Registry Editor Version 5.00

[Раздел1]
"имя_параметра1"=тип_параметра:значение1
"имя_параметра2"=тип_параметра:значение2
"имя_параметра3"=тип_параметра:значение3

[Раздел2]
"имя_параметра1"= тип_параметра:""значение1"

Если параметр строковой,то тип параметра не пишем,а значение заключаем в кавычки.Например:

"имя_параметра1"=”значение1"
Если тип DWORD, то записываем так: “имя_параметра”=dword:XXXXXXXX
XXXXXXXX это значение dword состоящее из 8-ми цифр в шеснадцатеричном виде. Но обычно он принимает значение 0 или 1. Поэтому надо писать 00000000 или 00000001.Пробелы в строке не допускаются.
Если параметр двоичный,то пишем: “имя_параметра”=hex:XX,XX,XX…
Hex указывает что параметр двоичный,а затем идёт значение-шеснадцатеричные числа отделённые запятой.Например: “имя_параметра”=hex:be,00,00,00
Иногда бывает что надо присвоить значение параметру по умолчанию. Тогда вместо “имя_параметра” пишем @.Например: @=”значение”
Последняя строка в файле должна быть пустой!После создания такого файла запускаем его. Затем будет выдан запрос на подтверждение импорта этого файла в реестр. После подтверждения должно быть выдано сообщение об удачном импорте. Сейчас я приведу пример reg-файла,который устанавливает URL моего блога в домашнюю страничку в IE:
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main]
"Start Page" = http://rob--live.blogspot.com/


Это ещё не конец!Помимо того что reg-файлы изменяют,создают новые параметры,они могут ещё и удалять их.Для удаления раздела перед его именем надо поставить знак минус.Например:
[-HKEY_CURRENT_USER\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.tmp]
Для удаления отдельных параметров пишем так:
[Раздел]
"имя_параметра"=-

Внимание!Windows 2000/XP имеет совместимость и может обрабатывать файлы созданные в Windows 9x. Но если вы экспортировали файл в Windows XP и хотите использовать в Windows9x,то измените вначале Windows Registry Editor Version 5.00 на REGEDIT4.
Импорт и экспорт reg-файлов можно производить как в графическом режиме так и в консольном.
Для экспорта в файл используем ключ /e команды regedit.Например:
>regedit /e eksport.reg HKEY_USERS\...

Для импорта используем ключ /s. При этом диалоговое окно не выводится.Например:
>regedit /s import.reg

Ну вот и всё!