Microsoft로 로그인
로그인하거나 계정을 만듭니다.
안녕하세요.
다른 계정을 선택합니다.
계정이 여러 개 있음
로그인할 계정을 선택합니다.

이 문서는 기술 지원 에이전트와 IT 전문가만을 위한 것입니다. 문제를 해결하는 데 도움이 필요하다면 Microsoft 커뮤니티에 질문하세요.

소개

이 도움말 문서의 목적은 UDP(User Datagram Protocol) 증폭 공격 표면을 줄이는 방법에 대한 지침을 제공하는 데 있습니다. 문서에는 다음 정보가 포함되어 있습니다.

  • UDP 및 UDP 증폭 공격의 개요.

  • 포트 및 프로토콜의 최소 권한 인터넷 액세스에 대해 Azure NSG(네트워크 보안 그룹)을 구성하는 방법

  • 포트가 재귀 DNS(도메인 이름 서비스) 또는 NTP(Network Time Protocol) 서버에 필요한 경우 UDP 증폭 공격 표면을 제거하는 서비스를 구성하는 방법.

  • 네트워크 보안 그룹 구성을 확인하기 위해 Nmap 스캔을 실행하는 방법.

사용자는 본 문서의 지침에 따라 인바운드 UDP 연결을 종료하여 공격 표면을 줄여야 합니다.

요약

UDP(User Datagram Protocol)는 무연결 프로토콜입니다. UDP가 Azure 클라우드 서비스에서 허용되는 인바운드 액세스인 경우, VM(가상 머신)에 대해 분산형 리플렉션 DRDoS(서비스 거부 공격)에 사용될 수 있는 공격 표면을 만듭니다. UDP 기반 증폭 공격은 UDP 트래픽으로 대상자의 시스템을 무력화하기 위해 공개적으로 액세스할 수 있는 UDP 서비스 및 BAF(대역폭 증폭 요소)에 의존하는 분산형 서비스 거부 공격의 한 형태입니다.

참고 기본적으로 NSG를 만들었다면, 구성이 UDP 등 모든 포트를 닫습니다. 또한, Azure에는 플랫폼 수준에서 DDOS 보호가 있습니다. 따라서, 사용자도 자신의 서비스 계층에 DDOS를 추가할 수 있습니다.

이러한 종류의 공격에 대한 자세한 내용은 https://www.us-cert.gov/ncas/alerts/TA14-017A를 참조하세요.

UDP 기반 증폭 공격은 분산 서비스 거부 (DDoS) 공격 형태입니다.

다음의 공통 포트는 종종 이러한 UDP 리플렉션 공격의 일부로 사용됩니다. 17(QOTD), 19(CharGEN), 53(DNS), 69(TFTP), 123(NTP), 161(SNMP), 389(CLDAP), 1900(SSDP), 9987(DSM/SCM Target Interface), 11211(Memcached). 사용자는 공개적으로 이러한 포트를 인터넷에 노출해야 하는지를 평가한 후 꼭 필요하지 않은 UDP 포트는 모두 닫아야 합니다. 특히, 포트 53(DNS) 또는 포트 123(NTP)에 인바운드 UDP가 필요한 사용자는 취약한 구성(본 문서에 명시)을 제거해야 합니다. 이것은 이 두 포트가 이러한 유형의 공격에 광범위하게 사용되기 때문입니다.

프로토콜

UDP 포트

취약한 구성

DNS

53

공용 인터넷에 공개된 재귀 DNS

NTP

123

쿼리 열기 및 monlist 명령 사용

권장 조치

다음 단계는 UDP에서 공격 영향을 완화하는 데 도움이 됩니다.

  1. 어떤 서비스를 인터넷에 노출해야 하는지를 평가하고, 어떤 인바운드 UDP 포트가 정확한 서비스 작동에 꼭 필요한지를 결정하고, 모든 불필요한 UDP 포트를 닫습니다.

  2. UDP 포트를 열어야 하는 사용자는 본 문서의 특정 섹션을 참조하여 UDP 포트에서 NTPDNS 수신과 관련된 권장 사항을 확인할 수 있습니다. 그 외 포트는 닫아야 하는 UDP 포트 섹션을 따릅니다.

