Skip to main content

V13.2.6 RESTful Web Service

Requirement:#

Verify that the message headers and payload are trustworthy and not modified in transit. Requiring strong encryption for transport (TLS only) may be sufficient in many cases as it provides both confidentiality and integrity protection. Per-message digital signatures can provide additional assurance on top of the transport protections for high-security applications but bring with them additional complexity and risks to weigh against the benefits.

Explanation:#

Цифровые подписи обеспечивают проверку подлинности и целостности сообщения. Они используют криптографию с открытым ключом, чтобы убедиться, что сообщение было отправлено именно тем отправителем, которому оно предназначалось, и не было изменено при передаче.

Одним из способов достижения этой цели является использование надежного шифрования при отправке сообщения, например, Transport Layer Security (TLS). TLS шифрует сообщения при передаче, затрудняя злоумышленникам перехват и чтение или изменение содержимого сообщения. Он также обеспечивает защиту целостности, которая гарантирует, что сообщение не было изменено в процессе передачи без обнаружения.

Remediation:#

Чтобы решить проблему обеспечения достоверности заголовков сообщений и полезной нагрузки и их отсутствия изменений при передаче, можно предпринять следующие шаги:

  • Используйте протокол TLS для шифрования связи между клиентом и сервером.
  • Внедрите цифровые подписи для каждого сообщения для дополнительной гарантии. Это может включать использование кода аутентификации сообщения (MAC) или алгоритма цифровой подписи (DSA) для проверки целостности сообщения.
  • Убедитесь, что алгоритмы шифрования и подписи надежны и безопасны, а ключи шифрования и цифровые сертификаты правильно управляются и защищены.
  • Регулярно проверяйте систему на наличие любых признаков взлома или несанкционированного доступа и незамедлительно реагируйте на любые обнаруженные инциденты безопасности.
  • Рассмотрите возможность проведения регулярного тестирования на проникновение и оценки безопасности, чтобы выявить любые потенциальные уязвимости и обеспечить эффективность мер безопасности.

Вот пример кода на Python, который реализует шифрование TLS для веб-сервисов RESTful:

import ssl
from flask import Flask, request
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello, World!"
if __name__ == '__main__':
context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)
context.load_cert_chain('cert.pem', 'key.pem')
app.run(host='0.0.0.0', port=443, ssl_context=context)

В этом примере объект ssl.SSLContext используется для создания безопасного контекста, реализующего шифрование TLS. Метод load_cert_chain используется для загрузки сертификата сервера и закрытого ключа. Наконец, метод app.run вызывается с аргументом ssl_context, для которого задан безопасный контекст, который запускает веб-сервер и прослушивает порт 443 для HTTPS-запросов.

Additional:#

CWE-345: Insufficient Verification of Data Authenticity