Apache: перевірити ланцюжок довіри SSL для запобігання MITM-атак?


11

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

Мені здається, що роботодавець використовує свою вищу позицію, щоб шпигувати за SSL-трафіком працівника. Для мене це робить всю концепцію SSL недостовірною. Я успішно протестував подібні налаштування самостійно за допомогою mitmproxy і зміг прочитати зв'язок між клієнтом та моїм сервером електронного банкінгу. Це інформація, яку не слід розкривати нікому.

Таким чином, моє запитання досить просте: як я можу перевірити ланцюжок довіри на стороні сервера? Я хочу переконатися, що клієнт використовує сертифікат мого сервера та лише одну ланцюжок довіри. Цікаво, чи можна цього досягти за допомогою конфігурації SSL Apache? Це було б зручно, оскільки його можна було легко застосувати до багатьох додатків. Якщо це неможливо, хтось знає про спосіб зробити це в PHP? Або у вас є якісь інші пропозиції?


1
Це нормально, якщо роботодавець бачить трафік працівників. Ви використовуєте ресурси роботодавця (ПК, підключення до мережі тощо), це не ваше. І якщо ви переживаєте, що працівник міг бачити дані, які ви передаєте на свій банківський рахунок - робіть це вдома, а не на роботі. І спроби порушити політику корпоративної безпеки можуть бути предметом для суду проти вас.
Crypt32

2
У багатьох європейських компаніях приватне використання оргтехніки регулюється договором найму. У компанії, де я працюю, я можу займатися приватним серфінгом, це не проблема. Є винятки, такі як порно, обмін файлами тощо. При цьому існують закони, які забороняють компаніям шпигувати за своїми працівниками. Таким чином, для мене - та багатьох інших - НЕ нормально, коли роботодавці перехоплюють трафік працівників, оскільки це явно заборонено, тоді як приватне серфінгу допускається у багатьох компаніях.
Aileron79

2
Більшість (на мій досвід) робочих станцій, що належать уряду США, включають ці два повідомлення при кожному вході в систему: "Комунікації, що використовують, або дані, що зберігаються на цьому IS, не є приватними, підлягають звичайному моніторингу, перехопленню та пошуку, і можуть бути розкриті або використані для будь-яких дозволених цілей USG. Цей ІС включає заходи безпеки (наприклад, аутентифікацію та контроль доступу) для захисту інтересів USG - не для вашої особистої вигоди чи конфіденційності ". Використання цих систем часто охоплюється підписаним договором, який передбачає те саме. Ключова деталь - власник системи захищає себе від вас.
Рандалл

Це одна з багатьох відмінностей між США та Європою. Указані вище умови @Randall є незаконними у більшості європейських країн.
Aileron79

Я цитував терміни неповні, інші терміни перераховують діяльність, яку явно не слід контролювати. Я не можу знайти жодної посилання, яка заявляє, що європейські роботодавці не можуть ставити такі передумови умовою використання своїх комп’ютерів (я працюю в компанії, яка працює в Європі, встановлюючи такі процеси моніторингу, хоча я працюю в підрозділі, який не веде бізнесу в Європа), але можна знайти посилання, які дозволяють припустити, що такі умови не є незаконними, якщо вони явні та прозорі.
Рандалл

Відповіді:


9

Я думаю, що це питання буде більш підходящим для security.stackexchange.com, де тема MITM обговорюється в багатьох питаннях. Але все ж таки:

Перевірка серверного сертифіката проводиться тільки у клієнта і не може бути якось переміщена на сервер, оскільки точка перевірки сертифіката у клієнта полягає в тому, що клієнтам потрібно переконатися, що він розмовляє з правильним сервером і не може довіряти (ненадійний) сервер для прийняття цього рішення для клієнта.

У разі перехоплення SSL клієнтом TLS з точки зору сервера є SSL-перехоплюючий брандмауер / AV. Таким чином, проблема на стороні сервера полягає в тому, щоб виявити, розмовляє він із очікуваним клієнтом (браузером) чи ні (брандмауер / AV). Найбезпечніший спосіб зробити це - використовувати сертифікати клієнта для автентифікації клієнта - і насправді перехоплення SSL не буде працювати, якщо використовується автентифікація клієнта, тобто рукостискання TLS не вдасться, оскільки MITM не в змозі надати очікуваний клієнтський сертифікат.

Лише клієнтські сертифікати використовуються рідко. Крім того, невдале рукостискання TLS не означає, що клієнт може спілкуватися з сервером без перехоплення SSL, але клієнт взагалі не може спілкуватися з сервером. Альтернативним способом було б використання певної евристики для виявлення типу клієнта TLS на основі відбитків пальця рукостискання TLS, тобто виду та порядку шифрів, використання конкретних розширень ... Хоча SSL-перехоплюючий проксі теоретично міг наслідувати оригінал ClientHello прекрасно більшість не знає. Див. Також Виявлення "людина-посередині" на стороні сервера для HTTPS або розділ III Евристика впровадження TLS в "Вплив безпеки перехоплення HTTPS" .


14

Мені здається, що роботодавець використовує свою вищу позицію, щоб шпигувати за SSL-трафіком працівника. Для мене це робить всю концепцію SSL недостовірною

Проблема полягає не в концепції SSL або в технічній реалізації, а в тому, що хтось інший має повний контроль над однією кінцевою точкою з'єднання, тобто вашою робочою станцією.
Це корінь фактичного ризику для безпеки ...

