Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР 120, ДЕКАБРЬ 2008 г.

Easy-Hack


Задача: Грамотно сконфигурировать PHP на сервере

Решение:

В наши дни, когда большинство веб-приложений пишется на PHP, довольно трудно представить себе сервер без PHP-интерпритатора. Ни для кого не секрет и то, что большинство веб-шеллов, бэкдоров и прочих удаленных хак-тулз пишется на PHP. Именно поэтому грамотной настройке PHP принято уделять повышенное внимание. От того, как ты настроишь на сервере этот интерпретатор, зависит не только работоспособность веб-приложений, но, зачастую, и безопасность самого сервера. Наверняка ты слышал, что основной конфиг PHP – это файл php.ini. Его мы и будем настраивать под свои нужды. Для многих основная трудность заключается в том, что он полностью на английском языке. Что ж, если ты не дружишь с амеро-буржуйской речью, то полноценный перевод php.ini создан специально для тебя :). Поверь, с русифицированным конфигом ты разберешься в два счета. От тебя лишь требуется:

1. Слить русифицированный php.ini с нашего ДВД (или с www.codenet.ru);

2. Внимательно изучить конфиг, особое внимание обрати на настройки языка:

;;;;;;;;;;;;;;;;;;;
; Настройки языка ;
;;;;;;;;;;;;;;;;;;;

; Разрешает работу PHP для сервера Apache.
engine = On

; Разрешает использовать короткие тэги <?. Иначе будут распознаваться
; только тэги <?php и <script>.
short_open_tag = On

; Позволяет использовать тэги <% %> а-ля ASP.
asp_tags = Off

; Число значащих цифр после запятой, которые отображаются для чисел с
; плавающей точкой.
precision = 14
; Признак коррекции дат (проблема 2000 года, которая может создать
; вызвать непонимание со стороны браузеров, которые
; на это не рассчитывают)
y2k_compliance = Off

; Использование буферизации вывода. Позволяет посылать заголовки (включая
; Cookies) после вывода текста. Правда, это происходит ценой
; незначительного замедления вывода.
; Вы можете разрешить буферизацию во время выполнения сценария путем
; вызова функций буферизации, или же включить ее по умолчанию с помощью
; следующей директивы:
output_buffering = Off

; Директива неявной отсылки говорит PHP о том, что выводимые данные нужно
; автоматически передавать браузеру после вывода каждого блока данных.
; Ее действие эквивалентно вызовам функции flush() после
; каждого использования print() или echo() и после каждого HTML-блока.
; Включение этой директивы серьезно замедляет работу, поэтому ее
; рекомендуется применять лишь в отладочных целях.
implicit_flush = Off

; Безопасный режим
safe_mode = Off
safe_mode_exec_dir =

; Следующая директива содержит разделенный запятыми список имен
; переменных окружения, которые конечный пользователь не сможет изменять
; путем вызова putenv().
; Эти переменные будут защищены даже в том случае, если директива
; разрешает их использовать.
safe_mode_protected_env_vars = LD_LIBRARY_PATH

; Эта директива позволяет вам запрещать вызовы некоторых функций
; из соображений безопасности. Список задается в виде имен функций,
; разграниченных запятыми. Директива действует независимо от того, установлен
; ли безопасный режим или нет!
disable_functions =

3. Выставить требуемые параметры и сохранить изменения (либо осуществить аналогичные изменения в оригинальной версии php.ini на своем сервере);

4. Залить конфиг с измененными параметрами на сервер.

Вот и все! Думаю, никаких проблем у тебя не возникнет, даже при незнании английского языка.

Задача: Определить метод защиты CD

Решение:

