?

Log in

No account? Create an account

Федеральная Служба Опасности


Entries by category: компьютеры

Изгнание вирусов из компьютера
manandmoon
malaya_zemlya
Интервью с ведьмой Джои Талли
http://motherboard.vice.com/read/we-talked-to-a-witch-who-casts-viruses-out-of-computers-with-magic
(англ)

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

0-day in GRUB2
manandmoon
malaya_zemlya
Если кто не видел - в популярном загрузчике Grub2 обнаружена уязвимость, позволяющая обходить защиту паролем, и дающая полный доступ к шеллу.

Эксплоит: вместо введения пароля нажать на Backspace ровно 28 раз, а потом Enter

Нет, это не секретный бекдор и не шутка девелоперов. Тут произошло нечто потрясающее. Постараюсь передать вкратце (если кому интересны все детали, то смотрите линк).

Если вместо ввода пароля нажимать на Backspace, то из-за пропущенной проверки программа заезжает за пределы буфера и начинает затирать нулями память с отрицательным смещением. Бывает.
В результате затирается стек, включая адрес возврата из текущей функции. Ок.
Соответственно, процессор прыгает на адрес 0, при чем в регистре esi остается текущая длина пароля, то есть -28.
По адресу 0, как водится, расположена таблица IVT, где лежат адреса обработчиков системных прерываний, но процессор ее сейчас интерпретирует не как адреса, в как исполняемый код. Оказывается, что в такой интерпретации IVT содержит функцию копирования блока памяти, где адрес, куда копировать, берется из регистра edi (он у нас установлен тоже в 0), а адрес откуда - из того самого регистра esi.
Получается, что функция начинает править собственный код и копировать данные из адреса -28 прямо поверх самой себя. Причем в цикле.
На первый раз портятся несколько инструкций в начале, но не критично.
На второй раз добавляются какие-то инструкции, меняющие содержимое стека,
А дальше... дальше появляется инструкция retw. Она берет со стека число и прыгает по обозначенному им адресу. А на стеке в этот момент лежит адрес встроенного шелла.

Занавес.


mimic
manandmoon
malaya_zemlya
Полезный скрипт: берет текст и заменяет в нем символы из стандартного набора ascii на внешне похожие символы из темных закоулков Юникода. Очень хорошо для обработки исходного кода на чужом компьютере.

см также: echo "#define if(x) if((x)||(__LINE__&1))" >>/usr/include/stdio.h

(no subject)
manandmoon
malaya_zemlya
Оказывается, есть такой вид спорта - прыжки в глубину на множестве Мандельброта - кто изобразит множество под самым большим увеличением, тот и чемпион. Хотя алгоритм сам и простой, но когда просчитывешь точки с точностью сто знаков после запятой, то очень внушительные ресурсы требуются.

Увеличение 2141  - около 7000 часов на 1 GHz Athlon TB (2001)

Увеличение 2236 - конфигурация и время не указаны (2009)

Увеличение 2316 - 5 месяцев на 20 двуядерных машинах (2009)

Увеличение 2645 - 3 четырех ядерных машины, 3 месяца (2008)

Увеличение 2760 - 6 месяцев, компьютер не указан (2010)

Увеличение 2838 - 1 год на неизвестном числе компьютеров

Увеличение 2915 - 12 процессорных ядер, 6 месяцев (2010)


Для сравнения: отношение диаметра видимой вселенной к диаметру протона составляет всего-навсего 2139
DreamWidth = {originalUrl: ...; commentCount: ; function addComment(); }

Отпечатки пальцев
manandmoon
malaya_zemlya
Wall Street Journal публикует статью об идентификации браузеров и телефонов. Тема не новая, но почему-то мало известная, даже в хакерской среде. Между тем, собрав достаточно информации о пользовательском компьютере и его браузере, можно практически безошибочно выделить его из толпы посетителей, невзирая на стертые куки, прокси и прочие стандартные хитрости. В основном эти технологии используются для ловли кардеров и жуликов, но последнее время подтянулись и рекламщики (и попортили малину ловцам кардеров, да)

Несолько известных проектов на эту тему:

41st Parameter(http://www.the41.com/)
Наверное, самй мейнстримный поставщик услуг по идентификации. Их коды я видел на overstock.com, 2checkout.com, на сайтах авиакомпаний итп. Используют только javascript, поэтому их код бежит на любых компьютерах. Собирают: разрешение экрана (из window.screen), установку системных часов (часовой пояс, переход на летнее время), данные о браузере (из window.navigator), языковые установки (document.defaultCharset итп), названия и версии установленных плагинов. Поскольку в IE невозможно сказать "дай мне список всех плагинов", то там они берут список самых популярных плагинов (flash, acrobat итп) и запрашивают версии по отдельности.
Дальше у них, видимо, есть какой-то детектор совпадений, по типу нечеткой логики или locality sensitive hashing, который говорит, насколько данная пользователя похожа на уже известные экземпляры. Нечеткость требуется потому, что пользователь в принципе может поменять любой из собранных параметров: скачать новую версию браузера, переключить разрешение экрана итп. Вообще довольно интересная задача: узнавание объектов в условиях шума. Не знаю, к сожалению, что как у них это реализовано.

Cкрипт:
https://www.2checkout.com/static/checkout/javascript/user-prefs.js
Распакованая версия:
http://pastebin.com/JW8bY2J3

Iovation (http://www.iovation.com/)
Специализируется на игровых сайтах и казино. Стоит, например на Eve Online. Берет данные не только из джаваскрипта, но и из флэша и собственной спайвары под названием ReputationShield. Ценой раздражения пользователей собирает о компьютере вообще все, что можно: от джаваскриптовских переменных, как у 41го параметра, до MAC-адреса, наличия дебаггера, виртуализации итп.
Поскольку у них есть доступ ко всей подноготной, то они не слишком заморачиваются нечеткой логикой. Более того любое несовпадение с базой данных или попытка ухода от слежки (стирание куков, например) ими считается за признак злоуго умысла. Честному человеку, мол, нечего скрывать. Статистически, наверное, так оно и есть, но все равно противно.
Обсуждение на форуме по покерному ИИ

Скрипты:
https://mpsnare.iesnare.com/snare.js
https://mpsnare.iesnare.com/script/logo.js
https://mpsnare.iesnare.com/stmgw.swf
https://ci-mpsnare.iovation.com/StmOCX.cab
Распакованая версия:
http://pastebin.com/EQwAFG3d

Panopticlick (https://panopticlick.eff.org/)
Демонстнационная версия, от Electornic Frontier Foundation. Использует Javascript, Java и Flash. Собирает список плагинов, заголовки HTTP запроса, посланного на сервер, разрешение экрана, наличие куков и список проинсталлированых шрифтов (через флэш или джаву). Последнее, кстати, оказывается очень мощным сигналом. Поскольку, это всего лишь демка, то никаких сложных сравнений она не производит - все данные сваливаются в кучу, берется хэш и сравнивается с базой. Поэтому любое изменение конфигурации ее полностью запутывает. Меня, например, только что не узнала, не смотря на то, что на сайте был неоднократно.
Скрипты лежат открыто на сайте.

BrowserSpy (http://browserspy.dk/)
Другая демострация. В отличие от Panopticlick, никакой базы данных там нет, зато можно поиграть с каждым сигналом по отдельности. Кроме обычных сигналов есть и довольно экзотические - например, максимально количество параллельных соединений или использование OpenDNS. Все исходники тоже лежат на сайте

Программерское - Soft Tempest
manandmoon
malaya_zemlya
Наконец-то дошли руки закончить демку "Soft Tempest". Не прошло и года :) Что это такое?
Как известно, компьютерные мониторы являются довольно мощным источником электромагнитной радиации, то есть попросту, радиоволн. Шпионы и хакеры-любители давно догадались, что с помощью этих радиоволн можно подсматривать за чужими мониторами - требуются лишь хорошая антенна, осциллограф и немного инженерной смекалки. Такого рода технологии по-английски называются TEMPEST, что означает "Temporary Emanation of Spurious Transmissions".

Soft Tempest - это TEMPEST наоборот. Если по радиоволнам можно восстановить изображение на мониторе, то рисуя на экране соответсвующие картинки, можно превратить компьютер в радиопередатчик. По удачному совпадению, частота видеосигнала адаптера SVGA лежит как раз в коротковолновом диапазоне :) Оригинальнвя Идея принадлежит финну Пекко Рииконену и немцу Ерику Тиеле (http://www.erikyyy.de/). Я перенес код с Linux-a на Windows с DirectX 9, оптимизировал графику под современные графические платы с пиксел-шейдерами и добавил какой-никакой пользовательский интерфейс. ИМХО, получилось забавно. Для лучшей слышимости рекомендую использовать CRT-монитор (то есть старого образца, с электронно-лучевой трубкой). В принципе, радиосигнал можно поймать и с плоского монитора, и даже без монитора вовсе, от самой карточки, но слышно будет гораздо хуже.

Скачать
Скачать исходник

Управление: стрелки влево-вправо - громкость. стрелки вверх-вниз - частота радиосигнала в килогерцах. Esc - выход из программы.

Замечания/предложения/комментарии горячо приветствуются.

ЗЫ. Программа может потребовать файла d3dx9_27.dll, который является частью дистрибутива DirectX 9.0 Иногда он почему-то отсутствует, в этом случае можете тоже скачать его у меня. Положите его в ту же директорию, что и SoftTempest, и все должно заработать.

Google job interviews
manandmoon
malaya_zemlya
Примеры вопросов, задаваемых на интервью компании Google.  Взято из жизни.

1. (Algorithms) Написать функцию int div(int a, int b), выполняющую целочисленное деление без использования оператора /

2. (Graphics) Дан массив байтов screen, представляющий собой буфер для картинки размером w на h пикселей с разрешением 1 бит на пиксель. Нарисовать на изображении горизонтальную линию от точки (x1,y) до точки (x2,y)

3. (Graphics) Даны 3х-мерные координаты точек A,B,C,P и Q. Написать функцию, которая определяет, пересекает ли отрезок PQ треугольник ABC

4. (Algorithms) Даны два массива чисел: int *a, *b. Размеры массивов sizea и sizeb соответственно. После конца массива b у нас есть дополнительно памяти на sizea чисел. Оба массива отсортированы по возрастанию. Слить их в один отсортированный массив, располагающийся по адресу b, не используя никаких временных буферов. Разумеется, желательно, чтобы на это ушло не более O(sizea+sizeb) времени

5а.(Algorithms) Дан массив int a[n], найти его медиану (т.е. такое число, что половина элементов массива имеют большее значение, а половина — меньшее). Желательно затратить на процедуру O(n) времени.
5b. Теперь предположим, что числа эти находятся не на одном компьютере, а на M компьютерах, и никак в память одного компьютера одновременно не помещаются. Написать распределенный алгоритм нахождения медианы. Оценить скорость его выполнения.

6. (Algorithms) Дана функция int rand5(), которая с равной вероятностью выдает числа от 1 до 5. Написать на ее основе функциюint rand8() , которая, соответственно, с равной вероятностью возвращает числа от 1 до 8

7. (C++) Что напечатает программа

Убрано под кат, чтоб ленту не разносилоCollapse )

8. (C++) Написать Singleton, правильно работающий в multi-threading режиме.

9. (Graphics) Сравнить z-buffering и w-buffering, какие преимущества и недостатки у каждого подхода?

10.(Graphics) Программа рисует трехмерный полупрозрачный многогранник. В результате ошибки некоторые из сторон многогранника иногда не рисуются. В чем могут быть причины ошибки?

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

Как нарисовать круг
manandmoon
malaya_zemlya
Раз уж я начал говорить о вычислении длин на маломощных компьютерах, то нельзя не упомянуть о близкой проблеме: Как нарисовать круг на экране? Это сейчас можно, не мудрствуя лукаво, написать что-нибудь вроде
for ( i = 0; i < 100; i++ ) Plot(r * cos(2*PI/100 * i), r * sin(2*PI/100 * i))

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

Read more...Collapse )