З точки зору безпеки, ваша робоча станція скомпрометована, що розриває ланцюг довіри, що за звичайних обставин заважає MITM досягти успіху.

Як я можу перевірити ланцюжок довіри на стороні сервера?

Ви не можете. Це робиться на стороні клієнта.

Залежно від випадку використання, ви можете зробити RFC 7469 HTTP- відкриття відкритого ключа, в якому ви надіслали клієнту додатковий заголовок із переліком (хешами) ваших фактичних SSL-сертифікатів або сертифікатів ЦС, які ви використовуєте.


4
HPKP не допоможе, оскільки браузери будуть ігноруватися, якщо сертифікат буде підписаний явно доданим CA. Це спеціально робиться для того, щоб дозволити перехоплення SSL довіреною стороною, тобто корпоративним брандмауером або локальним AV-робочим столом (багато хто робить перехоплення SSL).
Steffen Ullrich

2
Ви абсолютно правильні: §2.6 від RFC: "
HBruijn

3

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


Ну так, я знаю, що цього, мабуть, не можна запобігти лише на стороні сервера. Однак деякі JS на стороні клієнта також можуть бути хитрішими. До речі, шпигунство над працівниками є незаконним у більшості європейських країн. Як оператор веб-сайту, я хочу запобігти тому, щоб моїх клієнтів було обдурене, тому мені цікаво, чи є якийсь спосіб я перевірити ланцюжок довіри безпечним чином.
Aileron79

Можливо, це не дозволено. Але більшість компаній не шпигують за своїми працівниками, які хочуть лише забезпечити там мережу компанії, і більшість веб-фільтрів чи сканерів повинні розірвати з’єднання SSL, щоб перевірити це. Отже, це легальний чоловік у посередницькій атаці
beli3ver

Я розумію вашу думку. Однак це питання стосується того, як я можу забезпечити, щоб з'єднання HTTPS було зашифровано в кінці. Описаний нами спосіб дуже часто зустрічається в корпоративних умовах, але такий же напад може використовуватися ревнивими хлопцями, щоб шпигувати за своїми подругами або господинями, що перехоплюють трафік своїх орендарів. Цих людей все-таки потрібно ввести в установку сертифіката, але це легка частина. Однак це незаконно - і я все ще цікавлюсь, чи є якийсь спосіб переконатися, що з'єднання HTTPS справді зашифровано e2e.
Aileron79

3
Це неможливо. Коли кореневий сертифікат змінено на клієнті, у вас немає можливості перевірити його. Сервер не робить чек, клієнт робить чек.
beli3ver

3

Ви МОЖЕТЕ (вид), але справжнє питання полягає в тому, чи ПОТРІБНИТИ Ви .

Але будьте обережні, це ніде не так просто, як зміна прапора в apache.conf.

Крім того, оскільки "зловмисник" (наприклад, роботодавець) контролює клієнтський комп'ютер, він завжди може зірвати ваші спроби, якщо вони схильні вкласти достатньо зусиль (з іншого боку, якщо ви не дуже велика риба, вони, швидше за все, не є схильний, тому ви досягнете своєї мети, що ваші користувачі не зможуть підключитися до вас, якщо це не захищено))

  • ви можете повторно застосувати TLS у JavaScript , і зробіть там свою перевірку, якщо сертифікат підключений клієнт - це сертифікат вашого веб-сайту.

  • якщо вам пощастило , користувач може використовувати браузер, де Javascript на стороні клієнта може отримати інформацію про віддалений сертифікат, що використовується (і, таким чином, легко перевірити його за твердим кодом значення сертифіката вашого сервера).

  • ви можете використовувати JavaScript для запуску власного шифрування . Тож навіть коли злий TLS MiTM компанії досяг успіху, він все одно не дасть йому доступу до ваших даних. Звичайно, якщо є достатньо зацікавлених (і оскільки вони керують клієнтом), вони зможуть просто замінити ваш захищений JavaScript на свій власний, який також записує (або змінює) всю інформацію, яка перебуває в дорозі.

Крім того, оскільки компанії, які використовують проксі-сервери TLS MiTM, також зазвичай повністю керують клієнтським комп'ютером, вони можуть так само легко встановити екран і кейлоггер, щоб просто записати відео про все, що бачить користувач, і записати всі натискання клавіш (та рухи миші), які користувач вводить. Як бачите, коли зловмисник є клієнтом, не існує абсолютно безпечного способу його обдурити. Це справді лише питання, скільки вони будуть турбувати ... І деякі рішення вище, можливо, будуть досить хорошими для вас.


" Ви могли повторно впровадити TLS у javascript " Як? Де?
curiousguy

@curiousguy, що написаний текст є посиланням - натисніть на нього, і це призведе до іншого питання та відповіді, і нарешті до проекту digitalbazaar / Forge
Matija Nalis

Отже, коли це корисно? З якою метою?
curiousguy

@curiousguy серед іншого, особливо для цілей, заданих у цьому серверному питанні за замовчуванням. Коли у вас є власний JS TLS, що працює на клієнті, той клієнт JS точно знатиме, до якого сервера TLS клієнт підключений (і це відкритий ключ). Тоді ви можете порівняти цей відкритий ключ із відкритим ключем авторизованого сервера (також жорстко закодованим у вашому JS), і якщо ви дізнаєтесь, чи вони однакові. Якщо вони не однакові, ваше з'єднання було викрадено MiTM.
Matija Nalis
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.