Q: Хочу написать на Python’e линукс-демон, который будет мониторить страницу в интернете на наличие изменений и уведомлять меня о каждом изменении. Как бы ты сделал это?

A: Основу демона можно взять готовую — в Сети их полно. Я бы рекомендовал посмотреть на вот эту основу. Предельно простой и красивый Python-код. Для вывода уведомлений, если работаешь под Ubuntu, можно использовать библиотеку libnotify. Выполни из Питона (с помощью subprocess, например) системную команду:

notify-send "Message text"

Чтобы запустить созданный демон, сначала сделай py-файл исполняемым и выполни:

$ python testdeamon.py start

Q: Как защититься от атак типа MITM, основанных на использовании злоумышленниками поддельных сертификатов?

A: На данный момент средств защиты от подобного рода атак нет, но на рассмотрение в комитет IETF внесена альфа-версия стандарта, который частично решает проблему. Стандарт определяет легковесное дополнение к протоколу TLS — TACK (Trust Assertions for Certificate Keys). Суть этого дополнения состоит в том, что браузер может запомнить информацию о сертификатах сайта, которая в дальнейшем будет использована для определения подлинности сертификата. Владелец сайта имеет возможность сгенерировать пару TACK-ключей: приватный и публичный. Приватный ключ используется для подписи публичного TLS-ключа сервера, а публичный при некоторых условиях посылается клиенту, и служит он для проверки подписи TLS-ключа. Вся соль в том, что браузер может привязать публичный ключ к определенному доменному имени. Если после привязки атакующий попробует осуществить MITM-атаку, используя поддельный сертификат, у него ничего не получится, так как TACK-валидация провалится. Этот стандарт может позволить организовать новый слой защиты SSL, который делает возможным провести атаку только в том случае, если скомпрометирован и центр сертификации, и веб-сайт.

