The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Блокирование попыток эксплуатации heartbeat-уязвимости в OpenSSL средствами iptables
Пример блокирования  критической уязвимости CVE-2014-0160 в OpenSSL 1.0.1,
позволяющей получить содержимое памяти удалённых серверных и клиентских приложений.


Отражаем в логе все heartbeat-запросы при помощи iptables и модуля u32:

   iptables -t filter -A INPUT -p tcp --dport 443 -m u32 --u32 "52=0x18030000:0x1803FFFF" -j LOG --log-prefix "BLOCKED: HEARTBEAT"

Блокируем heartbeat-запросы:

   iptables -t filter -A INPUT -p tcp --dport 443 -m u32 --u32 "52=0x18030000:0x1803FFFF" -j DROP

Отслеживаем возможные атаки при помощи Wireshark:

   tshark -i interface port 443 -R 'frame[68:1] == 18'
   tshark -i interface port 443 -R 'ssl.record.content_type == 24'
 
09.04.2014 , Источник: http://www.securityfocus.com/archiv...
Ключи: openssl, block, iptables, heartbeat / Лицензия: CC-BY
Раздел:    Корень / Администратору / Сетевая подсистема, маршрутизация / Пакетные фильтры и фаерволы / Пакетные фильтры в Linux: iptables, ipchains