Проблема создания копии защищенного диска далеко не нова – сотни прог и куча обходных путей тому подтверждение. Правильное определение метода защиты конкретного компакта позволяет выбрать правильные настройки проги для прожига и скопировать CD, несмотря на протекторы.

  1. Качаем утилу Copy Protection Detection последней версии. Интерфейс простой и понятный, поэтому пойдем дальше.
  2. Выбираем привод с защищенным диском, щелкаем по баттону Detect. В области «Protection found:» будет показан один из поддерживаемых типов протекторов: LaserLock, SafeDisk, SecuROM, CD-Cops, DiskGuard, DummyFiles или Overburn.
  3. Методы борьбы с каждым из них в отдельности можно найти в интернете, либо воспользоваться подсказкой самой проги: кликаем по кнопке «How?» и выбираем из списка слева технологию защиты.

Несмотря на то, что многие утилы, определяющие тип защиты от копирования, настоятельно рекомендуют юзать для прожига прогу CloneCD, советы по копированию (из третьего пункта) можно использовать в любых других программах записи дисков, поддерживающих соответствующие фишки.

Задача: Перепрошить PSP для запуска сторонних приложений

Решение:

Уточню, что под PSP подразумевается мультимедийная консоль PlayStation Portable. Изначально компания Sony задумывала выпуск карманной игровой приставки со стандартными функциями. Но перепрошив консоль, ты получишь полноценный КПК, который разве что кофе варить не будет :).

Со сменой прошивки не все так просто. Во-первых, запандорить aka перепрошить можно лишь версии «PSP Fat» и «PSP Slim – 2000», а вот самые новые «PSP Slim – 3000» с материнкой TA-88v3 сторонним изменениям подвергнуть не удастся. Итак, для смены дефолтовой прошивки на модифицированную 4.01m33-2 тебе понадобится:

  • Оригинальная флешка Memory Stick Duo Pro (обрати внимание – Pro). Емкость – от 64 метров и выше.
  • Оригинальный аккумулятор (серые китайские поделки можешь сразу выбросить).
  • Сама консоль PSP (PSP Fat или PSP Slim - 2000).
  • Комп с установленной Виндой (2000/XP).
  • Лезвие/нож и паяльник для переделки аккумулятора (в случае с PSP Fat).

Далее тебе нужно:

  1. Подготовить флешку Memory Stick Duo Pro (залить на нее установочные файлы пандоры и саму прошивку).
  2. Исходя из типа аккумулятора, аккуратно отпаять/перерезать одну из ножек (какую – смотри на скрине). Будь внимателен, тип батарейки зависит от версии и типа самой консоли.
  3. Собрать аккумулятор, вставить флешку и установить новую прошивку прямо из меню PSP.

Вся операция требует спокойствия и собранности, ибо одно неверное движение может запросто привести к трагичным для твоего аккумулятора последствиям. Поэтому я настоятельно рекомендую тебе посетить сайт www.psphacks.info, который посвящен перепрошивке PSP. Либо же используй Гугл.

P.S. Кстати, если ты боишься все делать своими руками, то можешь купить уже переделанный аккумулятор вместе с флешкой в специализированном шопе – www.pandorasales.com. Стоит подобный набор порядка $99.

Задача: Спрятать файлы и папки, находящиеся на флешке, отформатированной в системе FAT16 или FAT32, от любопытного глаза.

Решение:

Безопасность прежде всего! Конфиденциальность данных нужно обеспечивать всеми доступными методами раньше, чем жизнь начнет давать горькие уроки. В ходе нашего эксперимента была получена интересная методика сокрытия файлов, находящихся на носителе, при помощи внесения изменений в разметочную таблицу диска.
Выяснилось, что «обнуление» (замена значащих байт нулями) имени конкретного файла или директории содержащегося в разметочной таблице съемного диска приводит к сокрытию файлов и папок, имена которых в таблице разметки диска располагаются «ниже» этого имени. Таким образом можно скрывать группу файлов, если имеется доступ к таблице разметки диска. Эксперименты проводятся на базе носителя (флешки), размеченного в системе FAT16. С FAT32 все аналогично. В работе нам поможет замечательный редактор WinHex.

  1. Открываем физический носитель в WinHex: выбираем из меню программы пункт «Tools -> Open Disk», щелкаем по значку диска и нажимаем «Ok».
  2. В окне дампа находим имя целевого файла - оно может быть записано как в ASCII, так и в Юникоде, в зависимости от его длины.
  3. В окне, содержащем список директорий, выбираем корневую («Root directory»). В окне дампа произойдет автоматическое перемещение к началу этой директории.
  4. В окне дампа находим имя нужной директориифайла и затираем его нулями (следует помнить, что модифицировать нужно шестнадцатеричные значения, которые отображаются слева от ASCII-дампа).
  5. Сохраняем сделанные изменения и подтверждаем запись на диск.

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