NTP의 monlist 서비스는 디버깅 정보의 쿼리를 실행할 수 있는 기능을 제공하며, 서비스 문제를 해결하기 위해서만 임시로 사용되어야 합니다. UDP 리플렉션 공격을 수행하는 데에도 사용될 수 있습니다. 4.2.8보다 이전의 NTPD(NTP 디먼) 패키지에서 이 서비스는 기본적으로 사용하도록 설정되어 있습니다.  사용자는 다음 지침을 따라야 합니다.

  • monlist가 필요한 사용자는 NSG를  꼭 필요한 IP 주소에 대해서만 액세스를 허용하도록 구성해야 합니다.

  • monlist가 필요하지 않고 4.2.8보다 이전의 Linux NTPD 패키지를 실행하는 사용자는 패키를 현재 버전으로 업데이트하고 monlist를 사용하고 있지 않는지 확인해야 합니다. 패키지를 새 버전으로 업데이트할 수 없는 사용자는 다음 수정 단계를 이용하여 서비스를 구성해야 합니다.

  1. NTPD 패키지 버전을 확인합니다.

#sudo -i ntpq -c rv

  1. NTPD 패키지 버전이 4.7p26보다 이전인 경우 다음 단계를 수행합니다.

#vi /etc/ntp.conf

  1. 아직 존재하지 않는다면 다음 줄을 추가합니다.

restrict -4 default kod nomodify notrap nopeer noquery

restrict -6 default kod nomodify notrap nopeer noquery

  1. NTP 서비스를 다시 시작합니다.

# service ntp restart [Debian/ Ubuntu]

# service ntpd restart [Redhat/ Centos]

참고 1: Windows에서 NTPD 패키지를 설치했고 열린 포트가 있는 경우, 다음 단계에 따라 수정해야 합니다.

참고 2: 자세한 내용은 https://www.us-cert.gov/ncas/alerts/TA14-013A를 참조하세요.

참고 3: 시간 동기화(모드 3 및 모드 4)에 사용되는 일반 NTP 패키지는 영향을 받지 않습니다. 즉, 시간 동기화 및 서버가 시간만 제공할 때에는 안전합니다.

인터넷에 개방된 DNS 재귀 확인자를 실행하면 사용자의 자체 서비스와 다른 사용자의 서비스에 UDP 공격을 유발할 수 있습니다. 사용자는 실제로 DNS 서비스가 실행 중인지 확인해야 합니다. 실행 중이 아니라면 포트 53에 대한 모든 액세스를 거부하거나, 해당 운영 체제 및 DNS 구현에 해당하는 지침에 따라 DNS 서비스를 제거해야 합니다.

권한 이름을 확인하기 위해 DNS 서비스를 실행할 필요는 없지만 DNS 재귀가 필요하지 않은 사용자는 해당 운영 체제 및 DNS 구현에 해당하는 지침(본 문서의 후반부에 명시)에 따라 이 기능을 사용하지 않도록 설정해야 합니다. 또한, Microsoft는 어떤 경우이든 NSG에서 포트 53에 액세스할 때 최소 권한으로 서비스를 작동하는 데 필요한 특정 IP 집합으로 제한할 것을 강력히 권장합니다.

Windows: Windows Server 2012, 2016의 DNS 서버에서 DNS 재귀 확인자를 사용하지 않음

  1. DNS 관리자를 엽니다(시작을 선택하고 관리 도구를 가리킨 후 DNS를 선택).

  2. 콘솔 트리에서 해당 DNS 서버를 마우스 오른쪽 단추로 클릭하고 속성을 선택합니다.

  3. 고급 탭을 선택합니다.

  4. 서버 옵션에서 재귀 사용 안 함 확인란이 선택되어 있는지 확인합니다.

  5. DNS 서비스를 다시 시작합니다(서비스 제어판에서).

Linux: Bind 서버에서 DNS 재귀 사용 안 함

  1. 루트 자격 증명을 사용하여 SSH(Secure Shell)를 통해 서버에 연결합니다.

  2. 서버에 연결한 후 named.conf 파일에서 DNS 재귀를 확인하고 설정을 조사합니다.

    cat /etc/named.conf | grep "recursion"

  3. 아무 텍스트 편집기를 사용하여 named.conf 파일을 열고 다음 명령으로 재귀 설정을 확인합니다.

    #vi /etc/named.conf

  4. 확장 DNS 재귀의 설정만 변경하고, 이름이 “external”인 섹션을 찾습니다. 섹션이 없다면 다른 줄을 named.conf 파일에 추가하여 확장 DNS 재귀를 사용하지 않도록 설정할 수 있습니다. “옵션” 섹션에 다른 줄을 삽입합니다.

    allow-transfer {"none";};

    allow-recursion {"none";};

    recursion no;

    이미 외부 섹션이 있다면 필요에 따라 재귀 값을  또는 아니요로 변경하여 설정을 변경할 수 있습니다.

  5. 변경한 후 파일을 저장합니다.

  6. 변경 내용이 적용되도록 DNS 서버를 다시 시작합니다. 다음 명령을 실행하여 DNS 서버를 다시 시작합니다.

    service named restart

    참고: 다른 자체 DNS 서버를 사용하고 있다면 해당 제품 설명서를 참조하여 DNS 재귀 설정을 사용하지 않도록 설정합니다.

