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 (CRS) på Adobe Experience Manager (AEM) Publish Dispatcher.

Ökning

The Open Web Application Security Project® (OWASP) stiftelsen ger OWASP Top 10 som beskriver de tio viktigaste säkerhetsfrågorna för webbapplikationer.

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 attackidentifiering regler för användning 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 DOS-SKYDD CRS-regel som skyddar din webbplats från en potentiell DoS-attack.

TIP
Det är viktigt att notera att AEM as a Cloud Service hanterad CDN uppfyller de flesta kunders krav på prestanda och säkerhet. ModSecurity erbjuder dock ett extra säkerhetslager som möjliggör kundspecifika regler och konfigurationer.

Lägg till CRS i Dispatcher-projektmodulen

  1. Hämta och extrahera 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
    
  2. Skapa modsec/crs mappar inuti dispatcher/src/conf.d/ i AEM. I den lokala kopian av AEM WKND Sites-projekt.

    CRS-mapp i AEM projektkod - ModSecurity {width="200" modal="regular"}

  3. Kopiera coreruleset-X.Y.Z/rules mapp från det hämtade CRS-versionspaketet till dispatcher/src/conf.d/modsec/crs mapp.

  4. Kopiera coreruleset-X.Y.Z/crs-setup.conf.example från det hämtade CRS-versionspaketet till dispatcher/src/conf.d/modsec/crs mapp och ändra namn på den till crs-setup.conf.

  5. Inaktivera alla kopierade CRS-regler från dispatcher/src/conf.d/modsec/crs/rules genom att byta namn på dem som XXXX-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.

    Inaktiverade CRS-regler i AEM projektkod - ModSecurity {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):

  1. Aktivera DoS-skyddsregeln genom att byta namn på REQUEST-912-DOS-PROTECTION.conf.disabled till REQUEST-912-DOS-PROTECTION.conf (eller ta bort .disabled från linjenamntillägget) i dispatcher/src/conf.d/modsec/crs/rules mapp.

  2. Konfigurera regeln genom att definiera DOS_COUNTER_THRESHOLD, DOS_BURST_TIME_SLICE, DOS_BLOCK_TIMEOUT variabler.

    1. Skapa en crs-setup.custom.conf -filen i dispatcher/src/conf.d/modsec/crs mapp.
    2. 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'"
    

I det här exemplet används regelkonfigurationen DOS_COUNTER_THRESHOLD är 25, DOS_BURST_TIME_SLICE är 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).

WARNING
Samarbeta med webbsäkerhetsteamet för att definiera värden som passar dina behov.

Initiera CRS

Så här initierar du CRS, tar bort vanliga falska positiva och lägger till lokala undantag för din webbplats:

  1. Ta bort .disabled från REQUEST-901-INITIALIZATION -fil. Ändra med andra ord namnet på REQUEST-901-INITIALIZATION.conf.disabled fil till REQUEST-901-INITIALIZATION.conf.

  2. Om du vill ta bort vanliga falska positiva egenskaper som lokal IP-ping (127.0.0.1) tar du bort .disabled från REQUEST-905-COMMON-EXCEPTIONS -fil.

  3. 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 till REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf

    1. 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                     #
    ########################################################
    ...
    
  4. Ta även bort .disabled från REQUEST-910-IP-REPUTATION.conf.disabled för kontroll av IP-anseendeblockering och REQUEST-949-BLOCKING-EVALUATION.conf.disabled för avvikelsepoängskontroll.

TIP
När du konfigurerar på AEM 6.5 ska du se till att ersätta ovanstående banor med respektive AMS- eller lokala banor som kontrollerar AEM hälsa (kallas hjärtslagsbanor).

Lägg till konfiguration av ModSecurity Apache

Aktivera ModSecurity (alias mod_security Apache-modulen) följer du stegen nedan:

  1. Skapa modsecurity.confdispatcher/src/conf.d/modsec/modsecurity.conf med nedanstående nyckelkonfigurationer.

    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
    
  2. Markera önskat .vhost från AEM Dispatcher-modul dispatcher/src/conf.d/available_vhosts, till exempel wknd.vhostlägger du till nedanstående post utanför <VirtualHost> -block.

    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 ModSecurity CRS och DOS-SKYDD konfigurationer finns på AEM WKND Sites Project självstudiekurs/enable-modsecurity-crs-dos-protection för granskning.

Validera Dispatcher-konfiguration

När du arbetar med AEM as a Cloud Service, innan du distribuerar Dispatcher-konfiguration ändringar bör du validera dem lokalt med validate skript för AEM SDK's Dispatcher Tools.

# 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 hjälp av Cloud Manager Webbnivå eller Hel hög pipeline. 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 gå igenom AEM as a Cloud Service inbyggd eller annat CDN att skapa en ny webbplats.

En metod för att få CDN-överföringen är att lägga till en frågeparameter med en nytt slumpmässigt värde på varje begäran om webbplatssida.

För att utlösa ett större antal begäranden (50 eller fler) inom en kort period (till exempel 60 sekunder) använder Apache JMeter eller Benchmark- eller ab-verktyg kan användas.

Simulera DoS-attack med JMeter-skript

Så här simulerar du en DoS-attack med JMeter:

  1. Ladda ned Apache JMeter och installera lokal

  2. Kör det lokalt med jmeter skript <JMETER-INSTALL-DIR>/bin katalog.

  3. Öppna exemplet WKND-DoS-Attack-Simulation-Test JMX-skript till JMeter med Öppna verktygsmenyn.

    Öppna exemplet WKND DoS Attack JMX Test Script - ModSecurity

  4. Uppdatera Servernamn eller IP fältvärde i Hemsida och Adventure Page HTTP Request-sampler som matchar URL:en för testmiljön AEM. Granska annan information om JMeter-exempelskriptet.

    AEM Server Name HTTP Request JMetere - ModSecurity

  5. Kör skriptet genom att trycka på Starta på verktygsmenyn. Skriptet skickar 50 HTTP-begäranden (5 användare och 10 loopar) mot WKND-platsens Hemsida och Adventure Page. Det innebär att totalt 100 begäranden till icke-statiska filer kvalificerar DoS-attacker per DOS-SKYDD Anpassad konfiguration för CRS-regel.

    Kör JMeter-skript - ModSecurity

  6. The Visa resultat i tabell JMeter-avlyssnarprogram Misslyckades svarsstatus för begärandenummer ~ 53 och senare.

    Misslyckade svar i vyresultat i tabell-JMeter - ModSecurity

  7. The 503 HTTP-svarskod returneras för de misslyckade förfrågningarna, du kan visa information med Visa resultatträd JMeter-avlyssnare.

    503 Response JMeter - ModSecurity

Granska loggar

Loggkonfigurationen för ModSecurity loggar information om DoS-attackincidenten. Följ stegen nedan för att visa informationen:

  1. Hämta och öppna httpderror loggfil för Publish Dispatcher.

  2. Sök efter ord burst i loggfilen för att se fel linjer

    code 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"]
    
  3. Granska detaljer som klient-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 DOS-SKYDD CRS-regel för demonstrationssyften. Vi rekommenderar att ni samarbetar med experter på webbsäkerhet för att förstå, granska och konfigurera lämpliga regler.

recommendation-more-help
c92bdb17-1e49-4e76-bcdd-89e4f85f45e6