Как ФБР ловило твиттер-хакеров

Если интересно читать про кибер-безопасность, рекомендую к прочтению (англ):

https://www.zdnet.com/article/how-the-fbi-tracked-down-the-twitter-hackers/

В статье хорошо показывается то, что ловли кибер-жулья используется сумма улик, а не какая-то одна. Как нас учили в университете, нужно “созвездие улик”, чтобы из всего этого можно было выстроить одну непротиворечивую картинку. А вот деанон жулью устроили очень просто, прямо как-то даже немного обидно за жульё — нельзя же быть настолько тупыми, блин.

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

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

Но быстро сработали, молодцы.

Замена экрана на планшете

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

Купил экран на замену, покурил ютуб. Оказалось совсем несложно. Аккуратно прогреваем паяльным феном (я настроил его на минимальную температуру в 100 градусов Цельсия) по периметру, это размягчает двухсторонний скотч, на который экран и приклеен. Аккуратно подцепляем, желательно неметаллическим инструментом, и снимаем экран.

Основное пространство внутри планшета заполнено, вполне ожидаемо, батарейкой (большая чёрная плоская штука справа). Заодно можно было, конечно, проапгрейдить диск (слева вверху, mSATA карточка), но там какой-то хитрый загрузчик, надо копировать, а у меня нет адаптера на mSATA. Да и места достаточно, это же не файл-сервер.

Затем убираем весь старый скотч, наклеиваем новый, прицепляем новый экран кабелями и вперёд — всё работает.

Фигня этот ваш АМД

Делал копию блюреевского диска, чтобы можно было на телевизоре фильмы смотреть. Я не могу сказать, что у меня очень старый компьютер, всё же i7 четвёртого поколения, 4.2ГГц, четыре ядра, но фильм он перекодирует в x264 со скоростью в среднем около 8 кадров в секунду. Смотрю, оказывается в моём любимом кодере “Хендбрейк” уже давно есть поддержка GPU (у меня тоже не шибко роскошная видеокарта NVidia GTX 1070). Обновил Хендрбейк, врубил — мать честная, двести кадров в секунду. При этом видеокарта нагружается всего на 23%, затык не в ней, а в том, что видеокарта используется только для кодирования видео. Для всех остальных задач, типа декодирования исходного материала, перекодирования звука, его микширования, и т.д. — используется по-прежнему центральный процессор, и он просто не успевает подтаскивать данные.

Стоит ли говорить, что после таких опытов я стал с ещё большим недоумением смотреть на все эти мега-мульти-ядерные десктопные процессоры от АМД? Ну на кой хер они? Ну вот был бы у меня АМД с 32 ядрами. Ну, кодировал бы он в 8 раз быстрее. И чего? Это 64 кадра в секунду. А тут двести! На видеокартах можно построить ЗНАЧИТЕЛЬНО более мощную числодробилку, чем на этом недоразумении. Причём видеокарт можно взять не одну. И получится это существенно дешевле. Фигня этот ваш АМД. То ли дело НВидия.

Искуственный интеллект

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

Но для того, чтобы научить нейросеть чему угодно, для начала надо сделать набор данных для обучения. В случае с играми, соответственно, это будут партии различных игр. Для начала я выбрал что-нибудь попроще: крестики-нолики. Благо ПОЛНОЕ дерево решений для этой игры очень небольшое. Чисто теоретически там 9! игр (около 360 000), в реальности намного меньше: не все игры идут 9 шагов, многие являются отражениями других игр, развёрнутых на 90, 180, и 270 градусов. И так далее.

Написал программу на Питоне, которая генерирует все возможные игры, играет в них, и записывает результаты. Таким образом, у меня получилась программа, которая играет в игры традиционным способом — через построение игрового дерева.

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

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

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

Вообще, если есть возможность строить игровое дерево — лучше строить игровое дерево. Такие программы будут играть в игру лучше, чем нейросети (которые по сути только распознают паттерны и реагируют на них). Но игровое дерево строить возможно далеко не всегда. Скажем, Го не поддавалось, поэтому нормально играть компьютер в Го наконец-то научились именно, что через нейросети. Потому что игровое дерево для шахмат — 10E120 (число Шеннона), а игровое дерево для Го — 1.74E172! Но даже Го меркнет перед огроменным деревом крайне (на первый взгляд) простой игры Стратего, чей размер составляет 10E535!!! Неудивительно, что компьютер играет в Стратего крайне слабо. Может быть, именно что нейросети научатся. В лоб, через построение дерева — путь тупиковый.

Нейронные сети

Ух, как продвинулся прогресс! Раньше создание своих нейронных сетей было занятием дико сложным, требующим понимания математики и нехилого программирования. Я даже нарисовал свою, на Сишарпе. Она, конечно, была простенькая, но я очень много понял (особенно хорошо я понял, почему ничего, кроме свёрточных сетей, для классификации изображений использовать невозможно — тупо памяти не хватит).

