- Промышленный шпионаж!, - мечтательно сказала Лара, бойко отстукивая по экранной клавиатуре.
Тут я охуел не на шутку, но разубеждать не стал.
Но день дивных открытий только начался. Меня набирает Летун, и как всегда говорит, что он (в очередной раз) абсолютно случайно проезжает мимо, и хочет поговорить. В центре Донецка есть такие закоулки, где среди многоэтажек ютятся остатки частного сектора. Майский цвет кругом. А Летун, видимо решил доломать мой охуеватор окончательно. А, давай говорит, мы к ментам зайдём и предложим им десяточку, понимаешь же, всё из Киева идёт, нельзя просто так взять и потерять? Ушам своим не мог поверить. Смотрю на него, как на симпатичного, но слабоумного ребёнка.
- От чего же нет, говорю, сходите, - я-то не совсем идиот, и привык, что мне платят за то, что я прав, а не я плачу за то что я прав, но стало до боли любопытно, что они мне ещё расскажут. Попрощался и отправился назад на работу к своим гудящим серверам и мигающим лампочкам.
Вечером, сгибаясь от смеха приходит Серега, на тот момент один из лучших моих друзей, во время войны мы станем врагами. Осторожно выглядывает с балкона, машина отъехала? И давясь, рассказывает, что рыцари плаща и кинжала действительно поехали к ментам о чем-то тереть, и в разгар межведомственного диалога, словно ангел с небес на райотдел снисходит генерал, берёт дело под мышку и уходит... Мир удивителен и полон неожиданными сюрпризами.
Мне наша держава постоянно напоминает анекдот про жадную слепую девочку и пельмени. "Если вы мне целый таз наварили, то сколько ж вы себе, падлы, заначили?" Чому бідні - бо дурні. Чому дурні бо бідні.
Тут я охуел не на шутку, но разубеждать не стал.
Но день дивных открытий только начался. Меня набирает Летун, и как всегда говорит, что он (в очередной раз) абсолютно случайно проезжает мимо, и хочет поговорить. В центре Донецка есть такие закоулки, где среди многоэтажек ютятся остатки частного сектора. Майский цвет кругом. А Летун, видимо решил доломать мой охуеватор окончательно. А, давай говорит, мы к ментам зайдём и предложим им десяточку, понимаешь же, всё из Киева идёт, нельзя просто так взять и потерять? Ушам своим не мог поверить. Смотрю на него, как на симпатичного, но слабоумного ребёнка.
- От чего же нет, говорю, сходите, - я-то не совсем идиот, и привык, что мне платят за то, что я прав, а не я плачу за то что я прав, но стало до боли любопытно, что они мне ещё расскажут. Попрощался и отправился назад на работу к своим гудящим серверам и мигающим лампочкам.
Вечером, сгибаясь от смеха приходит Серега, на тот момент один из лучших моих друзей, во время войны мы станем врагами. Осторожно выглядывает с балкона, машина отъехала? И давясь, рассказывает, что рыцари плаща и кинжала действительно поехали к ментам о чем-то тереть, и в разгар межведомственного диалога, словно ангел с небес на райотдел снисходит генерал, берёт дело под мышку и уходит... Мир удивителен и полон неожиданными сюрпризами.
Мне наша держава постоянно напоминает анекдот про жадную слепую девочку и пельмени. "Если вы мне целый таз наварили, то сколько ж вы себе, падлы, заначили?" Чому бідні - бо дурні. Чому дурні бо бідні.
С детекторами встреч (proximity trackers) все словно с ума посходили. Некоторые, к сожалению, буквально. Французские разработчики предложили сделать централизованную базу с пользовательскими ключами (sic!), доверить её национальным организациям по защите данных и нац. беопасности (в случае Украины - это ДССЗЗІ и СБУ), а если пользователь узнаёт о заражении, то загружает все свои контакты на центральный сервер. А в качестве алгоритма шифрования предлагают 3DES. Я даже не знаю, чтобы тут еще закосячить, дальше уже кажется просто невозможно. Всё шиворот навыворот. Полное описание идиотизма по ссылке https://github.com/ROBERT-proximity-tracing/documents/blob/master/ROBERT-specification-EN-v1_0.pdf
Не люблю видео, люблю писать черные закорючки на белом фоне, но этот момент из "Новых наёмников России" мне нравится. Про фильм я как-нибудь еще отдельно напишу, там много занятного, Slug News славно поработали и The Security Service of Ukraine отжигала на пятерочку:
"Мы используем "Киберальянс", для проверки веб-сайтов
только на территории Украины. То есть, подвержены ли они атаке, или нет. То есть, свои собственные ресурсы. А не для атаки"
Пол Экман такое выражение лица называет "duping delight" (восторг надувательства). Мамку свою будете "использовать". Мне вспомнилось, как Служба мастерски умеет пользоваться полученной информацией.
Показали мне как-то беспарольный шелл (программа для удаленного управления сервером) на сайте Донецкой ОВГА - туда залезли какие-то недоумки из Самары, если мне память не изменяет https://bit.ly/34MTAeC
Пишу знакомому: слушай, говорю, всё-таки военно-гражданская администрация, а там россияне лазят - не хорошо, сделай что-нибудь, а? Ответ меня убил просто. А мы, он отвечает, сейчас согласуем и во второй половине дня им письмо напишем, и по закону они обязаны будут ответить в течении десяти дней...
Был бы я Женей Докукиным, обязательно бы добавил что-нибудь про "багаторічну бездіяльність СБУ", но увы, это не так, например гоняться за украинскими хакерами вместо русских - на это у них и время есть и люди, и технические возможности.
"Мы используем "Киберальянс", для проверки веб-сайтов
только на территории Украины. То есть, подвержены ли они атаке, или нет. То есть, свои собственные ресурсы. А не для атаки"
Пол Экман такое выражение лица называет "duping delight" (восторг надувательства). Мамку свою будете "использовать". Мне вспомнилось, как Служба мастерски умеет пользоваться полученной информацией.
Показали мне как-то беспарольный шелл (программа для удаленного управления сервером) на сайте Донецкой ОВГА - туда залезли какие-то недоумки из Самары, если мне память не изменяет https://bit.ly/34MTAeC
Пишу знакомому: слушай, говорю, всё-таки военно-гражданская администрация, а там россияне лазят - не хорошо, сделай что-нибудь, а? Ответ меня убил просто. А мы, он отвечает, сейчас согласуем и во второй половине дня им письмо напишем, и по закону они обязаны будут ответить в течении десяти дней...
Был бы я Женей Докукиным, обязательно бы добавил что-нибудь про "багаторічну бездіяльність СБУ", но увы, это не так, например гоняться за украинскими хакерами вместо русских - на это у них и время есть и люди, и технические возможности.
Русская конспирологическая помойка Джордж Элайсон напомнил мне о небывалых успехах российской разведки по части легендирования и plausible deniability (правдоподобное отрицание). С Гуччифером 2.0 они обосрались уже в выборе персонажа.
У настоящего Гуччифера из Румынии наибольшее техническое достижение - подобрать на помойке российскую проксю, Марсель хакал весьма немудренным способом месяцами следил за выбранной целью и угадывал ответы на вопросы для восстановления доступа. Без сомнения - талант (в области OSINT и аналитики, но не хакинга), к тому же очень далёкий от политики. Бредни про иллюминатов и почту Хилари не более, чем типичная линия защиты, такие же заявления делал потом Константин Козловский.
Кому-то в ГРУ колоритный румын показался отличным прикрытием и конечно они тут же спалились на незнании румынского языка и нелепых объяснениях про уязвимость нулевого дня в NGP VAN (софт, которым пользуется демократическая партия для сбора средств), такие же забавные заявления делал "Киберберкут" после взлома ЦВК.
Про безуспешные попытки реализовать информацию и Ассанжа можно целую книгу написать, но интересный момент, в том как Россия пыталась отвести от себя подозрения. Тут же появился блог никому не известного эксперта по криминалистике https://theforensicator.wordpress.com/ , который на основе временных отметок в файлах, сделал вывод о том, что файлы копировались со скоростью 22 мегабайта в секунду, что якобы находится за пределами "возможностей Интернета". Так как фуфел сам по себе не зашел, то подписалось под ним общество "Бывших Профессиональных Ветереанов Разведки за Здравый смысл" (VIPS) с рассказками про то, что судя по скорости файлы были скопированы на флешку https://consortiumnews.com/2017/07/24/intel-vets-challenge-russia-hack-evidence/
Теория про "фантастическую скорость в 180 мегабит" потом ещё долго гуляла. Просто чтобы показать наглядно, зашел на один из серверов и потянул гигабайтный файлик. Скорость 62 мегабайта в секунду. Для серверов - самое обычное дело.
У настоящего Гуччифера из Румынии наибольшее техническое достижение - подобрать на помойке российскую проксю, Марсель хакал весьма немудренным способом месяцами следил за выбранной целью и угадывал ответы на вопросы для восстановления доступа. Без сомнения - талант (в области OSINT и аналитики, но не хакинга), к тому же очень далёкий от политики. Бредни про иллюминатов и почту Хилари не более, чем типичная линия защиты, такие же заявления делал потом Константин Козловский.
Кому-то в ГРУ колоритный румын показался отличным прикрытием и конечно они тут же спалились на незнании румынского языка и нелепых объяснениях про уязвимость нулевого дня в NGP VAN (софт, которым пользуется демократическая партия для сбора средств), такие же забавные заявления делал "Киберберкут" после взлома ЦВК.
Про безуспешные попытки реализовать информацию и Ассанжа можно целую книгу написать, но интересный момент, в том как Россия пыталась отвести от себя подозрения. Тут же появился блог никому не известного эксперта по криминалистике https://theforensicator.wordpress.com/ , который на основе временных отметок в файлах, сделал вывод о том, что файлы копировались со скоростью 22 мегабайта в секунду, что якобы находится за пределами "возможностей Интернета". Так как фуфел сам по себе не зашел, то подписалось под ним общество "Бывших Профессиональных Ветереанов Разведки за Здравый смысл" (VIPS) с рассказками про то, что судя по скорости файлы были скопированы на флешку https://consortiumnews.com/2017/07/24/intel-vets-challenge-russia-hack-evidence/
Теория про "фантастическую скорость в 180 мегабит" потом ещё долго гуляла. Просто чтобы показать наглядно, зашел на один из серверов и потянул гигабайтный файлик. Скорость 62 мегабайта в секунду. Для серверов - самое обычное дело.
Сегодня мне снова захотелось перечитать Unix Haters Handbook https://web.mit.edu/~simsong/www/ugh.pdf Я открыл книжку где-то в середине и снова похихикал, создавая файлики "-f" и другим немудренным шуткам. При этом меня нельзя назвать хипстером, больше двадцати лет я занимаюсь администрированием и разработкой для Юникс, если сильно прижмет, то могу отредактировать sendmail.cf в ed или написать драйвер. Я знаю почему всё настолько кривое и уродливое, я читал документацию семидесятых. Но, блядь!
Всё началось с того, что я снес OEM Ubuntu и поставил последний RedHat. Помятуя о том, что ноутбук свежачок, набитый интеловским топчиком, я сразу поставил dev-версию ядра. Оно, падло, падало так часто и задорно, что я на него стал смотреть как на потенциальный склад зеродеев, и бессрочный отпуск на тропических островах. Я давно уже смирился с тем, что ps axuf напоминает великий курултай индейских вождей, поедающих экзотических животных, я даже с systemd смирился, с кротостью жертвы многолетнего домашнего насилия.
Меня не удивить тем, что тачпад и wifi отлетают поочередно, можно подключить мышь и телефон в качестве модема, чтобы расчистить себе пространство для маневра. Почти без боя удалось вернуть себе трей. Инсталятор забыл создать каталог для расширений. Обновить архив фирмвари - легче легкого! Сегодня у меня наконец-то дошли руки посмотреть, что за инопланетные твари собрались в памяти.
Про man и rpm -qi можно забыть сразу: "чудесный демон, который авторизует устройства, ведёт базу данных устройств и мигает всеми устройствами, которые у вас есть". Синтезатор речи на языке урду? Изыди! yum remove. Поиск в гугле приносит всё те же бесполезные man-страницы и вопли таких же несчастных и озадаченных людей. Я помолодел на четверть века и снова почувствовал себя маленьким и глупым.
Добил меня rngd. Священный культ энтропии. Внутри компьютера мало случайностей, а они нужны. И вместо того, чтобы собрать сраный килобайт случайных чисел и запустить неблокирующий CSRNG, неведомые уёбки гоняют RDRAND в юзерспейсе, чтобы кормить им затем ядро через /dev/random, и они дико гордятся тем, что он теперь не блокируется. Если за это не убивать, то тогда за что?
Всё началось с того, что я снес OEM Ubuntu и поставил последний RedHat. Помятуя о том, что ноутбук свежачок, набитый интеловским топчиком, я сразу поставил dev-версию ядра. Оно, падло, падало так часто и задорно, что я на него стал смотреть как на потенциальный склад зеродеев, и бессрочный отпуск на тропических островах. Я давно уже смирился с тем, что ps axuf напоминает великий курултай индейских вождей, поедающих экзотических животных, я даже с systemd смирился, с кротостью жертвы многолетнего домашнего насилия.
Меня не удивить тем, что тачпад и wifi отлетают поочередно, можно подключить мышь и телефон в качестве модема, чтобы расчистить себе пространство для маневра. Почти без боя удалось вернуть себе трей. Инсталятор забыл создать каталог для расширений. Обновить архив фирмвари - легче легкого! Сегодня у меня наконец-то дошли руки посмотреть, что за инопланетные твари собрались в памяти.
Про man и rpm -qi можно забыть сразу: "чудесный демон, который авторизует устройства, ведёт базу данных устройств и мигает всеми устройствами, которые у вас есть". Синтезатор речи на языке урду? Изыди! yum remove. Поиск в гугле приносит всё те же бесполезные man-страницы и вопли таких же несчастных и озадаченных людей. Я помолодел на четверть века и снова почувствовал себя маленьким и глупым.
Добил меня rngd. Священный культ энтропии. Внутри компьютера мало случайностей, а они нужны. И вместо того, чтобы собрать сраный килобайт случайных чисел и запустить неблокирующий CSRNG, неведомые уёбки гоняют RDRAND в юзерспейсе, чтобы кормить им затем ядро через /dev/random, и они дико гордятся тем, что он теперь не блокируется. Если за это не убивать, то тогда за что?
Я недавно написал пост о том как я настраивал систему, избавляя её от лишних с моей точки зрения программ, и о том что меня возмутил сервис, генерирующий случайные числа. Пост был эмоциональный, но не очень понятный. Многие жаловались и требовали объяснений. Так что небольшая воскресная проповедь о природе случайного. Компьютер чем-то напоминает демона Лапласа: если начать с определенных условий - результат всегда получается одинаковый, и это проблема.
В Интернете древности (и сейчас иногда тоже) можно просто заменить IP адрес отправителя, прикинувшись кем-то другим. И послать, например, вам пакет RST, разрывающий соединение, пока вы тянете здоровенный файл. Чтобы этого не происходило, счетчики в TCP-соединении начинаются со случайного числа, чтобы атакующий не смог его угадать. Любое шифрование, в том числе TLS, защищающий вас прямо сейчас от майора-в-середине, просто не будет работать без случайных чисел, и это касается не только ключей, но и всеми любимых цифровых подписей. Sony гарантирует это.
Где взять случайность и как померять насколько она случайная? Уже в 1870 году Больцманн и Гиббс сформулировали понятие энтропии, такая смесь статистики и термодинамики S = -k * \sum p_i \ln p_i, где p_i вероятность того, что система окажется в i-ом состоянии из всех возможных, а k - постоянная Больцманна. Вас наверняка мучали такими формулами в школе, но не всем объяснили зачем они нужны. Энтропия количество "беспорядка". И эта стервь не убывает, пока не достигнет максимального значения и система не придёт в равновесие. Гроб, гроб, кладбище, тепловая смерть вселенной.
А в сороковых годах прошлого века, замечательный Клод Шеннон решил применить тот же подход к информации, так появилась теория информации (и на ней основана и криптография, сжатие данных, коммуникации и даже лингвистика). Энтропия по Шеннону H = \sum p_i log p_i, где p_i вероятность для i-го сообщения из всех возможных. Если все вероятности равны, то H = \log |M| (M - множество всех сообщений) Попробуем погонять одно и тоже сообщение через зашумленный канал по кругу, и энтропия будет расти, пока сообщение не превратится в случайный мусор. Физику не наебёшь
Только у компьютера нет таких "шумящих" штук, и в обиход вошли псевдо-случайные генераторы. Один из самых распространенных линейный конгруэнтный генератор LCG: s_i = a * s_(i-1) + b mod m, достаточно выбрать относительно "случайное" начальное значение s_0 (как правило, текущую дату) и при правильно подобранных значениях a, b, m, формула выдаст долго не повторяющийся ряд чисел похожих на случайные. Если вы знакомы с основами теории групп, то должно быть понятно почему. https://bit.ly/2VBDx0k Многие языки программирования и библиотеки используют LCG по умолчанию.
Достаточно ли этого? Возьмем генератор из Borland C (2^32, 22695477, 1) сгенерируем 1000 чисел и измерим энтропию. Entropy = 7.966828 bits per byte. Вроде бы неплохо, пока мы не сменили уютный пледик программиста на логово злодеев, заваленное костьми людей с благими намерениями. Вся последовательность полностью предсказуема, если мы знаем начальное значение (seed). Мы его можем просто подобрать перебором, для современных компьютеров не проблема. Какой-то крипто-локер генерировал так ключи. Его тут же взломали.
Более того, если у нас есть возможность сгенерировать несколько чисел, то мы можем восстановить значения a, b, m с вероятностью 1 / \zeta(2), где \zeta - функция Римана, 6 / \pi ^ 2, по мере наблюдений за генератором, вероятность взлома будет расти. И расти быстро. Так мы получим все следующие значения после того, как узнаем текущий seed. Зная параметры, мы можем обратить формулу, и получить и внутреннее состояние генератора, и все предыдущие значения тоже. Что делать?
В Интернете древности (и сейчас иногда тоже) можно просто заменить IP адрес отправителя, прикинувшись кем-то другим. И послать, например, вам пакет RST, разрывающий соединение, пока вы тянете здоровенный файл. Чтобы этого не происходило, счетчики в TCP-соединении начинаются со случайного числа, чтобы атакующий не смог его угадать. Любое шифрование, в том числе TLS, защищающий вас прямо сейчас от майора-в-середине, просто не будет работать без случайных чисел, и это касается не только ключей, но и всеми любимых цифровых подписей. Sony гарантирует это.
Где взять случайность и как померять насколько она случайная? Уже в 1870 году Больцманн и Гиббс сформулировали понятие энтропии, такая смесь статистики и термодинамики S = -k * \sum p_i \ln p_i, где p_i вероятность того, что система окажется в i-ом состоянии из всех возможных, а k - постоянная Больцманна. Вас наверняка мучали такими формулами в школе, но не всем объяснили зачем они нужны. Энтропия количество "беспорядка". И эта стервь не убывает, пока не достигнет максимального значения и система не придёт в равновесие. Гроб, гроб, кладбище, тепловая смерть вселенной.
А в сороковых годах прошлого века, замечательный Клод Шеннон решил применить тот же подход к информации, так появилась теория информации (и на ней основана и криптография, сжатие данных, коммуникации и даже лингвистика). Энтропия по Шеннону H = \sum p_i log p_i, где p_i вероятность для i-го сообщения из всех возможных. Если все вероятности равны, то H = \log |M| (M - множество всех сообщений) Попробуем погонять одно и тоже сообщение через зашумленный канал по кругу, и энтропия будет расти, пока сообщение не превратится в случайный мусор. Физику не наебёшь
Только у компьютера нет таких "шумящих" штук, и в обиход вошли псевдо-случайные генераторы. Один из самых распространенных линейный конгруэнтный генератор LCG: s_i = a * s_(i-1) + b mod m, достаточно выбрать относительно "случайное" начальное значение s_0 (как правило, текущую дату) и при правильно подобранных значениях a, b, m, формула выдаст долго не повторяющийся ряд чисел похожих на случайные. Если вы знакомы с основами теории групп, то должно быть понятно почему. https://bit.ly/2VBDx0k Многие языки программирования и библиотеки используют LCG по умолчанию.
Достаточно ли этого? Возьмем генератор из Borland C (2^32, 22695477, 1) сгенерируем 1000 чисел и измерим энтропию. Entropy = 7.966828 bits per byte. Вроде бы неплохо, пока мы не сменили уютный пледик программиста на логово злодеев, заваленное костьми людей с благими намерениями. Вся последовательность полностью предсказуема, если мы знаем начальное значение (seed). Мы его можем просто подобрать перебором, для современных компьютеров не проблема. Какой-то крипто-локер генерировал так ключи. Его тут же взломали.
Более того, если у нас есть возможность сгенерировать несколько чисел, то мы можем восстановить значения a, b, m с вероятностью 1 / \zeta(2), где \zeta - функция Римана, 6 / \pi ^ 2, по мере наблюдений за генератором, вероятность взлома будет расти. И расти быстро. Так мы получим все следующие значения после того, как узнаем текущий seed. Зная параметры, мы можем обратить формулу, и получить и внутреннее состояние генератора, и все предыдущие значения тоже. Что делать?
👍3
Сформулируем требования к генератору. Resilience. Все значения должны выглядеть случайными, и атакующий не должен по выхлопу генератора узнать его внутреннее состояние. Forward security. Если состояние потекло, атакующий не должен узнать предыдущие значения генератора. Если внутреннее состояние обновляется, то атакующий не должен узнать и последующие состояния генератора тоже - break-in recovery (восстановление после взлома).
И мы снова возвращаемся к энтропии. У дядь и тёть криптографов есть простая и интересная игра для проверки шифров. Атакующий даёт вам два сообщения m0 и m1, вы шифруете одно из них и отдаёте назад. Всё тот же Шеннон переформулоировал принцип Керкгоффса (требования к шифрам): враг знает систему, ему известно всё кроме ключа. Если шифр хороший, то враг не может узнать какое именно из его сообщений вы зашифровали m0 или m1. Из зашифрованного текста нельзя извлечь информацию, у шифровок равная (или почти равная) вероятность. Если не протекает совсем, то такое свойство называется perfect secrecy (опять Шеннон, 1948 год), а если протекает с пренебрежимо малой вероятностью, то semantic security.
Для хорошего генератора нам понадобится любой (вменяемый) шифр E и небольшой источник настоящих случайных чисел для начального значения, генератор будет выглядеть вот так E(s) -> s, r, мы обновляем внутреннее состояние, и генерируем следующее случайное число. Фарш невозможно прокрутить назад. Для того, чтобы восстановить состояние нужно взломать шифр. Чтобы защититься от утечки, периодически подмешиваем в состояние дополнительную случайность E(s ^ x) -> s, где x - собранная по крупицам энтропия (движения мыши, нажатия клавиатуры, аппаратные прерывания, сеть и прочий хаос). Вся конструкция описана Бараком и Халеви.
А теперь от теории к практике. Примерно так как в предыдущем абзаце работает генератор в OpenBSD. Система накапливает немного "настоящей энтропии" для инициализации криптографически стойкого генератора (CSRNG), и после этого псевдо-случайные числа идут сплошным потоком и без запинок, по мере накопления в состояние подмешивается новая энтропия, чтобы обеспечить backward security. В Линуксе всё гораздо интереснее.
В ядро генератор добавил Theodore Ts'o в 1996 году, когда в США еще бушевала первая крипто-война с товарищем майором и линуксовый генератор построен весьма замысловатым образом (он даже тогда занимал полторы тысячи строк, а не двести как во вменяемых системах). Подход основан на том, что энтропия ценный ресурс (и это действительно так) и он "истощается" (как нефть), потому есть два устройства /dev/random и /dev/urandom с "настоящими" и псевдо-случайными числами. И тут наблюдается очень странный ход мысли.
Если "энтропия" в CSRNG плохая, то значит лежащей в его основе криптографии нельзя доверять. Она вся похакана АНБ (именно так и написано в исходниках). Тем не менее, так как значения которые ядро добавляет в резервуар случайности (entropy pool) не совсем случайны, то ядро использует ту же самую "похаканную" криптографию, чтобы смешивать новые данные с уже имеющимися. Чтобы генерировать ключи для шифрования "которому нельзя доверять", потому что АНБ. Л. Логика. И у подобного решения есть крайне неприятные последствия.
Когда параноидально-настроенная программа (PGP) читает настоящую случайность из random, то она может закончится и программа заблокируется без видимых причин, а если вменяемая программа (OpenSSL) читает случайность из urandom, то заначка может действительно оказаться пустой, потому что её уже кто-то выжрал, и числа полученные неблокирующим CSRNG не будут случайными. Насколько оправдана паранойя линуксовых разработчиков мы обсуждать не будем, но тут на арену цирка выходят совсем уж удивительные клоуны.
И мы снова возвращаемся к энтропии. У дядь и тёть криптографов есть простая и интересная игра для проверки шифров. Атакующий даёт вам два сообщения m0 и m1, вы шифруете одно из них и отдаёте назад. Всё тот же Шеннон переформулоировал принцип Керкгоффса (требования к шифрам): враг знает систему, ему известно всё кроме ключа. Если шифр хороший, то враг не может узнать какое именно из его сообщений вы зашифровали m0 или m1. Из зашифрованного текста нельзя извлечь информацию, у шифровок равная (или почти равная) вероятность. Если не протекает совсем, то такое свойство называется perfect secrecy (опять Шеннон, 1948 год), а если протекает с пренебрежимо малой вероятностью, то semantic security.
Для хорошего генератора нам понадобится любой (вменяемый) шифр E и небольшой источник настоящих случайных чисел для начального значения, генератор будет выглядеть вот так E(s) -> s, r, мы обновляем внутреннее состояние, и генерируем следующее случайное число. Фарш невозможно прокрутить назад. Для того, чтобы восстановить состояние нужно взломать шифр. Чтобы защититься от утечки, периодически подмешиваем в состояние дополнительную случайность E(s ^ x) -> s, где x - собранная по крупицам энтропия (движения мыши, нажатия клавиатуры, аппаратные прерывания, сеть и прочий хаос). Вся конструкция описана Бараком и Халеви.
А теперь от теории к практике. Примерно так как в предыдущем абзаце работает генератор в OpenBSD. Система накапливает немного "настоящей энтропии" для инициализации криптографически стойкого генератора (CSRNG), и после этого псевдо-случайные числа идут сплошным потоком и без запинок, по мере накопления в состояние подмешивается новая энтропия, чтобы обеспечить backward security. В Линуксе всё гораздо интереснее.
В ядро генератор добавил Theodore Ts'o в 1996 году, когда в США еще бушевала первая крипто-война с товарищем майором и линуксовый генератор построен весьма замысловатым образом (он даже тогда занимал полторы тысячи строк, а не двести как во вменяемых системах). Подход основан на том, что энтропия ценный ресурс (и это действительно так) и он "истощается" (как нефть), потому есть два устройства /dev/random и /dev/urandom с "настоящими" и псевдо-случайными числами. И тут наблюдается очень странный ход мысли.
Если "энтропия" в CSRNG плохая, то значит лежащей в его основе криптографии нельзя доверять. Она вся похакана АНБ (именно так и написано в исходниках). Тем не менее, так как значения которые ядро добавляет в резервуар случайности (entropy pool) не совсем случайны, то ядро использует ту же самую "похаканную" криптографию, чтобы смешивать новые данные с уже имеющимися. Чтобы генерировать ключи для шифрования "которому нельзя доверять", потому что АНБ. Л. Логика. И у подобного решения есть крайне неприятные последствия.
Когда параноидально-настроенная программа (PGP) читает настоящую случайность из random, то она может закончится и программа заблокируется без видимых причин, а если вменяемая программа (OpenSSL) читает случайность из urandom, то заначка может действительно оказаться пустой, потому что её уже кто-то выжрал, и числа полученные неблокирующим CSRNG не будут случайными. Насколько оправдана паранойя линуксовых разработчиков мы обсуждать не будем, но тут на арену цирка выходят совсем уж удивительные клоуны.
В любой современной системе у пользовательских программ нет прямого доступа к железу (из которого можно выжать немного случайного), система разделена на пространство пользователя и пространнство ядра. И тут для служения культу "истощающейся энтропии" появляются две программы haveged и rnd-tools, которые пытаются собирать в пользовательском режиме энтропию из железа, не имея к нему прямого доступа, и запихивают её обратно в ядро, чтобы наполнять два бассейна для генераторов random и urandom. И еще гордятся тем, что из random теперь можно читать без блокировок.
Правильный вариант - накопить немного настояшей случайности из разных источников (включая аппаратный генератор процессора), чтобы полностью инициализировать нормальный CSRNG, периодически обновлять состояние и перестать бояться, что энтропия закончится. Каменный век закончился, не потому что закончились камни, да и второй закон термодинамики смотрит на линуксоидов как на говно. Либо криптография работает, либо нет - нужно выбрать что-то одно из двух. Если же АНБ "взломало всё", то у нас куда более серьёзные проблемы, чем случайность случайности.
P.S. Раньше мои посты на подобные темы выглядели примерно так: "уёбки непрерывно пихают энтропию из юзерспейса в ядро, снёс хуйню". Человеческим языком получилось немного длиннее, но может быть кого-нибудь развлечёт.
Правильный вариант - накопить немного настояшей случайности из разных источников (включая аппаратный генератор процессора), чтобы полностью инициализировать нормальный CSRNG, периодически обновлять состояние и перестать бояться, что энтропия закончится. Каменный век закончился, не потому что закончились камни, да и второй закон термодинамики смотрит на линуксоидов как на говно. Либо криптография работает, либо нет - нужно выбрать что-то одно из двух. Если же АНБ "взломало всё", то у нас куда более серьёзные проблемы, чем случайность случайности.
P.S. Раньше мои посты на подобные темы выглядели примерно так: "уёбки непрерывно пихают энтропию из юзерспейса в ядро, снёс хуйню". Человеческим языком получилось немного длиннее, но может быть кого-нибудь развлечёт.
👍1
Под технические посты сложно подбирать картинки. Светящиеся клавиатуры, трехметровые экраны, капюшончики, черепа и знаки биологической угрозы вырвиглазных цветов уже настолько всех достали, что в фильмах "про компьютеры" украдкой показывают краешек nmap, как намёк на порно, а документалисты ограничиваются руками на клавиатуре (светящейся) и экраном ноутбука (с nmap) в расфокусе. Пока записывал интервью для документалок, я стал провессиональным открывателем дверей. Один из фондов даже конкурс объявил "Cybersecurity Visuals Challenge", небезынтересный, да.
Но техномагия по-прежнему остаётся магией, что мне в ней и нравится. Я недавно нашел статью Каргера и Шелла 1974 года, в которой описывается бэкдор вставленный в компилятор таким образом, что не остаётся следов в исходниках. Меня всегда интересовали программы, которые пишут и переписывают другие программы. Желательно ещё чтобы господа программисты и безопасники под ногами не путались. Чем бесполезней программа - тем лучше! На заднем фоне начинает мигать зелёный череп с оранжевым знаком биологической угрозы на лбу - бесполезные программы, которые переписывают что-то сами по себе - компьютерные вирусы.
В последнее время я с сожалением наблюдаю за вырождением этой разновидности современного искусства. По-настоящему прорывные идеи встречаются редко. Уже в 1990 году Марк Вошберн придумал прицепить к вирусу случайно сгенерированный расшифровщик и появились полиморфные вирусы, и они, не смотря на простоту идеи, надолго озадачили антивирусные компании. Интересным был переход от вирусов и червей к ботнетам, что привело к поглощению антивирусной индустрии и появлению комплексных решений, а со стороны противника к новым (а точнее традиционным) формам организации труда - высокоуровневые языки, проектирование, тестирование, менеджмент. Никакого выпиливания лобзиком, промышленный подход.
Меня же больше интересует, тот момент когда белые шляпы достигли пика в имеющихся на тот момент технологиях и развитие остановилось. Stuxnet, X-Agent, RCS - просто скучный шлак. Да, дорогостоящий из-за пачек эксплоитов, да, объемный по времени затраченному на рзработку, и чудовищно скучный. А в 2002 году появились два метаморфных вируса ZMist и MetaPHOR - вирусы способные проанализировать свой код, изменить и собрать его заново. Занятно, что и вирмейкеры и антивирусники боялись и надеялись соответственно, что если выдрать из вируса анализатор кода, то можно получить его минимизированную форму (zeroing) для детектирования. Что неосуществимо в теории, но вполне реализуется на практике.
Про бесплатные завтраки в поиске и оптимизации поговорим в другой раз, а неосуществимость "зануления" можно доказать с помощью старой, доброй машины Тьюринга - такое воображаемое устройство, с помощью которого можно проэмулировать решение любой задачи, более того, если МТ нельзя запрограммировать на решение задачи, то такая задача называется алгоритмически неразрешимой (не то чтобы такую задачу нельзя решить, но для её решения нельзя написать программу). Формализм Тьюринга, наравне с лямбда-исчислением Черча - это и есть определение алгоритма. Если алгоритм нельзя описать в рамках формального определения, то это - не алгоритм.
И теоретическое доказательство невозможности детекта метаморфиков оптимизацией очень простое. В случае с вирусом нужно доказать, что две программы идентичны, то есть дают одинаковый результат для всех возможных начальных условий. Так как мы не знаем остановится ли когда-нибудь машина Тьюринга или зациклится, то задача алгоритмически неразрешима. А на практике такой фокус действительно можно провернуть, потому что мутации в известных метаморфных вирусах очень простые и нацелены на отдельные инструкции и базовые блоки без учета "смысла" заложенного в программу.
Но техномагия по-прежнему остаётся магией, что мне в ней и нравится. Я недавно нашел статью Каргера и Шелла 1974 года, в которой описывается бэкдор вставленный в компилятор таким образом, что не остаётся следов в исходниках. Меня всегда интересовали программы, которые пишут и переписывают другие программы. Желательно ещё чтобы господа программисты и безопасники под ногами не путались. Чем бесполезней программа - тем лучше! На заднем фоне начинает мигать зелёный череп с оранжевым знаком биологической угрозы на лбу - бесполезные программы, которые переписывают что-то сами по себе - компьютерные вирусы.
В последнее время я с сожалением наблюдаю за вырождением этой разновидности современного искусства. По-настоящему прорывные идеи встречаются редко. Уже в 1990 году Марк Вошберн придумал прицепить к вирусу случайно сгенерированный расшифровщик и появились полиморфные вирусы, и они, не смотря на простоту идеи, надолго озадачили антивирусные компании. Интересным был переход от вирусов и червей к ботнетам, что привело к поглощению антивирусной индустрии и появлению комплексных решений, а со стороны противника к новым (а точнее традиционным) формам организации труда - высокоуровневые языки, проектирование, тестирование, менеджмент. Никакого выпиливания лобзиком, промышленный подход.
Меня же больше интересует, тот момент когда белые шляпы достигли пика в имеющихся на тот момент технологиях и развитие остановилось. Stuxnet, X-Agent, RCS - просто скучный шлак. Да, дорогостоящий из-за пачек эксплоитов, да, объемный по времени затраченному на рзработку, и чудовищно скучный. А в 2002 году появились два метаморфных вируса ZMist и MetaPHOR - вирусы способные проанализировать свой код, изменить и собрать его заново. Занятно, что и вирмейкеры и антивирусники боялись и надеялись соответственно, что если выдрать из вируса анализатор кода, то можно получить его минимизированную форму (zeroing) для детектирования. Что неосуществимо в теории, но вполне реализуется на практике.
Про бесплатные завтраки в поиске и оптимизации поговорим в другой раз, а неосуществимость "зануления" можно доказать с помощью старой, доброй машины Тьюринга - такое воображаемое устройство, с помощью которого можно проэмулировать решение любой задачи, более того, если МТ нельзя запрограммировать на решение задачи, то такая задача называется алгоритмически неразрешимой (не то чтобы такую задачу нельзя решить, но для её решения нельзя написать программу). Формализм Тьюринга, наравне с лямбда-исчислением Черча - это и есть определение алгоритма. Если алгоритм нельзя описать в рамках формального определения, то это - не алгоритм.
И теоретическое доказательство невозможности детекта метаморфиков оптимизацией очень простое. В случае с вирусом нужно доказать, что две программы идентичны, то есть дают одинаковый результат для всех возможных начальных условий. Так как мы не знаем остановится ли когда-нибудь машина Тьюринга или зациклится, то задача алгоритмически неразрешима. А на практике такой фокус действительно можно провернуть, потому что мутации в известных метаморфных вирусах очень простые и нацелены на отдельные инструкции и базовые блоки без учета "смысла" заложенного в программу.
Отличить "простое" от "сложного" нам поможет иерархия Хомского (он вобще-то на английский язык целился, но и нам тоже пригодится). На самом дне (тип три) живут знакомые многим программистам и администраторам регулярные выражения, что-то вроде "<[a-z]+>[^>]*</[a-z]+> должно ловить открывающий и закрывающий HTML-тэги, но нет никакого способа, кроме поного перечисления всех вариантов, объяснить команде grep, что строки внутри тэгов одинаковые. Язык L=a^n c b^n, в котором количество букв "a" и "b" одинаковое, нельзя описать регулярным выражением.
Переходим на уровень выше, тип два, контекстно-свободные грамматики описывают большую часть формальных языков, таких как Си или Лисп. Предыдущая задача в этом классе языков решается элементарно: expr :- ( expr ) | ..., и такая грамматика распознаёт правильно вложенные скобки в арифметических выражениях. И это та вершина, до которой с трудом доползли вирусописатели. К примеру замену инструкции MOV a, b можно описать как mov a, b :- mov tmp, b; mov a, tmp | ... и получается та же самая матрешка как с HTML-тэгами и скобками в выражениях. Все остальные замены в метаморфных зверюшках описываются регулярками и интереса не представляют.
При этом даже формальный язык, типа Си, не исчерпывается своей грамматикой. Предположим, что у нас есть строка "main() { f = 199; }", скомпилируется она или нет зависит от того, объявлена ли переменная "n". В обожаемом быдлокодерами пых-пыхе, видимо именно по этой причине появилось ключевое слово "global", но задачу оно не только не решает, но и приводит к весьма неочевидным ошибкам. Так что следующий шаг в иерархии, тип один, контекстно-зависимые. В большинстве языков, "контекст" спрятан в таблице символов и намертво прибит гвоздями, не в виде формального описания, а набором правил "вы должны объявить переменную прежде чем её использовать". А про тип ноль мы говорить пока не будем, потому что там возможно всё.
Берроуз как-то сказал, что язык - это вирус из глубокого космоса (чтобы заражать людей и подчинять их инопланетной воле), и мне эта идея прямо-таки запала в душу, раз язык - это вирус, то и правильный вирус - это язык. Бензинчику в огонь подлил Ричард Гебриел, который как-то заметил ("Worse is better"), что язык Си и Юникс, распространяются словно вирус они просты и эволюционируют со временем. Прекрасный пример для подражания. Как именно происходит эволюция компьютерных программ, наглядно показал Кен Томпсон со своим "самовоспроизводящимся багом" и примером бутстрепинга компилятора, который буквально по шагам "обучается" новым конструкциям. Нигде в коде компилятора не прописано соответствие между строкой "\n" и кодом "10" - знание передаётся по наследству.
Я как-то с одним знакомым обсуждал все эти темы, и он с огоньком принялся за написание метаморфного компилятора, в том что компилятор должен быть написан на том языке, который он транслирует я его убедить не смог. Бедняга дошел до того, что написал вполне работающую вещицу написанную целиком и полностью на ассемблере. "Real coderz use asm", LOL. Что случилось потом? Потом ему нужно было переписать компилятор на новом языке, чтобы он мог компилировать сам себя, и вот тут-то он и сломался. Чтобы упростить задачу лучше взять уже существующий язык и дополнить его недостающими фичами. Yonkie как-то переписал кодогенератор TCC, но кодогенератор по-пржнему живёт на уровне инструкций и блоков, тоже самое можно сделать и проще. Всё тот же вариант, что у Mental Driller и Zombie, peep-hole obfuscation.
Переходим на уровень выше, тип два, контекстно-свободные грамматики описывают большую часть формальных языков, таких как Си или Лисп. Предыдущая задача в этом классе языков решается элементарно: expr :- ( expr ) | ..., и такая грамматика распознаёт правильно вложенные скобки в арифметических выражениях. И это та вершина, до которой с трудом доползли вирусописатели. К примеру замену инструкции MOV a, b можно описать как mov a, b :- mov tmp, b; mov a, tmp | ... и получается та же самая матрешка как с HTML-тэгами и скобками в выражениях. Все остальные замены в метаморфных зверюшках описываются регулярками и интереса не представляют.
При этом даже формальный язык, типа Си, не исчерпывается своей грамматикой. Предположим, что у нас есть строка "main() { f = 199; }", скомпилируется она или нет зависит от того, объявлена ли переменная "n". В обожаемом быдлокодерами пых-пыхе, видимо именно по этой причине появилось ключевое слово "global", но задачу оно не только не решает, но и приводит к весьма неочевидным ошибкам. Так что следующий шаг в иерархии, тип один, контекстно-зависимые. В большинстве языков, "контекст" спрятан в таблице символов и намертво прибит гвоздями, не в виде формального описания, а набором правил "вы должны объявить переменную прежде чем её использовать". А про тип ноль мы говорить пока не будем, потому что там возможно всё.
Берроуз как-то сказал, что язык - это вирус из глубокого космоса (чтобы заражать людей и подчинять их инопланетной воле), и мне эта идея прямо-таки запала в душу, раз язык - это вирус, то и правильный вирус - это язык. Бензинчику в огонь подлил Ричард Гебриел, который как-то заметил ("Worse is better"), что язык Си и Юникс, распространяются словно вирус они просты и эволюционируют со временем. Прекрасный пример для подражания. Как именно происходит эволюция компьютерных программ, наглядно показал Кен Томпсон со своим "самовоспроизводящимся багом" и примером бутстрепинга компилятора, который буквально по шагам "обучается" новым конструкциям. Нигде в коде компилятора не прописано соответствие между строкой "\n" и кодом "10" - знание передаётся по наследству.
Я как-то с одним знакомым обсуждал все эти темы, и он с огоньком принялся за написание метаморфного компилятора, в том что компилятор должен быть написан на том языке, который он транслирует я его убедить не смог. Бедняга дошел до того, что написал вполне работающую вещицу написанную целиком и полностью на ассемблере. "Real coderz use asm", LOL. Что случилось потом? Потом ему нужно было переписать компилятор на новом языке, чтобы он мог компилировать сам себя, и вот тут-то он и сломался. Чтобы упростить задачу лучше взять уже существующий язык и дополнить его недостающими фичами. Yonkie как-то переписал кодогенератор TCC, но кодогенератор по-пржнему живёт на уровне инструкций и блоков, тоже самое можно сделать и проще. Всё тот же вариант, что у Mental Driller и Zombie, peep-hole obfuscation.
Наиболее разумным мне кажется другой вариант - пишем новый компилятор на хорошо знакомом языке, Си подходит как нельзя лучше из-за своей простоты. Для начала отрываем от него фазу лексического анализа. После парсинга у нас есть абстрактное синтаксическое дерево и таблица символов. Обычные компиляторы стараются оптимизировать дерево, а потом уже и промежуточное представление. И не существует "идеальной оптимизации". No free lunch. А вирусный компилятор может и оптимизировать код, и делать его менее оптимальным. Зеркальные правила для AST вида (* c (+ a b)) :- (+ (* c a) (*с b)) - дистрибутивный закон умножения в LISP-подобной записи, относятся к типу 0, в иерархии Хомского, и для распознавания языка понадобится машина Тьюринга, которая как мы помним, может и не остановится, а значит что детектирование такого вируса - алгоритмически неразрешимая задача.
Лисповая запись дерева выражений появилась тут не случайно, как гласит десятое правило программирования Гринспуна: Любая достаточно сложная программа на Си или Фортране содержит написанную по случаю, неспецифицированную, глючную и медленную реализацию половины языка Common Lisp. Всё потому что Лисп очень близок к лямбла-исчислению, а значит и к определению "алгоритма" как такового. Постепенно в вирусном языке можно отказаться не только от лексического, но и от синтаксического анализа. И даже от хранения синтаксического дерева в данных (его можно заменить на декомпиляцию, аннотированную типами в "сложных" местах). А поверх добавляются не просто правила для работы с деревом, а правила изменяющие правила. Мета-язык, язык следующего порядка. Где-то рядом маячит теорема о неполноте.
Turtles all the way up.
P.S. И чем вместо этого приходится заниматься? Я вот просто не понимаю, у меня в голове не помещается: мир необыкновенно сложен, познаваем, а следовательно и интересен, и пока космические корабли Маска бороздят просторы веннской оперы, какие-то прости господи, ушлепки, которые в слове "хуй" делают по три ошибки - строят народную, сука, республику. Про мусоров и лживых вороватых державников я просто молчу, иногда они хуже сепаров. Блядь. Да, приходи ж к нам, мать Эбола, кого хочешь выбирай!
Лисповая запись дерева выражений появилась тут не случайно, как гласит десятое правило программирования Гринспуна: Любая достаточно сложная программа на Си или Фортране содержит написанную по случаю, неспецифицированную, глючную и медленную реализацию половины языка Common Lisp. Всё потому что Лисп очень близок к лямбла-исчислению, а значит и к определению "алгоритма" как такового. Постепенно в вирусном языке можно отказаться не только от лексического, но и от синтаксического анализа. И даже от хранения синтаксического дерева в данных (его можно заменить на декомпиляцию, аннотированную типами в "сложных" местах). А поверх добавляются не просто правила для работы с деревом, а правила изменяющие правила. Мета-язык, язык следующего порядка. Где-то рядом маячит теорема о неполноте.
Turtles all the way up.
P.S. И чем вместо этого приходится заниматься? Я вот просто не понимаю, у меня в голове не помещается: мир необыкновенно сложен, познаваем, а следовательно и интересен, и пока космические корабли Маска бороздят просторы веннской оперы, какие-то прости господи, ушлепки, которые в слове "хуй" делают по три ошибки - строят народную, сука, республику. Про мусоров и лживых вороватых державников я просто молчу, иногда они хуже сепаров. Блядь. Да, приходи ж к нам, мать Эбола, кого хочешь выбирай!
В феврале 2016, RUH8 уже был, а UCA ещё нет, мне в личку на форуме VX Heaven написал пользователь с ником Авраам (даже, если бы имена не были бы выдуманными, они бы всё равно не имеют никакого значения) и настойчиво предложил встретиться лично, что довольно не типично для хакеров вобще и для американских хакеров в частности. Но чем-то он меня заинтриговал, хотя письма были настолько же расплывчаты, как и пакостная киевская погода.
Проходит месяц и "Авраам" пишет, что прилетает через пару дней, местный телефонный номер он каким-то образом приобрёл заблаговременно, видимо у них там на юге у наших мобильных операторов дела идут неплохо, и где-нибудь в Канзасе или Неваде украинскую симку можно купить на любой заправке.
Встречаемся на Майдане, накрапывает отвратительно мелкий холодный дождик. "Авраам", превратившийся в подтянутого, по-американски приветливого парня неопределенного возраста по имени Джек, заводит разговоры в лениво-доброжелательной манере о своих публикациях в 2600 (что-то типа российского "Хакера", только левее и лет на пятнадцать старше), на темы столь же туманные как и цель его визита. Легенда на отъебись просто.
Проехали остановочку до бара, где уже окопался Tim, гость вместо пива заказывает себе колу, ссылаясь на то, что он завязавший алкоголик и теперь - ни капли в рот, ни сантиметра в жопу. И, по-прежнему, ловко уворачивается от любых технических деталей - вроде бы и хакер, и системный администратор, и даже немного вирмейкер, но на самом деле он пролетел через полмира, чтобы показать кусочек некой "очень важной информации".
Достаёт ноутбук, и используя его в качестве планшетки для письма, начинает писать в блокноте обычной ручкой, что неким образом к нему попал массив данных одного из контракторов американского министерства обороны. Охуенно крупного. А уж секретная разработка-то, как цвет трусов Гувера, потому-то и приходится разговаривать путём переписки на бумаге. И непременно в Украине, самая что ни на есть подходящая страна.
Лежит инфа прямо вот в этом самом маке, зашифрованном в три слоя PGP, чтобы американская военщина до своих собственных wrongdoing (сложное слово, где-то между ошибкой и преступлением) никак не добралась. Такой себе "Сноуден"-разоблачитель. И что, и с Vice он уже договорился, но в начале - к нам, а то мало ли, вдруг журналисты в политике хуже разбираются чем безопасники? Но нас-то не информация интересует, а причины.
Мы ему буквально перекрестный допрос устроили, силясь понять его мотивацию. Зачем нам собственно вмешиваться не в свои дела и вштыривать одного из основных союзников Украины? И пытались показать, что в Украине левые заезды в стиле анонимус, не очень популярны, и что для такого есть Викиликс, Беллинги, а мы тут при чем? Одним словом, посидели, поговорили и посоветовали Джеку упаковать свой ноутбучек и прогуляться, посмотреть на обгоревшую российскую военную технику, для лучшего понимания момента.
Фейсбук, сука такая, потом подтянул профиль Джека в раздел "вы можете их знать". Такой же фейковый как и всё остальное. Или может настоящий, но не совсем. Бывает и так. Ясное ж дело, приезжаете на другой конец планеты, берёте симку страны третьего мира и сразу привязываете к ней свой основной аккаунт. Все так делают. У этой истории есть мораль, во-первых, АНБ занимается тем, что втыкается в розетку, а ЦРУ - тем что шевелится, во-вторых, культурнейшая нация - не чета нашим дуболомам, со спецназом и одной извилиной на весь департамент.
Проходит месяц и "Авраам" пишет, что прилетает через пару дней, местный телефонный номер он каким-то образом приобрёл заблаговременно, видимо у них там на юге у наших мобильных операторов дела идут неплохо, и где-нибудь в Канзасе или Неваде украинскую симку можно купить на любой заправке.
Встречаемся на Майдане, накрапывает отвратительно мелкий холодный дождик. "Авраам", превратившийся в подтянутого, по-американски приветливого парня неопределенного возраста по имени Джек, заводит разговоры в лениво-доброжелательной манере о своих публикациях в 2600 (что-то типа российского "Хакера", только левее и лет на пятнадцать старше), на темы столь же туманные как и цель его визита. Легенда на отъебись просто.
Проехали остановочку до бара, где уже окопался Tim, гость вместо пива заказывает себе колу, ссылаясь на то, что он завязавший алкоголик и теперь - ни капли в рот, ни сантиметра в жопу. И, по-прежнему, ловко уворачивается от любых технических деталей - вроде бы и хакер, и системный администратор, и даже немного вирмейкер, но на самом деле он пролетел через полмира, чтобы показать кусочек некой "очень важной информации".
Достаёт ноутбук, и используя его в качестве планшетки для письма, начинает писать в блокноте обычной ручкой, что неким образом к нему попал массив данных одного из контракторов американского министерства обороны. Охуенно крупного. А уж секретная разработка-то, как цвет трусов Гувера, потому-то и приходится разговаривать путём переписки на бумаге. И непременно в Украине, самая что ни на есть подходящая страна.
Лежит инфа прямо вот в этом самом маке, зашифрованном в три слоя PGP, чтобы американская военщина до своих собственных wrongdoing (сложное слово, где-то между ошибкой и преступлением) никак не добралась. Такой себе "Сноуден"-разоблачитель. И что, и с Vice он уже договорился, но в начале - к нам, а то мало ли, вдруг журналисты в политике хуже разбираются чем безопасники? Но нас-то не информация интересует, а причины.
Мы ему буквально перекрестный допрос устроили, силясь понять его мотивацию. Зачем нам собственно вмешиваться не в свои дела и вштыривать одного из основных союзников Украины? И пытались показать, что в Украине левые заезды в стиле анонимус, не очень популярны, и что для такого есть Викиликс, Беллинги, а мы тут при чем? Одним словом, посидели, поговорили и посоветовали Джеку упаковать свой ноутбучек и прогуляться, посмотреть на обгоревшую российскую военную технику, для лучшего понимания момента.
Фейсбук, сука такая, потом подтянул профиль Джека в раздел "вы можете их знать". Такой же фейковый как и всё остальное. Или может настоящий, но не совсем. Бывает и так. Ясное ж дело, приезжаете на другой конец планеты, берёте симку страны третьего мира и сразу привязываете к ней свой основной аккаунт. Все так делают. У этой истории есть мораль, во-первых, АНБ занимается тем, что втыкается в розетку, а ЦРУ - тем что шевелится, во-вторых, культурнейшая нация - не чета нашим дуболомам, со спецназом и одной извилиной на весь департамент.
Давайте разбираться, откуда берутся данные, как они утекают и что делать в этой связи, а то у меня личка уже просто раскалилась от сообщений. Докомпьютерные системы работали медленно, но со своеобразным изяществом, и были документ-ориентированными. У вас был документ (например паспорт), устанавливающий факты "вас зовут так-то и вы гражданин Украины". Копия информации хранилась в архиве, в паспортном столе. До неё не так-то легко было добраться.
"База" была децентрализованная и доступ к ней жестко контролировался. За подделку документов или внесение недостоверной информации карали не то, чтобы сильно жестоко, но что более важно - неотвратимо. Риск попасться для чиновника был велик. И даже полицейские вынуждены были рассылать запросы, чтобы получить нужную информацию. В запросе указывалась причина и он оставлял за собой бумажный след. Что позволяло быстрее находить виновных, а значит снижало риск злоупотреблений и утечек.
Затем различные министерства и ведомства ударились в реестроманию и начали собирать данные централизовано. Ревностно охраняя монопольный доступ к "своим данным" от конкурентов. Что повышало стоимость данных и незаменимость чиновника для "порешать". Где-то контроль за тем кто и зачем обращается есть, а где-то нету. И нечистые на руку чиновники тут же принялись базы выносить и продавать на Петровке. Иногда их конечно на этом ловят, но редко.
А минцифра решила сделать следующий шаг, но почему-то не в ту сторону. Они стремятся объединить все дырявые реестры в одну гигантскую мега-базу. И если уж она потечёт (а от чего бы ей спрашивается не течь?), то ущерб будет колоссальный. И пытаются наладить автоматический документооборот, таким интересным способом, что крайних потом будет просто не найти. Потому их затеи порочны, не смотря на наличие или отсутствие в Дие дыр. Тут организационная дыра, а не техническая.
Потекло ли в этот раз именно из "Дии"? А черт его знает. Может быть потекло из самих реестров, путём старого доброго подкупа. А может и из "Дии", чтобы не говорила минцифра, у серверной части Дии есть прямой доступ к реестрам, и уже не важно хранится ли что-то на серверах или нет. Наличие или отсутствие у Дии базы ничего принципиально не меняет.
И небольшое дополнение про документы и реестры. У некоторых из вас есть ID-карта, которая вполне защищенный документ (которому правда не хватает графы "кем выдан" и других важных особенностей PKI здорового человека). И тогда реестр просто не нужен. Первичные документы, на случай утери карточки, должны быть спрятаны за семью засовами от ментов же. А ментам достаточно проверить подлинность документа, а в базу заносить отметки, сопоставленные с номером.
Бывают реестры, по китайскому образцу - тогда вам не нужен документ и достаточно записать номер прав или паспорта на бумажке, сказать его полицейскому, и он подтянет все данные на планшет из центральной базы (и каждое обращение к ней, должно быть подписано личной подписью мента, не считая дополнительных мер безопасности, чтобы этого мента потом расстреляли на стадионе за "я только посмотреть").
"Дия" - это и не документ и не реестр, а противоестественный гибрид ужа с ежом, данные сваленные в кучу посреди дороги.
Бороться с утечками можно и нужно очень простым способом - персональной ответственностью чиновника за те данные, которые ему доверили. "Если что-то вытечет, то ты сядешь". Только таким способом можно навести порядок. Их туда специально наняли, чтобы они данные охраняли, а не носили продавать. Как-то так.
"База" была децентрализованная и доступ к ней жестко контролировался. За подделку документов или внесение недостоверной информации карали не то, чтобы сильно жестоко, но что более важно - неотвратимо. Риск попасться для чиновника был велик. И даже полицейские вынуждены были рассылать запросы, чтобы получить нужную информацию. В запросе указывалась причина и он оставлял за собой бумажный след. Что позволяло быстрее находить виновных, а значит снижало риск злоупотреблений и утечек.
Затем различные министерства и ведомства ударились в реестроманию и начали собирать данные централизовано. Ревностно охраняя монопольный доступ к "своим данным" от конкурентов. Что повышало стоимость данных и незаменимость чиновника для "порешать". Где-то контроль за тем кто и зачем обращается есть, а где-то нету. И нечистые на руку чиновники тут же принялись базы выносить и продавать на Петровке. Иногда их конечно на этом ловят, но редко.
А минцифра решила сделать следующий шаг, но почему-то не в ту сторону. Они стремятся объединить все дырявые реестры в одну гигантскую мега-базу. И если уж она потечёт (а от чего бы ей спрашивается не течь?), то ущерб будет колоссальный. И пытаются наладить автоматический документооборот, таким интересным способом, что крайних потом будет просто не найти. Потому их затеи порочны, не смотря на наличие или отсутствие в Дие дыр. Тут организационная дыра, а не техническая.
Потекло ли в этот раз именно из "Дии"? А черт его знает. Может быть потекло из самих реестров, путём старого доброго подкупа. А может и из "Дии", чтобы не говорила минцифра, у серверной части Дии есть прямой доступ к реестрам, и уже не важно хранится ли что-то на серверах или нет. Наличие или отсутствие у Дии базы ничего принципиально не меняет.
И небольшое дополнение про документы и реестры. У некоторых из вас есть ID-карта, которая вполне защищенный документ (которому правда не хватает графы "кем выдан" и других важных особенностей PKI здорового человека). И тогда реестр просто не нужен. Первичные документы, на случай утери карточки, должны быть спрятаны за семью засовами от ментов же. А ментам достаточно проверить подлинность документа, а в базу заносить отметки, сопоставленные с номером.
Бывают реестры, по китайскому образцу - тогда вам не нужен документ и достаточно записать номер прав или паспорта на бумажке, сказать его полицейскому, и он подтянет все данные на планшет из центральной базы (и каждое обращение к ней, должно быть подписано личной подписью мента, не считая дополнительных мер безопасности, чтобы этого мента потом расстреляли на стадионе за "я только посмотреть").
"Дия" - это и не документ и не реестр, а противоестественный гибрид ужа с ежом, данные сваленные в кучу посреди дороги.
Бороться с утечками можно и нужно очень простым способом - персональной ответственностью чиновника за те данные, которые ему доверили. "Если что-то вытечет, то ты сядешь". Только таким способом можно навести порядок. Их туда специально наняли, чтобы они данные охраняли, а не носили продавать. Как-то так.