Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

4.3.14. DDoS 공격에 대해 memcached 보안

Memcached 는 오픈 소스 고성능 분산 메모리 개체 캐싱 시스템입니다. 대부분의 경우 데이터베이스 로드를 줄여 동적 웹 애플리케이션의 성능을 개선하는 데 주로 사용됩니다.
Memcached는 데이터베이스 호출, API 호출 또는 페이지 렌더링 결과에서 문자열 및 오브젝트와 같은 임의의 데이터의 작은 청크를 위한 메모리 내 키-값 저장소입니다. Memcached를 사용하면 애플리케이션이 필요한 것보다 더 많은 시스템이 있는 시스템의 일부에서 메모리를 가져와 애플리케이션이 필요한 것보다 적은 영역에서 액세스할 수 있도록 합니다.

Memcached Vulnerabilities

2018년, 공개 인터넷에 노출된 memcached 서버를 악용하여 DDoS 개정 공격 취약점을 발견했습니다. 이러한 공격은 전송에 UDP 프로토콜을 사용하여 memcached 통신을 활용합니다. 이 공격은 높은 진폭 비율로 인해 효과가 있습니다 - 몇 백 바이트 크기의 요청이 몇 메가바이트 또는 수백 메가바이트 크기의 응답을 생성할 수 있습니다. 이 문제는 CVE-2018-1000115 로 지정되어 있습니다.
대부분의 경우 memcached 서비스를 공용 인터넷에 노출할 필요가 없습니다. 이러한 노출에는 원격 공격자가 memcached에 저장된 정보를 유출하거나 수정할 수 있는 자체 보안 문제가 있을 수 있습니다.

memcached 강화

보안 위험을 완화하려면 구성에 적용 가능한 다음 단계의 수를 수행합니다.
  • LAN에서 방화벽을 구성합니다. 로컬 네트워크 내에서만 memcached 서버에 액세스할 수 있어야 하는 경우 memcached에서 사용하는 포트에 대한 외부 트래픽을 허용하지 마십시오. 예를 들어 memcached에서 기본적으로 사용되는 포트 11211을 허용된 포트 목록에서 제거합니다.
    ~]# firewall-cmd --remove-port=11211/udp
    ~]# firewall-cmd --runtime-to-permanent
    특정 IP 범위가 포트 11211을 사용하도록 허용하는 firewalld 명령은 5.8절. “Zone을 사용하여 소스에 따라 트래픽 관리” 를 참조하십시오.
  • 클라이언트에 이 프로토콜이 필요하지 않는 한 /etc/sysconfig/memcached 파일의 OPTIONS 변수에 -U 0 -p 11211 값을 추가하여 UDP를 비활성화합니다.
    OPTIONS="-U 0 -p 11211"
  • 애플리케이션과 동일한 시스템에서 단일 memcached 서버만 사용하는 경우 memcached를 설정하여 localhost 트래픽만 수신 대기합니다. -l 127.0.0.1,::1 값을 /etc/sysconfig/memcachedOPTIONS 에 추가합니다.
    OPTIONS="-l 127.0.0.1,::1"
  • 인증을 변경할 수 있는 경우 SASL(Simple Authentication and Security Layer) 인증을 활성화합니다.
    1. /etc/sasl2/memcached.conf 파일에 수정하거나 추가합니다.
      sasldb_path: /path.to/memcached.sasldb
    2. SASL 데이터베이스에 계정을 추가합니다.
      ~]# saslpasswd2 -a memcached -c cacheuser -f /path.to/memcached.sasldb
    3. memcached 사용자 및 그룹에 대한 데이터베이스에 액세스할 수 있는지 확인합니다.
      ~]# chown memcached:memcached /path.to/memcached.sasldb
    4. OPTIONS-S 값을 /etc/sysconfig/memcached 에 추가하여 memcached에서 SASL 지원을 활성화합니다.
      OPTIONS="-S"
    5. memcached 서버를 다시 시작하여 변경 사항을 적용합니다.
    6. SASL 데이터베이스에서 생성된 사용자 이름과 암호를 애플리케이션의 memcached 클라이언트 구성에 추가합니다.
  • stunnel 을 사용하여 memcached 클라이언트와 서버 간 통신을 암호화합니다. memcached에서 TLS를 지원하지 않으므로 해결방법은 memcached 프로토콜 상단에 TLS를 제공하는 stunnel 과 같은 프록시를 사용하는 것입니다.
    PSK (Pre Shared Keys)를 사용하도록 stunnel 을 구성하거나 사용자 인증서를 사용하는 것이 더 좋습니다. 인증서를 사용하는 경우 인증된 사용자만 memcached 서버에 연결할 수 있으며 트래픽이 암호화됩니다.
    중요
    터널을 사용하여 memcached에 액세스하는 경우 서비스가 localhost에서만 수신 대기 중이거나 방화벽이 네트워크에서 memcached 포트에 대한 액세스를 허용하지 않는지 확인합니다.
    자세한 내용은 4.8절. “stunnel 사용”를 참조하십시오.