А теперь движок нейронных сетей не надо писать самому. Сначала появилась Caffe (я использовал её для одного из проектов в университете по поиску изображений), а потом Гугл открыл свой TensorFlow для всех. Но даже TensorFlow был ОЧЕНЬ непрост в использовании. А теперь выяснилось, что для TensorFlow написали кучу вменяемых библиотек, и создание нейронных сетей стало очень несложным занятием.

Их несколько, но больше всего мне понравилась библиотека keras. И дело не сколько в том, какая она хорошая, а в том, что для неё больше всего документации 🙂 В прошлый раз, когда я щупал нейронные сети, я использовал библиотеку TF-Slim. Документации для неё, можно сказать, не было. Пришлось хакать исходники примеров, чтобы получить что-то своё.

Но оцените, как это теперь просто!

Вот, например, Питонный код для создания простой нейронной сети из двух входных нейронов, 16 скрытых, и 3 выходных. На входе единички и нолики, представляющие собой True и False, и три выходных нейрона, один выдаёт результат логической операции XOR, второй AND, третий OR. Тренируется сеть меньше, чем за 1000 эпох (если увеличить количество нейронов в скрытом слое, то ещё быстрее).

import numpy as np
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers

model = tf.keras.Sequential()
model.add(layers.Dense(16, activation=’relu’))
model.add(layers.Dense(3))
model.compile(optimizer=’adam’, loss=’mean_squared_error’, metrics=[‘binary_accuracy’])

data = np.array([[0,0],[0,1],[1,0],[1,1]], “float32”)
labels = np.array([[0,0,0],[1,0,1],[1,0,1],[0,1,1]], “float32”)

model.fit(data, labels, epochs=1000)

print(model.predict(data).round())

Элементарщина же!

Осталось понять, чего прикольного теперь можно с этим сделать 🙂 Наверное, ничего — чтобы сделать что-то прикольное, надо поставить задачу и дать вводные 🙂 Разве что сделать нейронную сеть и запустить её наоборот, в генеративном режиме, предварительно скормив ей, например, музыку Моцарта в формате MIDI 🙂 Кстати, вполне реальная вещь, вот чувак кормил сеть Бахом: https://www.youtube.com/watch?v=SacogDL_4JU

Блютусное

Хозяйке на заметку. Если ваш лаптоп с десятой вендой вроде бы подключается к блютусным колонкам, но в панели управлением звуком эти колонки показываются как “disconnected” потому что индусские долбопрограммеры в очередной раз что-то сломали в ОС, попробуйте вынести колонки из системы КЕМ, и добавить следующий ключик в реестр из командной строки:

reg add HKLM\SYSTEM\ControlSet001\Control\Bluetooth\Audio\AVRCP\CT /v DisableAbsoluteVolume /t REG_DWORD /d 1 /f

Видимо, по умолчанию венда чего-то там пытается сделать с колонками, но натыкается на непонимание, и маркирует колонки как “отключенные”. А этот ключик, насколько понял, отключает эту функциональность.

Чего-то мне в последнее время всё больше и больше хочется на Мак. Игр вот под ним только мало, а для работы всё, что надо, есть. Мелкомягкие даже RDP клиент с поддержкой смарт-карт (это к вопросу, почему я категорически не могу работать под ентим вашим недоразумением под именем “Линупс”, помимо многих прочих причин) сварганили для Маков.

Пропал Калабуховский дом

Кабздец моему антивирусу. Симантек был куплен Бродкомом и разделён на две части, а существующих пользователей — без трусов на мороз.

Придётся что-то другое покупать. Вот сижу думаю, чего. Касперский, разумеется, отпадает сразу — спасибо, нажрался уже, мне ЭТО завешивало машину раз в два-три дня самым аккуратным образом.

Битдефендер какой-нибудь, что ли. Все остальное как-то дороговато, и отзывы не очень лестные.

Мкрсфт упрлся

В новом терминале для Винды есть эффект эмуляции ЭЛТ монитора:

Это ж как надо накуриться, чтобы такое понравилось по доброй воле… Ещё несведение лучей в углах добавить, для полной, блин, аутентичности. Вот кому это надо — добровольно жрать уже мёртвое говно? Аудиокассетофильство из той же серии. Интересно, кстати, что на видеокассеты никто нынче не дрочит. Видимо, потому, что говённость качества более очевидна.

Но новый микрософтовский терминал штука неплохая, наконец-то в нём можно будет сделать несколько закладок, даже с разными интерпретаторами. К слову, этой фиче уже сто лет в обед на никсах. Осталось доделать закладки в файловом менеджере, наконец-то получится на уровне Убунту %)

Прикольный баг

Забавный баг обнаружили в прошивках некоторых моделей хепешных твёрдотельников. После того, как диск отработает свыше 32768 часов, он навечно отключается, теряя все данные. Насколько понимаю, связано это с неверной интерпретацией 16-битного числа, представлющего собой атрибут S.M.A.R.T. Power-on Hours. Оно должно было интерпретироваться как беззнаковое, а интерпретируется как знаковое. Так что когда старший бит из нуля станет единичкой — прошивка будет считать, что диск был включён ОТРИЦАТЕЛЬНОЕ количество часов и от таких новостей выпадет в осадок.

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