Существует один важный нюанс: если имя файла/директории короткое (менее 8 букв), достаточно его «затереть», и система не увидит ни этот файл/директорию, ни папки и файлы, располагающиеся в таблице разметки вслед за ним. Если же имя длинное, в таблице оно записано в Юникоде, и каждая буква кодируется двумя байтами. Скрыть от системы файл с длинным именем еще проще - обнуляем байт, расположенный в hex-дампе прямо перед началом имени, и он «исчезает»! Только помни, что в таком случае файл может быть перезаписан при копировании на носитель новых данных :).

Существует эффективный прием для сокрытия абсолютно всех данных, записанных на носитель. Он очень прост: выбери в списке директорий папку «(Root directory)», которая представляет прообраз корневого каталога, и в окне дампа обнули первый относящийся к ней байт. Теперь сохрани изменения. Кстати, заметил, что место, занимаемое файлами, не освободилось?

Задача: Написать код, который будет автоматически перестраивать таблицу вызовов функций в программе так, чтобы вызов происходил неявно

Решение:

Рассмотрим программу 1by1.exe – небольшой аудиоплеер, который идеально подходит для наших экспериментов. Загрузив программу под отладчиком, выясняем, что вызовы происходят следующим образом:

00401214 CALL <JMP.&CRTDLL.__GetMainArgs>; вызов адреса 0041fb10
...

0041FB10 JMP DWORD PTR DS:[476880]; переход по адресу, на который указывает значение ячейки 476880

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

Постараемся представить, как будет выглядеть модифицированный вызов. Должно получиться приблизительно следующее:

0041FB10 PUSH <&CRTDLL.__GetMainArgs>; сохраняем указатель, который содержит адрес функции
0041FB15 JMP 1by1_unp.0041FD4C; переходим на внедренный нами код
...

0041fd4c add esp,4; увеличиваем esp, чтобы "вытеснить из стека" указатель, помещенный нами
0041fd4f jmp [esp-4]; извлекаем из указателя адрес функции и передаем ей управление

В случае единичного вызова все сработает замечательно. Если же исправить так все вызовы, то мы наткнемся на бесконечную рекурсию. Придется разбираться с SEH, и будет полный завал! Сложности нам ни к чему, – напишем более простой код, который разместим по адресу 0041FD4C. В рекурсию код уходить не будет, мы изменим таблицу вызовов таким образом, чтобы при каждом выполнении операции call передача управления производилась не на сторонний код, а на написанный нами обработчик. Придется попотеть, но результат стоит стараний.

1. Загружаем программу под OllyDbg и оказываемся на точке входа программы. Запоминаем первую инструкцию, которую заменим переходом к нашему обработчику:

004011CB JMP 0041FD4C

2. Размещаем код по адресу 0041FD4C. Обрабатывать записи таблицы вызовов функций будем в цикле, управляемом регистром ecx. Начальным значением регистра будет адрес первой записи в таблице, которая располагается по адресу 0041FB10, это - функция CRTDLL.__GetMainArgs (не забывай, мы заменили инструкцию, которая располагалась на точке входа, на переход к обработчику, поэтому включаем ее в наш код сейчас, еще до инициализации счетчика):

