Согласно определению в Википедии, тайник (dead drop) — это инструмент конспирации, который служит для обмена информацией или какими-то предметами между людьми, использующими секретное местоположение. Смысл в том, что люди никогда не встречаются — но при этом обмениваются информацией, поддерживая эксплуатационную безопасность.

Тайник не должен привлекать внимание. Поэтому в офлайновом мире часто используют неброские вещи: свободный кирпич в стене, библиотечную книгу или дупло в дереве.

В интернете есть много инструментов для шифрования и анонимизации, но сам факт использования этих инструментов привлекает внимание. Кроме того, они могут быть заблокированы на корпоративном или государственном уровне. Что делать?

Разработчик Райан Флауэрс (Ryan Flowers) предложил интересный вариант — использовать в качестве тайника любой веб-сервер. Если подумать, то что делает веб-сервер? Принимает запросы, выдаёт файлы и пишет лог. И он записывает в лог все запросы, даже некорректные!

Получается, любой веб-сервер позволяет сохранить в логе практически произвольное сообщение. Флауэрс задумался над тем, как это использовать.

Он предлагает такой вариант:

  1. Берём текстовый файл (секретное сообщение) и вычисляем хэш (md5sum).
  2. Кодируем его (gzip+uuencode).
  3. Записываем в лог путём заведомо некорректного запроса к серверу.

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)


  1. nochkin
    29.08.2019 19:22

    Кстати, уже много лет спамеры используют похожий метод время от времени. Они передают свои хосты и линки через «referer» или параметры запроса.
    Правда, эффективность этого метода для этих целей сомнительна, так как не все просматривают логи достаточно часто.


    1. pae174
      29.08.2019 23:04

      Это называется рефспам и эффективность его образуется вовсе не от того, что кто-то там вручную просматривает логи.

      На самом деле при массовом рефспаме образуется куча ссылок на целевой ресурс со страниц статистики других ресурсов. У них там могут быть собственные анализаторы логов, торчащие наружу — например webalizer или awstat. В них указано что-то типа «за прошедшие сутки зафиксированы заходы с таких-то сайтов». Это полностью автоматический процесс и достаточно сделать один единственный запрос что бы попасть в такой лог. Поисковики видят такую статистику и раньше даже учитывали ссылки в ней.


      1. nochkin
        30.08.2019 06:42

        На неправильно отконфигурированом софте эффективность тоже не фонтан, конечно.
        Эффективнее почтовые серверы искать открытые, но это уже другая крайность.


  1. PingWin
    29.08.2019 19:56

    Интересный метод старой доброй стеганографии.


  1. KodyWiremane
    29.08.2019 22:27

    И дополнительные очки — за использование публично доступных логов )

    Только сверять не по MD5, наверное, его же поломали уже.


    1. nochkin
      30.08.2019 06:43
      +1

      Тут проверка больше для валидности нужна. Даже CRC32 сойдёт для этих целей.


      1. KodyWiremane
        30.08.2019 08:15

        Ну всё-таки неплохо проверять аутентичность сообщения, и защиту от replay добавить. Впрочем, это уже не совсем про хеш.


        1. nochkin
          30.08.2019 08:19

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


          1. KodyWiremane
            30.08.2019 10:38

            Я про ситуацию, когда информация о тайнике утекла, но «знающие» ещё не знают об этом. Похоже, предусмотрительность кому-то тут не нравится.


  1. vergil01
    30.08.2019 03:24

    «нормальный человек»: D
    да уж, действительно


  1. EvokSinister
    30.08.2019 09:45

    Хм, мне вспоминается история:

    – Учитель, я подобрал хороший пароль, которого не может быть в словарях.
    Инь Фу Во кивнул.
    – Я ввёл его в Гугле, – продолжал Сисадмин, – и убедился, что в Сети такого сочетания нет.
    – Теперь есть.

    Конечно, появятся альтернативы этому методу, но всё же общая концепция уже известна. Так что ваша фраза «Вряд ли СОРМ или система DLP будет сканировать URL'ы на предмет сжатых текстовых файлов» не совсем верна.


  1. zim32
    30.08.2019 09:52

    Не понял. Что значит ЛЮБОЙ веб сервер. Судя по всему тот на который есть доступ к серверу. А если есть доступ причем тут логи вообще, можно писать куда угодно. Или вопрос что если службы зайдут на сервер они не найдут там переписку? Так теперь найдут грепнув по слову transfer. Вообще какая-то муть


    1. KodyWiremane
      30.08.2019 10:42

      Ну это же не ISO, чтоб именно "?transfer?" использовать. Хотя статистический анализ с поиском нетипичных адресов в логах, возможно, подскажет нужное направление.


    1. izuware
      30.08.2019 11:17

      Так концепция же, например заменим веб сервер на почтовый, и читаем его логи на предмет EHLO «КОДИРОВАНЫЙ ПАКЕТ»… или x-referer-rkn даже


    1. kozyabka
      30.08.2019 14:39

      Вообще какая-то муть

      Такое же ощущение после прочтения)


  1. izuware
    30.08.2019 11:19

    Тайник в поисковом сервере, кстати, еще проще. В их каше запросто можно писать открытым текстом )


  1. diafour
    30.08.2019 18:08

    Можно вспомнить, как раньше некоторые продвинутые компании размещали вакансии для разработчиков в заголовках HTTP или в коде HTML-страниц.

    Теперь это в js-консоли делают и не только для разработчиков. Яркий пример на сайте qiwi.


  1. identw
    02.09.2019 10:39

    Помню на одном из серверов, который я админил, как оказалось было уязвимое веб-приложение, через post запрос, можно было запустить любой php файл на сервере, злоумышленник это нашёл, но способа залить бэкдор к него не было. Но он увидел, что есть доступ к логам веб-сервера, сформировал так запрос, чтобы в логи попал валидный php код, а потом просто выполнил этот код через раннее найденную уязвимость, php интерпретатор успешно выполнил код из логов, и так он залил бэкдор. Сервер был тестовый для разработки, поэтому для удобства, логи доступны пользователю от которого бэк запущен. Мораль — логи надо защищать, не такая уж это безобидная вещь.