Q: Последняя доступная прошивка для моего смартфона Samsung Galaxy Y (S5360) — Android 2.3 :(. Где найти, если она вообще существует, прошивку поновее?

A: Для твоего девайса 2.3 — это последняя официальная прошивка, и сомневаюсь, что самсунги предоставят для этого аппарата версию постарше, — оперативки там маловато. Но существует множество послепродажных прошивок на базе Android (например, CyanogenMod или MIUI). Разные версии этих прошивок портируются энтузиастами под всевозможные девайсы. Что касается Galaxy Y, то стабильных прошивок на базе Android ICS я не встречал, хотя тут: bit.ly/CM9-GY ведется порт CyanogenMod 9 (на базе ICS).

УДОБНЫЙ ТРАНСФЕР МЕЖДУ ОБЛАЧНЫМИ ХРАНИЛИЩАМИ

Q: Существует ли способ пересылки файлов между Dropbox и Google Drive, но чтобы попроще?

A: Если тебе нужен легкий и понятный интерфейс без лишних настроек, тогда хорошим выбором будет онлайн-сервис mybackupbox.com. Он позволяет пересылать файлы между самыми популярными облачными хранилищами. Кроме того, доступны FTP и MySQL. Можно настроить повторяемость операций копирования. Интерфейс сервиса очень прост — разберется даже ребенок. Бесплатно можно перекачивать до 10 Гб в месяц: максимум по гигабайту за подход, десять раз в месяц.

Дружественный интерфейс сервиса Backup Box
Дружественный интерфейс сервиса Backup Box

Q: Устроился на новую работу. В организации на компьютерах установлена корпоративная Windows 7 x64. Лицензии закуплено две, соответственно, некоторые компьютеры идут с одной лицензией, а остальные — с другой. Мне нужно узнать, какая лицензия установлена на каждом из компьютеров. От прежнего айтишника никаких записей не осталось, бухгалтерия не в курсе. Программы, которые должны показывать ключ продукта, выводят вместо него хлам. Как быть?

A: Ты не можешь увидеть ключ продукта, потому что на корпоративной винде это сделать невозможно. Хочу предложить тебе распознать компьютеры по последним четырем знакам лицензии, которые можно получить с помощью команды «slmgr.vbs /dlv». Для небольшой автоматизации выполни на каждом компьютере такой скрипт:

@Echo Off
For /F "tokens=2 delims=:" %%i \
In ('cscript %windir%\System32\slmgr.vbs /dlv ^| \
Find "Partial Product Key:"') Do Set k=%%i
Echo %COMPUTERNAME% - %k: =% >> %COMPUTERNAME%.txt
::теперь файл можно скопировать по сети на твой ПК

Замени «Partial Product Key» на «Частичный ключ продукта», если у тебя русская винда.

Q: С рабочего стола Windows 7 я убрал панель задач. Вместо нее установил стороннюю анимированную панель задач, но из этой панели не могу «развернуть» трей, то есть нет доступа к свернутым в трей приложениям. Как развернуть это окошко с помощью ярлыка?

A: Быстрее и легче всего решить твою задачу можно, используя программы типа AutoIt или AutoHotKey. C их помощью нужно написать скрипт, «нажимающий» комбинацию клавиш <Win + B> и потом (эта последовательность как раз сделает то, что тебе нужно). Например, на AutoIt этот скрипт будет выглядеть так:

send("#и")
;или send("#b") если по умолчанию английская раскладка
send("{ENTER}")

Теперь этот скрипт можно скомпилировать с помощью AutoIt Script to EXE Conventer.

Q: В процессе разработки моего Java-проекта мне понадобился LRU-кеш. Какие готовые решения предоставляет Java для его реализации?

A: Простейший LRU-хеш можно создать на основе java.uril.LinkedHashMap:

final int MAX_SIZE = 1500;
Map<K, V> lruCache =
new LinkedHashMap<K, V>(MAX_SIZE, 0.75f, true){
 @Override
 protected boolean removeEldestEntry(
 Map.Entry<K, V> eldest) {
  return size() > MAX_CAPACITY;
}
};

Метод removeEldestEntry вызывается на каждой вставке, и, если он возвращает true, элемент в хвосте удаляется. А так как мы передали в третьем параметре конструктора true, то запрашиваемый элемент будет автоматически перемещаться в начало очереди, — такой вот простейший LRU-кеш. Если же нужен кеш поэффективнее, то рекомендую взглянуть на разработку инженера Google ConcurrentLinkedHashMap.

Q: Как запретить вход на мой сайт через HTTP, перенаправляя всех пользователей на HTTPS? И еще вопросик: как отправлять мобильных пользователей на мобильную версию сайта (допустим, mobile.site.com)?

A: Для этого воспользуйся возможностями mod_rewrite. Добавь в htaccess-файл следующие строки:

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule .* https://www.site.com/%{REQUEST_URI} [R,L]
# В случае если хочешь переадресовывать, не используя www, тогда правило будет таким:
# RewriteRule .* https://site.com/%{REQUEST_URI} [R,L]

Решение для мобильных пользователей выглядит так:

RewriteCond %{HTTP_USER_AGENT} "android|blackberry|googlebot-mobile|iemobile|ipad|iphone|ipod|opera mobile|palmos|webos" [NC]
RewriteRule ^$ https://mobile.site.com/ [L,R=302]

Q: При попытке кинуть на Android-телефон файл hosts при помощи adb получил сообщение об ошибке. Телефон рутованный. В чем может быть проблема?

A: Несмотря на то что ты рутовал свое устройство, файловая система все же осталась read only. Нужно перемонтировать ее, чтобы она стала read-write. Для этого можно воспользоваться «adb remount», но для этого нужно, чтобы демон adbd на устройстве был запущен под рутом («adb root»), с чем могут возникнуть проблемы. Воспользуемся более универсальным методом: сделаем remount файловой системы через shell («adb shell») или же непосредственно с устройства, используя Terminal Emulator (или ему подобных программ).

# mount -o rw,remount -t yaffs2 /dev/block/mtdblock3 /system

Система уже read-write, но ты все еще можешь получить ошибку об отсутствии доступа — его нужно дать:

# chmod 777 /system/etc

Чтобы вернуть файловой системе статус read only:

# mount -o ro,remount -t yaffs2 /dev/block/mtdblock3 /system

«5 шагов»: Двухэтапная SSH-авторизация с помощью Google Authenticator

С каждым днем двухэтапная авторизация становится все популярнее. Интернет-сервисы один за другим внедряют ее поддержку на свои сайты, поскольку такой способ авторизации предельно прост и при этом обеспечивает высокую безопасность. Сильный толчок к столь бурному развитию этой технологии дал Гугл. Благодаря опенсорсной разработке под названием Google Authenticator двухэтапную авторизацию можно прикрутить почти к чему угодно. Давай обезопасим с ее помощью свой SSH.

  1. Для внедрения двухфакторной авторизации с помощью Google Authenticator мы воспользуемся PAM-модулем от Google (PAM-модули позволяют легко внедрить разные формы авторизации в *nix-системе). Установить его можно так:$ sudo apt-get install libpam-google-authenticator

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

    $ google-authenticator

Программа тут же сгенерирует ключ и запасные коды, после этого запросит разрешение на обновление твоего Google Authenticator файла — разрешаем. Дальше последуют еще несколько вопросов, касающихся безопасности, — отвечай на свое усмотрение.
  1. Теперь нужно добавить новую учетку в Google Authenticator на твоем мобильном девайсе. Для этого в меню Google Authenticator на телефоне выбери «Добавить учетную запись». Теперь можешь выбрать «Добавить учетную запись вручную» и ввести 16-значный ключ, сгенерированный на предыдущем шаге, или же выбрать «Сканировать штрих-код». Соответствующий штрих-код можно увидеть по ссылке немного выше ключа. Кроме того, псевдографический QR-код будет напечатан прямо в терминале, просто увеличь размеры терминала, если он там не помещается.
  2. Займемся самым главным: прикрутим все это к SSH-авторизации. Чтобы сделать это, открой из-под рута файл /etc/pam.d/sshd и добавь в конец следующую строчку:
    auth required pam_google_authenticator.so
    

    А в конфиге /ect/ssh/sshd_config смени значения ключа на yes:

    ChallengeResponseAuthentication yes
    

    Ну и наконец, для внесения изменений перезагрузи SSH-сервер («service ssh restart»).

  3. На этом настройка завершена. Твой SSH защищен двухэтапной аутентификацией. Чтобы проверить это, попробуй залогиниться на свой SSH-сервер: после ввода пароля увидишь запрос на ввод временного ключа. Если ввести ключ неправильно, то откинет обратно на ввод пароля. Как ты смог убедиться, Google Authenticator позволяет очень легко и в считаные минуты прикрутить двухфакторную авторизацию к чему-либо, в нашем случае — к SSH.

Двухэтапная авторизация в действии
Двухэтапная авторизация в действии

Двухэтапная авторизация в действии

Q: Можешь подсказать, как усилить безопасность блога на WordPress’е?

A: Думаю, читателю журнала «Хакер» не стоит давать очевидных рекомендаций, типа использовать сложные пароли, постоянно накатывать обновления и тому подобных. Поэтому предложу несколько нетривиальных советов:

  1. Измени стандартный префикс, который WordPress автоматически добавляет к названиям таблиц в БД, на какой-то свой.
  2. Спрячь от пользователя версию WordPress’а: для этого в файл functions.php темы добавь:remove_action(‘wp_header’, ‘wp_generator’);
  3. Установи security-плагины, например TAC (bit.ly/wp-tac) или Better WP Security (bit.ly/wp-sec).
  4. Фильтруй потенциально опасные запросы. Для этого добавь в htaccess, например, такие строки:
    RewriteCond %{QUERY_STRING} ^.*(%22|%27|%3C|...).* [NC,OR]
    ...
    RewriteCond %{QUERY_STRING} ^.*(select|union|drop|...).* [NC]
    RewriteRule ^(.*)$ - [F,L]
    
  5. Закрой доступ к директории с плагинами site.com/wp-content/plugins/ — можешь через htaccess, а можешь закинуть в эту директорию пустой index.html.

Q: Как защитить APK от декомпиляции?

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

  1. Пропустить программу через разного рода обфускаторы (ProGuard, например), которые сделают нечитабельной декомпилированную программу. Также можно запутать код вручную.
  2. Зашифровать ресурсы (картинки, текст).
  3. Перенести самые важные модули в библиотеки С++ — декомпиляция бинарника в разы сложнее, чем Java-байт-кода.
  4. Перенести основную логику в jni, кроме этого, нужно перенести туда проверку подписи APK.
  5. Подгружать ключевые алгоритмы с сервера в виде скриптов.

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

Q: Давно хочу попробовать Chrome OS. Конечно, покупка Chromebook’а как вариант не рассматривается. Пробовал скачивать отдельный live-дистрибутив, но на моем железе он не работает. Что посоветуешь?

A: Действительно, список поддерживаемого Сhrome OS железа весьма ограничен. Но практически на любом железе работает Ubuntu. Причем здесь Ubuntu? Дело в том, что в рамках проекта lightdm-login-chromiumos разработан пакет, который позволяет запустить пользовательское окружение Chrome OS поверх Ubuntu. Чтобы установить пакет, выполни:

$ wget http://bit.ly/ThfTMT
$ sudo dpkg -i lightdm-login-chromiumos_1.0_amd64.deb

Существует два режима запуска: внутри окна в текущем окружении (для чего используется оконный менеджер Aura), а также полноценный пользовательский сеанс. Чтобы запустить Chrome OS внутри окна, нужно выполнить:

$ chromeos

Chrome OS поверх Kubuntu в оконном режиме
Chrome OS поверх Kubuntu в оконном режиме

Для входа же в сеанс нужно выбрать Chromium OS в приглашении дисплейного менеджера. Внутри Chrome OS работает Flash, Java, присутствует Google Talk плагин. Кроме того, поддерживается хардварная акселерация видео. Но на данный момент не работает захват изображений с веб-камеры, разные системные настройки, как, например, контроль громкости — эти настройки игнорируются. Полноценно пользоваться проектом на данном этапе его развития нецелесообразно, но для ознакомления — в самый раз.

 



Оставить мнение