Devesecops — Segurança Para devs (6 серий части)
Este Post Faz Parte de Uma Coleção de Postes Sobre Segurança de Software Ao Longo Do Processo de desenvollimento E Operação (Devesecops). O Tipo de VulnerabiliDade Abordado Neste Artigo é Negação de Serviço Através Da Exploração de Alto Volume De Requisições (пропускная способность).
Negação de Serviço, OU Дос (a.k.a. DDOS), консиденты Emma Série de Técnicas de Exploração que Instabilizam ou até mesmo индиспенибилизам UM Serviço, visando encontrar brechas de segurança ao ao longo da manutenção da instabilidade, Retirá-lo do ar simplemente fazer com ar ou seu custo de infraestrutura aumente detavelmente, Mesmo que o Sistema Não Tenha Sido Expastado.
Owasp 1 Уолкоу Эсте Типо де экспросасãо o Квартируют популярные EM Termos de Brechas de Segurança Para Apis, EM 2019.
Essíval Tentar Retirear UM Serviço Do Ar deventass Maneiras, E Abordaremos Como Mitigar As Três Trankais (Mas Neste Artigo Falaremos Apenas Da Primeira):
1) Sabendo Lidar Com Altas Taxas de quisições ( Пропускная способность ); 2) Sabendo Lidar Com Altas Cargas Em Cada Requisição ( Payload ); 3) Лимитандо Таманхо де Пагами, — рекурс.
COMO Идентифицирован UM DOS
O PAMEIRO PASSO É ИДЕНТИФИКАТОРЫ UMA SITUAçãO de Дос Отказ Geralmente Fazemos Isso Analisando Métricas de Acesso Ou Logs de Requisição.
SE VOCO AINDA NãAO TEM CERTEZA DA SITUACHãO, COMECE ANALISANDO A kantidade de requisições que o seu sistema tem requibido nos últimos minutos/horas, Предпочтение Закупка PELO пропускная способность Недавнее Д.Д. Система (например, Total de Requisições por Segundo ou quisições por minuto). SE Easkee Uma Tentativa de Дос Говорим Perceberám um Aummo Sethrevel No Número de quisições em pequenos intermalos de tempo. POR Exemplo, SE VOCê SESIVER Visualizando UM Gráfico, Eledaria UM CRECCIMETO:
Applicações Como AWS CloudWatch, NewRelic, Datadog, Nginx Amberify Trivess Diversos Destes Tipos de Gráficos. Герализма ELES SãO O PALLIRO INDICIO DE QUE ALGO ESTA INCOMUM.
SE VOCO NãO TIVER ESSAS Informações, закупка NOS Logs de Acesso de Seus Servidores. Comece Analisando «de fora para dentro» (Por Exemplo, SE SUA ARQUITETURA TEM BALANCER BALANCER OU PROXY REVERSO, COMECE POR ELES, E DEPOIS OS Servidores de Alokação E Assim Por Diante).
Por Exemplo, UM log de Acesso Normal Do nginx Серия:
2020-06-05T10:14:02Z GET / 1.1.1.1 "Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0" 2020-06-05T10:15:23Z GET /products 2.2.2.2 "Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1" 2020-06-05T10:16:53Z POST /admin 3.3.3.3 "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:58.0) Gecko/20100101 Firefox/58.0" 2020-06-05T10:17:20Z GET / 4.4.4.4 "Mozilla/5.0 (Android 4.4.2; Tablet; rv:65.0) Gecko/65.0 Firefox/65.0" 2020-06-05T10:18:22Z GET / 5.5.5.5 "Mozilla/5.0 (Android 4.4.2; Tablet; rv:65.0) Gecko/65.0 Firefox/65.0" 2020-06-05T10:19:11Z GET /products 6.6.6.6 "Mozilla/5.0 (Linux; U; Android 5.0.2; en-US; XT1068 Build/LXB22.46-28) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/57.0.2987.108 UCBrowser/12.10.2.1164 Mobile Safari/537.36"
Nesta Situação, garanta que seus logs utilizam timestamm (data e hora da requisiçãão), MAS Cover Counternatione Precupe-SE EM Идентификатор O IP De Origem Das requisições (Ex: 1.1.1.1 , 2.2.2.2 и т. Д. ) ЕО Пользовательский агент Cabeçalho , Pois QUANDO ESSAS DUAS INFORMACHõES SE REPETEM POR Várias Requisições, Temos o Главная Синтома де Дос . Как Repetições Podem Seguir UM Padrão Variável, Mas Muitas Vezes Elas Serão Cantanes. Exemplo:
2020-06-05T10:14:02Z GET / 1.1.1.1 "Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0" 2020-06-05T10:15:23Z GET /products 2.2.2.2 "Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1" 2020-06-05T10:16:53Z POST /admin 3.3.3.3 "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:58.0) Gecko/20100101 Firefox/58.0" 2020-06-05T10:16:53Z POST /admin 3.3.3.3 "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:58.0) Gecko/20100101 Firefox/58.0" 2020-06-05T10:16:53Z POST /admin 3.3.3.3 "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:58.0) Gecko/20100101 Firefox/58.0" 2020-06-05T10:16:53Z POST /admin 3.3.3.3 "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:58.0) Gecko/20100101 Firefox/58.0" 2020-06-05T10:16:53Z POST /admin 3.3.3.3 "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:58.0) Gecko/20100101 Firefox/58.0" 2020-06-05T10:16:53Z POST /admin 3.3.3.3 "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:58.0) Gecko/20100101 Firefox/58.0" 2020-06-05T10:16:53Z POST /admin 3.3.3.3 "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:58.0) Gecko/20100101 Firefox/58.0" 2020-06-05T10:16:53Z POST /admin 3.3.3.3 "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:58.0) Gecko/20100101 Firefox/58.0" 2020-06-05T10:16:53Z POST /admin 3.3.3.3 "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:58.0) Gecko/20100101 Firefox/58.0" 2020-06-05T10:16:53Z POST /admin 3.3.3.3 "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:58.0) Gecko/20100101 Firefox/58.0" 2020-06-05T10:16:53Z POST /admin 3.3.3.3 "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:58.0) Gecko/20100101 Firefox/58.0" 2020-06-05T10:16:53Z POST /admin 3.3.3.3 "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:58.0) Gecko/20100101 Firefox/58.0" 2020-06-05T10:16:53Z POST /admin 3.3.3.3 "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:58.0) Gecko/20100101 Firefox/58.0" 2020-06-05T10:16:53Z POST /admin 3.3.3.3 "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:58.0) Gecko/20100101 Firefox/58.0" 2020-06-05T10:16:53Z POST /admin 3.3.3.3 "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:58.0) Gecko/20100101 Firefox/58.0" 2020-06-05T10:16:53Z POST /admin 3.3.3.3 "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:58.0) Gecko/20100101 Firefox/58.0" 2020-06-05T10:16:53Z POST /admin 3.3.3.3 "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:58.0) Gecko/20100101 Firefox/58.0" 2020-06-05T10:16:53Z POST /admin 3.3.3.3 "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:58.0) Gecko/20100101 Firefox/58.0" 2020-06-05T10:16:53Z POST /admin 3.3.3.3 "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:58.0) Gecko/20100101 Firefox/58.0" 2020-06-05T10:16:53Z POST /admin 3.3.3.3 "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:58.0) Gecko/20100101 Firefox/58.0" 2020-06-05T10:16:53Z POST /admin 3.3.3.3 "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:58.0) Gecko/20100101 Firefox/58.0" 2020-06-05T10:17:20Z GET / 4.4.4.4 "Mozilla/5.0 (Android 4.4.2; Tablet; rv:65.0) Gecko/65.0 Firefox/65.0" 2020-06-05T10:18:22Z GET / 5.5.5.5 "Mozilla/5.0 (Android 4.4.2; Tablet; rv:65.0) Gecko/65.0 Firefox/65.0" 2020-06-05T10:19:11Z GET /products 6.6.6.6 "Mozilla/5.0 (Linux; U; Android 5.0.2; en-US; XT1068 Build/LXB22.46-28) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/57.0.2987.108 UCBrowser/12.10.2.1164 Mobile Safari/537.36"
O log acima Domona UM Padrão Repetitivo Em Exhopo Emm Curto Espaço de Tempo (Menos de Um Segundo), EM Requisições Com O Verbo Пост Na Rota /admin. (Ex: Um Ataque de Força Bruta Ao Tentar Dubmeter O Formulário de Войти Várias Vezes):
2020-06-05T10:16:53Z POST /admin 3.3.3.3 "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:58.0) Gecko/20100101 Firefox/58.0"
O que nos leva a que que exizee, Sim, Uma Tentativa de Дос . ЭТА ГАЕТИЧЕСКИЙ РЕССАЛЬТАР КУГ O MESMO ATAQUE GERAR INúMERAS requisições de origens e juster agents direcenes. Portanto, SE VOCê NãO Encontrar UM Padrão Para Bloquear UM CONVUNTO ESCESTAGICO DE REQUISIççES, Мельхор Абордагем Эй-интервал o Acesso Ao Seu Sistema EMMA Janela de Tempo, Que Veremos Mais Tarte.
NãO DEIXE PARA CONFIGURARAR FERRAMATYAS EMOR HORAS EMPORENCIAIS, GARANTA QUE SEU Программное обеспечение TOUSUI DOUNALYATIO ADEAEQADO E Que Atende Suas Nemitedades de Manutenção de Uma Forma Segura.
Exemplo de ataque por пропускная способность
UM Ataque Mal-intencionado Пока Tentar Reproduzir EM Alto Volume Qualverquer Qualvisição Que Seu Sistema Disponibilize, Mesmo Estando Sob Autenticação. SE O ATAQUE TOMPUI ACESSO A Fazer UMA Requisição, Elesui Acesso Fazer 1 Milhão, Menos Que Isso Seja TrataDo, Como Veremos Seguir.
Ума Pessoa Com Conhecimento Não Muito Avançado de Redes E Desenvollingo Web Conseguiria Идентифицированные Como São Enviadas As requisições Para o Seu Sistema, Através de Analisadores de Pacotes (BEM USADOS PARA Analisar Tráfego de edhplicativos), COMO Wireshark ou TCPDUMP , OU Simplemente Com, как Ferramentas de Desenvolvimento Dos Navegadores Web (Ex: Chrome devtools ).
Por Exemplo, представьте себе мошенническую панель SEU SEU SESTEMA TOUSUI UM Dashboard Analítico, COM Várias Métricas Complementas E Communitas de Dados Cruzados Que Sensiance Cruzouso Credacional Para Apresentá-Los EM Tempo Real 2 Como O Exemplo Abaixo ( Opsview, Ltd/cc by-sa ):
Suponhamos Que, Para Atdend Este Dashboard, Essea A API Seguinte:
GET /api/dashboard Authorization: token-do-usuario-id-1
UMA VEZ Que o Ataque Conheça astrutura dessa quisiição, e estando o token do Usuário ID-1 Devidamente Válido (EM MUITOS Sistemas, Basta Cadastrar USUáRIO PARA OBTER UM TOKEN Válido), É Возможность Креарта Сценарии Que Executem Muitas Vezes A quisição Acima, Afim de Instabilizar o Seu Sistema:
import requests url = 'https://seuservico.com/api/dashboard' headers = { 'Authorization': 'token-do-usuario-id-1' } for i in range(1000000): requests.get(url, headers=headers)
Идеальность (Do Ponto de Vista de Programação), O Código Que Disaara Essas Requisições Mal-intencionAdas Deveria Ser Assíncrono E Paralelo, MAS ISSO ESTA FORA DO ESCOPO ABORDADO AQUIE AQUES, O GAUENE É CONHECER O Funcionamento Desses Scripts Para Conseguir Evitá-Los. Aninda Seria Possível Utilizar Frameworks de Testes de Carga, Como Артиллерия , Jmeter , K6 , Гатлинг , так далее.
Existem dois Tipos de Solução Bem Comuns Para Isso Lidar Com Altas Taxas de Requisições:
1) Bloquear A Origen aregem das requisições (ex: IP, агент пользователя, токен Sessão ou); ou 2) Estabelecer UM Limite Para A kantidade de requisições que uma ou mais regens podem realizar em um drindinado período de tempo. EX: Termitir Que o Token Usuário ID-1 Выполните Apenas UMA Requisição Por Segundo. Essa abordagem é conhecida como дросселирование Отказ
Ambas Alternativas Podem Ser Resolvidas Em Nível de Infraestrutura Ou Código de Aloxação.
Resolvendo Com Infraestrutura
Resolver Essa Exploração Com Recursos de Infraestrutura Tem As Vantagens de Ser UMA Solução Bem Mais RAPIDA (Geralmente Ancvolve Configurarar Aretamente Os Servidores de Firewall ou UU Applicação) E Comproometer Menos A Arquitutura Da Solução. Bloquear Ou Main Requisições через программное обеспечение Exige Mais Recursos Computacionais de Servidores Que São ProvisionaDos Para Atender Applação, AO Invés de Realizar Estas Tarefas EM Servidores de Firewall OU Proxy Reversos (COMO Nginx ), Otimizados Para Esse Tipo de RepainabiliDade.
О.С. Понтос Негативос Фикам Пон CONTA DO GARGALO DE CONHECIMENTO EM Infraestrutura Que, InfeLizmente, Muits Equipes Enfrentam e Pusto Financeiro de Algumas Deassas Soluções.
JA UTILIZEI O AWS Web Application Firewall E Gostei Bastante, инклюзивный экскурировать Concrrentes de Players Gigantes Do Mercado de СРЕ :
Converse Com OS Interessados Pela Arquitutura E Infraestrutura Do Seu Software, Avalie Serviços E Soluções (EM Alguns Casos Configurarar uma instância de proxy reverso é mais vantajoso) e Monte UM Plano de Ação Para, De Predência, Ter Prevenção Contra Esse Tipo de Exploração.
Resolvendo Com Программное обеспечение
PodeMos Escrever Pedaços de Código Que Façam Estas Verifeações Anti-DOS (Bloquear Ou Интервалар) E Nicku-Los Нет Incio Do Ciclo de Vida Das Requisições Нет Servidor de Aloxação (OS Конечные точки ). Porém, Muito Provivelmente Esse Tipo de Código Já Foi Criado Prevaiament E Suste Na Stack de Desenvollecto que itê Utiliza, Seja de Forma Incorpordada ( Встроенный ) OU Via Código Terceiro.
POR Exemplo, Para Quem Trabalha COM O Express Framework, Existee UMA Biblioteca Открытый Источник Chamada экспресс-ограничение :
Nfridly/Express-Rate-Limit
Базовая предельная оценка промежуточного программного обеспечения для экспресс
Базовое ограничение скорости промежуточное ПО для экспресс. Используйте для ограничения повторных запросов к публичным API и/или конечным точкам, таким как сброс пароля.
Играет приятно с Экспресс-замедление Отказ
Примечание. Этот модуль не разделяет состояние с другими процессами/серверами по умолчанию, если вам нужно более надежное решение, я рекомендую использовать внешний магазин:
магазины
- Магазин памяти (по умолчанию, встроенный) — Магазины попадают в память в процессе Node.js. Не разделяет состояние с другими серверами или процессами.
- Redis Store.
- Memcached Store.
- Магазин Mongo
Альтернативные ограничения
Этот модуль был разработан только для обработки основы и даже не поддерживал внешние магазины первоначально. Эти другие варианты все отличные возможности программного обеспечения и могут быть более подходящими для некоторых ситуаций:
Установить
$ npm install --save express-rate-limit
использование
Для сервера только API, в котором ограничитель скорости должен применяться ко всем запросам:
const rateLimit = require("express-rate-limit"); // Enable if you're
Através Desta Biblioteca, Podemos Configurar Affilemente UM промежуточное программное обеспечение Para O Express Framework, Conforme Prória Documentação:
const rateLimit = require("express-rate-limit"); const limiter = rateLimit({ windowMs: 15 * 60 * 1000, // 15 minutes max: 100 // limit each IP to 100 requests per windowMs }); // apply to all requests app.use(limiter);
De forma mais «Automática», eustem Bibliotecas que fazem o bloqueio para você e aumentam o Именовые Seguindo Sequências, Pré-Denthrinadas, Como a lib Экспресс-Brute :
Adampflug/Express-brute
Промежуточное программное обеспечение защиты от грубой силы для выражения маршрутов по сравнению с ограничением скорости входящих запросов
Промежуточное программное обеспечение защиты от грубой силы для экспресс-маршрутов, которые скорость-пределы входящих запросов, увеличивая задержку с каждым запросом в последовательности с фигоначкой.
Установка
через NPM:
$ npm install express-brute
Простой пример
var ExpressBrute = require('express-brute'); // stores state locally, don't use this in production var store = new ExpressBrute.MemoryStore(); var bruteforce = new ExpressBrute(store); app.post('/auth', bruteforce.prevent, // error 429 if we hit this route too often function (req, res, next) { res.send('Success!'); } );
Классы
ExpressBrute (магазин, варианты)
магазин
ЭкземплярЭкспертбрут. Memorystore
Или какой-то другой магазин ExpressBrute (см. Список известных магазинов ниже).параметры
Freeretresies
Количество повторных попыток у пользователя, прежде чем им нужно начать ждать (по умолчанию: 2)Minwait
Начальное время ожидания (в …
var ExpressBrute = require('express-brute'); // stores state locally, don't use this in production - VEJA NOTA ABAIXO - var store = new ExpressBrute.MemoryStore(); var bruteforce = new ExpressBrute(store); app.post('/auth', bruteforce.prevent, // error 429 if we hit this route too often function (req, res, next) { res.send('Success!'); } );
O Mesmo Pode Ser Feito EM Demais Tecnologias E Frameworks, Consulte A Documentação da Stack que que usitá utilizando! Veja as Принцип:
- Django Rest Framework Throttling
- Serverless Framework API Gateway Throttling
- Ограничение курсов KOA
- Весенняя ботинка дросселинга
- Ограничение основной скорости ASP.NET
- Стойка атаки для рельсов
⚠️ ГАЕТЕНТ ⚠️.
Независимо от Da Sua Escolha, Lembre-Se Que Estas Soluções Devem Funciapar Bem Em Arquituturas Escaláveis Entoão SE VOCê Configurarar UMA DESTAS BIBLITECAS NO MODO «В памяти», todo o bloquei de requisições funcionará de forma selection em cada nodo da arquitetura, ou seja, реквизисисы Maliciosa X Será Bloquada без обслуживания Мас Não Нет сервидоров B Отказ POR ESTE Motivo, Grande Maioria Destas Bibliotecas oferecem a Forma de Configurá-Las Comm Rmazenamento Compartilhado Das Informações (Джераментинг Утилизандо Redis ou Memcached ).
Вывод
- Monitore Constantemente Sua Applicação e Seus Servidores;
- Ajuste SEU Software E Sua Arquitutura Para, Aquiquer Momento (Faça Simulações!), Bloquear Ou Интервал реквизисис.
Чувствительность «que ferramentas e técnicas a Стопка Tecnológica Me Forece Para Evitar Dos?» . Então Consware As Documentações e Faça OS Devidos Testes! EM Termos de Segurança de Informação, Максима Prevenir é Malhor Que Revediar Vale Muito.
А Owasp É UMA Comunidade Muito Valiosa Em Segurança de Informação. Emper Muito Geature Estarmos atentos aos dados e relatórios periódicos que eles peavelatam! ↩
Para Facilitar A Didática E O Exemplo, Vamos Apecir Que O Cálculo Dessas Métricas é Feito Em Tempo Real. Porém, Muitos Desses Sistemas Utilizam Estruturas Analíticas Pré-Calculadas. ↩
Devesecops — Segurança Para devs (6 серий части)
Оригинал: «https://dev.to/bernardobrezende/devsecops-dos-throughput-e-rate-limit-parte-1-fk9»