О некоторых приемах атаки Man in the middle

    Немного Википедии: атака «человек посередине» (англ. Man in the middle, MitM-атака) — термин в криптографии, обозначающий ситуацию, когда атакующий способен читать и видоизменять по своей воле сообщения, которыми обмениваются корреспонденты, причём ни один из последних не может догадаться о его присутствии в канале.
    В этой статье будет рассмотрен прием пассивной атаки на http-соединение, без модификации проходящей информации. Итак, каким-то способом вы смогли вклиниться физически или удалённо в канал передачи данных, настроили bridge или просто получили root-управление шлюзом. Руткит поставили, базы с исходниками слили, вебшелл залили, в cron часовую бомбу заложили, и что теперь?

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

    C чего же мы сейчас начнем?
    И сразу на помощь нам приходит утилита tcpflow. C помощью неё мы сможем записать веб-сессию авторизационные хеши, cookies и проходящие данные а так же сграбить большинство файлов, таких как картинки, архивы, мультимедиа.
    Через выдачу команды ifconfig выясняем какие интерфейсы наличествуют в системе, через route выясняем как ходит у нас трафик. В случае шлюза у нас будет не менее двух интерфейсов, один из которых, как правило смотрит во внутреннюю сеть, другой «наружу». Единственное что нам следует знать и всегда помнить, что входящее соединение со стороны локальной сети будет исходящим в «наружном» интерфейсе.
    Итак, сграбим немного http соединений, например, с «внутреннего» интерфейса:
    #tcpflow port 80 -i eth1

    В текущей директории начинают создаваться множество сессионных файлов. Помним, что благодаря технологии keepalive, в одном соединении можно делать несколько запросов, а значит, их может быть записано несколько в одном файле. В файлах записаны заголовки как http-заголовки, так и передаваемые даны. Выглядит это примерно так:
    HTTP/1.1 200 OK
    Date: Tue, 01 Nov 2011 12:25:18 GMT
    Server: Apache
    Last-Modified: Wed, 14 Sep 2011 03:48:00 GMT
    ETag: «1111111-22222-333333333»
    Accept-Ranges: bytes
    Content-Length: 4451
    Keep-Alive: timeout=15, max=100
    Connection: Keep-Alive
    Content-Type: image/png
    .PNG...IHDR.......d.....,T+3....gAMA....7.......tEXtSoftware.Adobe ImageReadyq.e<....PLTE........2..j.....*..N..\...........>..............&..V........$........R..l ..:.....................mm..................r.....,........B......uu.{{.....................a..\.................!........z… .}........l..7..H..u..M.....d.....A..=....................&ff..........~~......|...........U..-.............................|........c..E…


    Фильтрация
    Попробуем отфильтровать данные по строчкам, содержащим авторизационные данные.
    #egrep -ir «Authorization|Cookie» ./
    Выдача будет выглядеть примерно так.

    простите за качество, скрин рабочего сервера.
    С куками все просто, достаточно вбить их себе в браузер через какой-нибудь cookie editor чтобы украсть сессию. Следует помнить, что иногда куки завязаны на IP-адрес клиента и даже на его User Agent, так что простой увод куки ничего не даст. Несложно так же раскодировать HTTP AUTH их всего несколько видов:
    1. Basic, пара логин: пароль передается закодированной base64. В это случае берем строчку из Authorization и декодируем ее в base64 декодере, получаем строчку вида username:password
    2. Digest, передается хеш от функции MD5(username:realm:password). Тут посложней. Можно попробовать через rainbow-таблицы найти все совпадения строк вида «A:B:C», где А — логин, B – realm, С — пароль. Таких совпадений должно оказаться не так много, чтобы нельзя было их потом все перебрать.
    3. Прочее: Public key, Kerberos, TLS/SSL – не рассматриваем.
    Так же нас интересуют все случаи посылки метода HTTP POST, там часто содержатся данные авторизации на страницах.
    #egrep -rnH «POST» ./
    POST /auth.php HTTP/1.1
    Host: blabla.ru
    User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:7.0.1) Gecko/20100101 Firefox/7.0.1
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3
    Accept-Encoding: gzip, deflate
    Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7
    DNT: 1
    Connection: keep-alive
    Referer: httр://bla.ru/auth.php
    Cookie: __utma=25445499.32598290.132041700.132014354.132015499.3; __utmc=25445439; __utmz=25445499.132014100.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none);
    Content-Type: application/x-www-form-urlencoded
    Content-Length: 72
    text=blabla&login=username&password=ololo&wefo=onPOST /bla.php HTTP/1.1


    Захват файлов

    Так же tcpflow в связке с утилитой foremost полезна, чтобы перехватывать файлы, точней экстрактировать их из массива сырых захваченных данных. Для этого на сграбленные tcpflow файлы соединений, достаточно натравить foremost:
    # foremost ./*
    # ls -la ./output/
    total 48
    drwxr-xr-- 5 root root 4096 Nov 1 18:01.
    drwxr-xr-x 3 root root 32768 Nov 1 18:01…
    -rw-r--r-- 1 root root 0 Nov 1 18:01 audit.txt
    drwxr-xr-- 2 root root 4096 Nov 1 18:01 flv
    drwxr-xr-- 2 root root 4096 Nov 1 18:01 html
    drwxr-xr-- 2 root root 4096 Nov 1 18:01 php


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

    Другие примеры работы

    Перехват FTP соединений на шлюзе snup:
    #tcpflow 'gateway snup and (port ftp or ftp-data)'
    Перехват незашифрованного mail трафика:
    #tcpflow tcp port 110
    #tcpflow tcp port 25

    Аналогичную с tcpflow функцию выполняет утилита tcpxtract. Так же есть побочная утилита httpflow, но она применяется в основном для отладки http соединений.

    Выводы

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

    Что у меня не удалось

    1. Поставить связку утилит через трубу tcpflow | foremost. Они, видимо, не дружат друг с другом уж настолько.
    2. Экстрактировать с помощью foremost html-файлы, сжатые Accept-Encoding: gzip, deflate, очевидно, что foremost не поддерживает декодирование такого рода. Утилит для этого при беглом поиске не нашел. Однако, это можно делать вручную, для каждого файла надо обрезать http заголовки и скармливать их через sdtin в gzip/tar/deflate.


    Полезная литература:

    #man foremost
    #man tcpflow
    #man tcpxtract
    www.voidspace.org.uk/python/articles/authentication.shtml
    secure.wikimedia.org/wikipedia/ru/wiki/%D0%A7%D0%B5%D0%BB%D0%BE%D0%B2%D0%B5%D0%BA_%D0%BF%D0%BE%D1%81%D0%B5%D1%80%D0%B5%D0%B4%D0%B8%D0%BD%D0%B5
    secure.wikimedia.org/wikipedia/ru/wiki/%D0%A1%D0%BD%D0%B8%D1%84%D1%84%D0%B5%D1%80
    www.circlemud.org/jelson/software/tcpflow
    secure.wikimedia.org/wikipedia/en/wiki/Digest_access_authentication
    encrypted.google.com/search?q=foremost+linux
    www.debian-administration.org/articles/558
    stackoverflow.com/questions/2866864/extract-payload-from-tcpflow-output
    tcpxtract.sourceforge.net
    Набор утилит для анализа и взлома www2.opensourceforensics.org/tools/unix
    serversniff.blogspot.com/2009/08/extracting-files-from-tcpdump.html
    Поделиться публикацией
    Комментарии 12
      +11
      Статейка для обзора интересная, но ИМХО: название статьи не отображает содержимого.
      Совершенно необязательно быть «человеком посередине» чтоб пассивно слушать трафик. Назвали бы, к примеру: «извлечение данных из перехваченных сессий». Или привели бы пример пассивного перехвата в Wi-Fi сети.

      А если Вы действительно посередине стоите — вам тогда нет дела до проблем с тем, что: «куки завязаны на IP-адрес клиента и даже на его User Agent». Внедряйте скипт BeEF в перехватываемый http-трафик и будет Вам счастье. Там используется технология xss tunnel и xss proxy. Т.е. будете использовать браузер жертвы как прокси.
      +5
      А не легче слить все tcpdump'ом и потом в любом сниффере, том же wireshark, все проанализировать?
        –3
        вот и ответ почему
        :~/data/Api# tcpdump -w -i venet0
        tcpdump: WARNING: arptype 65535 not supported by libpcap — falling back to cooked socket
        tcpdump: WARNING: venet0: no IPv4 address assigned
        tcpdump: syntax error

        хотя, да, пожалуй, это исключение.
        а использовать можно было еще и bro ids, retina, иные снифферы, но обзор на всё сразу я бы не стал делать.
          0
          ан нет, заработало.
            +3
            Конечно заработает, особенно, если указать, куда писать данные;)
            +1
            Да снифферы и анализаторы трафика — это само собой, что можно разные использовать — тот же древний dsniff.
            Тут в чем идея — что куча програм понимает формат libpcap, а tcpflow — вряд ли.
          +6
          Вы неправильно поставили смысловое ударение в первом предложении (и во всей остальной статье). Правильнее так:
          Aтака «человек посередине» — термин в криптографии, обозначающий ситуацию, когда атакующий способен читать и видоизменять по своей воле сообщения, которыми обмениваются корреспонденты

          У вас описано простое прослушивание канала, а не MitM
            +5
            Первая часть порадовала.
            «Оговоримся, что в этой статье не рассматриваются методы взлома защищенного соединения, например, SSL. Так же не рассказываем, каким образом мы поимели этот самый root-доступ, оставьте место для интриги. Доступ без root прав не имеет смысла, так как описываемые ниже утилиты требуют высоких привилегий.»
            Прямо-таки молдаванский вирус какой-то.
              +2
              наверно, специально для иллюстрации материала (или для параноиков) все ссылки на википедию — через secure.wikimedia.org, на гугл — encrypted.google.com.
                +3
                Стоп, это статья на тему если у вас есть рут на шлюз? название статьи заинтриговало больше чем содержимое. На уровень статьи точно не дотягивает. Из серии: как украсть миллион (но при оговорке что вы уже сидите в инкасаторской машине и рядом никого нет, а у вас и ключи и машину никто не ищет, вобщем на блюдечке с голубой каемочкой). Простите, автор, но странно видеть статью подобного рода на главной хабра. Не расстраивайтесь, бывает хуже.
                  +1
                  Зачем статья, если есть man и эти утилиты настолько всем известны, что за такое помидором в глаз получить можно?

                  Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                  Самое читаемое