Skip to main content

V9.2.5 Server Communication Security

Requirement:#

Verify that backend TLS connection failures are logged.

Explanation:#

Π’Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ опрСдСляСт Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Π² Π»ΠΎΠ³ Π»ΡŽΠ±Ρ‹Π΅ сбои ΠΈ ошибки, Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‰ΠΈΠ΅ ΠΏΡ€ΠΈ установлСнии Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½Ρ‹Ρ… TLS-соСдинСний ΠΌΠ΅ΠΆΠ΄Ρƒ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΌΠΈ слуТбами прилоТСния. Π­Ρ‚ΠΈ Π»ΠΎΠ³ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ для диагностики ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, выявлСния ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… уязвимостСй бСзопасности ΠΈ поддСрТания ΠΎΠ±Ρ‰Π΅ΠΉ бСзопасности сСтСвой инфраструктуры прилоТСния.

Remediation:#

Π§Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Π»ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ сбоСв TLS-соСдинСний Π½Π° Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΌ сСрвСрС Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ, ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ дСйствия:

1 ΠžΠ·Π½Π°ΠΊΠΎΠΌΡŒΡ‚Π΅ΡΡŒ с Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒΡŽ логирования сбоСв Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… TLS-соСдинСний ΠΈ ΠΈΡ… Π²Π°ΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ для бСзопасности ΠΈ устранСния Π½Π΅ΠΏΠΎΠ»Π°Π΄ΠΎΠΊ. 1 ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ слуТбы, ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΈΠ»ΠΈ сСрвСры, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ TLS Π² вашСм ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ. 1 НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΏΠΎΡˆΠ°Π³ΠΎΠ²Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΊ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ΅ ΠΈ ΡƒΡΡ‚Ρ€Π°Π½Π΅Π½ΠΈΡŽ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° логирования сбоСв TLS-соСдинСний с Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΌΠΈ сСрвисами:

  • Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ ΠΈΠ»ΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ логирования, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ тСхнологичСскому стСку вашСго прилоТСния.
  • Для обСспСчСния ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ структурированности ΠΆΡƒΡ€Π½Π°Π»ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ общСпринятыС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ вСдСния Π»ΠΎΠ³ΠΎΠ².
  • Π˜Π½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΡƒΠΉΡ‚Π΅ Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π»ΠΎΠ³ΠΎΠ² Π² backend-сСрвисы, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ соСдинСниС ΠΏΠΎ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρƒ TLS.
  • ΠŸΡ€ΠΈ нСвозмоТности установлСния TLS-соСдинСния слСдуСт Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡ‚ΠΊΠ°Π·Ρ‹, ошибки ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ подробности.
  • РСгистрируйтС Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΊΠΈ, ΠΊΠΎΠ΄Ρ‹ ошибок, сообщСния ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ…, ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎΠ± источникС/Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ ΠΈ любой ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ контСкст.
  • Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ сбоя, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΎ просрочСнных сСртификатах ΠΈΠ»ΠΈ Π½Π΅ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°Ρ…. 1 Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡƒΡŽ систСму сбора Π»ΠΎΠ³ΠΎΠ², ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡŽΡ‰ΡƒΡŽ ΠΆΡƒΡ€Π½Π°Π»Ρ‹ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… слуТб. Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ инструмСнты ΠΈΠ»ΠΈ сСрвисы, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ Π°Π³Ρ€Π΅Π³Π°Ρ†ΠΈΡŽ, поиск ΠΈ Π°Π½Π°Π»ΠΈΠ· ΠΆΡƒΡ€Π½Π°Π»ΠΎΠ². 1 Π’Π½Π΅Π΄Ρ€ΠΈΡ‚Π΅ срСдства Π°Π½Π°Π»ΠΈΠ·Π° ΠΈ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π° Π»ΠΎΠ³ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ΡŒ Π² ΠΆΡƒΡ€Π½Π°Π»Π°Ρ… Π°Π½ΠΎΠΌΠ°Π»ΠΈΠΈ, Ρ‚Π΅Π½Π΄Π΅Π½Ρ†ΠΈΠΈ ΠΈ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΈΠ½Ρ†ΠΈΠ΄Π΅Π½Ρ‚Ρ‹ бСзопасности. 1 Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ рСагирования Π½Π° ΠΈΠ½Ρ†ΠΈΠ΄Π΅Π½Ρ‚Ρ‹, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… описаны дСйствия ΠΏΡ€ΠΈ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠΈ сбоСв TLS-соСдинСний Π½Π° Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΌ сСрвСрС. 1 ΠŸΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ Π² ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ рСгистрации сбоСв TLS-соСдинСний Π½Π° Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΌ сСрвСрС.Β  Π‘ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€ΡƒΠΉΡ‚Π΅ сбои соСдинСния ΠΈ ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ Π² ΠΆΡƒΡ€Π½Π°Π»Π°Ρ… фиксируСтся нСобходимая информация. 1 ΠŸΠ΅Ρ€ΠΈΠΎΠ΄ΠΈΡ‡Π΅ΡΠΊΠΈ пСрСсматривайтС ΠΈ обновляйтС ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ логирования, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ эффСктивно Ρ„ΠΈΠΊΡΠΈΡ€ΡƒΡŽΡ‚ сбои соСдинСний. 1 Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ систСмы рСгистрации, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ‚ΠΈΠΏΠ°Ρ… рСгистрируСмых сбоСв ΠΈ записываСмой ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ сбоСв TLS-соСдинСния с backend:

