Forwarded from [ Cyber.Anarchy.Squad ]
Агробізнес під санкціями C.A.S
Нещодавно ми нанесли візит в компанію INFOBIS - розробника платформи "Агросигнал" (учасник проекту "Сколково")
Було ексфільтровано близько 3ТБ інформації, частина з якої (злито +-700гб, під аналіз аудиторії) - стала надбанням нашого суспільства.
А саме:
- Бази даних агросигналу.
- Сурс код проектів.
- Бухгалтерія.
- Особисті дані співробітників (документи, та фото інтимного характеру).
- Інформація про внутрішню інфраструктуру IT компанії "Инфобис".
Сама інфраструктура була частково знищена (виникли невеликі форс-мажорні обставини).
Мова про:
- Робочі станції під управлінням windows.
- Робочі станції під управлінням linux mint.
- Сервери баз данних
- Дев станції для розробки та тесту ПО
- Бекап сервери
Вже близько тижня інфраструктура компанії відключена від інтернету, а девопси бояться вмикати сервери, знаючи що ми до них провернемось (а ми повернемось, повірте).
Дані запаковано в архів з паролем, та розбито на частини по 3гб+.
Пароль на всі архіви: 3.1.19
Посилання на канал з витоком, буде в коментарях до цього посту.
Нещодавно ми нанесли візит в компанію INFOBIS - розробника платформи "Агросигнал" (учасник проекту "Сколково")
Було ексфільтровано близько 3ТБ інформації, частина з якої (злито +-700гб, під аналіз аудиторії) - стала надбанням нашого суспільства.
А саме:
- Бази даних агросигналу.
- Сурс код проектів.
- Бухгалтерія.
- Особисті дані співробітників (документи, та фото інтимного характеру).
- Інформація про внутрішню інфраструктуру IT компанії "Инфобис".
Сама інфраструктура була частково знищена (виникли невеликі форс-мажорні обставини).
Мова про:
- Робочі станції під управлінням windows.
- Робочі станції під управлінням linux mint.
- Сервери баз данних
- Дев станції для розробки та тесту ПО
- Бекап сервери
Вже близько тижня інфраструктура компанії відключена від інтернету, а девопси бояться вмикати сервери, знаючи що ми до них провернемось (а ми повернемось, повірте).
Дані запаковано в архів з паролем, та розбито на частини по 3гб+.
Пароль на всі архіви: 3.1.19
Посилання на канал з витоком, буде в коментарях до цього посту.
👍231🔥147🥱7🤮5👎2
Пиздлявенький мусорячий подебалайчик и киберсквотинг
(трагикомедия в одном бездействии и двух скриншотах)
Я вынужден признать, что с российскими безопасниками нам очень повезло
(трагикомедия в одном бездействии и двух скриншотах)
Я вынужден признать, что с российскими безопасниками нам очень повезло
🔥211👍44🤔3
Разговорился как-то с modexp про API hashing. Это очень старая техника, самое раннее упоминание, которое нашлось - статья LethalMind в 29A#4 за 1999 год. Суть проста, для того чтобы вирус мог что-то сделать ему нужны системные функции, мы их можем просто перечислить по именам: ws2_32.dll - bind, wininet.dll - InternetOpenA, за что тут же зацепятся антивирусы, потому вместо имен можно сохранять контрольные суммы, тоже достаточно уникальные, потому биконы Metasploit и Cobalt палятся со страшной силой. И уже в 2000 году Z0mbie предложил использовать случайные хеш-функции, и сразу проверять их на коллизии.
Даже сейчас, спустя двадцать пять лет эта нехитрая мысль сбивает большую часть детектов. С другой стороны, если бы я был авером, то я бы обратил внимание на то, что так как значение хорошей хеш-функции не отличимо от случайного, то в 99% 32-битных хешей будет от 10 до 22 единичных битов, и дальше можно ловить конструкции ptr = func(c), ptr(...), где 10 <= popcnt(c) <= 22, или искать высокоэнтропийные блоки, если хеши сложены в массив.
Следующая идея, которая пришла в голову уже мне - не хранить хеши, а воспользоваться фильтром Блума, но с ним другая неприятность. Блуму нужно большое количество разных хеш-функций, что тоже палевно. И тут попалось описание хеш-таблицы, которую придумал Вик Высоцкий в начале 60-х: возмем хеш большей разрядности, чем размер таблицы, и после каждого значения сдвинем побитово по кругу. Размер массива и параметры фильтра можно менять в достаточно широких пределах, и массив будет разреженным. Никаких констант в коде, низкая энтропия, полиморфизм как побочный продукт
Даже сейчас, спустя двадцать пять лет эта нехитрая мысль сбивает большую часть детектов. С другой стороны, если бы я был авером, то я бы обратил внимание на то, что так как значение хорошей хеш-функции не отличимо от случайного, то в 99% 32-битных хешей будет от 10 до 22 единичных битов, и дальше можно ловить конструкции ptr = func(c), ptr(...), где 10 <= popcnt(c) <= 22, или искать высокоэнтропийные блоки, если хеши сложены в массив.
Следующая идея, которая пришла в голову уже мне - не хранить хеши, а воспользоваться фильтром Блума, но с ним другая неприятность. Блуму нужно большое количество разных хеш-функций, что тоже палевно. И тут попалось описание хеш-таблицы, которую придумал Вик Высоцкий в начале 60-х: возмем хеш большей разрядности, чем размер таблицы, и после каждого значения сдвинем побитово по кругу. Размер массива и параметры фильтра можно менять в достаточно широких пределах, и массив будет разреженным. Никаких констант в коде, низкая энтропия, полиморфизм как побочный продукт
🔥138🤔78👍55🥱4
В XZ-бэкдоре, которым "Jia Tan" хотел захватить полинтернета, для поиска строк используется trie, и чтобы оно не занимало сильно много места, к каждой вершине привязан битовый массив с единичками для каждой ветки. Но самый простой способ сериализовать дерево - записать его скобочным выражением. А если ветки перед этим перемешать, то получаем полиморфизм в качестве побочного эффекта. Jia хотел скрытности и в файле и в памяти. Как это ни смешно, это ударило по скорости, из-за чего его и спалили. Если бы он вместо распознающего автомата использовал генерирующий, то может быть и не нашли бы. И код заметно проще
👍142🤔65🥱7
Продолжаю развлекаться с различными способами кодирования. Одна из распространенных антивирусных техник - анализ энтропии семпла, если она высокая, то это говорит о том, что контент сжат или зашифрован, после чего антивирус включает эмкляцию, и ждет пока вирус сам не покажет свое розовенькое беззащитное тельце. Тривиальный способ снизить энтропию - закодировать все в base-64, а алфавит перемешать, и она гарантированно снизится с 8 до 6 бит на символ. Скука.
Другая идея, которая давно уже бродила в злонамеренных вирмейкерских головах - сделать компрессию наоборот, разсжать, то что не сжималось. Если надрессировать модель на текст, то и результат будет похож на текст (в той степени как текст видит модель первого порядка). Никто так ничего и не сделал, наверное потому, что саму таблицу частот нужно где-то хранить, а если модель статична, то и результат будет одинаковым, а вирусы любят разнообразие. Значит нужно сгенерировать вектор с вероятностями, с заданной энтропией - \sum p_i * \log p_i
К счастью, в интернетах нашлись люди, которые заинтересовались бесноватой задачей и написали статью "Generating probabilities with a specified entropy", за что господам Свазеку и Вали большое спасибо. Они решают уравнение E = E + p * \log2 p + (1 - p) * (\log(1 - p))) / (1 - p) шаг за шагом, и полученные корни дают диапазон вероятностей. В конце полученные значения масштабируем, чтобы они суммировались в единицу. Используем получившийся симплекс, как таблицу частот для алгоритма Хаффмана, и готово. Чтобы декодировать, получившийся текст нужно сжать. Сама таблица частот (а ее еще можно перемешать) полностью случайна и никакой информации в себе не несет
Другая идея, которая давно уже бродила в злонамеренных вирмейкерских головах - сделать компрессию наоборот, разсжать, то что не сжималось. Если надрессировать модель на текст, то и результат будет похож на текст (в той степени как текст видит модель первого порядка). Никто так ничего и не сделал, наверное потому, что саму таблицу частот нужно где-то хранить, а если модель статична, то и результат будет одинаковым, а вирусы любят разнообразие. Значит нужно сгенерировать вектор с вероятностями, с заданной энтропией - \sum p_i * \log p_i
К счастью, в интернетах нашлись люди, которые заинтересовались бесноватой задачей и написали статью "Generating probabilities with a specified entropy", за что господам Свазеку и Вали большое спасибо. Они решают уравнение E = E + p * \log2 p + (1 - p) * (\log(1 - p))) / (1 - p) шаг за шагом, и полученные корни дают диапазон вероятностей. В конце полученные значения масштабируем, чтобы они суммировались в единицу. Используем получившийся симплекс, как таблицу частот для алгоритма Хаффмана, и готово. Чтобы декодировать, получившийся текст нужно сжать. Сама таблица частот (а ее еще можно перемешать) полностью случайна и никакой информации в себе не несет
🤔123👍57🔥28🥱3
По поводу предсказывающих моделей, недавно придумал смешную шутку. Jacky Qwerty как-то написал движок, который запоминает последние несколько символов, и пытается предсказать следующий, если угадывает, то пишет единичный бит, если промахивается, то ноль и восемь бит символа целиком. Написал он его на ассемблере, и никто кроме Z0mbie и Modexp и не думал туда заглядывать.
Зомби с идеей разобрался и написал серию движков все с моделями все более высокого порядка. Сперва последние байты, потом таблица вероятностей, диграммы, ну и естественно количество памяти растет куда быстрее чем степень сжатия. Результаты получились такие: текст длиной 2650 байт сжимается в 2271, 1738, 1530 и 1439 байт. Я на это дело посмотрел, и написал "плагин", который использует ноль байт памяти, и при этом сжимает тот же самый текст до 1869 байт.
Смешно же, ну? :-)
Зомби с идеей разобрался и написал серию движков все с моделями все более высокого порядка. Сперва последние байты, потом таблица вероятностей, диграммы, ну и естественно количество памяти растет куда быстрее чем степень сжатия. Результаты получились такие: текст длиной 2650 байт сжимается в 2271, 1738, 1530 и 1439 байт. Я на это дело посмотрел, и написал "плагин", который использует ноль байт памяти, и при этом сжимает тот же самый текст до 1869 байт.
Смешно же, ну? :-)
👍89🤔39🔥19
Пару не дель назад игрался с фильтрами Блума для поиска строк в заранее известном наборе. Для того чтобы уменьшить количество кода можно взять только одну хеш-функцию, и для того, чтобы получить i-ый хеш, просто сдвигать значение по кругу, эту хитрость придумал Выссоцкий из Bell Labs в конце 60-х. А что возьмем в качестве хеш-функции?
И тут и у аверов, и у вирмейкеров одинаково травматичный опыт. Во времена модемов первое что приходило в голову по поводу хешей CRC, циклическая контрольная сумма. Если ей пользоваться как хешом, то результат будет так себе, контрольные суммы нужны чтобы ловить пакеты ошибок (burst error), а для некриптографических хешей важно, чтобы значения распределялись равномерно.
Аверы получили пиздюлину по скорости, а вирмейкеры по детектам. Потому довольно быстро, ну лет за десять примерно, антивирусные движки стали считать ROL-XOR хеши, а вирмейкеры (снова привет Z0mbie) стали генерировать случайные ROL-ADD, ROL-SUB хеши, подбирая константы так, чтобы не напороться на коллизию. И CRC куда уж без него, и там очень смешное с выбором п̶о̶л̶и̶н̶о̶м̶а многочлена, я знаю вы любите это слово со школы.
В случае с фильтром, у нас есть набор строк, и все что нас интересует, чтобы у каждой строки был свой уникальный идентификатор. Потому генерировать хеш мы будем случайно, из одной или нескольких операций "подмешивающих" в хеш текущий символ, и битмиксера (используются в качестве финализаторов во взрослых хешах). В качестве "вращающегося" хеша, мы можем взять битмиксер же, не только ROL/ROR.
Остается проверить фильтр (не только хеш) на коллизии и готово. У нас есть случайная функция, массив со случайными значениями случайного размера, с которым что-то происходит в цикле случайное количество раз, а на выходе мы получаем машинку распознающую заранее заданные строки из известного набора строк.
(Если поиграться с параметрами, то можно даже получить компрессию, на картинке 15 строк длиной 91 байт из 36Кб списка прекрасно умещаются в фильтр длиной 32 байта)
А и все. Чего вы еще ждали в воскреченье утром? Пойду чистить и комментировать код, и зашлю его потом на VXUG
И тут и у аверов, и у вирмейкеров одинаково травматичный опыт. Во времена модемов первое что приходило в голову по поводу хешей CRC, циклическая контрольная сумма. Если ей пользоваться как хешом, то результат будет так себе, контрольные суммы нужны чтобы ловить пакеты ошибок (burst error), а для некриптографических хешей важно, чтобы значения распределялись равномерно.
Аверы получили пиздюлину по скорости, а вирмейкеры по детектам. Потому довольно быстро, ну лет за десять примерно, антивирусные движки стали считать ROL-XOR хеши, а вирмейкеры (снова привет Z0mbie) стали генерировать случайные ROL-ADD, ROL-SUB хеши, подбирая константы так, чтобы не напороться на коллизию. И CRC куда уж без него, и там очень смешное с выбором п̶о̶л̶и̶н̶о̶м̶а многочлена, я знаю вы любите это слово со школы.
В случае с фильтром, у нас есть набор строк, и все что нас интересует, чтобы у каждой строки был свой уникальный идентификатор. Потому генерировать хеш мы будем случайно, из одной или нескольких операций "подмешивающих" в хеш текущий символ, и битмиксера (используются в качестве финализаторов во взрослых хешах). В качестве "вращающегося" хеша, мы можем взять битмиксер же, не только ROL/ROR.
Остается проверить фильтр (не только хеш) на коллизии и готово. У нас есть случайная функция, массив со случайными значениями случайного размера, с которым что-то происходит в цикле случайное количество раз, а на выходе мы получаем машинку распознающую заранее заданные строки из известного набора строк.
(Если поиграться с параметрами, то можно даже получить компрессию, на картинке 15 строк длиной 91 байт из 36Кб списка прекрасно умещаются в фильтр длиной 32 байта)
А и все. Чего вы еще ждали в воскреченье утром? Пойду чистить и комментировать код, и зашлю его потом на VXUG
👍121🤔45🥱11🔥5
Мы всегда готовы помочь россиянам по неосторожности попавшим в долги к старухе-процентщице Путиной. Особенно офицерам ФСБ из 16-го центра. А может и помогли.
👍153🔥60🤔17🤮3