Книга «Аудит безопасности информационных систем»

    image В книге Никиты Скабцова (магистр CS, опыт работы инженером по информационной безопасности – 10 лет, преподаватель «компьютерные сети, операционные системы», сертификаты: CEH, CCSA, LPIC, MCITP) рассматриваются методы обхода систем безопасности сетевых сервисов и проникновения в открытые информационные системы. Информационная безопасность, как и многое в нашем мире, представляет собой медаль с двумя сторонами. С одной стороны, мы проводим аудит, ищем способы проникновения и даже применяем их на практике, а с другой — работаем над защитой. Тесты на проникновение являются частью нормального жизненного цикла любой ИТ-инфраструктуры, позволяя по-настоящему оценить возможные риски и выявить скрытые проблемы.

    Пассивный перехват трафика


    Самый простой и безопасный способ перехвата данных. Данный способ перехвата работает в сетях, которые разделяют одну и ту же среду для передачи данных (топология «кольцо», беспроводная передача данных), а также в сетях, построенных на хабах.

    Рассмотрим перехват данных с использованием Wireshark. Wireshark — это бесплатный программный продукт для Windows и Linux, который позволяет перехватывать, фильтровать, анализировать и сохранять сетевой трафик. Его используют не только эксперты по информационной безопасности, но и сетевые администраторы — например, для того, чтобы выявить и устранить проблемы, возникающие в ходе работы сетевых сервисов.

    Теперь продемонстрируем возможности Wireshark для перехвата и анализа трафика. Запустим Wireshark и выберем из списка интерфейс для мониторинга, в нашем случае это будет eth0.

    image

    После выбора интерфейса начнется сбор данных. В начале главы мы упоминали о том, что мониторинг трафика в беспроводных сетях работает довольно просто. Так оно и есть — для того, чтобы просматривать данные со всех компьютеров беспроводной сети, достаточно просто выбрать нужный интерфейс.

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

    За пару минут мы собрали почти 20 000 пакетов, и это при условии, что трафик в сети был минимальным. Разумеется, просмотреть такое количество пакетов вручную — задача очень трудоемкая, и для ее облегчения в Wireshark присутствуют различные фильтры.

    image

    Отфильтруем запросы пользователя к сайту lenta.ru. Начнем с DNS-запроса, так как он всегда будет первым (dns.qry.name contains “lenta.ru”).

    image

    Применив фильтр, мы видим полную, последовательную историю запросов и ответов браузера к DNS-серверу. Теперь, зная, по какому IP-адресу будет происходить дальнейшая коммуникация, создадим соответствующий фильтр (ip.addr==81.19.72,38).

    image

    Итак, мы увидели полную, стандартную картину коммуникации — запрос и ответ DNS-сервера, трехстороннее «рукопожатие» и инициализацию передачи данных. Более того, мы увидели само содержимое пакетов.

    Как вы можете заметить, на рис. 8.5 количество отфильтрованных пакетов равно 2283. В каждом из них передается лишь небольшая часть данных, и понять, какую информацию они содержат, достаточно сложно. Для облегчения задачи в Wireshark присутствует замечательная возможность проследить за определенным потоком данных. В случае с HTTP выбираем «follow HTTP stream».

    image

    Следует учесть, что не всегда у вас будет доступ к графическому интерфейсу, поэтому рекомендуем ознакомиться с еще одним инструментом, который появился до Wireshark, — tcpdump. Итак, если вы просто запустите tcpdump, то вся информация будет выводиться в реальном времени, что впоследствии сделает ее практически непригодной к анализу:

    root@kali:~# tcpdump
    tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
    listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
    11:46:47.867683 IP kali.57728 > ec2-52-43-198-160.us-west-2.compute.amazonaws.com.
    https: Flags [.], ack 1406161060, win 40880, length 0
    11:46:47.868400 IP ec2-52-43-198-160.us-west-2.compute.amazonaws.com.https >
    kali.57728: Flags [.], ack 1, win 64240, length 0
    11:46:47.870762 IP kali.53588 > gateway.domain: 6423+ PTR? 160.198.43.52.in-addr.
    arpa. (44)
    11:46:47.942135 IP gateway.domain > kali.53588: 6423 1/0/0 PTR ec2-52-43-198-160.
    us-west-2.compute.amazonaws.com. (107)
    11:46:47.943079 IP kali.53170 > gateway.domain: 29504+ PTR? 129.126.168.192.inaddr.
    arpa. (46)
    11:46:48.005087 IP gateway.domain > kali.53170: 29504 NXDomain 0/0/0 (46)
    11:46:48.012487 IP kali.34133 > gateway.domain: 9564+ PTR? 2.126.168.192.in-addr.
    arpa. (44)
    11:46:48.073047 IP gateway.domain > kali.34133: 9564 NXDomain 0/0/0 (44)
    11:46:48.699462 IP kali.54070 > ec2-52-32-150-180.us-west-2.compute.amazonaws.com.
    https: Flags [.], ack 101222386, win 40880, length 0
    11:46:48.701314 IP kali.51078 > gateway.domain: 2872+ PTR? 180.150.32.52.in-addr.
    arpa. (44)
    ...

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

    root@kali:~# tcpdump -w /root/tcpump.cap
    tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
    listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
    ^C3821 packets captured
    3828 packets received by filter
    0 packets dropped by kernel

    Для анализа полученных данных можно использовать Whireshark, но раз уж мы работаем в консоли, то будем последовательны и приведем пример анализа данных в консоли. Рассмотрим все IP-адреса и порты, с которыми происходило соединение:

    root@kali:~# tcpdump -n -r /root/tcpump.cap | awk -F" " ‘{ print $3}’ | sort -u |
    head
    reading from file /root/tcpump.cap, link-type EN10MB (Ethernet)
    136.243.75.5.80
    138.201.8.34.80
    138.201.8.95.80
    144.76.164.182.80
    144.76.28.230.80
    144.76.62.5.80
    173.194.122.218.80
    173.194.32.186.443
    178.250.0.80.80
    178.250.2.77.80

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

    root@kali:~# tcpdump -n src host 138.201.8.34 -r /root/tcpump.cap
    reading from file /root/tcpump.cap, link-type EN10MB (Ethernet)
    11:59:01.590002 IP 138.201.8.34.80 > 192.168.126.129.44236: Flags [S.], seq
    1793877133, ack 236733408, win 64240, options [mss 1460], length 0
    11:59:01.594853 IP 138.201.8.34.80 > 192.168.126.129.44238: Flags [S.], seq
    1094285691, ack 3332638160, win 64240, options [mss 1460], length 0
    11:59:01.594994 IP 138.201.8.34.80 > 192.168.126.129.44236: Flags [.], ack 1461,
    win 64240, length 0
    11:59:01.595001 IP 138.201.8.34.80 > 192.168.126.129.44236: Flags [.], ack 1537,
    win 64240, length 0
    ...
    root@kali:~# tcpdump -n dst host 138.201.8.34 -r /root/tcpump.cap
    reading from file /root/tcpump.cap, link-type EN10MB (Ethernet)
    11:59:01.475932 IP 192.168.126.129.44236 > 138.201.8.34.80: Flags [S], seq
    236733407, win 29200, options [mss 1460,sackOK,TS val 144778 ecr 0,nop,wscale 7],
    length 0
    11:59:01.476078 IP 192.168.126.129.44238 > 138.201.8.34.80: Flags [S], seq
    3332638159, win 29200, options [mss 1460,sackOK,TS val 144778 ecr 0,nop,wscale 7],
    length 0
    11:59:01.590025 IP 192.168.126.129.44236 > 138.201.8.34.80: Flags [.], ack
    1793877134, win 29200, length 0
    11:59:01.590665 IP 192.168.126.129.44236 > 138.201.8.34.80: Flags [.], seq
    0:1460, ack 1, win 29200, length 1460: HTTP: GET /tag?event=otherPage&check=tr
    ue&__location=http%3A%2F%2Fwww.tez-tour.com%2F&__referrer=&__title=%D0%9F%D1%83%D1
    %82%D0%B5%D0%B2%D0%BA%D0%B8%20%D0%B2%20%D0%93%D1%80%D0%B5%D1%86%D0%B8%D1%8E%2C%20
    %D0%9A%D0%B8%D0%BF%D1%80%2C%20%D0%9E%D0%90%D0%AD%2C%20%D0%A
    ...
    root@kali:~# tcpdump -n port 80 -r /root/tcpump.cap
    reading from file /root/tcpump.cap, link-type EN10MB (Ethernet)
    11:58:57.800214 IP 192.168.126.129.40306 > 93.184.220.29.80: Flags [S], seq
    3231467275, win 29200, options [mss 1460,sackOK,TS val 143859 ecr 0,nop,wscale 7],
    length 0
    11:58:57.902747 IP 192.168.126.129.40308 > 93.184.220.29.80: Flags [S], seq
    3445184571, win 29200, options [mss 1460,sackOK,TS val 143884 ecr 0,nop,wscale 7],
    length 0
    11:58:57.909838 IP 93.184.220.29.80 > 192.168.126.129.40306: Flags [S.], seq
    3702388, ack 3231467276, win 64240, options [mss 1460], length 0
    11:58:57.909911 IP 192.168.126.129.40306 > 93.184.220.29.80: Flags [.], ack 1, win
    29200, length 0
    11:58:57.910923 IP 192.168.126.129.40306 > 93.184.220.29.80: Flags [P.], seq 1:430,
    ack 1, win 29200, length 429: HTTP: POST / HTTP/1.1
    11:58:57.911421 IP 192.168.126.129.40310 > 93.184.220.29.80: Flags [S], seq
    1472664795, win 29200, options [mss 1460,sackOK,TS val 143886 ecr 0,nop,wscale 7],
    length 0
    11:58:57.914620 IP 93.184.220.29.80 > 192.168.126.129.40306: Flags [.], ack 430,
    win 64240, length 0
    ...

    Далее рассмотрим информацию, которая передавалась по сети в момент ее захвата. В данном случае мы увидим ее в HEX-формате, однако это не помешает нам добыть нужные данные.

    root@kali:~# tcpdump -nX -r /root/tcpump.cap
    reading from file /root/tcpump.cap, link-type EN10MB (Ethernet)
    11:58:57.026917 IP 192.168.126.129.60358 > 192.168.126.2.53: 61944+ A? self-repair.
    mozilla.org. (41)
            0x0000: 4500 0045 7b58 4000 4011 417b c0a8 7e81 E..E{X@.@.A{..~.
            0x0010: c0a8 7e02 ebc6 0035 0031 baef f1f8 0100 ..~....5.1......
            0x0020: 0001 0000 0000 0000 0b73 656c 662d 7265 .........self-re
            0x0030: 7061 6972 076d 6f7a 696c 6c61 036f 7267 pair.mozilla.org
    ...
    11:58:59.459884 IP 192.168.126.129.39468 > 194.165.24.241.80: Flags [P.], seq
    1:873, ack 1, win 29200, length 872: HTTP: GET / HTTP/1.1
            0x0000: 4500 0390 3741 4000 4006 e566 c0a8 7e81 E...7A@.@..f..~.
            0x0010: c2a5 18f1 9a2c 0050 f298 04bc 2c12 6d3b .....,.P....,.m;
            0x0020: 5018 7210 e0d2 0000 4745 5420 2f20 4854 P.r.....GET./.HT
            0x0030: 5450 2f31 2e31 0d0a 486f 7374 3a20 7777 TP/1.1..Host:.ww
            0x0040: 772e 7465 7a2d 746f 7572 2e63 6f6d 0d0a w.tez-tour.com..
            0x0050: 5573 6572 2d41 6765 6e74 3a20 4d6f 7a69 User-Agent:.Mozi
            0x0060: 6c6c 612f 352e 3020 2858 3131 3b20 4c69 lla/5.0.(X11;.Li
            0x0070: 6e75 7820 6936 3836 3b20 7276 3a34 352e nux.i686;.rv:45.
            0x0080: 3029 2047 6563 6b6f 2f32 3031 3030 3130 0).Gecko/2010010
            0x0090: 3120 4669 7265 666f 782f 3435 2e30 0d0a 1.Firefox/45.0..
            0x00a0: 4163 6365 7074 3a20 7465 7874 2f68 746d Accept:.text/htm
            0x00b0: 6c2c 6170 706c 6963 6174 696f 6e2f 7868 l,application/xh
            0x00c0: 746d 6c2b 786d 6c2c 6170 706c 6963 6174 tml+xml,applicat
            0x00d0: 696f 6e2f 786d 6c3b 713d 302e 392c 2a2f ion/xml;q=0.9,*/
            0x00e0: 2a3b 713d 302e 380d 0a41 6363 6570 742d *;q=0.8..Accept-
            0x00f0: 4c61 6e67 7561 6765 3a20 656e 2d55 532c Language:.en-US,
            0x0100: 656e 3b71 3d30 2e35 0d0a 4163 6365 7074 en;q=0.5..Accept
            0x0110: 2d45 6e63 6f64 696e 673a 2067 7a69 702c -Encoding:.gzip,
            0x0120: 2064 6566 6c61 7465 0d0a 436f 6f6b 6965 .deflate..Cookie
    ...

    И вот мы нашли интересующее нас соединение с tez-tour.com. Но данных все равно много. Чтобы упростить задачу, воспользуемся встроенным фильтром заголовков. Нас будут интересовать только пакеты с флагами PSH и ACK.

    image

    На представленной выше схеме видно, что интересующие нас флаги А и Р находятся в четвертой и пятой позиции, а это значит, что в двоичном формате это будет иметь вид 00011000, а в десятичном — 24. Посмотрим, как теперь будет выглядеть фильтр:

    root@kali:~# tcpdump -A -n 'tcp[13] = 24' -r /root/tcpump.cap
    ...
    11:59:00.459252 IP 192.168.126.129.49290 > 144.76.62.5.80: Flags [P.], seq
    2487328431:2487328798, ack 1891911515, win 29200, length 367: HTTP: GET /webim/
    button.php HTTP/1.1
    E.....@.@.."..~..L>....P.A..p.G[P.r.:...GET /webim/button.php HTTP/1.1
    Host: teztourcom.webim.ru
    User-Agent: Mozilla/5.0 (X11; Linux i686; rv:45.0) Gecko/20100101 Firefox/45.0
    Accept: image/png,image/*;q=0.8,*/*;q=0.5
    Accept-Language: en-US,en;q=0.5
    Accept-Encoding: gzip, deflate
    Referer: http://www.tez-tour.com/
    Connection: keep-alive
    If-None-Match: "2daeaa8b5f19f0bc209d976c02bd6acb51b00b0a"
    
    11:59:00.563800 IP 144.76.62.5.80 > 192.168.126.129.49290: Flags [P.], seq 1:276,
    ack 367, win 64240, length 275: HTTP: HTTP/1.1 200 OK
    E..;p........L>...~..P..p.G[.A..P.......HTTP/1.1 200 OK
    Server: nginx
    Date: Thu, 10 Nov 2016 16:58:59 GMT
    Content-Type: image/gif
    Content-Length: 43
    Connection: keep-alive
    X-Webim-Version: 8.14.142
    Etag: "2daeaa8b5f19f0bc209d976c02bd6acb51b00b0a"
    X-Time: 0.000
    
    GIF89a.............!.......,...........D..;
    11:59:00.839316 IP 192.168.126.129.54060 > 81.222.128.23.80: Flags [P.], seq
    3867682114:3867682536, ack 387532615, win 29200, length 422: HTTP: GET /cgi-bin/
    erle.cgi?sid=204602&bt=62&custom=153%3Duser_id&ph=1&rnd=346920&tail256=unknown
    HTTP/1.1
    E.....@.@..q..~.Q....,.P..%B..GGP.r.-Y..GET /cgi-bin/erle.cgi?sid=204602&bt=62&cust
    om=153%3Duser_id&ph=1&rnd=346920&tail256=unknown HTTP/1.1
    Host: ad.adriver.ru
    User-Agent: Mozilla/5.0 (X11; Linux i686; rv:45.0) Gecko/20100101 Firefox/45.0
    Accept: */*
    Accept-Language: en-US,en;q=0.5
    Accept-Encoding: gzip, deflate
    Referer: http://www.tez-tour.com/
    Cookie: cid=AhKU-kniKHjQWpLwdDd1YpA; ar_g2=1; ar_go=1; 1d=1; ar_ord=1; ar_ya=1
    Connection: keep-alive
    ...

    Теперь информация представлена в более понятном и удобном для анализа виде, не так ли?

    Активный перехват


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

    Одним из самых популярных способов обойти такую защиту и заставить свич работать как хаб, что позволит нам перехватывать весь сетевой трафик, является переполнение САМ-таблицы.

    Все САМ-таблицы имеют конечную величину и содержат такие данные, которые помогают направлять нужный трафик нужным клиентам, а именно МАС-адреса, номер порта и информацию о принадлежности к VLAN.

    Переполнение этой таблицы приводит к тому, что свич больше не может обрабатывать данные в нормальном режиме, и для того, чтобы обеспечить клиентам минимальный уровень сервиса, он перестает читать САМ-таблицу и начинает работать как хаб.

    Необходимо учесть, что переполнение таблицы — процесс непрерывный, и вскоре после того, как он прекратится, САМ-таблица будет очищена и он вернется к нормальному режиму функционирования.

    Для проведения атаки, направленной на переполнение САМ-таблицы МАС-адресами, достаточно одной команды:

    root@kali:~# macof
    b2:f9:9e:6b:59:b4 69:69:f4:1:d:7d 0.0.0.0.17507 > 0.0.0.0.49697: S
    1870663496:1870663496(0) win 512
    6b:df:e5:9:a8:1e c9:9c:3d:4b:21:d0 0.0.0.0.14408 > 0.0.0.0.45120: S
    2106903632:2106903632(0) win 512
    8:80:82:19:60:ec d4:f7:fb:14:47:f5 0.0.0.0.13022 > 0.0.0.0.2854: S
    708293972:708293972(0) win 512
    53:d4:80:73:dc:c4 d2:dd:5b:2d:32:b3 0.0.0.0.5752 > 0.0.0.0.1613: S
    1815033319:1815033319(0) win 512
    c3:a0:33:5b:67:8b 58:d6:8f:5d:fd:63 0.0.0.0.975 > 0.0.0.0.37840: S
    1285237419:1285237419(0) win 512
    81:86:99:13:d2:10 8f:37:86:2:ea:a6 0.0.0.0.30380 > 0.0.0.0.47351: S
    447067260:447067260(0) win 512
    ee:df:dd:2f:f5:96 8b:62:89:38:fa:1a 0.0.0.0.31470 > 0.0.0.0.57504: S
    1107960129:1107960129(0) win 512
    1f:d6:c1:1f:42:df 2d:ba:3e:6e:ca:29 0.0.0.0.28879 > 0.0.0.0.18191: S
    753232608:753232608(0) win 512
    1a:93:a9:1:e1:31 2a:1a:bd:5e:d8:ce 0.0.0.0.4821 > 0.0.0.0.53112: S
    437165546:437165546(0) win 512

    Еще один способ — это «отравление» АRP. АRP-таблицы на маршрутизаторах — и не только — используются для сопоставления IP и MAC-адресов, что позволяет свичам выбирать наиболее эффективный путь прохождения трафика. Для нас важно то, что широковещательные пакеты, используемые для построения этой таблицы, никаким образом не фильтруются и являются широковещательными. Используя эту особенность, атакующий может рассылать по сети поддельные данные и превратить свой компьютер в хаб.

    Продемонстрируем на примере Ettercap. Выберем тип сниффинга (Sniff  Unified sniffing...) и интерфейс, с которым мы будем работать (eth0) (рис. 8.9).

    image

    Просканируем сеть на доступные хосты (Hosts  Scan for hosts) (рис. 8.10). Затем осмотрим список доступных хостов (Hosts  Hosts list). Теперь можно пойти двумя путями: или начать атаку на все машины в сети, и тогда не нужно ничего выбирать, или же указать интересующие нас цели. В нашем случае мы отметили роутер как цель номер 1 и один из компьютеров как цель номер 2 (рис. 8.11).

    Теперь начнем атаку, выбрав из верхнего меню Ettercap MITM  ARP poisoning (рис. 8.12).
    image

    image


    Следует упомянуть еще одну проблему. Важно учесть, что, скорее всего, даже если вы и получите доступ к одному из сетевых портов, то все равно не сможете проникнуть в сеть, поскольку все современные коммутаторы могут контролировать доступ по MAC-адресам. Однако у вас всегда остается возможность поменять MAC-адрес своего компьютера следующим образом:

    root@kali:~# ifconfig eth0 down
    root@kali:~# macchanger -r eth0
    Current MAC:      00:0c:29:9a:54:a5 (VMware, Inc.)
    Permanent MAC: 00:0c:29:9a:54:a5 (VMware, Inc.)
    New MAC:           6a:66:b0:89:af:63 (unknown)
    root@kali:~# ifconfig eth0 up

    Резюме


    Для того чтобы перехватывать информацию, или сниффить, вам будет нужен сетевой адаптер, специальные драйверы (со стандартными драйверами у вас вряд ли выйдет что-то сделать) и ПО, например Whireshark.

    Помните, что существует два типа сетей. В одних все проходящие данные доступны всем пользователям, а в других — только адресату. К первому типу относятся беспроводные сети и сети, построенные с использованием хабов, в этом случае перехват данных не представляет сложностей. Вам надо установить нужный драйвер и запустить сниффер, который будет собирать весь проходящий трафик.

    Ко второму типу относятся сети, построенные с помощью свичей. Чтобы перехватывать трафик на свичах, необходимо получить доступ ко всем проходящим через него данным. Один из способов этого добиться — переполнить САМ — таблицу свича МАС-адресами.

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

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

    Помните о том, что бывает недостаточно просто подключиться проводом к свичу: возможно, чтобы он пустил вас в сеть, вам будет необходимо изменить MAC-адрес своей сетевой карты.

    » Более подробно с книгой можно ознакомиться на сайте издательства
    » Оглавление
    » Отрывок

    Для Хаброжителей скидка 20% по купону — Information Security
    Метки:
    Поделиться публикацией
    Похожие публикации
    Комментарии 4

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

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