0041FD4C MOV EAX,DWORD PTR FS:[0]; инструкция, располагавшаяся на точке входа ранее
0041FD52 MOV ECX,0041FB10; адрес первой записи в таблице вызовов инициализирует счетчик

0041FD57 MOV EAX,[ECX]; по адресу, указанном в счетчике, содержится машинный код перехода к вызываемой функции. Мы договорились заменить jmp на push, чтобы сохранить адрес в стеке. Помещаем машинный код в EAX и будем его модифицировать при помощи маски, накладываемой инструкцией XOR
0041FD59 XOR EAX,1000; меняем код таким образом, чтобы JMP операция JMP "превратилась" в PUSH
0041FD5E MOV [ECX],EAX; помещаем модифицированный машинный код обратно в память
0041FD60 MOV EBX,231E9; в EBX помещаем код инструкции перехода к нашему обработчику-"JMP 0041FD4C"

0041FD65 ADD ECX,6; увеличиваем счетчик;
0041FD68 MOV [ECX],EBX; помещаем в память машинный код;
0041FD6A ADD ECX,6; увеличиваем счетчик еще раз;
0041FD6D CMP ECX,0041FD44; сравниваем счетчик с адресом, по которому располагается последняя запись таблицы вызовов - функция <&CRTDLL.tan>.
0041FD73 JNZ SHORT 0041FD57; если сравнение удалось, это означает, что обработка таблицы окончена
0041FD75 JMP 004011D0; передаем управление на вторую инструкцию, начиная от точки входа программы.

3. Сохраняем изменения. Кстати, плеер запакован UPX-ом, но распаковывается легко, при помощи того же UPX в автоматическом режиме. Если ты затрудняешься распаковать файл (но тогда непонятно, почему ты это до сих пор читаешь :)), возьми тот, который мы выложили для тебя на нашем DVD. Также на диске имеется модифицированный файл, содержащий обработчик.

Если и после распаковки не удается сохранить модифицированную exe-шку, увеличь размер поля RAW-секции кода (.text) при помощи LordPE.

Задача: Защитить приватную информацию

Решение:

Этот вопрос актуален во все времена, и сейчас существует множество способов защиты. Хочу предложить не совсем стандартный, но 100% рабочий и легкий в использовании:

  1. Нам понадобится флешка, на ней будет храниться инфа. Делаем ПОЛНОЕ (вместо быстрого) форматирование для очистки от мусора и качественного восстановления данных в дальнейшем.
  2. На просторах интернета выбираем прогу для восстановления данных с flash-девайсов либо с файловых систем FAT. Нужна именно portable-версия, так как запускаться все будет с флешки, а также желателен простой и легкий в обращении интерфейс. Для примера возьмем FlashMemoryMagic 1.3.15.
  3. Прога эта требует установку, но проблема вполне решаема. Устанавливаем в любое место на компе, открываем папочку, копируем на flash'ку файл FlashMemoryMagic.exe, и делаем uninstall с компа.
  4. Для работы все готово, копируем наши данные на флеш и тут же стираем. На руках имеем носитель всего с 1 файлом FlashMemoryMagic.exe, но вся удаленная инфа хранится в файловой системе. Если нужно достать инфу - просто делаем восстановление данных, и за 3-4 клика мышью получаем ее обратно.

Конечно, у этого подхода есть свои плюсы и минусы.

Плюсы:

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

Минусы

  • потерять инфу при копировании на носитель других файлов слишком легко.
  • для добавления новых файлов нужно проводить восстановление всех файлов с флеша, проводить форматирование и закидывать старую инфу вместе с новой. Проблема частично решается созданием на девайсе двух и более разделов.
  • может вызвать подозрение завалявшаяся прога для восстановления данных. Убрать с глаз можно разными способами, например, переименовать и запаролить сторонней прогой.
Содержание
ttfb: 8.9371204376221 ms