log4j ?

Dec. 24th, 2021 01:04 pm
malyj_gorgan: (Default)
[personal profile] malyj_gorgan
Слухайте, а хтось може в парі абзаців пояснити, що то таке сабж і з чим його їдят? Дідько з нею, з його vulterability'ею, я хочу зрозуміти, чим був такий хороший чи зручний чи потрібний сам log4j, що та вульнерабіліті виявилася такою проблємною? Тільки пояснити так, на хлопский розум, без відсилань в непотрібні абревіатури.
Дякую!

Date: 2021-12-26 01:02 am (UTC)
From: [personal profile] sassa_nf
Класно. Ну, власне, чи ELK, чи EFK, чи Splunk, ми прийшли до того, чому саме логи мають бути структуровані, і чому логерам може бути потрібно не просто в stdout викидати все, а може надсилати кудись ще (щоб не заводити ще й fluentd який небудь, хто б потім підгрібав все, що в stdout накидано).

Date: 2021-12-30 11:47 pm (UTC)
From: [personal profile] sassa_nf
Я щось не зрозумів. Все на купу - це про stdout/stderr чи про логери з різною конфігурацією для різного призначення? :)

Date: 2021-12-31 12:40 am (UTC)
From: [personal profile] mprotsenko
А працювати з функціональністю, де є ризик компроментації безпеки системи, повинні лише окремі відділи.

- Ви, мишки, перетвориться на їжачків. В їжачків колючки, їх ніхто не чипає!
- Класна ідея! стоп, а як нам це зробити?
- Так, це вже деталі, а я стратегією займаюся!

:))))


Якщо б так легко було б визначити - в якому коді є ризик компроментації, а в якому ні? Це ж зовсім не тривіальна задача.

Як приклад - хак айфонів від сумнозвісної NSO. Здавалося би - чого небезпечного є тому, що ти надсилаєш комусь анімовану гіфку, а Епл хоче, щоб вона програвалася по колу, а не як в оригінальному вигляді.

Для цього треба змінити прапорець в хедері - беремо стандартну бібліотеку, робимо копію, змінюємо прапорець - здавалося, що тут небезпечного?

Але хтось зробив помилку і замість "зробити копію" викликався метод "відрендерити та зробити копію". Окей, що тут страшного?

Та поки нічого, але цей метод вже не дивиться на розширення файлу, і йому під виглядом гіфки можна підсунути PDF. А всередині PDF - лежить JBIG2, древнючий формат кодування для факсів.

Ну, формат і формат, чого тут поганого? В принципі, нічого, але цей формат написан для факсів. І він має вбудовану систему візуальної корекції - щоб не переплутати "6" з "8". А для цього він вміє маніпулювати чорно-білими гліфами та робити з ними AND, OR, NOT, XOR.

Це вже цікаво - формально він тюрінг-повний.

І тут починається цікаве - використовуючи переповнення на цієї віртуальної тюрінг-машині технічно можна виконати код, якщо ти знаєш, де що в пам'яті лежить. Але ж в реальному телефоні фіг вгадаєш. І тоді хакери пишуть на цих вентилях програму на 70 тищ інструкцій, яка аналізує - що це за телефон і що на ньому виконується.

Упс.

А все що ти хотів - програвати анімовану гіфку по колу. І як заздалегідь дізнатися, що САМЕ ЦЯ операція несе за собою ризик компроментації системи?

Date: 2021-12-31 02:23 am (UTC)
From: [personal profile] mprotsenko
що кожен метод повинен мати лише той мінімум функцій/прав, який йому потрібен

І як нам визначити, який саме об'єм прав (а) має тий, чи інший метод, і (б) якій об'єм йому потрібен?

Якщо б це було тривіальною задачею в складних системах... Можна розібрати хоча б на прикладі вишепроцитованої вразливості в iMessage.


  [IMGIFUtils copyGifFromPath:toDestinationPath:error]



Що в цьому коді вказує на потенційну ескалацію функціональності?




Чи, наприклад, контекст та організований логінг - необхідні, так? Хтось може сказати - а давайте все ліпити (включно з повним контекстом) в stdout, а sidecar вже збере і розбереться, що треба залишити.

І іноді цій підхід може працювати. А іноді - створювати ще більші вразливості (хоча б тому, що повний контекст та inter-process communication це вже небезпечно, небезпечніше, ніж це робити всередині процесу).

