LIMB
Вход Регистрация

тема

MITM TLS в TOR (https на .onion - не анонимно и не безопасно для пользователя)

ec5745y · · 2 ответов · 882 просмотров

В этой статье я расскажу о проблемах, тотальной бесполезности и вреде TLS в сети TOR для .onion сервисов, также я приведу код, который доказывает это на примере с аутентификацией. 

Не удалось прогрузить медиа
​

Сперва я объясню бесполезность TLS в TOR.  
В каждом бразуере есть список авторитарный CA. Один из CA (провайдеров TLS) подписывает публичный ключ вебсайта. Таким образом, клиент может быть уверен в том, что публичный ключ который сообщил ему вебсайт - действителен.
Это не имеет никакого смысла в tor. Tor сервис также использует асимтричное шифрование - передаёт публичный ключ. Сам tor адрес же служит хешсуммой публичного ключа, подписывая его просто своим существованием :)

TLS мог бы понадобиться для шифрования, если бы не было верификации публичного ключа, поэтому условие противоречиво.
Вторая причина, для чего нужен TLS, однако не справляться с этим в Tor - авторизация. Она необходима для борьбы с фишингом, по идее, фишинговые сайты не должны получать подпись от CA. spoiler (Однако если ты её получил для своего сайта не легитимно, этого достаточно, чтобы понять, что это не работает).

Взаимодействие с TLS на стороне атакующего будет происходить так же, как если бы оно происходило между пользователем и конечным сервером.
Это означает, что вариант в котором TLS действительно мог бы быть необходим, подразумевает отсутствие оверлейного шфирования от адреса самого домена, что исключает его наличие. И если сам адрес не известен наверняка - его можно подменить.

Я считаю, что MITM в Tor возможен при подмене адреса самого сервиса, ведь Tor не имеет индексации, а значит, как и адрес, TLS может быть опущен или на фейковый .onion домен может быть подвязан TLS.


TL;DR
TLS не имеет смысла, с TLS .onion сервисы можно взламывать настолько же просто, как и без TLS, разницы никакой нет. Саму функцию TLS выполняет и заменяет .onion адрес сервиса, который и служит верификацией публичного ключа


Пример с HTTP я описал в /threads/952/
Обыкнованная коммуникация:

USER <--> ONION SERVER

Вредоносно:
USER <--> ATTACKER(FAKE) <--> ONION SERVER


В случае с использованием TLS, возможна коммуникация между сервером атакующего, TLS и конечным сервером, а пользователь получает лишь обычный http.

Нормально:

USER <--> ONION SERVER
 ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎,,,,,,,,,,,,,,,,,,,,,,,,<--  TLS

Вредоносно:
USER <--> HTTP FAKE <--> ONION SERVER
 ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎,,,,,,,,,,,,,,,,,,,,,, ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎,,,,,,,,,,,,,,,,,,,,,, ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎,,,,,,,,,,,,,,,,,,,,,, ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎,,,,,,,,,,,,,<-- TLS

Более того, к этому механизму, на стороне атакующего, можно добавить и TLS:
USER <--> FAKE <--> ONION SERVER
‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎,,,,,,,,,,,,,,,,,,,,,,<--  TLS‎‎‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎,,,,,,,,,,,,,<--  TLS


Спойлер: Адаптация фреймворка для TLS
PoC код не претерпел существенных измнений.

Отключение предупреждений TLS
Python:
import urllib3
from urllib.parse import urlparse, urlunparse
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

Заменить обращение с http на https
Python:
u = f'https://{TGT}{self.path}'

Игнор предупреждений
Python:
r = requests.request(
                self.command, u, headers=hdrs, data=b,
                allow_redirects=False,
                proxies={'http': SOCKS, 'https': SOCKS},
                timeout=30, verify=False
            )

Блокировка заголовков для обхода HSTS/CSP
Python:
                if kl in {'content-length', 'transfer-encoding', 'content-encoding',
                          'connection', 'strict-transport-security', 'content-security-policy'}:
                    continue

Подмена Location
Python:
if kl == 'location':
    p = urlparse(v)
    v = urlunparse(('http', RPL, p.path or '/', p.params, p.query, p.fragment))

Подмена в js, xml, json
Python:
if ct.startswith(('text', 'application/json', 'application/xml', 'application/javascript'))

Видео пруф:
https://vidplay.io/stream/CWn7Dj6yWF8ah4dckDK58w (клирнет)


Браузеры при HTTPS отправлют OCSP запросы для проверки валидности сертификата или проверяют, отозван ли он через CRL. Запросы идут к CA через обычный интернет, а не Tor. 
DPI увидит, что пользователь проверяет сертификаты для конкретного домена.

Эта проблема не решена в браузере Tor Browser и это уязвимость!

Полумера:
В браузере установите параметр security.OCSP.enable на false. 
Для Tor Browser необходимо открыть about:config
В поиске вбить "security.OCSP.enable" и поменять значение с 1 на

 0


На этом статья подошла к концу! Не используйте TLS в Onion и сохраняйте ссылки на ваши любимые платформы!

Автор @ec5745y
Специально для forum.LIMB.cc​
👍76 ❤️11 🔥14 😁9 😢9 💯8
Хорошая статья, и вы приложили PoC, что делает ее еще более ценным материалом. Наглядно описана основная проблема.

Однако, есть некоторые технические неточности. Во-первых, сама по себе описанная ситуация митмом не является. Митм все таки это человек посередине, и для этого надо участвовать в цепочке между юзером и сервером напрямую, а не быть ее концом, на который пользователи попали в следствие своей невнимательности. Это все равно, что назвать атаки, которые можно производить с помощью эвилгинкса, митмом. Частично вроде бы и верно, ноооооо... 
Бесспорно, вред от такой реализации может быть ничуть не меньшим, чем от MitM/AitM во многих своих вариациях, ведь чувствительные данные злоумышленник и так, и так в состоянии поймать, но так или иначе это терминологическая ошибка.

Ваша статья проходит по критериям оплаты, желаю вам удачи в дальнейшем творчестве!
👍3
ОтветleakinN_nname

Хорошая статья, и вы приложили PoC, что делает ее еще более ценным материалом. Наглядно описана основная проблема. Однако, есть некоторые технические неточности. Во-первых, сама по себе описанная ситуация митмом не…

Сервер это MITM прокси, а внедрение адреса можно осуществить хоть как. Саму технику можно называть как угодно, хоть фишинг. Предложи как назвать :) - "митм прокси фишинг с байпассом рукопожатий в хайден сервайс" звучит ужасно)
👍2

Гостевой просмотр. Чтобы отвечать и ставить реакции, войдите или зарегистрируйтесь.