Пишу, по большей части, про историю, свою жизнь и немного про программирование.

SHS, бесплатное — рядом, как выгнать робота

(Вне?)очередная уязвимость Small HTTP Server

Так получилось, что Small HTTP Server является одной из тех программ, что я скачиваю с интернета, нахожу пару уязвимостей и на этом успокаиваюсь. SHS отличается от всех прочих программ тем, что я сообщаю об уязвимостях этой программы всему миру. Делаю я это, как не странно, с целью избавить любимую программу от багов. Мне действительно очень нравится эта программа, но я не смогу ей пользоваться, пока, наконец, однажды не смогу найти в ней ни одного бага за полчаса.

Итак, довольно прелюдий.
На этот раз мне показался интересным тот факт, что SHS ведёт довольно подробные логи для HTTP, а, если хорошо попросить, то и для других протоколов.

Причём SHS придерживается строгой достоверности логов, именно, поэтому, я так думаю, не изменяет ни одной буквы при выводе лога на экран (это ирония). И это очень плохо. Обычный способ просмотра лога в этом сервере — через браузер. SHS предоставляет адреса специального вида, по которым, зная пароль, с сервером можно делать множество удивительных вещей. В частности, смотреть логи.

Таким образом, стоит только пользователю зайти браузером по URLу вида (всё в одну строку):

http://server.name/<script>Hnd=window.open('/$_admin_$conf');Hnd.document.forms[0].noicon.checked=true;Hnd.document.forms[0].submit();Hnd.close()</script>

как в логе появится строка, которая при следующем просмотре администратором лога изменит кое-какие установки сервера (если администратор разрешил удалённое выполнение).

Рассмотрим, что именно происходит при попадании в лог этой строки. Лог, который администратор просматривает через браузер, для браузера представляет собой обычный HTML. В этот HTML мы, при помощи тега SCRIPT, включаем программу на JavaScript.

Как только администратор открывает страницу с логом, эта программа начинает выполняться. Она открывает в другом окне страницу настройки сервера (многие не почувствуют неладное, если окно сделать 1×1) и меняет на ней одну из настроек. После чего закрывает окно.

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

Бесплатное — рядом.

Каким образом можно передавать данные из одного конца земного шара в другой совершенно бесплатно? Возможно ли такое? Давайте подумаем.

Интернет — не единственное средство, позволяющее потрепаться австралийцу и простому российскому студенту. Другое, но куда более дорогое средство — телефонная связь. Но у телефонной связи есть огромное преимущество — один из видов информации она передаёт абсолютно бесплатно.

Какого же рода эта информация? Информация о том, что вас кто-то вызывает, т. е. обычный звонок. Купив 4 подержанных сотовых телефона вы сможете организовать полудуплексный канал, скорость которого будет зависеть только от качества прозвона на другой конец. Принцип, думаю, ясен — один телефон используется для передачи единиц, другой — нулей (или тире и точек, кому как угодно).

Скорость небольшая, но можно её повысить. Первое, что приходит в голову — перед передачей поток можно сжать. Второй способ повысить скорость связи — взять не 4 телефона, а больше. Например, 8. Тогда скорость можно повысить в 2 раза или сделать связь полнодуплексной.

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

Помимо собственно звонка многие сети позволяют, при помощи АОН, узнать кто же именно вам звонит. Это тоже информация. Её можно использовать, например, для того, чтобы передавать информацию в более компактном виде — ведь при наличии 4-х телефонов получается 4 состояния — первый телефон звонит на первый, 2й на 1й, 1й на 2й и 2й на 2й или сделать, например, одностороннюю связь только на 3-х трубках.

Да мало ли что можно придумать! Поле деятельности безгранично, а подержанные GSM-трубки можно купить сейчас за 400-600 рублей. Ничтожная цена за такую халяву.

Защита от роботов

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

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

Другое дело, что хорошие реализации встречаются достаточно редко. Я уже описывал пример слабой реализации подобного механизма на Chat.RU. Недостаток их реализации следовал из слабой защиты самой надписи — цифры на их картинке очень просто распознать.

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

На chat.ru, кстати, этот параметр может быть реверсирован (по параметру можно получить исходный текст) в течении 30 секунд на достаточно мощной машине. Думаю, на Pentuim-IV с приличными гигагерцами и на C это время сократится до 5-10 секунд.

А вот на чате сервера НашаМосква этот параметр зависит от некой величины, которая меняет каждый день и самого номера. Причём алгоритм прост до безобразия — достаточно понаблюдать пару дней, чтобы понять в чём он заключается. Не говоря уже о том, что цифры и буквы фиксированного размера, следовательно их распознавание тоже не представляет никакой проблемы. Так делать не надо.

Возникает закономерный вопрос: а как же надо делать? Ответ на этот любопытный вопрос можно найти на сайте HotMail. Попробуйте зарегистрировать себе почтовый ящик и вы поймёте о чём я говорю.

Во-первых, сама надпись максимально искажена, во-вторых, ключ, который вы сможете найти в cookie, такой длины, что надежда на скорое извлечение из него информации покинет вас с приличной скоростью. Делать надо именно так.