Разработчики TLS-имплементации на языке OCaml объявили конкурс BTC Piñata, чтобы доказать надёжность своей защиты. Известно, что конкурсы не могут быть настоящим доказательством, но этот очень уж забавный, да ещё с небольшим денежным призом.
Итак, двое хакеров открыли демо-сервер ownme.ipredator.se.
На сервере лежит ключ от биткоин-адреса 183XuXTTgnfYfKcHbJ4sZeF46a49Fnihdh. Сервер отдаст нам ключ, если мы предъявим сертификат.
Организаторы предусмотрели механизм MiTM для нас. Мы можем пропускать через себя трафик между виртуальными машинами BTC Piñata (TLS-сервер и TLS-клиент). Как понятно, в этом трафике есть нужный сертификат, нужно его только извлечь каким-то образом.
Интерфейс TLS-сервера находится на порту 10000, TLS-клиент на порту 10002, а порт 10001 используется для форвардинга трафика к нам на 40001.
Значит, инициируем общение сервера с клиентом и слушаем порт 40001.
Например, на Node.js это делается таким скриптом:
Теперь записываем и анализируем трафик.
Сами же организаторы конкурса признают, что нет никаких дополнительных условий. По идее, можно попытаться выманить у них ключ другим способом: фишинг, социальная инженерия, ректальный криптоанализ (в переносном смысле) или ещё какой-то хитрый приём.
Код и библиотеки BTC Piñata открыты.
Список установленного ПО на демо-сервере.
Итак, двое хакеров открыли демо-сервер ownme.ipredator.se.
На сервере лежит ключ от биткоин-адреса 183XuXTTgnfYfKcHbJ4sZeF46a49Fnihdh. Сервер отдаст нам ключ, если мы предъявим сертификат.
Организаторы предусмотрели механизм MiTM для нас. Мы можем пропускать через себя трафик между виртуальными машинами BTC Piñata (TLS-сервер и TLS-клиент). Как понятно, в этом трафике есть нужный сертификат, нужно его только извлечь каким-то образом.
Интерфейс TLS-сервера находится на порту 10000, TLS-клиент на порту 10002, а порт 10001 используется для форвардинга трафика к нам на 40001.
Значит, инициируем общение сервера с клиентом и слушаем порт 40001.
Например, на Node.js это делается таким скриптом:
var net = require("net");
var server = net.connect({ host: 'ownme.ipredator.se', port: 10002 });
var client = net.connect({ host: 'ownme.ipredator.se', port: 10000 });
server.on('data', console.log.bind(console, 'server'));
client.on('data', console.log.bind(console, 'client'));
client.pipe(server).pipe(client);
Теперь записываем и анализируем трафик.
Сами же организаторы конкурса признают, что нет никаких дополнительных условий. По идее, можно попытаться выманить у них ключ другим способом: фишинг, социальная инженерия, ректальный криптоанализ (в переносном смысле) или ещё какой-то хитрый приём.
Код и библиотеки BTC Piñata открыты.
Список установленного ПО на демо-сервере.