사용자는 이 섹션의 다름 지침에 따라 고위험 인바운드 UDP 포트를 닫아야 합니다. Microsoft는 모든 UDP 포트에서 인터넷 인바운드 연결을 닫는 것을 권장합니다.

특정 UDP 포트를 인터넷에 개방해야 하는 사용자는 해당 포트만 열고, 꼭 필요한 IP 범위로 인바운드 액세스를 제한해야 합니다(즉, UDP 포트를 인터넷 전체에 노출하지 않음).

UDP 포트를 닫기 위해 사용자는 다음 조치 중 하나 또는 둘 다를 수행할 수 있습니다.

  • 인바운드 UDP를 사용하지 않도록 ARM 템플릿을 업데이트합니다. 이렇게 하려면 NSG 템플릿을 다시 배포해야 합니다. 하지만, 이 템플릿을 사용하는 향후의 배포에 정확한 보안 설정이 있는지 확인합니다.

  • NSG 규칙을 업데이트하여 네트워크 액세스를 제한합니다.  Azure Portal, Azure Powershell, Azure CLI를 참조합니다.

리소스: NSG에 관한 정보 , NSG(네트워크 보안 그룹) 관리

UDP 포트가 인터넷에 개방되어 있는지 확인

사용자는 NSG 규칙을 검토하고 NSG 관리 방법에 있는 지침을 따라 서비스가 UDP 인바운드 연결을 허용하지 않도록 구성되어 있는지 확인해야 합니다. 사용자는 외부 Nmap 스캔을 실행하여 UDP 포트가 정확하게 닫혀 있는지 확인할 수도 있습니다.

Nmap 스캔을 완료하는 단계

중요

사용자는 참여의 침투 테스트 규칙에 따라 다른 사용자가 영향을 받지 않도록, 그리고 스캔이 Microsoft 온라인 서비스 약관을 준수할 수 있도록 자신의 IP 주소 범위 내에서만 스캔해야 합니다.

  1. Nmap를 설치합니다.

  2. 스캔을 실행하기 위해 아웃바운드 UDP 트래픽을 허용하도록 방화벽 설정을 확인합니다.

  3. 스캔 방법에 관한 이 섹션의 Nmap 지침에 따릅니다. 사용자는 Zenmap GUI를 사용할 수도 있습니다(Windows Nmap가 설치된 경우 아이콘이 바탕 화면에 설치되어 있음).

    1. 특정 포트(예:  Port 69)를 스캔하기 위해 IP 주소 목록이 있는 .csv 파일을 만듭니다.

    2. Nmap 명령을 실행합니다. 이 옵션을 포함할 수 있습니다. -sUV (UDP ports) -T4 -p {스캔할 포트} -Pn {모든 포트를 온라인으로 취급} -iL {입력 목록} -oL {출력 목록} 및 (백그라운드에서 실행하는 선택적 플래그):

      nmap -sUV -T4 -Pn -p 69 -iL filename.csv -oX filename.xml &

    3. 리플렉션 공격에 주로 사용되는 포트를 확인합니다.

      nmap -sUV -T4 -Pn -p17,19,53,69,111,123,137,161,389,1900,5353,11211 -iL filename.csv -oX filename.xml &

    4. 열린 포트를 식별하기 위해 결과를 검토합니다.

  1. 패키지 관리자를 통해 또는 https://nmap.org/download.html에서 Nmap를 설치합니다.

Ubuntu / Debian :

sudo apt-get update
sudo apt-get install nmap

Redhat / CentOS:

yum update
yum install nmap [Redhat/ Centos]

  1. 다음 Nmap 명령을 사용하여 알려진 UDP 포트를 확인합니다.

    1. 특정 포트(예: Port 69)를 스캔하기 위해 IP 주소 목록이 있는 .csv 파일을 만듭니다.

    2. pscp 명령을 사용하여 .csv 파일을 Linux VM에 업로드합니다.

      pscp filename.csv admin@remotehost:filename.csv

    3. 옵션 -sUV (UDP ports) -T4 -p {스캔할 포트} -Pn {모든 포트를 온라인으로 취급} -iL {입력 목록} -oL {출력 목록}을 포함한 sudo nmap 명령 실행 및 (백그라운드에서 실행하는 선택적 플래그):

      sudo nmap -sUV -T4 -Pn -p 69 -iL filename.csv -oX filename.xml &

    4. 리플렉션 공격에 주로 사용되는 포트를 확인합니다.

      sudo nmap -sUV -T4 -Pn -p17,19,53,69,111,123,137,161,389,1900,5353,11211 -iL filename.csv -oX filename.xml &

    5. 프로세스가 완료되면 pscp 명령을 사용하여 파일을 다운로드합니다.

    6. 열린 포트를 식별하기 위해 결과를 검토합니다.