І тому практики integration/deployment за межами critical safety infrastructure важливіші за ідеальний код (хоча б тому, що ідеальний код не можливий принципово, а значить, нам треба вчитись щось робити з неідеальним кодом).

Але, ці практики звучать просто - і навіть відчуваються просто коли вже втілені. А саме втілення дуже складне, бо воно не про 0 та 1, не про алгоритми, не про формальні методи, а про взаємодію людей.
Edited Date: 2021-12-31 02:28 am (UTC)

Date: 2021-12-31 05:22 pm (UTC)
From: [personal profile] mprotsenko
(Неодноразово досліджений) прикол як раз в тому, що класичні "обмежувальні" практики (те ж саме "жорстке розділення QA та developers", "жорстке розділення SRE та developers", "code freeze", "security through obscurity") як раз приводять до гірших результатів - від безпеки до бізнес-результатів.

(Це, звісно, в умовах "типового" software development задач - є купа edge cases де ці практики є корисними.)




Що до людей, які вміють, не хочуть чи не мають можливості - це дуже класне питання, яке починається з incentives. Якщо, наприклад, cost-saving менеджер каже "be your own QA" - то можна розробнику розраховувати на бонус за вдосконалення testing pipeline чи скорочення часу виконання тестів на годину? Відповідь на це питання проводить чітку межу між компаніями (чи командами в компанії).

Бо incentives define behavior - якщо за такі практики менеджмент підтримує працівників, то більшість людей активно починає вчитися, хотіти, та шукати можливість. Не все, але більшість.





А що до нестачі інструментального контролю - я погоджусь. Але не в сенсі "тримати та не пущати", а в сенсі саме instruments.

- Штурман, приборы!
- Триста!
- Что триста?
- А что приборы?


Менеджмент coding/integration/deployment practices як раз починається з вимірів того, що в тебе відбувається в цих місцях. А з цим, як правило, дуже сумно - хоча усі інструменти є на ринку, в Гугл найматися, щоб їх використовувати - вже не треба.

Date: 2021-12-31 07:51 pm (UTC)
From: [personal profile] mprotsenko
Exactly! Все правда, і те, що джерелом таких проблем найчастіше є менеджмент, і те, що інженери, в принципі, самі винні, що ведуться, можуть і не вестися.

А що вони можуть зробити, якщо менеджер вирішує звільняти SRE та QA - що є антіпатерном, навіть в компаніях, де девелопери самі займаються тестуванням?

Сказали своє фу менеджменту, менеджмент їх не послухав, що далі? Далі залишається єдина можливість - перейти через дорогу в компанію з більш адекватним менеджментом, що вони і роблять, ні?

А тут починаються сумні реалії життя: абстрактно все вимірювати і грамотно організовувати було би класно, але коли у тебе 2/3 команди пішло, нікого нормального найняти не виходить, менеджмент, який до цього докотився, уже помінявся... а ти сидиш в новорічний вечір перед проектом, який тріщить по швах і думаєш, що "блін, якби у них була хоч пара к'юеїв, вони би до цього не допустили"

Класична проблема:

- В тебе ж сокира тупа!
- Та нема коли точити, рубати треба!

Але ж проблема в тому, що якщо не почати щось робити - ані з retention, ані з hiring, ситуація краще не стане.

Бо навіщо йти працювати, там де бардак та проблеми, якщо можна піти туди, де нема бардаку та проблем?

Як кажуть: "You can change the organization or you can change the organization."




В мене є підозра, що саме це буде примушувати індустрію сепаруватися на окремі прошарки - в одному треш і угар, в іншому адекватні (хоча і неідеальні) практики, і перетинатися ці два світи не будуть.
Edited Date: 2021-12-31 08:12 pm (UTC)

Date: 2021-12-31 08:03 pm (UTC)
From: [personal profile] mprotsenko
Я в індустрію попав, коли замість засилля класичних практик почало ставатися засилля заборони класичних практик.

Якщо ми вже почали звертатися до медичних аналогій, то гірше за відсутність лікування може бути тільки невміле та часткове лікування: хоч software engineering взяти, хоч бактеріальну інфекцію.

Profile

malyj_gorgan: (Default)
malyj_gorgan

June 2025

S M T W T F S
12 345 67
89 1011 121314
15161718192021
22232425262728
2930     

Page Summary

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 18th, 2025 02:25 pm
Powered by Dreamwidth Studios