Рубрика: Без рубрики

  • Apple меняет правила игры на рынке рекламы мобильных приложений

    Apple меняет правила игры на рынке рекламы мобильных приложений

     Платформы Facebook, Twitter и Google на следующей неделе должны представить финансовые результаты за третий квартал 2021 года, накануне их акции рухнули вслед за бумагами соцсети Snap, рекламный бизнес которой «просел» в июле — сентябре из-за новой политики конфиденциальности Apple

    доходы Google adSense значительно просели из-за действий конкурента

    В апреле 2021 года Apple изменила политику конфиденциальности для iOS-приложений: новшества коснулись и рекламы, которую партнеры Snap, Facebook, Google и Twitter показывали пользователям, основываясь на данных о них. Раньше пользователь, скачивая приложение, по умолчанию давал согласие на использование своих данных, а запрещать их сбор нужно было отдельным действием, однако теперь владелец приложения не может обрабатывать данные пользователя, пока тот специально не даст на это согласие.

    «Наш рекламный бизнес был подорван изменениями, которые Apple внесла в правила отслеживания в рекламных целях для пользователей iOS в июне и июле. Новое решение Apple не масштабировалось, как мы того ожидали, что затрудняло для наших рекламных партнеров управление и измерение их рекламных кампаний», — заявил во время конференц-колла сооснователь Snap Эван Шпигель.  

    Влияние изменений в работе iOS для Facebook будет наиболее заметным по итогам третьего квартала 2021 года, но должно ослабнуть в четвертом квартале, писали аналитики Goldman Sachs в записке для инвесторов от 7 октября.

    Нововведения от Apple могут полностью перестроить рынок онлайн-рекламы, говорит Шатов из Capital Lab: «Ситуация в моменте является критичной для компаний, где основная часть дохода формируется за счет продажи рекламы». Изменения коснулись не только технологических компаний, но и бизнеса, игроков на рынке e-commerce, указывает The Wall Street Journal.

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

    Цены на рекламу в Facebook уже выросли для рекламодателей на 25%. При этом небольшие бизнесы, которые продвигают свои товары и услуги в основном через Facebook и Instagram, изменения в политике конфиденциальности Apple вынудили сократить расходы на рекламу, пишет The Wall Street Journal.

  • Google выпустил AdSense Management API v2

    Google выпустил AdSense Management API v2

    Google объявил о выходе 2-й версии AdSense Management API. Она стала доступна 19 апреля.

    В этой версии появилась возможность получать статус сайтов в учетной записи. Она также приводит AdSense Management API в соответствие с текущими стандартами Google в отношении API.

    Версия 1.4 переведена в разряд устаревших. Ее поддержка будет прекращена 12 октября 2021 года.

    Google выпустил AdSense Management API v2

    Основные изменения в новой версии:

    • Все устаревшие методы в v1.4 в версии 2.0 были удалены. Сюда входят методы ресурсов, для которых не указан аккаунт AdSense.
    • Ресурсы теперь идентифицируются по полю имени. Например, имя AdClient будет выглядеть так: accounts / {accountId} / adclients / {adClientId}.
    • В v2 данные отчетов AdSense Management API теперь согласованы с пользовательским интерфейсом AdSense. Это означает, что свойства AdMob и YouTube больше не поддерживаются. Если вам нужно и дальше получать данные из AdMob программным способом, перейдите на API AdMob. Кроме того, AdSense Management API поддерживает данные отчетов только за 3 года.

    Со всем списком изменений можно ознакомиться в примечаниях к выпуску.

  • DDOS атаки на маршрутизатор и методы защиты Juniper routing engine

    По долгу службы мне часто приходится сталкиваться с DDOS на сервера, но некоторое время назад столкнулся с другой атакой, к которой был не готов. Атака производилась на маршрутизатор Juniper MX80 поддерживающий BGP сессии и выполняющий анонс сетей дата-центра. Целью атакующих был веб-ресурс расположенный на одном из наших серверов, но в результате атаки, без связи с внешним миром остался весь дата-центр. Подробности атаки, а также тесты и методы борьбы с такими атаками под катом. 

    История атаки


    Исторически сложилось, что на маршрутизаторе блокируется весь UDP трафик летящий в нашу сеть. Первая волна атаки (в 17:22) была как раз UDP трафиком, график unicast пакетов с аплинка маршрутизатора:

    график unicast пакетов с аплинка маршрутизатора
    и график unicast пакетов с порта свича подключенного к роутеру:
    график unicast пакетов с порта свича подключенного к роутеру

    демонстрируют, что весь трафик осел на фильтре маршрутизатора. Поток unicast пакетов на аплинке маршрутизатора увеличился на 400 тысяч и атака только UDP пакетами продолжалась до 17:33. Далее атакующие изменили стратегию и добавили к атаке UDP еще и атаку TCP SYN пакетами на атакуемый сервер, а также на сам маршрутизатор. Как видно по графику, маршрутизатору стало настолько плохо, что он перестал отдавать SNMP в zabbix. После волны SYN на порты маршрутизатора стали отваливаться BGP сессии с пирами (используется три аплинка с каждого получаем full view по ipv4 и по ipv6), в логах появились трагические записи:

    Jun 27 17:35:07 ROUTER rpd[1408]: bgp_hold_timeout:4035: NOTIFICATION sent to ip.ip.ip.ip (External AS 1111): code 4 (Hold Timer Expired Error), Reason: holdtime expired for ip.ip.ip.ip (External AS 1111), socket buffer sndcc: 19 rcvcc: 0 TCP state: 4, snd_una: 1200215741 snd_nxt: 1200215760 snd_wnd: 15358 rcv_nxt: 4074908977 rcv_adv: 4074925361, hold timer out 90s, hold timer remain 0s
    Jun 27 17:35:33 ROUTER rpd[1408]: bgp_hold_timeout:4035: NOTIFICATION sent to ip.ip.ip.ip (External AS 1111): code 4 (Hold Timer Expired Error), Reason: holdtime expired for ip.ip.ip.ip (External AS 1111), socket buffer sndcc: 38 rcvcc: 0 TCP state: 4, snd_una: 244521089 snd_nxt: 244521108 snd_wnd: 16251 rcv_nxt: 3829118827 rcv_adv: 3829135211, hold timer out 90s, hold timer remain 0s
    Jun 27 17:37:26 ROUTER rpd[1408]: bgp_hold_timeout:4035: NOTIFICATION sent to ip.ip.ip.ip (External AS 1111): code 4 (Hold Timer Expired Error), Reason: holdtime expired for ip.ip.ip.ip (External AS 1111), socket buffer sndcc: 19 rcvcc: 0 TCP state: 4, snd_una: 1840501056 snd_nxt: 1840501075 snd_wnd: 16384 rcv_nxt: 1457490093 rcv_adv: 1457506477, hold timer out 90s, hold timer remain 0s


    Как было выяснено позже, после атаки, волна TCP SYN увеличила нагрузку на routing engine маршрутизатора после чего упали все BGP сессии и маршрутизатор не смог самостоятельно восстановить работу. Атака на маршрутизатор длилась несколько минут, но из-за дополнительной нагрузки, маршрутизатор не мог обработать full view с трех аплинков и сессии снова рвались. Восстановить работу удалось только поочередным поднятием всех BGP сессий. Дальнейшая атака шла на сам сервер.

    Испытание в условиях стенда и воспроизведение атаки


    В качестве цели атаки использовался Juniper MX80 с той же версией прошивки, что и на боевом роутере. В качестве атакующего использовался сервер с 10Gb картой и установленной на нем ubuntu server + quagga. Генератором трафика выступал скрипт с вызовом утилиты hping3. Для проверки пагубного воздействия “всплесков” трафика, скрипт генерировал трафик с временными разрывами: 30 секунд атака — 2 секунды атаки нет. Также, для чистоты эксперимента, была поднята BGP сессия между маршрутизатором и сервером. В установленной на тот момент конфигурации боевого маршрутизатора, порты BGP и SSH были открыты на всех интерфейсах/адресах маршрутизатора и не фильтровались. Аналогичная конфигурация была перенесена на стендовый маршрутизатор.

    Первым этапом испытаний стала атака TCP SYN на BGP (179) порт маршрутизатора. IP адрес источника совпадал с адресом пира в конфигурации маршрутизатора. IP address spoofing не исключался, так как у наших аплинков не включен uPRF. Сессия была установлена. Со стороны quagga:

    BGP router identifier 9.4.8.2, local AS number 9123
    RIB entries 3, using 288 bytes of memory
    Peers 1, using 4560 bytes of memory

    Neighbor V AS MsgRcvd MsgSent TblVer InQ OutQ Up/Down State/PfxRcd
    9.4.8.1 4 1234 1633 2000 0 0 0 00:59:56 0

    Total number of neighbors 1


    Со стороны Juniper:

    user@MX80> show bgp summary 
    Groups: 1 Peers: 1 Down peers: 0
    Table Tot Paths Act Paths Suppressed History Damp State Pending
    inet.0
    2 1 0 0 0 0
    Peer AS InPkt OutPkt OutQ Flaps Last Up/Dwn State|#Active/Received/Accepted/Damped...
    9.4.8.2 4567 155 201 0 111 59:14 1/2/2/0 0/0/0/0


    После начала атаки (13:52) на маршрутизатор летит ~1.2 Mpps трафика:
    на маршрутизатор летит ~1.2 Mpps трафика

    или 380Mbps:
    на маршрутизатор летит 380 Mpps трафика
    Нагрузка на CPU RE и CPU FE маршрутизатора возрастает:
    Нагрузка на CPU RE и CPU FE маршрутизатора возрастает
    После задержки (90 сек) BGP сессия падает и больше не поднимается:

    Jul 4 13:54:01 MX80 rpd[1407]: bgp_hold_timeout:4035: NOTIFICATION sent to 9.4.8.2 (External AS 4567): code 4 (Hold Timer Expired Error), Reason: holdtime expired for 9.4.8.2 (External AS 4567), socket buffer sndcc: 38 rcvcc: 0 TCP state: 4, snd_una: 3523671294 snd_nxt: 3523671313 snd_wnd: 114 rcv_nxt: 1556791630 rcv_adv: 1556808014, hold timer out 90s, hold timer remain 0s


    Маршрутизатор занят обработкой прилетающего TCP SYN на порт BGP и не может установить сессию. На порту множество пакетов:

    user@MX80> monitor traffic interface ge-1/0/0 count 20 
    13:55:39.219155 In IP 9.4.8.2.2097 > 9.4.8.1.bgp: S 1443462200:1443462200(0) win 512
    13:55:39.219169 In IP 9.4.8.2.27095 > 9.4.8.1.bgp: S 295677290:295677290(0) win 512
    13:55:39.219177 In IP 9.4.8.2.30114 > 9.4.8.1.bgp: S 380995480:380995480(0) win 512
    13:55:39.219184 In IP 9.4.8.2.57280 > 9.4.8.1.bgp: S 814209218:814209218(0) win 512
    13:55:39.219192 In IP 9.4.8.2.2731 > 9.4.8.1.bgp: S 131350916:131350916(0) win 512
    13:55:39.219199 In IP 9.4.8.2.2261 > 9.4.8.1.bgp: S 2145330024:2145330024(0) win 512
    13:55:39.219206 In IP 9.4.8.2.z39.50 > 9.4.8.1.bgp: S 1238175350:1238175350(0) win 512
    13:55:39.219213 In IP 9.4.8.2.2098 > 9.4.8.1.bgp: S 1378645261:1378645261(0) win 512
    13:55:39.219220 In IP 9.4.8.2.30115 > 9.4.8.1.bgp: S 1925718835:1925718835(0) win 512
    13:55:39.219227 In IP 9.4.8.2.27096 > 9.4.8.1.bgp: S 286229321:286229321(0) win 512
    13:55:39.219235 In IP 9.4.8.2.2732 > 9.4.8.1.bgp: S 1469740166:1469740166(0) win 512
    13:55:39.219242 In IP 9.4.8.2.57281 > 9.4.8.1.bgp: S 1179645542:1179645542(0) win 512
    13:55:39.219254 In IP 9.4.8.2.2262 > 9.4.8.1.bgp: S 1507663512:1507663512(0) win 512
    13:55:39.219262 In IP 9.4.8.2.914c/g > 9.4.8.1.bgp: S 1219404184:1219404184(0) win 512
    13:55:39.219269 In IP 9.4.8.2.2099 > 9.4.8.1.bgp: S 577616492:577616492(0) win 512
    13:55:39.219276 In IP 9.4.8.2.267 > 9.4.8.1.bgp: S 1257310851:1257310851(0) win 512
    13:55:39.219283 In IP 9.4.8.2.27153 > 9.4.8.1.bgp: S 1965427542:1965427542(0) win 512
    13:55:39.219291 In IP 9.4.8.2.30172 > 9.4.8.1.bgp: S 1446880235:1446880235(0) win 512
    13:55:39.219297 In IP 9.4.8.2.57338 > 9.4.8.1.bgp: S 206377149:206377149(0) win 512
    13:55:39.219305 In IP 9.4.8.2.2789 > 9.4.8.1.bgp: S 838483872:838483872(0) win 512


    Вторым этапом испытаний стала атака TCP SYN на BGP (179) порт маршрутизатора. IP адрес источника выбирался случайно и не совпадал с адресом пира указанным в конфигурации маршрутизатора. Эта атака произвела на маршрутизатор такой же эффект. Дабы не растягивать статью однообразными выводами логов, приведу только график нагрузки:

    график нагрузки CPU

    По графику отчетливо видно момент начала атаки. BGP сессия также упала и не смогла восстановиться.

    Концепция построения защиты RE маршрутизатора


    Особенность работы оборудования Juniper заключается в разделении задач между routing engine (RE) и packet forwarding engine (PFE). PFE обрабатывает весь поток проходящего трафика осуществляя его фильтрацию и маршрутизацию по заранее сформированной схеме. RE занимается обработкой прямых обращений к маршрутизатору (traceroute, ping, ssh), обработкой пакетов для служб BGP, NTP, DNS, SNMP и формирует схемы фильтрации и маршрутизации трафика для PFE маршрутизатора. 

    Основная идея защиты маршрутизатора состоит в фильтрации всего трафика предназначенного для RE. Создание фильтра позволит перенести нагрузку, создаваемую DDOS атакой, с CPU RE на CPU PFE маршрутизатора, что даст возможность RE обрабатывать только реальные пакеты и не тратить процессорное время на другой трафик. Для построения защиты необходимо определить, что фильтруем. Схема написания фильтров для IPv4 была взята из книги Douglas Hanks Jr. — Day One Book: Securing the Routing Engine on M, MX and T series. В моем случае на маршрутизаторе схема была следующей:

    По протоколу IPv4

    • BGP — фильтруем пакеты по source и destination ip, source ip может быть любой из списка bgp neighbor. Разрешаем только подключения tcp established, то есть фльтр будет отбрасывать все SYN прилетающие на этот порт, а сессия BGP будет начинаться только от нас (BGP сосед аплинка работает в пассивном режиме).
    • TACACS+ — фильтруем пакеты по source и destination ip, source ip может быть только из внутренней сети. Ограничиваем полосу пропускания в 1Mb/s.
    • SNMP — фильтруем пакеты по source и destination ip, source ip может быть любой из списка snmp-clients в конфигурации.
    • SSH — фильтруем пакеты по destination ip, source ip может быть любой, так как есть необходимость экстренного доступа к устройству из любой сети. Ограничиваем полосу пропускания в 5Mb/s.
    • NTP — фильтруем пакеты по source и destination ip, source ip может быть любой из списка ntp servers конфигурации. Ограничиваем полосу пропускания в 1Mb/s (в дальнейшем порог был уменьшен до 512Kb/s).
    • DNS — фильтруем пакеты по source и destination ip, source ip может быть любой из списка dns servers конфигурации. Ограничиваем полосу пропускания в 1Mb/s.
    • ICMP — фильтруем пакеты, пропускаем только на адреса принадлежащие маршрутизатору. Ограничиваем полосу пропускания в 5Mb/s (в дальнейшем порог был уменьшен до 1Mb/s).
    • TRACEROUTE — фильтруем пакеты, пропускаем только пакеты с TTL равным 1 и только на адреса принадлежащие маршрутизатору. Ограничиваем полосу пропускания в 1Mb/s.


    По протоколу IPv6, в моем случае, фильтры накладывались только на BGP, NTP, ICMP, DNS и traceroute. Единственное отличие в фильтрации ICMP трафика, так как IPv6 использует ICMP в служебных целях. Остальные протоколы не использовали IPv6 адресацию. 

    Написание конфигурации


    Для написания фильтров в juniper существует удобный инструмент — prefix-list, который позволяет динамически составлять списки ip адресов/подсетей для подстановки в фильтры. Например, для создания списка адресов ipv4 BGP соседей указанных в конфигурации, используется следующая структура:

    prefix-list BGP-neighbors-v4 {
    apply-path "protocols bgp group <*> neighbor <*.*>";
    }


    результат составления списка:

    show configuration policy-options prefix-list BGP-neighbors-v4 | display inheritance 
    ##
    ## apply-path was expanded to:
    ## 1.1.1.1/32;
    ## 2.2.2.2/32;
    ## 3.3.3.3/32;
    ##
    apply-path «protocols bgp group <*> neighbor <*.*>»;


    Составляем динамические списки префиксов для всех фильтров:


    /* Список всех ipv4 адресов соседей BGP */
    prefix-list BGP-neighbors-v4 {
    apply-path "protocols bgp group <*> neighbor <*.*>";
    }
    /* Список всех ipv6 адресов соседей BGP */
    prefix-list BGP-neighbors-v6 {
    apply-path "protocols bgp group <*> neighbor <*:*>";
    }
    /* Список всех ipv4 серверов NTP */
    prefix-list NTP-servers-v4 {
    apply-path "system ntp server <*.*>";
    }
    /* Список всех ipv6 серверов NTP */
    prefix-list NTP-servers-v6 {
    apply-path "system ntp server <*:*>";
    }
    /* Список всех ipv4 адресов назначеных роутеру */
    prefix-list LOCALS-v4 {
    apply-path "interfaces <*> unit <*> family inet address <*>";
    }
    /* Список всех ipv6 адресов назначеных роутеру */
    prefix-list LOCALS-v6 {
    apply-path "interfaces <*> unit <*> family inet6 address <*>";
    }
    /* Список всех ipv4 адресов SNMP клиентов */
    prefix-list SNMP-clients {
    apply-path "snmp client-list <*> <*>";
    }
    prefix-list SNMP-community-clients {
    apply-path "snmp community <*> clients <*>";
    }
    /* Список всех серверов TACACS+ */
    prefix-list TACPLUS-servers {
    apply-path "system tacplus-server <*>";
    }
    /* Список адресов роутера которые принадлежат внутренней сети */
    prefix-list INTERNAL-locals {
    /* В моем случае лучший вариант - ручное указание адреса */
    192.168.0.1/32;
    }
    /* Список адресов роутера на интерфейсе управления, для доступа по SSH */
    prefix-list MGMT-locals {
    apply-path "interfaces fxp0 unit 0 family inet address <*>";
    }
    /* Приватные сети */
    prefix-list rfc1918 {
    10.0.0.0/8;
    172.16.0.0/12;
    192.168.0.0/16;
    }
    /* Loopback */
    prefix-list localhost-v6 {
    ::1/128;
    }
    prefix-list localhost-v4 {
    127.0.0.0/8;
    }
    /* Список всех ipv4 локальных адресов BGP */
    prefix-list BGP-locals-v4 {
    apply-path "protocols bgp group <*> neighbor <*.*> local-address <*.*>";
    }
    /* Список всех ipv6 локальных адресов BGP */
    prefix-list BGP-locals-v6 {
    apply-path "protocols bgp group <*> neighbor <*:*> local-address <*:*>";
    }
    /* Список всех ipv4 серверов DNS */
    prefix-list DNS-servers-v4 {
    apply-path "system name-server <*.*>";
    }
    /* Список всех ipv6 серверов DNS */
    prefix-list DNS-servers-v6 {
    apply-path "system name-server <*:*>";
    }


    Составляем политики для ограничения пропускной способности:

    /* Ограничение в 1Mb */
    policer management-1m {
    apply-flags omit;
    if-exceeding {
    bandwidth-limit 1m;
    burst-size-limit 625k;
    }
    /* Все что не помещается дропаем */
    then discard;
    }
    /* Ограничение в 5Mb */
    policer management-5m {
    apply-flags omit;
    if-exceeding {
    bandwidth-limit 5m;
    burst-size-limit 625k;
    }
    /* Все что не помещается дропаем */
    then discard;
    }
    /* Ограничение в 512Kb */
    policer management-512k {
    apply-flags omit;
    if-exceeding {
    bandwidth-limit 512k;
    burst-size-limit 25k;
    }
    /* Все что не помещается дропаем */
    then discard;
    }


    Ниже, под «копи-паст», конфигурация фильтров конечного варианта защиты (были уменьшены пороги пропускной способности трафика NTP и ICMP, причины снижения порогов подробно описаны в разделе тестирования). Настраиваем фильтры ipv4:

    IPv4 filter


    Аналогичный фильтр для ipv6:

    IPv6 filter


    Далее необходимо применить фильтры на служебный интерфейс lo0.0. В системе JunOS этот интерфейс используется для передачи данных между PFE и RE. Конфигурация примет следующий вид:

    lo0 {
    unit 0 {
    family inet {
    filter {
    input-list [ accept-bgp accept-common-services discard-all ];
    }
    }
    family inet6 {
    filter {
    input-list [ accept-v6-bgp accept-v6-common-services discard-v6-all ];
    }
    }
    }
    }


    Порядок указания фильтров в input-list интерфейса очень важен. Каждый пакет будет проверяться на валидность проходя по фильтрам указанным в input-list слева направо.

    Тестирование фильтров


    После применения фильтров, провел ряд тестов на том же стенде. После каждого теста выполнялась очистка счетчиков firewall. Нормальная (без атаки) нагрузка на роутере видна на графиках в 11:06 — 11:08. График pps за весь период тестов:
    pps за весь период тестов
    График CPU за весь период тестов:
    график CPU за весь период тестов

    Первым проводился тест флуда icmp c порогом трафика 5Мб/с (на графиках 10:21 — 10:24). По счетчикам фильтра и на графике видно ограничение по трафика по пропускной способности, но даже этого потока было достаточно для повышения нагрузки, поэтому порог был уменьшен до 1Мб/с. Счетчики:

    Filter: lo0.0-i                                                
    Counters:
    Name Bytes Packets
    accept-bgp-lo0.0-i 0 0
    accept-icmp-lo0.0-i 47225584 1686628
    accept-ntp-lo0.0-i 152 2
    accept-snmp-lo0.0-i 174681 2306
    accept-ssh-lo0.0-i 38952 702
    accept-traceroute-icmp-lo0.0-i 0 0
    accept-traceroute-tcp-lo0.0-i 841 13
    accept-traceroute-udp-lo0.0-i 0 0
    discard-TTL_1-unknown-lo0.0-i 0 0
    discard-icmp-lo0.0-i 0 0
    discard-icmp-fragments-lo0.0-i 0 0
    discard-ip-options-lo0.0-i 0 0
    discard-tcp-lo0.0-i 780 13
    discard-udp-lo0.0-i 18743 133
    discard-unknown-lo0.0-i 0 0
    Policers:
    Name Bytes Packets
    management-1m-accept-ntp-lo0.0-i 0 0
    management-1m-accept-traceroute-icmp-lo0.0-i 0 0
    management-1m-accept-traceroute-tcp-lo0.0-i 0 0
    management-1m-accept-traceroute-udp-lo0.0-i 0 0
    management-5m-accept-icmp-lo0.0-i 933705892 33346639
    management-5m-accept-ssh-lo0.0-i 0 0


    Повторный тест флуда icmp c порогом трафика 1Мб/с (на графиках 10:24 — 10:27). Нагрузка на RE роутера упала с 19% до 10%, нагрузка на PFE до 30%. Счетчики:

    Filter: lo0.0-i                                                
    Counters:
    Name Bytes Packets
    accept-bgp-lo0.0-i 0 0
    accept-icmp-lo0.0-i 6461448 230766
    accept-ntp-lo0.0-i 0 0
    accept-snmp-lo0.0-i 113433 1497
    accept-ssh-lo0.0-i 33780 609
    accept-traceroute-icmp-lo0.0-i 0 0
    accept-traceroute-tcp-lo0.0-i 0 0
    accept-traceroute-udp-lo0.0-i 0 0
    discard-TTL_1-unknown-lo0.0-i 0 0
    discard-icmp-lo0.0-i 0 0
    discard-icmp-fragments-lo0.0-i 0 0
    discard-ip-options-lo0.0-i 0 0
    discard-tcp-lo0.0-i 360 6
    discard-udp-lo0.0-i 12394 85
    discard-unknown-lo0.0-i 0 0
    Policers:
    Name Bytes Packets
    management-1m-accept-icmp-lo0.0-i 665335496 23761982
    management-1m-accept-ntp-lo0.0-i 0 0
    management-1m-accept-traceroute-icmp-lo0.0-i 0 0
    management-1m-accept-traceroute-tcp-lo0.0-i 0 0
    management-1m-accept-traceroute-udp-lo0.0-i 0 0
    management-5m-accept-ssh-lo0.0-i 0 0


    Следующим был проведен тест флуда на порт BGP роутера с постороннего (не включеного в конфиг) ip адреса (на графиках 10:29 — 10:36). Как видно из счетчиков, весь флуд осел на discard-tcp фильтре RE и лишь увеличил нагрузку на PFE. Нагрузка на RE не изменилась. Счетчики:

    Filter: lo0.0-i                                                
    Counters:
    Name Bytes Packets
    accept-bgp-lo0.0-i 824 26
    accept-icmp-lo0.0-i 0 0
    accept-ntp-lo0.0-i 0 0
    accept-snmp-lo0.0-i 560615 7401
    accept-ssh-lo0.0-i 33972 585
    accept-traceroute-icmp-lo0.0-i 0 0
    accept-traceroute-tcp-lo0.0-i 1088 18
    accept-traceroute-udp-lo0.0-i 0 0
    discard-TTL_1-unknown-lo0.0-i 0 0
    discard-icmp-lo0.0-i 0 0
    discard-icmp-fragments-lo0.0-i 0 0
    discard-ip-options-lo0.0-i 0 0
    discard-tcp-lo0.0-i 12250785600 306269640
    discard-udp-lo0.0-i 63533 441
    discard-unknown-lo0.0-i 0 0
    Policers:
    Name Bytes Packets
    management-1m-accept-icmp-lo0.0-i 0 0
    management-1m-accept-ntp-lo0.0-i 0 0
    management-1m-accept-traceroute-icmp-lo0.0-i 0 0
    management-1m-accept-traceroute-tcp-lo0.0-i 0 0
    management-1m-accept-traceroute-udp-lo0.0-i 0 0
    management-5m-accept-ssh-lo0.0-i 0 0


    сессия не падает:

    user@MX80# run show bgp summary                
    Groups: 1 Peers: 1 Down peers: 0
    Table Tot Paths Act Paths Suppressed History Damp State Pending
    inet.0
    2 1 0 0 0 0
    Peer AS InPkt OutPkt OutQ Flaps Last Up/Dwn State|#Active/Received/Accepted/Damped...
    9.4.8.2 4567 21 22 0 76 8:49 1/2/2/0 0/0/0/0


    Четвертым был проведен тест флуда (на графиках 10:41 — 10:46) UDP на порт NTP (в настройках фильтра взаимодействие по этому порту ограничивается серверами указанными в конфиге роутера). По графику, нагрузка поднимается только на PFE роутера до 28%. Счетчики:

    Filter: lo0.0-i                                                
    Counters:
    Name Bytes Packets
    accept-bgp-lo0.0-i 0 0
    accept-icmp-lo0.0-i 0 0
    accept-ntp-lo0.0-i 0 0
    accept-snmp-lo0.0-i 329059 4344
    accept-ssh-lo0.0-i 22000 388
    accept-traceroute-icmp-lo0.0-i 0 0
    accept-traceroute-tcp-lo0.0-i 615 10
    accept-traceroute-udp-lo0.0-i 0 0
    discard-TTL_1-unknown-lo0.0-i 0 0
    discard-icmp-lo0.0-i 0 0
    discard-icmp-fragments-lo0.0-i 0 0
    discard-ip-options-lo0.0-i 0 0
    discard-tcp-lo0.0-i 0 0
    discard-udp-lo0.0-i 1938171670 69219329
    discard-unknown-lo0.0-i 0 0
    Policers:
    Name Bytes Packets
    management-1m-accept-icmp-lo0.0-i 0 0
    management-1m-accept-ntp-lo0.0-i 0 0
    management-1m-accept-traceroute-icmp-lo0.0-i 0 0
    management-1m-accept-traceroute-tcp-lo0.0-i 0 0
    management-1m-accept-traceroute-udp-lo0.0-i 0 0
    management-5m-accept-ssh-lo0.0-i 0 0


    Пятым был проведен тест флуда (на графиках 10:41 — 11:04) UDP на порт NTP с IP spoofing. Нагрузка на RE увеличилась на 12%, нагрузка на PFE увеличилась до 22%. По счетчикам видно, что флуд упирается в порог 1Мб/с, но этого достаточно для повышения нагрузки на RE. Порог трафика в итоге был уменьшен до 512Кб/с. Счетчики:

    Filter: lo0.0-i                                                
    Counters:
    Name Bytes Packets
    accept-bgp-lo0.0-i 0 0
    accept-icmp-lo0.0-i 0 0
    accept-ntp-lo0.0-i 34796804 1242743
    accept-snmp-lo0.0-i 630617 8324
    accept-ssh-lo0.0-i 20568 366
    accept-traceroute-icmp-lo0.0-i 0 0
    accept-traceroute-tcp-lo0.0-i 1159 19
    accept-traceroute-udp-lo0.0-i 0 0
    discard-TTL_1-unknown-lo0.0-i 0 0
    discard-icmp-lo0.0-i 0 0
    discard-icmp-fragments-lo0.0-i 0 0
    discard-ip-options-lo0.0-i 0 0
    discard-tcp-lo0.0-i 0 0
    discard-udp-lo0.0-i 53365 409
    discard-unknown-lo0.0-i 0 0
    Policers:
    Name Bytes Packets
    management-1m-accept-icmp-lo0.0-i 0 0
    management-1m-accept-ntp-lo0.0-i 3717958468 132784231
    management-1m-accept-traceroute-icmp-lo0.0-i 0 0
    management-1m-accept-traceroute-tcp-lo0.0-i 0 0
    management-1m-accept-traceroute-udp-lo0.0-i 0 0
    management-5m-accept-ssh-lo0.0-i 0 0


    Повторный тест флуда (на графике ниже 11:29 — 11:34) UDP на порт NTP с IP spoofing, но с порогом трафика 512Кб/с. График нагрузки:
    график нагрузки CPU
    Счетчики:

    Filter: lo0.0-i                                                
    Counters:
    Name Bytes Packets
    accept-bgp-lo0.0-i 0 0
    accept-icmp-lo0.0-i 0 0
    accept-ntp-lo0.0-i 21066260 752363
    accept-snmp-lo0.0-i 744161 9823
    accept-ssh-lo0.0-i 19772 347
    accept-traceroute-icmp-lo0.0-i 0 0
    accept-traceroute-tcp-lo0.0-i 1353 22
    accept-traceroute-udp-lo0.0-i 0 0
    discard-TTL_1-unknown-lo0.0-i 0 0
    discard-icmp-lo0.0-i 0 0
    discard-icmp-fragments-lo0.0-i 0 0
    discard-ip-options-lo0.0-i 0 0
    discard-tcp-lo0.0-i 0 0
    discard-udp-lo0.0-i 82745 602
    discard-unknown-lo0.0-i 0 0
    Policers:
    Name Bytes Packets
    management-1m-accept-icmp-lo0.0-i 0 0
    management-1m-accept-traceroute-icmp-lo0.0-i 0 0
    management-1m-accept-traceroute-tcp-lo0.0-i 0 0
    management-1m-accept-traceroute-udp-lo0.0-i 0 0
    management-512k-accept-ntp-lo0.0-i 4197080384 149895728
    management-5m-accept-ssh-lo0.0-i 0 0


    Заключение


    В итоге всех проведенных тестов удалось получить, устойчивую к DDOS атакам, конфигурацию фильтров трафика RE. В настоящий момент эта конфигурация уже применена на боевом роутере и проблем не выявлено. По счетчикам с боевого MX80:

    Filter: lo0.0-i                                                
    Counters:
    Name Bytes Packets
    accept-v6-bgp-lo0.0-i 31091878 176809
    accept-v6-icmp-lo0.0-i 1831144 26705
    accept-v6-ntp-lo0.0-i 0 0
    accept-v6-traceroute-icmp-lo0.0-i 0 0
    accept-v6-traceroute-tcp-lo0.0-i 48488 684
    accept-v6-traceroute-udp-lo0.0-i 0 0
    discard-v6-icmp-lo0.0-i 0 0
    discard-v6-tcp-lo0.0-i 0 0
    discard-v6-udp-lo0.0-i 0 0
    discard-v6-unknown-lo0.0-i 0 0
    Policers:
    Name Bytes Packets
    management-1m-accept-v6-icmp-lo0.0-i 0 0
    management-1m-accept-v6-traceroute-icmp-lo0.0-i 0 0
    management-1m-accept-v6-traceroute-tcp-lo0.0-i 0 0
    management-1m-accept-v6-traceroute-udp-lo0.0-i 0 0
    management-512k-accept-v6-ntp-lo0.0-i 0 0

    Filter: lo0.0-i
    Counters:
    Name Bytes Packets
    accept-bgp-lo0.0-i 135948400 698272
    accept-dns-lo0.0-i 374 3
    accept-icmp-lo0.0-i 121304849 1437305
    accept-ntp-lo0.0-i 87780 1155
    accept-snmp-lo0.0-i 1265470648 12094967
    accept-ssh-lo0.0-i 2550011 30897
    accept-tacacs-lo0.0-i 702450 11657
    accept-traceroute-icmp-lo0.0-i 28824 636
    accept-traceroute-tcp-lo0.0-i 75378 1361
    accept-traceroute-udp-lo0.0-i 47328 1479
    discard-TTL_1-unknown-lo0.0-i 27790 798
    discard-icmp-lo0.0-i 26400 472
    discard-icmp-fragments-lo0.0-i 0 0
    discard-ip-options-lo0.0-i 35680 1115
    discard-tcp-lo0.0-i 73399674 1572144
    discard-udp-lo0.0-i 126386306 694603
    discard-unknown-lo0.0-i 0 0
    Policers:
    Name Bytes Packets
    management-1m-accept-dns-lo0.0-i 0 0
    management-1m-accept-icmp-lo0.0-i 38012 731
    management-1m-accept-tacacs-lo0.0-i 0 0
    management-1m-accept-traceroute-icmp-lo0.0-i 0 0
    management-1m-accept-traceroute-tcp-lo0.0-i 0 0
    management-1m-accept-traceroute-udp-lo0.0-i 0 0
    management-512k-accept-ntp-lo0.0-i 0 0
    management-5m-accept-ssh-lo0.0-i 0 0


    видно какое количество “левого” трафика оседает на фильтре discard.

    Буду рад ответить на все вопросы в комментариях.

  • Конфігурації мережного устаткування зазвичай забувають видалити за його продажу

    Конфігурації мережного устаткування зазвичай забувають видалити за його продажу

    Аналітики з компанії ESET виявили, що після придбання уживаного маршрутизатора на пристрої нерідко можна виявити забуті конфіденційні дані. Такі дані можуть бути використані для проникнення в корпоративні середовища або отримання інформації про клієнтів.

    Це дослідження почалося з того, що компанія ESET придбала кілька маршрутизаторів для створення тестового середовища, але виявилося, що куплені пристрої не були очищені належним чином і досі містять дані про конфігурацію мережі, а також інформацію, що дозволяє ідентифікувати їх попередніх власників.

    Серед придбаного обладнання було чотири пристрої Cisco (ASA 5500), три Fortinet (серія Fortigate) та 11 девайсів Juniper Networks (SRX Series Services Gateway).

    Загалом дослідники придбали з рук 18 вживаних пристроїв корпоративного рівня. З’ясувалося, що ці зміни, як і раніше, доступні більш ніж на половині з них, і вони все ще актуальні.

    Один пристрій виявився непрацюючим (після чого його виключили з випробувань), а ще два були дзеркалами один одного, і в результаті їх порахували як один. З 16 пристроїв, що залишилися, тільки 5 були очищені належним чином і тільки 2 мали хоч якийсь захист, що ускладнювало доступ до деяких даних.

    На жаль, в більшості випадків на пристроях можна було отримати доступ до повних даних конфігурації, тобто дізнатися безліч подробиць про колишнього власника, як він налаштував мережу, а також про з’єднання між іншими системами.

    Найгірше, деякі з маршрутизаторів зберігали навіть інформацію про клієнтів, дані, які дозволяли сторонньому підключитися до мережі, і навіть «облікові дані для підключення до інших мереж як довірена сторона».

    Крім того, 8 з 9 маршрутизаторів, які розкривали повні дані конфігурації, також містили ключі та хеші для автентифікації між маршрутизаторами. У результаті список корпоративних секретів розширювався до повної «карти» важливих додатків, розміщених локально або у хмарі (включаючи Microsoft Exchange, Salesforce, SharePoint, Spiceworks, VMware Horizon та SQL).

    «З таким рівнем деталізації зловмиснику буде набагато простіше видати себе за мережеві або внутрішні вузли, тим більше що на пристроях часто зберігаються облікові дані VPN або інші токени автентифікації, що легко компрометуються», — пишуть експерти.

    Також, судячи з даних, виявлених у куплених маршрутизаторах, деякі з них раніше працювали в середовищі managed-провайдерів, які обслуговують мережі великих компаній. Наприклад, один девайс взагалі належав постачальнику MSSP (Managed Security Service Provider), який обслуговував мережі сотень клієнтів у різних галузях (освіта, фінанси, охорона здоров’я, виробництво тощо).

    Наводячи цей яскравий приклад, дослідники вкотре нагадують, наскільки важливо правильно очищати мережеві пристрої перед продажем. У компаніях повинні існувати процедури безпечного знищення та утилізації цифрового обладнання. Також експерти зазначають, що використання сторонніх сервісів для цих потреб не є гарною ідеєю. Справа в тому, що повідомивши одного з колишніх власників пристроїв про проблему, дослідники дізналися, що для утилізації обладнання компанія користувалася послугами такого стороннього сервісу. «Щось явно пішло не за планом», — резюмують аналітики.

  • Обзор внутренней инфраструктуры безопасности Google

    Обзор внутренней инфраструктуры безопасности Google

    Обычно компании предпочитают хранить в тайне особенности своей инфраструктуры безопасности, которая стоит на защите дата-центров, полагая, что раскрытие подобной информации может дать атакующим преимущество. Однако представители Google смотрят на этот вопрос иначе. На то есть две причины. Во-первых, публикация таких отчетов позволяет потенциальным пользователям Google Cloud Platform (GCP) оценить безопасность служб компании. Во-вторых, специалисты Google уверены в своих системах безопасности.

    На днях компания обнародовала документ Infrastructure Security Design Overview («Обзор модели инфраструктуры безопасности»), в котором Google достаточно подробно описала свои защитные механизмы. Инфраструктура разделена на шесть слоев, начиная от аппаратных решений (в том числе физических средств защиты), и заканчивая развертыванием служб и идентификацией пользователей.

    Первый слой защиты – это физические системы безопасности, которые просто не позволяют посторонним попасть в дата-центры. Эта часть отчета похожа на отрывок из сценария фильма «Миссия невыполнима»: «Мы используем несколько слоев физической безопасности, чтобы защитить наши дата-центры. Мы применяем такие технологии, как системы биометрической идентификации, детекторы метала, камеры, барьеры, перекрывающие проезд транспортных средств, а также лазерные системы обнаружения проникновений».

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

    Третий уровень защиты — криптография, системы аутентификации и авторизации, которые обеспечивают надежную защиту коммуникаций между различными службами Google (и не важно, в одном дата-центре они расположены или нет, шифруется весь трафик, как внутренний, так и внешний). «Серверные машины Google используют различные технологии, чтобы удостовериться, что они работают с корректным программным стеком. Мы применяем криптографические подписи для таких низкоуровневых компонентов, как BIOS, бутлоадер, ядро и базовый образ ОС. Данные подписи проходят валидацию во время каждой загрузки или обновления. Все компоненты созданы и полностью контролируются Google».

    Работа внутренних систем service identity и access management

    Также Google уделяет особое внимание защите накопителей и имеет системы, призванные максимально осложнить «жизнь» потенциальной вредоносной прошивке и не позволить ей получить доступ к данным. «Мы применяем аппаратное шифрование для наших жестких дисков и SSD, и тщательно отслеживаем жизненный цикл каждого накопителя. Прежде чем зашифрованное устройство хранения будет списано и физически выйдет из-под нашего надзора, оно пройдет многоступенчатый процесс очистки, который включает две независимые проверки. Не прошедшие данную процедуру очистки устройства уничтожаются физически (измельчаются), это происходит локально».

    Кроме того, документ описывает меры безопасности, которые Google применяет для защиты своих исходных кодов и поиска багов в них. Так, проверки кода разделены на проверки, осуществляющиеся вручную, и автоматические. Вручную код проверяет «команда, в которой присутствуют эксперты в областях веб-безопасности, криптографии и безопасности операционных систем». Зачастую в результате таких анализов на свет появляются новые фаззеры и библиотеки безопасности, которые затем используются в других продуктах.

    Что касается исходных кодов, к их защите тоже подходят с большой ответственностью: «Исходные коды Google хранятся в центральном репозитории, где можно провести аудит как текущих, так и прошлых версий сервисов. Дополнительно инфраструктура может быть сконфигурирована таким образом, чтобы запрашивать бинарники сервиса из конкретного, проверенного и протестированного исходного кода. Такие проверки кода должны быть рассмотрены и одобрены по крайней мере еще одним инженером, помимо автора кода. Кроме того, система требует, чтобы модификации кода любых систем были одобрены владельцем данной системы. Эти требования ограничивают возможности инсайдера или нарушителя, не позволяя внести вредоносные изменения в исходные коды, а также создают криминалистический след, который можно отследить от сервиса к его источнику».

    В документе можно найти еще много интересного. К примеру, оказалось, что виртуальные машины в облаках Google работают с кастомной версией гипервизора KVM. Разработчики Google даже похвастались  и сообщили, что сотрудники Google обнаружили больше всех CVE и багов в Linux KVM гипервизоре.