Använd ModSecurity för att skydda din AEM från DoS-attacker
Lär dig hur du aktiverar ModSecurity för att skydda din webbplats från DoS-attacker (Denial of Service) med OWASP ModSecurity Core Rule Set) på Adobe Experience Manager (AEM) Publish Dispatcher.
Ökning
Grunden Open Web Application Security Project® (OWASP) innehåller OWASP Top 10 som beskriver de tio viktigaste säkerhetsaspekterna för webbprogram.
ModSecurity är en plattformsoberoende lösning med öppen källkod som skyddar mot en rad attacker mot webbprogram. Det möjliggör även HTTP-trafikövervakning, loggning och realtidsanalys.
OWSAP® innehåller även OWASP® ModSecurity Core Rule Set (CRS). CRS är en uppsättning allmänna attackidentifieringsregler som används med ModSecurity. CRS syftar alltså till att skydda webbapplikationer från en mängd olika attacker, bland annat OWASP Top Ten, med ett minimum av falska varningar.
I den här självstudien visas hur du aktiverar och konfigurerar CRS-regeln DOS-PROTECTION för att skydda din webbplats från en potentiell DoS-attack.
Lägg till CRS i Dispatcher projektmodul
-
Hämta och extrahera den senaste OWASP ModSecurity Core Rule Set.
code language-shell # Replace the X.Y.Z with relevent version numbers. $ wget https://github.com/coreruleset/coreruleset/archive/refs/tags/vX.Y.Z.tar.gz # For version v3.3.5 when this tutorial is published $ wget https://github.com/coreruleset/coreruleset/archive/refs/tags/v3.3.5.tar.gz # Extract the downloaded file $ tar -xvzf coreruleset-3.3.5.tar.gz
-
Skapa
modsec/crs
-mapparna idispatcher/src/conf.d/
i AEM projektkod. I den lokala kopian av AEM WKND Sites-projektet.{width="200" modal="regular"}
-
Kopiera mappen
coreruleset-X.Y.Z/rules
från det hämtade CRS-versionspaketet till mappendispatcher/src/conf.d/modsec/crs
. -
Kopiera filen
coreruleset-X.Y.Z/crs-setup.conf.example
från det hämtade CRS-versionspaketet till mappendispatcher/src/conf.d/modsec/crs
och byt namn på den tillcrs-setup.conf
. -
Inaktivera alla kopierade CRS-regler från
dispatcher/src/conf.d/modsec/crs/rules
genom att byta namn på dem tillXXXX-XXX-XXX.conf.disabled
. Du kan använda kommandona nedan för att byta namn på alla filer samtidigt.code language-shell # Go inside the newly created rules directory within the dispathcher module $ cd dispatcher/src/conf.d/modsec/crs/rules # Rename all '.conf' extension files to '.conf.disabled' $ for i in *.conf; do mv -- "$i" "$i.disabled"; done
Mer information finns i CRS-reglerna och konfigurationsfilen med det nya namnet i WKND-projektkoden.
{width="200" modal="regular"}
Aktivera och konfigurera DoS-skyddsregel (Denial of Service)
Följ stegen nedan för att aktivera och konfigurera DoS-skyddsregeln (Denial of Service):
-
Aktivera DoS-skyddsregeln genom att byta namn på
REQUEST-912-DOS-PROTECTION.conf.disabled
tillREQUEST-912-DOS-PROTECTION.conf
(eller ta bort.disabled
från regelnamnstillägget) i mappendispatcher/src/conf.d/modsec/crs/rules
. -
Konfigurera regeln genom att definiera variablerna DOS_COUNTER_THRESHOLD, DOS_BURST_TIME_SLICE, DOS_BLOCK_TIMEOUT .
- Skapa en
crs-setup.custom.conf
-fil i mappendispatcher/src/conf.d/modsec/crs
. - Lägg till nedanstående regelutdrag i den nya filen.
code language-none # The Denial of Service (DoS) protection against clients making requests too quickly. # When a client is making more than 25 requests (excluding static files) within # 60 seconds, this is considered a 'burst'. After two bursts, the client is # blocked for 600 seconds. SecAction \ "id:900700,\ phase:1,\ nolog,\ pass,\ t:none,\ setvar:'tx.dos_burst_time_slice=60',\ setvar:'tx.dos_counter_threshold=25',\ setvar:'tx.dos_block_timeout=600'"
- Skapa en
I den här exempelregelkonfigurationen är DOS_COUNTER_THRESHOLD 25, DOS_BURST_TIME_SLICE 60 sekunder och DOS_BLOCK_TIMEOUT timeout är 600 sekunder. Den här konfigurationen identifierar mer än två förekomster av 25 begäranden, med undantag för statiska filer, inom 60 sekunder kvalificerar som en DoS-attack, vilket gör att den begärande klienten blockeras i 600 sekunder (eller 10 minuter).
Initiera CRS
Så här initierar du CRS, tar bort vanliga falska positiva och lägger till lokala undantag för din webbplats:
-
Ta bort
.disabled
från filen REQUEST-901-INITIALIZATION om du vill initiera CRS. Byt namn på filenREQUEST-901-INITIALIZATION.conf.disabled
tillREQUEST-901-INITIALIZATION.conf
. -
Om du vill ta bort vanliga falska positiva objekt som lokal IP-ping (127.0.0.1) tar du bort
.disabled
från filen REQUEST-905-COMMON-EXCEPTIONS. -
Om du vill lägga till lokala undantag som AEM eller platsspecifika sökvägar byter du namn på
REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example
tillREQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
- Lägg till AEM plattformsspecifika sökvägsundantag i den fil som du har bytt namn på.
code language-none ######################################################## # AEM as a Cloud Service exclusions # ######################################################## # Ignoring AEM-CS Specific internal and reserved paths SecRule REQUEST_URI "@beginsWith /systemready" \ "id:1010,\ phase:1,\ pass,\ nolog,\ ctl:ruleEngine=Off" SecRule REQUEST_URI "@beginsWith /system/probes" \ "id:1011,\ phase:1,\ pass,\ nolog,\ ctl:ruleEngine=Off" SecRule REQUEST_URI "@beginsWith /gitinit-status" \ "id:1012,\ phase:1,\ pass,\ nolog,\ ctl:ruleEngine=Off" ######################################################## # ADD YOUR SITE related exclusions # ######################################################## ...
-
Ta även bort
.disabled
från REQUEST-910-IP-REPUTATION.conf.disabled för kontroll av IP-anseendeblock ochREQUEST-949-BLOCKING-EVALUATION.conf.disabled
för kontroll av avvikelsepoäng.
Lägg till konfiguration av ModSecurity Apache
Så här aktiverar du ModSecurity (även mod_security
Apache-modulen):
-
Skapa
modsecurity.conf
kl.dispatcher/src/conf.d/modsec/modsecurity.conf
med nyckelkonfigurationer nedan.code language-none # Include the baseline crs setup Include conf.d/modsec/crs/crs-setup.conf # Include your customizations to crs setup if exist IncludeOptional conf.d/modsec/crs/crs-setup.custom.conf # Select all available CRS rules: #Include conf.d/modsec/crs/rules/*.conf # Or alternatively list only specific ones you want to enable e.g. Include conf.d/modsec/crs/rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf Include conf.d/modsec/crs/rules/REQUEST-901-INITIALIZATION.conf Include conf.d/modsec/crs/rules/REQUEST-905-COMMON-EXCEPTIONS.conf Include conf.d/modsec/crs/rules/REQUEST-910-IP-REPUTATION.conf Include conf.d/modsec/crs/rules/REQUEST-912-DOS-PROTECTION.conf Include conf.d/modsec/crs/rules/REQUEST-949-BLOCKING-EVALUATION.conf # Start initially with engine off, then switch to detection and observe, and when sure enable engine actions #SecRuleEngine Off #SecRuleEngine DetectionOnly SecRuleEngine On # Remember to use relative path for logs: SecDebugLog logs/httpd_mod_security_debug.log # Start with low debug level SecDebugLogLevel 0 #SecDebugLogLevel 1 # Start without auditing SecAuditEngine Off #SecAuditEngine RelevantOnly #SecAuditEngine On # Tune audit accordingly: SecAuditLogRelevantStatus "^(?:5|4(?!04))" SecAuditLogParts ABIJDEFHZ SecAuditLogType Serial # Remember to use relative path for logs: SecAuditLog logs/httpd_mod_security_audit.log # You might still use /tmp for temporary/work files: SecTmpDir /tmp SecDataDir /tmp
-
Välj önskad
.vhost
från ditt AEM Dispatcher-moduldispatcher/src/conf.d/available_vhosts
, till exempelwknd.vhost
, och lägg till nedanstående post utanför<VirtualHost>
-blocket.code language-none # Enable the ModSecurity and OWASP CRS <IfModule mod_security2.c> Include conf.d/modsec/modsecurity.conf </IfModule> ... <VirtualHost *:80> ServerName "publish" ... </VirtualHost>
Alla de ovanstående konfigurationerna för ModSecurity CRS och DOS-PROTECTION finns tillgängliga på WKND Sites Project AEM självstudiekurs/enable-modsecurity-crs-dos-protection som du kan granska.
Validera Dispatcher-konfiguration
När du arbetar med AEM as a Cloud Service, innan du distribuerar dina Dispatcher-konfigurationer -ändringar, rekommenderas du att validera dem lokalt med hjälp av validate
-skriptet för AEM SDK:s Dispatcher-verktyg .
# Go inside Dispatcher SDK 'bin' directory
$ cd <YOUR-AEM-SDK-DIR>/<DISPATCHER-SDK-DIR>/bin
# Validate the updated Dispatcher configurations
$ ./validate.sh <YOUR-AEM-PROJECT-CODE-DIR>/dispatcher/src
Distribuera
Distribuera lokalt validerade Dispatcher-konfigurationer med Cloud Manager pipeline Web Tier eller Full Stack . Du kan också använda Rapid Development Environment för snabbare vändningstid.
Verifiera
För att verifiera DoS-skyddet, i det här exemplet, skickar vi mer än 50 förfrågningar (25 tröskelvärden för förfrågningar gånger två förekomster) inom ett intervall av 60 sekunder. Dessa förfrågningar bör dock skickas via AEM as a Cloud Service inbyggda eller någon annan CDN som finns på webbplatsen.
En metod för att få CDN-överföringen är att lägga till en frågeparameter med ett nytt slumpmässigt värde i varje begäran om webbplatssidan.
Om du vill utlösa ett större antal förfrågningar (50 eller fler) inom en kort period (till exempel 60 sekunder) kan Apache-verktyget JMeter eller Benchmark eller ab användas.
Simulera DoS-attack med JMeter-skript
Så här simulerar du en DoS-attack med JMeter:
-
Hämta Apache JMeter och installera lokalt
-
Kör lokalt med skriptet
jmeter
från katalogen<JMETER-INSTALL-DIR>/bin
. -
Öppna exemplet WKND-DoS-Attack-Simulation-Test JMX-skript i JMeter med verktygsmenyn Öppna.
-
Uppdatera fältvärdet Servernamn eller IP i Startsida och Adventure Page HTTP Request-samplern som matchar URL:en för testmiljön AEM. Granska annan information om JMeter-exempelskriptet.
-
Kör skriptet genom att trycka på knappen Start på verktygsmenyn. Skriptet skickar 50 HTTP-begäranden (5 användare och 10 loopar) mot WKND-platsens hemsida och Adventure-sida. Det innebär att totalt 100 begäranden till icke-statiska filer kvalificerar DoS-attacken per anpassad konfiguration av DOS-PROTECTION-CRS-regel.
-
Visa resultat i tabell JMeter-avlyssnaren visar Svarsstatus för misslyckad för begäran nummer ~ 53 och senare.
-
503 HTTP-svarskoden returneras för de misslyckade förfrågningarna. Du kan visa informationen med JMeter-avlyssnaren Visa resultatträd.
Granska loggar
Loggkonfigurationen för ModSecurity loggar information om DoS-attackincidenten. Följ stegen nedan för att visa informationen:
-
Hämta och öppna loggfilen
httpderror
för Publish Dispatcher. -
Sök efter ordet
burst
i loggfilen för att se raderna errorcode language-none Tue Aug 15 15:19:40.229262 2023 [security2:error] [pid 308:tid 140200050567992] [cm-p46652-e1167810-aem-publish-85df5d9954-bzvbs] [client 192.150.10.209] ModSecurity: Warning. Operator GE matched 2 at IP:dos_burst_counter. [file "/etc/httpd/conf.d/modsec/crs/rules/REQUEST-912-DOS-PROTECTION.conf"] [line "265"] [id "912170"] [msg "Potential Denial of Service (DoS) Attack from 192.150.10.209 - # of Request Bursts: 2"] [ver "OWASP_CRS/3.3.5"] [tag "application-multi"] [tag "language-multi"] [tag "platform-multi"] [tag "paranoia-level/1"] [tag "attack-dos"] [tag "OWASP_CRS"] [tag "capec/1000/210/227/469"] [hostname "publish-p46652-e1167810.adobeaemcloud.com"] [uri "/content/wknd/us/en/adventures.html"] [unique_id "ZNuXi9ft_9sa85dovgTN5gAAANI"] ... Tue Aug 15 15:19:40.515237 2023 [security2:error] [pid 309:tid 140200051428152] [cm-p46652-e1167810-aem-publish-85df5d9954-bzvbs] [client 192.150.10.209] ModSecurity: Access denied with connection close (phase 1). Operator EQ matched 0 at IP. [file "/etc/httpd/conf.d/modsec/crs/rules/REQUEST-912-DOS-PROTECTION.conf"] [line "120"] [id "912120"] [msg "Denial of Service (DoS) attack identified from 192.150.10.209 (1 hits since last alert)"] [ver "OWASP_CRS/3.3.5"] [tag "application-multi"] [tag "language-multi"] [tag "platform-multi"] [tag "paranoia-level/1"] [tag "attack-dos"] [tag "OWASP_CRS"] [tag "capec/1000/210/227/469"] [hostname "publish-p46652-e1167810.adobeaemcloud.com"] [uri "/us/en.html"] [unique_id "ZNuXjAN7ZtmIYHGpDEkmmwAAAQw"]
-
Granska information som klientens IP-adress, åtgärd, felmeddelande och information om begäran.
Prestandapåverkan av ModSecurity
Att aktivera ModSecurity och tillhörande regler har vissa prestandakonsekvenser, så tänk på vilka regler som krävs, är redundanta och ignoreras. Samarbeta med era webbsäkerhetsexperter för att aktivera och anpassa CRS-reglerna.
Ytterligare regler
Den här självstudien aktiverar och anpassar endast CRS-regeln DOS-PROTECTION för demonstrationssyften. Vi rekommenderar att ni samarbetar med experter på webbsäkerhet för att förstå, granska och konfigurera lämpliga regler.