Nmap 스캔 예

참고

이 예에서 명령을 사용하여 스캔 프로세스를 자동화하려면 스캐너가 트래픽 반환 여부를 감지하기 위해(보장 안 됨) 조종 기다려야 하기 때문에 UDP 스캔 실행 시간이 길어질 수 있다는 점에 유의합니다. 최고의 성능을 위해 각 포트별로 스캔을 만듭니다.

모든 포트를 닫고 명령줄에서 Windows 스캔을 실행합니다.

참고 이것은 Nmap UDP 스캔이기 때문에 "open|filtered"가 "닫힘"으로 해석될 수 있습니다.

다음 명령이 Windows 스캔을 실행합니다.

C:\Users\user\DeskTop>nmap -sUV -T4 -Pn -p17,19,53,69,111,123,137,161,389,1900,5353,11211 23.36.53.224

Windows nmap 스캔

DNS를 열고 1.1.1.1에 대해 Linux 스캔을 실행합니다. DNS 포트 53에서 해당 포트가 닫혀 있다고 표시할 수 있기 때문에 "open|filtered"를 표시하지 않습니다. 하지만, 다른 포트는 "open|filtered"로 표시됩니다. 이것은 닫혀 있다는 것을 나타냅니다.

다음 명령이 Linux 스캔을 실행합니다.

testuser@testUbuntu:~$ sudo nmap -sUV -T4 -Pn -p17,19,53,69,111,123,137,161,389,1900,5353,11211 1.1.1.1

Linux n 지도 스캔

또한, 다음 스크립트를 실행하여 포트 53, 123, 389의 서비스가 잘못 구성되었는지를 확인합니다.

Linux 사용자의 경우, 각 명령 앞에 sudo가 있어야 합니다.

열린 DNS 재귀 확인자를 스캔하는 방법:

nmap -sUV -Pn -T4 -p 53 --script=dns-recursion -iL <input_file> -oX <output_file>

단일 IP 주소의 경우:

nmap –sU –p53 –script=dns-recursion <Public IP address>

4. 2.8보다 이전의 NTPD 패키지 버전은  monlist 명령을 통해 UDP 리플렉션 공격에 취약합니다. “restrict noquery”가 구성된 경우 monlist 리플렉션 공격이 성공하지 못합니다.

취약성을 식별하는 Nmap 스크립트:

nmap -sUV -Pn -T4 -p 123 --script= ntp-monlist -iL <input_file> -oX <output_file>

단일 IP 주소의 경우:

nmap -sU -pU:123 -Pn -n --script=ntp-monlist <Public IP address>

nmap -sU -p389 -v -n -Pn <Public IP address>

공개적으로 노출된 LDAP 정보 표시:

nmap -p 389 --script ldap-rootdse <Public IP address>

질문과 대답

권장하는 구성이 아닙니다. 그러나, 사용자에 독립된 서비스가 있다면 다음 지침에 따라 서명을 사용하여 보안을 강화해야 합니다.

사용자는 Azure VM의 시간 동기화를 구성하는 방법에 관한 다음 문서를 참조할 수 있습니다. 사용자가 Linux 또는 Windows NTPD의 취약한 패키지를 사용할 경우 현재 버전으로 업데이트해야 합니다.

Network Watcher를 사용하여 문제를 해결하는 방법 배우기: https://docs.microsoft.com/ko-kr/azure/network-watcher/network-watcher-connectivity-overview

아니요. 이것은 UDP 서비스용 표준 포트입니다. 하지만, 서비스가 다른 포트 번호에서 수신하거나, 서버가 다른 소스 포트에서 포팅하는 부하 분산 장치 뒤에 존재할 수 있습니다.

도움이 더 필요하세요?

더 많은 옵션을 원하세요?

구독 혜택을 살펴보고, 교육 과정을 찾아보고, 디바이스를 보호하는 방법 등을 알아봅니다.

커뮤니티를 통해 질문하고 답변하고, 피드백을 제공하고, 풍부한 지식을 갖춘 전문가의 의견을 들을 수 있습니다.

이 정보가 유용한가요?

언어 품질에 얼마나 만족하시나요?
사용 경험에 어떠한 영향을 주었나요?
제출을 누르면 피드백이 Microsoft 제품과 서비스를 개선하는 데 사용됩니다. IT 관리자는 이 데이터를 수집할 수 있습니다. 개인정보처리방침

의견 주셔서 감사합니다!

×