Обсуждение [ Линейный режим | Показать все | RSS ]
  • 1.1, Аноним (-), 20:15, 09/04/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А есть способ во FreeBSD реализовать подобную блокировку через ipfw или pf ?
     
     
  • 2.2, Аноним (-), 20:27, 09/04/2014 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > А есть способ во FreeBSD реализовать подобную блокировку через ipfw или pf ?

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

     
  • 2.3, Аноним (-), 20:45, 09/04/2014 [^] [^^] [^^^] [ответить]  
  • +/
    ng_bpf ?
     
  • 2.4, iZEN (ok), 11:57, 10/04/2014 [^] [^^] [^^^] [ответить]  
  • –3 +/
    > А есть способ во FreeBSD реализовать подобную блокировку через ipfw или pf ?

    "Блокируй всё. Разрешай только то, что конкретно нужно."


     
     
  • 3.5, ALex_hha (ok), 13:26, 10/04/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > "Блокируй всё. Разрешай только то, что конкретно нужно."

    ты прям кэп :D

     
  • 3.6, тигар (ok), 13:33, 10/04/2014 [^] [^^] [^^^] [ответить]  
  • +2 +/
    изя, а ты жжож напалмом.
    вот скажи, к примеру, https конкретно нужно или конкретно не нужно?
     
     
  • 4.20, тролим толсто (?), 10:57, 22/04/2014 [^] [^^] [^^^] [ответить]  
  • +/
    А зачем? его же не удобно фильтровать. text/plain наше усе :)
     
  • 3.15, ананим (?), 19:35, 11/04/2014 [^] [^^] [^^^] [ответить]  
  • +1 +/
    ты совершенен в своём невежестве.
     
  • 3.21, Аноним (-), 16:41, 27/04/2014 [^] [^^] [^^^] [ответить]  
  • +/
    >"Блокируй всё. Разрешай только то, что конкретно нужно."

    Прально, разрешай выход только на 80-е порты :) А вот с 5222 портом такое не прокактит, там TLS может оказаться.

     
  • 2.16, Sabakwaka (ok), 13:08, 12/04/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > А есть способ во FreeBSD реализовать подобную блокировку через ipfw или pf ?

    А нету способа обновиться?
    Типа, ставишь исправленную версию?
    Не? Никак?

     
     
  • 3.17, Адекват (ok), 15:44, 15/04/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > Не? Никак?

    Можно, но тогда будет не прикольно


     
  • 2.18, Алекс (??), 11:51, 16/04/2014 [^] [^^] [^^^] [ответить]  
  • +/
    http://lists.freebsd.org/pipermail/freebsd-net/2008-July/019086.html
     
  • 2.19, iZEN (ok), 18:09, 16/04/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Через PF с помощью классификатора Ethernet-фреймов:
    http://www.openbsd.gr/faq/pf/ru/tagging.html#ethernet
     

  • 1.7, Онаним (?), 16:37, 10/04/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Вот там сказано:
    The rules have been specifically created for HTTPS traffic and may be
    adapted for other protocols; SMTPS/IMAPS/...

    Это получается, что нужно так:
    iptables -t filter -A INPUT -p tcp --dport 465(995) -m u32 --u32 "52=0x18030000:0x1803FFFF" -j DROP

     
     
  • 2.11, Andrey Mitrofanov (?), 11:33, 11/04/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > Это получается, что нужно так:
    > iptables -t filter -A INPUT -p tcp --dport 465(995) -m u32 --u32
    > "52=0x18030000:0x1803FFFF" -j DROP

    Ну, типа того, в http://seclists.org/fulldisclosure/2014/Apr/143 используют

    -m multiport --destination-port 443,993,995

    [на самом деле нужно что-то среднее между списком популярных у ботов/киддисов портов и реально запущенных на хосте(-ах) сервиах с TLS], а чуть выше обсуждают, что к --log надо добавлять --limit, чтоб не заDOSили.

     

  • 1.8, pavlinux (ok), 03:28, 11/04/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Уже боты долбятся

    msg='[16509541.241630] Heartbeat Attack:
    IN=br0 OUT= PHYSIN=eth0
    MAC=20:73:33:a3:e8:39:01:21:48:05:3e:12:18:38
    SRC=68.52.212.176
    DST=111.33.55.44
    LEN=60 TOS=0x00 PREC=0x00 TTL=43 ID=37614 DF PROTO=TCP
    SPT=54188 DPT=443 WINDOW=137 RES=0x00 ACK PSH URGP=0

     
  • 1.9, Онаним (?), 10:51, 11/04/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Что это за сигнатура "0x18030000:0x1803FFFF"? И будет ли работать правило:
    iptables -t filter -A INPUT -p tcp --dport 465 -m u32 --u32 "52=0x18030000:0x1803FFFF" -j DROP
     
     
  • 2.10, Онаним (?), 11:06, 11/04/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Судя по этому, да:

    options = OptionParser(usage='%prog server [options]', description='Test for SSL heartbeat vulnerability (CVE-2014-0160)')
    options.add_option('-p', '--port', type='int', default=443, help='TCP port to test (default: 443)')

    Попробую на почтовике.

     
  • 2.12, pavlinux (ok), 11:53, 11/04/2014 [^] [^^] [^^^] [ответить]  
  • +/
    У меня сегодня около 6 утра сработало,на 465 порту, причем адрес источника - наша офисная сеть.
    Сижу разбираюсь.


    128.140.169.183 - mail.ru банит

    DKIM: d=mail.ru s=mail2 c=relaxed/relaxed a=rsa-sha256 [verification succeeded]
    P=esmtps X=TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32

     
     
  • 3.13, Онаним (?), 13:13, 11/04/2014 [^] [^^] [^^^] [ответить]  
  • +/
    iptables -t filter -A INPUT -p tcp --dport 465 -m u32 --u32 "52=0x18030000:0x1803FFFF" -j DROP

    Или я дурак или лыжи не едут. Но в этом правиле гвоздями прибито смещение сигнатуры, в то время как, что IP заголовок, что TCP заголовок имеют переменную длину!!! Выходит, что это правило сглючит, если в IP заголовке будут опции (ну и в TCP тоже).
    Проскочить IP заголовок можно так "0>>22&0x3C", а IP TCP заголовки так "0>>22&0x3C@ 12>>26&0x3C@".
    Вот хорошая статья http://www.stearns.org/doc/iptables-u32.current.html
    Но вот что искать в TCP данных (payload) не ясно. Только если исходить из того, что аффтор правила подразумевал заголовки IP и TCP по 20 байт, то выходит что надо как то так:

    iptables -t filter -A INPUT -p tcp --dport 465 -m u32 --u32 "0>>22&0x3C@ 12>>26&0x3C@12=0x18030000:0x1803FFFF" -j DROP

     
     
  • 4.14, pavlinux (ok), 14:56, 11/04/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > ... аффтор правила подразумевал

    Аффтор подразумевал, что коннект идёт на 443 порт и там кроме HTTPS ничего нет.

    Вот тут кусок hex взят непосредственно их кода эксплойта.

    iptables -I INPUT -p tcp -m string --algo kmp --hex-string '|18 03 02 00 03 01 40 00|' \
                                 -j LOG --log-level debug --log-prefix "ScriptKiddy detected: "

    18 - Heartbeat расширение
    03 01 - TLS v1.0 (03 02 - TLS v1.1, 03 03 - TLS v1.2)
    00 03 - длина заголовка (18,03,01)
    01 - Heartbeat request (02 - ответ)
    40 00 - размер (по стандарту - может быть не более 2^16 (0x4000))

    Банить, кроме как Heartbeat request, не вижу смысла.
    Лень смотреть, узнать бы в какой мин. версии TLS это поддерживается.

    Ловить нужно вот такие байты (строки)

    от 0x1803010003010000 до 0x1803010003014000 # TLS 1.0
    от 0x1803020003010000 до 0x1803010003014000 # TLS 1.1
    от 0x1803030003010000 до 0x1803010003014000 # TLS 1.2

    Как это всунуть в u32 - лень думать :)


    Или даже вот такой длины: 0x180301000301, ибо пофиг какой он там размер запросит.

     

  • 1.22, Аноним (-), 17:09, 27/04/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Для UDP портов подобное правило годится?
    iptables -t filter -A INPUT -p udp --dport 1194 -m u32 --u32 "52=0x18030000:0x1803FFFF" -j DROP
     
  • 1.23, VecH (ok), 08:39, 30/04/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А как это можно в Mikrotik-ах сделать ?
     
     
  • 2.24, Анонимчег (?), 08:10, 03/05/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Читать документацию Mikrotik, в которой сказано, что RouterOS данной проблеме не подвержена, так как использует openssl более старой версии.
     
     
  • 3.26, VecH (ok), 10:22, 03/05/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > Читать документацию Mikrotik, в которой сказано, что RouterOS данной проблеме не подвержена,
    > так как использует openssl более старой версии.

    Мне это надо что бы мониторить сквозной трафик из вне в dmz на предмет попыток

     
  • 2.25, Анонимчег (?), 08:15, 03/05/2014 [^] [^^] [^^^] [ответить]  
  • +/
    http://forum.mikrotik.com/viewtopic.php?f=2&t=84005
     

  • 1.28, pincher (??), 11:24, 11/05/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Уязвимые продукты Киски Список будет обновляться по мере расследования инцидент... большой текст свёрнут, показать
     
     
  • 2.33, linux must _RIP__ (?), 19:35, 27/05/2014 [^] [^^] [^^^] [ответить]  
  • +/
    связалась циска с линуксом и получила себе такой подарок..
     
     
  • 3.34, Andrey Mitrofanov (?), 09:44, 28/05/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > связалась циска с линуксом и получила себе такой подарок..

    Тебе с РИПом в мозгу даже такой подарок не светит. Передёргивать с openssl на "линукс", как симптоматично... Пациент, таблетки!

     
  • 3.36, Аноним (-), 22:45, 09/06/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Пади ж ты, а сколько в самой Цыцке анального добра помимо этой уязвимости в библиотеке OpenSSL, которая из проекта OpenBSD.
     

  • 1.29, Аноним (-), 00:50, 14/05/2014 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Кто расскажет, зачем эти попытки блокировать, если уязвимость устранена?
     
     
  • 2.30, Andrey Mitrofanov (?), 09:37, 14/05/2014 [^] [^^] [^^^] [ответить]  
  • +/
    > Кто расскажет, зачем эти попытки блокировать, если уязвимость устранена?

    Для экономии электричества.
    На своей стороне, и перевод её, экономии, в расход на стороне ботнета.

     
     
  • 3.32, Аноним (-), 04:35, 25/05/2014 [^] [^^] [^^^] [ответить]  
  • –1 +/
    тогда почему там DROP, а не TARPIT?
     
  • 2.35, leon55 (ok), 11:41, 02/06/2014 [^] [^^] [^^^] [ответить]  
  • +/
    Например, не в любом продакшне вы можете с лёгкостью апдейтить пакеты :).
    Некоторым проще временно (с) добавить правило в файрволл, а потом, при возможности - сделать yum update openssl :).
     


     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру