Comment organiser les DDoS Ă  de bonnes fins?

image


Avant la sortie d'un nouveau service, il serait bon de s'assurer qu'il fonctionne conformĂ©ment Ă  nos attentes et est disponible quel que soit le nombre de clients l'utilisant en mĂȘme temps.


Et comment ce service réagira-t-il si une attaque DoS distribuée est organisée contre lui? La ressource est-elle protégée des attaquants potentiels?


Afin d'évaluer les risques possibles et d'augmenter la sécurité, il est logique de mener indépendamment des actions qui simulent une attaque DDoS, alors que la ressource n'a pas encore été lancée pour une utilisation de masse.


Dans cet article, nous parlerons de l'expérience de l'organisation des tests de charge pour les services DNS et HTTP.


La préparation


Afin de provoquer la génération d'une énorme quantité de trafic réseau sur la ressource surveillée, vous devez utiliser de nombreuses machines virtuelles, chacune envoyant le nombre maximal de demandes au service. Si vous ne disposez pas d'un centre de données puissant, il est judicieux de louer temporairement des machines virtuelles dans un cloud. Cette idée a une particularité: vous devez vous assurer que le cloud ne rampe pas, en prenant votre activité pour les actions d'un attaquant.


En comparant les politiques de divers services cloud (quelqu'un bannit impitoyablement un compte avec lequel, vraisemblablement, des mesures ont Ă©tĂ© prises qui ont conduit Ă  une dĂ©faillance des ressources) concernant les tests de charge en utilisant leurs fonctionnalitĂ©s, nous avons dĂ©cidĂ© de nous arrĂȘter Ă  Amazon Web Services (AWS). Leurs documents indiquent qu'AWS autorise les tests de charge, mais demande l'approbation en envoyant un e-mail Ă  une adresse spĂ©cifique.


Harmonisation des tests de résistance


Nous envoyons un message oĂč nous parlons briĂšvement de nos intentions, et nous obtenons un formulaire qui doit ĂȘtre rempli:


Customer ID: Customer Name: Email Address: AWS Account ID load test will be performed from: Does the customer have an NDA? Target Data EC2 Resources: Cloudfront Distribution: API Gateway / Lambda ID: ELB Names: Non-AWS Target: Region (please list all regions in scope for testing): Source Data: IP Addresses: Source Account ID: Regions involved: Testing Parameters: How much traffic do you plan to generate by region during testing? What is your expected peak load from source by region? (ie xx Gbps) What is your expected peak load at destination? (ie xx Gbps) Are you testing traffic outbound from EC2, inbound into EC2, or both? Are you testing traffic outbound (egress) from EC2, inbound (ingress) into EC2, or both: Egress. What is your expected peak load from source by region? (ie xx Gbps) Ingress. What is your expected peak load from source by region? (ie xx Gbps) Start Date: End Date: Finite testing details including timeline of testing: Summary of Test: Testing Timelines by phase including rps, pps, and Gbps: Peak bandwidth for each source IP: Tools Used for each phase of test: Types of testing to be performed for each phase of the request: What criteria/metrics will you monitor to ensure the success of this test? Who is performing the Load Test? (Please provide contact details): Does the tester have an NDA? Testing Security Do you have a way to monitor the data traffic for the duration of the test to verify bandwidth limits do not exceed approved rates? Do you have a way to immediately stop the traffic if we/you discover any issue? 2 Emergency contact names and phone numbers: 

Il existe plusieurs nuances:


  1. Ils nous demandent qui nous "bronzerons". Avons-nous droit à cela? Nous disons que c'est notre ressource (apparemment, personne ne vérifie si c'est le cas) et que les tests sont entiÚrement cohérents.


  2. Nous devons désigner la quantité de trafic que nous créerons dans chacune des régions. Au cours de la correspondance, nous découvrons que chaque région a sa propre limite sur la quantité de trafic réseau. Au total, ils sont autorisés à demander 645 Gb / s. Nous considérons combien est nécessaire pour l'attaque, et nous sélectionnons les régions de maniÚre à obtenir la valeur nécessaire.


  3. Il est nĂ©cessaire de dĂ©crire la durĂ©e de l'attaque, sa durĂ©e et la croissance de sa puissance. Sous forme libre, mais avec suffisamment de dĂ©tails, nous parlons de nos plans. L'attaque est effectuĂ©e avec une augmentation progressive de la puissance, nous peignons donc les Ă©tapes du test et la puissance maximale attendue pour chacune d'elles. La date de l'attaque peut ĂȘtre omise jusqu'Ă  un jour; il est tout Ă  fait possible d'indiquer une plage de deux Ă  trois semaines.


  4. Et sans faute, nous faisons de notre mieux pour nous assurer que nous nous comportons bien, surveiller attentivement la progression des tests et l'arrĂȘter Ă  la premiĂšre demande si nĂ©cessaire.



TrÚs probablement, en réponse au formulaire rempli, ils demanderont des éclaircissements, alors nous correspondons et répondons aux questions jusqu'à ce que nous obtenions la permission de tester.


Il faut environ trois jours ouvrables pour terminer le processus d'approbation en cas de réponse rapide.


Préparation des infrastructures


AprÚs les approbations, nous sommes confrontés à la nécessité de préparer l'infrastructure pour les tests. Le fait est que lors de la vérification, nous devrons rapidement:


‱ inclure une instance;


‱ lancer une attaque test;


‱ collecter des statistiques sur les progrùs;


‱ arrĂȘter l'attaque d'essai;


‱ changer l'adresse IP;


‱ dĂ©sactiver l'instance.


Créer une image d'instance


SĂ©lectionnez le type d'instance


Commençons par crĂ©er une image AWS qui contiendra les outils et scripts nĂ©cessaires Ă  la gestion. La premiĂšre Ă©tape consiste Ă  choisir l'instance Ă  louer. Nous Ă©tudions les caractĂ©ristiques des diffĂ©rents types d'instances: nous regardons le prix, la quantitĂ© de trafic maximum, la puissance CPU (ce dernier est important, car le trafic est crĂ©Ă© par la puissance du processeur aprĂšs tout), puis nous testons les performances rĂ©elles et le nombre maximum de requĂȘtes. Selon nos estimations, les instances t3.small sont les plus pratiques pour les tests, mais ici tout le monde choisit Ă  son goĂ»t.


Les caractĂ©ristiques des instances peuvent ĂȘtre trouvĂ©es ici . Vous pouvez Ă©galement sĂ©lectionner et comparer des instances ici .


Demande de limite


Vous devez penser Ă  l'avance au nombre d'instances qui participeront au test. Le fait est qu'Amazon prĂ©voit pour chaque rĂ©gion ses limites sur le nombre d'instances. Si vous avez le sentiment que vous aurez besoin de plus d'instances que ce qui est disponible par dĂ©faut, vous devez demander une augmentation de la limite le plus tĂŽt possible. Pour ce faire, accĂ©dez Ă  la section Support , crĂ©ez un appel de type Augmentation de la limite de service. Le temps de traitement d'une demande peut ĂȘtre diffĂ©rent: quelqu'un rĂ©pond le lendemain, fournissant autant d'entitĂ©s que demandĂ©, quelqu'un dit qu'il ne laissera pas plus de N instances s'exĂ©cuter. Certaines rĂ©gions ont rĂ©pondu Ă  la demande pendant environ un mois.


RĂ©glage des performances


Ensuite, vous devez crĂ©er une image d'instance qui sera lancĂ©e pendant les tests. Pour ce faire, nous activons l'instance du type sĂ©lectionnĂ©, dĂ©finissons tous les paramĂštres dessus, puis enregistrons ce qui s'est passĂ© en tant qu'image (dans le menu Actions, oĂč vous pouvez activer l'instance, ainsi que la fonctionnalitĂ© pour crĂ©er une image CrĂ©er une image).


Nous devons obtenir le trafic sortant maximal de chaque instance, nous optimisons donc d'abord les paramÚtres réseau et mémoire pour notre tùche sur l'instance.


Pour ce faire, /etc/sysctl.conf les paramĂštres dans le fichier /etc/sysctl.conf :


‱ Augmentez la portĂ©e des ports locaux et rĂ©duisez le temps passĂ© par les sockets dans l'Ă©tat FIN_WAIT:


 net.ipv4.ip_local_port_range = 1024-65535 ( : 32768-61000) net.ipv4.tcp_fin_timeout = 10 ( : 60) 

La plage de ports locaux détermine le nombre maximal de sockets sortants qu'un hÎte peut créer à partir d'une adresse IP spécifique.


Avec le paramĂštre par dĂ©faut (61 000–32 768), 28 233 sockets sont obtenus. Avec de nouveaux paramĂštres - 64 500.


Fin_timeout dĂ©finit la durĂ©e minimale pendant laquelle les sockets sortants peuvent ĂȘtre dans l'Ă©tat FIN_WAIT.


Si des valeurs par dĂ©faut sont spĂ©cifiĂ©es, le systĂšme ne peut pas fournir plus de (61 000–32 768) / 60 = 470 sockets par seconde.


En augmentant port_range et en diminuant fin_timeout, nous pouvons affecter la capacité du systÚme à générer davantage de connexions sortantes.


‱ RĂ©utilisons les sockets dans l'Ă©tat TIME_WAIT Ă  la fin des sockets libres:


 net.ipv4.tcp_tw_reuse = 1 

La définition de l'option ci-dessus (qui est désactivée par défaut) permet de minimiser la perte de connexions "inactives" déjà remplies.


Des informations trÚs détaillées sur TIME_WAIT sont décrites dans cet article .


‱ Activez l'option tcp_timestamps pour que l'option tcp_tw_reuse ci-dessus fonctionne:


 net.ipv4.tcp_timestamps = 1 –   `tcp_timestamps`     tcp_tw_reuse 

‱ Autres options:


 net.ipv4.tcp_max_tw_buckets = 720000 –       TIME_WAIT net.ipv4.tcp_keepalive_time = 600 –  - keepalive- net.ipv4.tcp_keepalive_probes = 3 –   keepalive- net.ipv4.tcp_keepalive_intvl = 10 –     keepalive- net.ipv4.tcp_window_scaling = 1 –   TCP- net.ipv4.tcp_mem = 8192 131072 196304 –     TCP- net.ipv4.udp_mem = 8192 131072 196304 –     udp- net.ipv4.tcp_slow_start_after_idle=0 –  Slow-Start Restart net.core.wmem_default = 31457280 –         net.core.wmem_max = 33554432 –        net.core.somaxconn = 65535 –        net.core.netdev_max_backlog = 65535 –          vm.swappiness = 30 –    vm.dirty_ratio = 50 –     50 %  vm.pagecache = 90 –     

Tester les scripts d'attaque


1. Attaque DNS


L'une des principales tĂąches des tests consiste Ă  Ă©valuer les performances des serveurs DNS. À savoir, les serveurs DNS peuvent devenir le goulot d'Ă©tranglement de la tolĂ©rance aux pannes d'un site, car mĂȘme si le service le plus stable n'est pas disponible en cas de problĂšme avec DNS. Pour crĂ©er une charge sur les serveurs DNS, nous allons gĂ©nĂ©rer de nombreuses requĂȘtes DNS diffĂ©rentes. Les demandes doivent ĂȘtre valides et nĂ©cessitent la rĂ©ponse la plus large et la plus longue possible du serveur DNS.


L'utilitaire DNSPerf convient pour générer un tel trafic.


DNSPerf est un outil de test de performances DNS simple, flexible et gratuit. Il est principalement conçu pour les serveurs DNS faisant autoritĂ©, mais peut Ă©galement ĂȘtre utilisĂ© pour mesurer les performances des serveurs de mise en cache.


Dans notre cas, des serveurs DNS faisant autorité sont chargés et desservent une zone - example.com.


Pour DNSPerf, nous prĂ©parons d'abord un fichier avec les requĂȘtes dns_queries.txt (principalement TOUT pour augmenter le temps et la taille de la rĂ©ponse du serveur DNS):


 #dns_queries.txt example.com ANY www.example.com ANY test.example.com ANY static.example.com ANY example.com  www.example.com  test.example.com MX 

Exemple d'exécution de l'utilitaire:


 dnsperf -s TARGET_IP -d dns_queries.txt -c 100 -n 100 -s =  IP- -d =      .   – stdin -c =   .         -n =  «»   . 

2. Attaque contre ICMP


La prochaine Ă©tape des tests consiste Ă  Ă©valuer la rĂ©sistance Ă  un grand nombre de trafic ICMP. Étant donnĂ© que, pour des raisons techniques, les serveurs doivent souvent ĂȘtre en mesure de rĂ©pondre aux requĂȘtes ping, il existe une possibilitĂ© d'attaque DDoS utilisant des requĂȘtes ping. En plus de spĂ©cifier des paramĂštres qui excluent la possibilitĂ© de ping-to-death , vous devez vous assurer que les serveurs sont rĂ©sistants aux pics de charge ICMP. Pour crĂ©er de telles charges, il est prĂ©fĂ©rable d'utiliser l'utilitaire hping3 bien connu, qui vous permet d'ajuster le nombre de demandes, l'intervalle entre les envois, ainsi que la taille des paquets.


Exemple d'exécution de l'utilitaire:


 hping3 -i u1000 -d 1500 -c 100000 -1 TARGET_IP -i u100 =     (uX for X microseconds) -d 1500 =    -c 1000000 =     -1 =  ICMP 

3. Attaque HTTP


Maintenant, nous vérifions la résistance au stress, la principale fonctionnalité du trafic HTTP (S) de traitement des services. L'un des outils les plus flexibles et les plus simples pour générer du trafic HTTP est le siÚge . Siege est un utilitaire multithread open source conçu pour tester les performances d'une ressource Web.


Comme DNSPerf, siege vous permet de charger le serveur avec les demandes d'un nombre donnĂ© d'utilisateurs virtuels (l'Ă©mulation des utilisateurs est effectuĂ©e Ă  l'aide d'un port sĂ©parĂ©), ainsi que d'utiliser un ensemble prĂ©dĂ©fini de demandes. Ceci est trĂšs pratique, car vous pouvez inclure les requĂȘtes les plus gourmandes en ressources dans le test.


Exemple d'exécution de l'utilitaire:


 siege -b -c 100 -f test_urls.txt -b =   ( benchmark) -c =   .         -f =    

Format de contenu test_urls.txt :


 http://example.com/site/login POST login=username&password=test http://example.com/site/client POST useragent=Mozilla&version=123&date=24May http://example.com/site/order POST user=username&company=ooo&phone=812345678 

Comme vous pouvez le voir, les tests ont Ă©tĂ© effectuĂ©s en utilisant principalement des requĂȘtes POST qui nĂ©cessitent un traitement cĂŽtĂ© serveur et occupent le plus grand nombre de ressources par rapport aux autres types de requĂȘtes.


Aucune des options n'utilise l'usurpation d'adresse IP, car Amazon ne le permet pas. Quel que soit src_IP spécifié dans le package, il sera remplacé par le bon à la sortie de l'instance.


Toutes les demandes gĂ©nĂ©rĂ©es doivent ĂȘtre lĂ©gitimes - aucune vague de trafic sortant sans rĂ©ponse - car la politique DDoS d'Amazon est assez stricte. MĂȘme un test de stress coordonnĂ© prend un minimum de plusieurs jours pour communiquer avec le support technique, et lors des premiĂšres actions "malveillantes" nous obtenons l'interdiction du port d'oĂč le trafic est sorti, et l'exigence doit ĂȘtre expliquĂ©e immĂ©diatement.


Scripts pour lancer des attaques


Pour la gestion des tests à distance, nous préparerons des scripts bash (dns.sh, ping.sh, http.sh) qui lancent le type d'attaque souhaité et des fichiers de charge utile (test_urls.txt, valid_dns_queries.txt).


Lorsque nous tĂ©lĂ©chargeons tout cela sur l'image AWS (Ă  partir de laquelle toutes les instances seront crĂ©Ă©es), chaque test peut ĂȘtre exĂ©cutĂ© Ă  distance Ă  l'aide de la commande du format suivant:


 ssh instance-amazon 'sudo <stress-script>.sh start <params> &>>stress.log &' 

Le script du type requis est spécifié sous la forme stress-script.sh et params sont les paramÚtres correspondants. Dans le fichier stress.log, nous suivrons la sortie de l'utilitaire en cours d'exécution. Pour plus de commodité, nous utiliserons différents journaux pour différents utilitaires: dns.log, ping.log, http.log.


Exemple de script dns.sh :


 #!/bin/bash if [[ ! "$1" =~ ^(start|stop|status)$ ]]; then echo "nothing to do: need argument for stop,start or status" exit 1 fi if [[ "$1" = "start" ]]; then shift dnsperf $@ fi if [[ "$1" = "stop" ]]; then kill $(pidof dnsperf) fi if [[ "$1" = "status" ]]; then if [[ ! "$(pidof dnsperf)" = "" ]]; then echo "dnperf is running with PID $(pidof dnsperf)" ps aux | grep dnsperf else echo "dnsperf is not running" fi fi 

Comme le montre le code, le script peut ĂȘtre dĂ©marrĂ© et arrĂȘtĂ©, ainsi que vĂ©rifier l'Ă©tat (en cours / non en cours d'exĂ©cution).


Les scripts pour les tests ICMP et HTTP sont construits de la mĂȘme maniĂšre, en dĂ©marrant hping3 et siege, respectivement, avec la chaĂźne de paramĂštres passĂ©e Ă  travers l'argument.


Exemples de commandes:


 ssh instance-amazon 'sudo dns.sh start -s TARGET_IP -d valid_dns_queries.txt -c 1 -n 100 &>>dns.log &' ssh instance-amazon 'sudo ping.sh start -i u1000 -d 1500 -c 100000 -1 TARGET_IP &>>ping.log &' ssh instance-amazon 'sudo http.sh start -b -c 100 -f test_urls.txt &>> http.log &' 

Surveiller les scripts


Pour évaluer le trafic sortant et l'état de l'infrastructure de test, nous avons besoin d'un outil de surveillance. Pour des raisons de simplicité et d'économie de ressources, nous utilisons iptables. Pour ce faire, nous allons écrire un script qui compte le nombre de Mo envoyés et le placer sur l'image AWS:


 #iptables.sh sudo iptables -N TRAFFIC_OUT sudo iptables -A TRAFFIC_OUT -p tcp sudo iptables -A TRAFFIC_OUT -p udp sudo iptables -A TRAFFIC_OUT -p icmp sudo iptables -A OUTPUT -j TRAFFIC_OUT sudo iptables-save 

Le script crée une nouvelle chaßne TRAFFIC_OUT et y ajoute des filtres pour les protocoles nécessaires: tcp, udp, icmp.


Le transfert de paquets vers TRAFFIC_OUT est ajouté à la chaßne OUTPUT.


La quantitĂ© de donnĂ©es transfĂ©rĂ©es peut ĂȘtre trouvĂ©e par la commande:


 # iptables -L TRAFFIC_OUT -v -n -x | tail -n 3 | awk '{print $2/1024/1024,"Mb\t\t\t",$3}' : 2.2 Mb tcp 4.4 Mb udp 3.2 Mb icmp 

Installez le script en tant que service. Pour ce faire, créez un fichier monitoring.service et déplacez-le dans le répertoire /etc/systemd/system de notre image:


 # /etc/systemd/system/monitoring.service [Unit] After=network.target [Service] ExecStart=/usr/local/bin/monitoring.sh [Install] WantedBy=default.target 

Vous pouvez maintenant ajouter le service au démarrage:


 systemctl enable monitoring.service systemctl start monitoring.service 

Gestion des instances


Passons maintenant à la gestion des instances à distance (aussi automatisée que possible).


À ces fins, vous pouvez utiliser le mĂ©canisme AWS CLI - gestion de la console.


Créez une clé secrÚte (clés d'accÚs (ID de clé d'accÚs et clé d'accÚs secrÚte)) et configurez la console.


Nous avons maintenant accÚs à toutes les fonctionnalités du compte.


La particularitĂ© de travailler avec AWS est que toutes les actions sont effectuĂ©es pour une rĂ©gion spĂ©cifique et doivent ĂȘtre rĂ©pĂ©tĂ©es si plusieurs rĂ©gions sont impliquĂ©es.


Pour créer une nouvelle instance à partir de l'image que nous avons construite ci-dessus (nous supposons qu'il existe un ami-ID public que nous utilisons dans le script), nous ferons ce qui suit:


  • crĂ©ez une clĂ© SSH et ajoutez-la Ă  AWS:

 yes n |ssh-keygen -q -t rsa -f $KEYNAME -m pem -N "" > /dev/null chmod 400 $KEYNAME aws ec2 import-key-pair --region $REGION --key-name $KEYNAME --public-key-material file:///$(pwd)/$KEYNAME.pub 

  • crĂ©er un groupe de sĂ©curitĂ© qui permet l'accĂšs Ă  la machine via SSH. Sinon, les connexions SSH entrantes seront refusĂ©es:

 SECURITY="ssh-group" aws ec2 create-security-group --region $REGION --group-name $SECURITY --description "Just ssh. Nothing more" IP_RANGE="0.0.0.0/24" aws ec2 authorize-security-group-ingress --region $REGION --group-name $SECURITY --protocol tcp --port 22 --cidr $IP_RANGE 

  • crĂ©ez une instance avec la clĂ© et le groupe de sĂ©curitĂ© crĂ©Ă©s prĂ©cĂ©demment et spĂ©cifiez l'ID d'image. Le nombre d'instances crĂ©Ă©es simultanĂ©ment peut ĂȘtre arbitraire:

 IMG='ami-0d0eaed20348a3389' NUM=1 aws ec2 run-instances --region $REGION --image-id $IMG --count $NUM --instance-type t2.micro --key-name $KEYNAME --security-groups default $SECURITY > instances.json 

  • attendez que la machine soit initialisĂ©e. Cela prend un certain temps: nous obtenons d'abord une rĂ©ponse de rĂ©ussite (instances.json), mais Ă  ce moment-lĂ , la machine vient d'ĂȘtre crĂ©Ă©e, mais pas encore dĂ©marrĂ©e (par exemple, aucune adresse IP n'a encore Ă©tĂ© attribuĂ©e). Il faut attendre la fin du lancement (gĂ©nĂ©ralement une minute suffit).

Ensuite, vous pouvez vous connecter via SSH si nous connaissons l'adresse IP. Demandez simplement une liste des machines en cours d'exécution. Parmi leurs paramÚtres, nous trouvons PublicDnsName ou PublicIpAddress.


 aws ec2 describe-instances --region 

Ensuite, nous exécutons les commandes SSH, indiquant la clé SSH créée ci-dessus:


 ssh -I $KEYNAME -oStrictHostKeyChecking=no ubuntu''+ins_dns echo''O'' 

Les commandes SSH vous permettent de contrÎler l'attaque et d'obtenir toutes les informations sur l'état de l'attaque, car nous avons fourni aux instances tous les scripts et outils nécessaires.


Vous devez comprendre que la plupart des défenses contre les attaques par déni de service bloquent l'adresse IP à partir de laquelle de nombreuses demandes sont reçues de maniÚre anormale. Par conséquent, les adresses IP des machines virtuelles doivent constamment changer afin de maintenir la puissance d'attaque.


AWS attribue une nouvelle adresse IP à chaque démarrage de la machine. Par conséquent, pour changer l'adresse IP, vous devez éteindre et rallumer la machine (pas besoin de la retirer!).


La diffĂ©rence entre l'arrĂȘt et la suppression est que nous envoyons des signaux diffĂ©rents. ArrĂȘter - pour dĂ©sactiver, terminer - pour dĂ©sactiver et supprimer immĂ©diatement.


Afin de surveiller le trafic entrant d'une instance, nous utilisons la commande suivante avec l'ID d'instance: quand la mesure du trafic commence, quand elle se termine, pour quelle période les valeurs sont additionnées:


 aws cloudwatch get-metric-statistics --region REGION --namespace AWS/EC2 \ --statistics Sum --metric-name NetworkIn --start-time $STARTTIME --end-time $FINISHTIME --period $PERIOD --dimensions Name=InstanceId,Value=$INCTANCEID 

Surveillance de la disponibilité des services


De plus, pour mener une attaque, vous devrez observer si le service que nous testons est vivant.


Nous créons et exécutons le script de «ping» le plus simple qui surveille la disponibilité des ports cibles (53 et 80 dans notre cas).


Exemple de code Python qui automatise la vérification de la disponibilité:


 def http(url): cmd = ['curl', '-w', '"%{time_total}"', '-o', '/dev/null', '-s', url] result = check_output(cmd).decode('utf-8') result = float(json.loads(result)) return result * 1000000 def dns(ip, domain): cmd = ['dig', 'any', '@'+ip, domain ] result = check_output(cmd).decode('utf-8') result = int(result.split('Query time:')[1].split('msec')[0]) return result 

Les informations reçues sont stockées dans un fichier journal, sur la base duquel, sur la base des résultats de l'attaque, il sera possible de construire un graphique de disponibilité des ressources.


Lors des tests, il est nĂ©cessaire de vĂ©rifier en permanence le journal «ping» afin de ne pas tuer complĂštement et irrĂ©vocablement la ressource. DĂšs qu'une dĂ©gradation importante apparaĂźt et que la rĂ©ponse Ă  la demande prend trop de temps, l'attaque doit ĂȘtre arrĂȘtĂ©e.


Si le ralentissement est insignifiant et que la puissance d'attaque a atteint le maximum défini, il est logique d'attendre une minute ou deux et si le service continue de fonctionner sans interruption, la vérification est considérée comme réussie.


ProblĂšme financier


Il vaut la peine de discuter d'une autre question liée à l'organisation des tests - le coût de l'ensemble de cet événement.


Amazon fournit des informations dĂ©taillĂ©es sur les prix, mais vous devez comprendre que vous devez payer pour presque tout. NĂ©anmoins, de nombreux calculs peuvent ĂȘtre nĂ©gligĂ©s. Tout d'abord, il vaut la peine de calculer le coĂ»t du trafic (cela dĂ©pend de la rĂ©gion et de la quantitĂ© totale d'informations qui seront transmises) et le coĂ»t de la location des instances (paiement par minute). Ces objets reprĂ©sentent environ 99% du coĂ»t de toute l'attaque.


Par conséquent, le coût d'une attaque est calculé dans chaque cas séparément, en fonction de la [puissance des hostilités] puissance d'attaque maximale et du nombre de lancements prévus.


Du point de vue de la simplification des calculs, il est préférable d'utiliser un compte Amazon, qui a été enregistré il y a moins d'un an. Une partie des opérations sera alors gratuite. En savoir plus sur les limites d'utilisation gratuite ici .


Afin d'illustrer le calcul du coût de réalisation des tests de charge, disons que nous voulons vérifier la stabilité du serveur DNS à une charge de 10 Gb / s.


Nous savons que les outils utilisés et les capacités de l'instance t3.small lancée à Mumbai vous permettent d'émettre 500 Mb / s à partir d'une instance en cours d'exécution. Le prix de location d'une entité est de 0,0224 $ l'heure, pour le trafic - 0,01093 $ pour 1 Go. Autrement dit, le pic de l'attaque signifie le fonctionnement simultané de 20 entités.


Nous augmenterons progressivement la puissance d'attaque, pour cela nous lançons d'abord une entité, puis nous en ajoutons une autre toutes les 60 s.


La formule de calcul du coût prend la forme:


 60  * (   ) + 60  * 0,5 /c * (  ) =       60 . 1 * (    ) + 2 * (    ) + ... + 20 * (    ) =    

Il s'avĂšre que le coĂ»t d'une attaque d'une capacitĂ© de 10 Gb / s sur un serveur DNS est d'environ 70 $. Notez qu'il s'agit d'une estimation approximative, car le volume de trafic ne peut pas ĂȘtre prĂ©vu avec prĂ©cision. . , – , .


. .

Source: https://habr.com/ru/post/fr481756/


All Articles