import logging
import requests
# Configure logging
logging.basicConfig(level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s')
def communicate_with_backend_service():
backend_url = "https://backend.example.com"
try:
# Simulate TLS connection to the backend service
response = requests.get(backend_url)
# Check if the connection was successful
if response.status_code == 200:
logging.info("Successfully connected to backend service.")
else:
logging.error(f"Failed to connect to backend service. Status code: {response.status_code}")
except requests.exceptions.RequestException as e:
# Log connection failure with detailed information
logging.error(f"Failed to establish TLS connection to backend service: {e}")
if __name__ == "__main__":
communicate_with_backend_service()

Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅:

  • Для вСдСния ΠΆΡƒΡ€Π½Π°Π»Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ logging.
  • Ѐункция communicate_with_backend_service ΠΈΠΌΠΈΡ‚ΠΈΡ€ΡƒΠ΅Ρ‚ связь с backend-сСрвисом с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ requests.
  • Π’ случаС ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ соСдинСния (ΠΊΠΎΠ΄ состояния 200) формируСтся Π»ΠΎΠ³ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ уровня.
  • Если ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ соСдинСния ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ΅Π» сбой (ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‡Π΅Π½ requests.exceptions.RequestException), Ρ‚ΠΎ гСнСрируСтся ΠΆΡƒΡ€Π½Π°Π» уровня ошибки с ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΎ сбоС.

Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ IIS, Π΄ΠΎΠ±Π°Π²ΠΈΠ² настраиваСмыС поля вСдСния ΠΆΡƒΡ€Π½Π°Π»Π°:applicationHost.config

<logFile>
<customFields>
<clear />
<add logFieldName="crypt-protocol" sourceName="CRYPT_PROTOCOL" sourceType="ServerVariable" />
<add logFieldName="crypt-cipher" sourceName="CRYPT_CIPHER_ALG_ID" sourceType="ServerVariable" />
<add logFieldName="crypt-hash" sourceName="CRYPT_HASH_ALG_ID" sourceType="ServerVariable" />
<add logFieldName="crypt-keyexchange" sourceName="CRYPT_KEYEXCHANGE_ALG_ID" sourceType="ServerVariable" />
</customFields>
</logFile>

Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ для вСдСния ΠΆΡƒΡ€Π½Π°Π»Π° сбоСв соСдинСния TLS с сСрвСрной Ρ‡Π°ΡΡ‚ΡŒΡŽ Π² Nginx:

error_log /var/log/nginx/error.log;
http {
log_format backend_tls_failure '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" $upstream_addr tls_failure="$ssl_verify_result"';
server {
...
location / {
...
proxy_ssl_verify on;
proxy_ssl_verify_depth 2;
proxy_ssl_trusted_certificate /path/to/ca.crt;
proxy_ssl_session_reuse on;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass https://backend_server;
access_log /var/log/nginx/access.log backend_tls_failure;
error_log /var/log/nginx/backend_error.log warn;
}
...
}
}

Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ для вСдСния ΠΆΡƒΡ€Π½Π°Π»Π° сбоСв TLS-ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ сСрвСрной части Π² Apache:

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %{SSL_VERIFY_RESULT}e" backend_tls_failure
<VirtualHost *:80>
ServerName example.com
...
<Location />
ProxyPass https://backend_server
ProxyPassReverse https://backend_server
RequestHeader set Front-End-Https "On"
RequestHeader set X-Real-IP $remote_addr
RequestHeader set X-Forwarded-For $proxy_add_x_forwarded_for
RequestHeader set X-Forwarded-Proto $scheme
RequestHeader set X-Url-Scheme $scheme
RequestHeader set X-Host $host
RequestHeader set X-Port $server_port
RequestHeader set X-Request-Start "%{UNIQUE_ID}e %D"
SSLProxyEngine On
SSLProxyVerify on
SSLProxyVerifyDepth 2
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
SSLProxyCACertificateFile /path/to/ca.crt
CustomLog /var/log/httpd/access_log backend_tls_failure
ErrorLog /var/log/httpd/backend_error_log
</Location>
...
</VirtualHost>

Additional:#

https://cwe.mitre.org/data/definitions/544.html

https://docs.ukfast.co.uk/operatingsystems/windows/tlsandschannel/tlsloggingiis.html