В общем, забавный факт. Как мы знаем, у кварцевых часов есть погрешность, которой обычно можно пренебречь, но у каждого кристалла она своя.
В операционной системе есть TCP-часы, по которым считают задержку до собеседника, и, в отличие от системных, они должны расти монотонно, иначе получатель начнёт выкидывать свежие пакеты как старые. В 2005-м вышла статья [Remote Physical Device Fingerprinting]. Её авторы показали, что по таймстемпам из TCP можно удалённо посчитать погрешность часов и использовать её как отпечаток машины.
Первым делом они проверили, зависит ли погрешность от того, откуда машина подключена. Для этого взяли ноутбук и подключали его к одному и тому же серверу из разных мест: из дома на обоих побережьях США, из университета, из публичной библиотеки, через wifi, провод и модем. Часы ноутбука отставали примерно на 58 микросекунд за каждую секунду, и во всех местах оценки разошлись меньше чем на микросекунду в секунду. Следующий вопрос был, зависит ли результат от того, кто измеряет. Тот же ноутбук измеряли одновременно с машин по всему миру, от Калифорнии до Кембриджа и Сингапура, и цифры снова сошлись. Выбилась только машина в Индии, до которой пакет шёл туда-обратно больше 300 мс. Оставалось понять, отличаются ли между собой одинаковые компьютеры. В университетском компьютерном классе 38 дней мерили 69 машин с одинаковым железом и одинаковой Windows. У каждой погрешность держалась на своём уровне, и у разных машин она лежала в диапазоне от −6 до +49 микросекунд в секунду. Само по себе это не даёт уникального идентификатора, но вместе с другими признаками, в теории, помогает отслеживать устройство.
В статье есть мысль, которую авторы не довели до конца. Если на погрешность влияет температура, то по ней можно узнать что-то об окружении машины. Проверили это только мимоходом: летом перенесли ноутбук из серверной с кондиционером в комнату без него и разницы почти не увидели.
Стивен Мёрдок из Кембриджа [обнаружил влияние температуры случайно]. Он пытался улучшить результаты той самой статьи 2005-го и вытаскивал время из начальных номеров TCP-соединений, куда Linux подмешивает системные часы с точностью до микросекунды. Точность выросла настолько, что в измерениях проявился странный пик. По времени он примерно совпал с моментом, когда cron раскручивал жёсткий диск на тестовой машине, и, как следствие, появилась новая статья.
В 2006-м Мёрдок опубликовал работу [Hot or Not: Revealing Hidden Services by their Clock Skew], в ней шла речь о скрытых сервисах Tor. Годом раньше уже была атака, где ноду Tor вычисляли по тому, как у неё растёт задержка под нагрузкой, и против неё предложили изоляцию: каждому соединению фиксированная доля ресурсов. Мёрдок заметил, что изоляция не спасает - когда соединение простаивает, процессор меньше работает и остывает, а от температуры меняется частота кварца.
Он проверил это на приватной сети Tor - скрытый сервер два часа нагружали, скачивая с него файл на 10 МБ по анонимному каналу, потом два часа не трогали, а отдельная машина всё это время напрямую собирала с сервера TCP-таймстемпы. Температура менялась всего на 1–1.5 °C, но погрешность часов менялась синхронно с нагрузкой. Изменение было в доли микросекунды в секунду, как раз в тех пределах, которые в 2005-м сочли незначительными. Разглядеть его удалось, потому что Мёрдок вычитал постоянную погрешность и знал, когда именно сервер грелся.
Чтобы убедиться, что дело именно в температуре, машину отдельно грели снаружи, и перепады в 3 °C тоже читались по таймстемпам. Так же читался и суточный ход температуры в комнате. Короче говоря, догадка из статьи 2005-го подтвердилась, и по погрешности стало видно, что происходит вокруг машины.
В 2016-м в Linux [к TCP-таймстемпам стали прибавлять случайное число] в рамках одного соединения, чтобы по ним нельзя было следить за машиной и считать компьютеры за NAT. Разные соединения одной машины так уже не связать, но внутри одного длинного соединения часы идут с той же скоростью, и погрешность [в принципе еще можно посчитать]
Post #340
2.78K


- 🔥 45
- 😁 4
- 👻 2