"보안"개방형 리졸버는 어떻게 설정합니까?


25

이것은 공개 DNS 확인자 보안에 관한 정식 질문입니다.

개방형 DNS 서버는 위치에 관계없이 회사 전체에서 일관되게 사용할 수있는 IP 주소를 제공하므로 매우 깔끔하고 편리합니다. Google과 OpenDNS는이 기능을 제공하지만 이러한 회사가 DNS 쿼리에 액세스하기를 원치 않습니다.

나는 우리 회사에서 사용하기 위해 이와 같은 것을 설정하고 싶지만, 이것이 위험한 관행에 대해 (특히 증폭 공격 과 관련하여 ) 많은 것을 듣고 나는 우리가 이것을 올바르게하고 싶습니다. 이러한 유형의 환경을 구축 할 때 명심해야 할 사항은 무엇입니까?


5
downvote는 나를 킥킥 웃게 만들었습니다.
Andrew B

답변:


34

이것을 이해하는 데 필요한 몇 가지 사항이 있습니다.


이것은 네트워크 엔지니어링 문제입니다.

이 유형의 환경을 설정하려는 대부분의 사람들은 시스템 관리자입니다. 멋지다, 나는 시스템 관리자이기도하다! 업무의 일부는 귀하의 책임이 끝나는 곳과 다른 사람의 시작을 이해하는 것이며 시스템 관리자가 스스로 해결할 수있는 문제는 아닙니다. 이유는 다음과 같습니다.

  • UDP는 상태 비 저장 프로토콜입니다. 클라이언트 핸드 셰이크가 없습니다.
  • DNS 서버에 대한 쿼리는 인증되지 않은 2 단계 트랜잭션 (쿼리, 회신)입니다. 서버가 응답하기 전에 소스 IP가 스푸핑되었는지 여부를 서버가 알 수있는 방법이 없습니다.
  • 쿼리가 서버에 도달 할 때 스푸핑 된 UDP 패킷을 방지하기에는 이미 너무 늦습니다. 스푸핑은 BCP 38BCP 84 문서에서 다루는 주제 인 수신 필터링 으로 만 방지 할 수 있습니다 . 이들은 DNS 서버 앞에있는 네트워킹 장치에 의해 구현됩니다.
  • 데이터 센터를 처음부터 끝까지 설정하는 방법 또는 이러한 모범 사례를 구현하는 방법에 대한 연습을 제공 할 수 없습니다. 이것들은 여러분의 필요에 따라 매우 다릅니다. Q & A 형식은이 작업에 적합하지 않으며이 사이트는 전문 인력을 고용하여 전문 작업을 대신 할 수 없습니다.
  • 10 억 달러 규모의 대기업이 침입 필터링을 올바르게 구현한다고 가정하지 마십시오.

이것은 모범 사례가 아닙니다. 가장 좋은 방법은이 작업을 수행하지 않는 것입니다.

인터넷 연결 DNS 확인자를 설정하는 것은 매우 쉽습니다. 그렇게하는 데 따르는 위험을 이해하는 것보다 하나를 설정하는 것이 훨씬 적은 연구입니다. 이것은 선의의 의도가 타인의 잘못 (및 고통)을 실수로 가능하게하는 경우 중 하나입니다.

  • DNS 서버가 표시되는 소스 IP 주소에 응답하면 공개 리졸버를 실행하는 것입니다. 이들은 무고한 사람들에 대한 증폭 공격 에 지속적으로 활용되고 있습니다. 새로운 시스템 관리자는 매일 공개 리졸버 를 세우고 있기 때문에 악의적 인 개인이 지속적으로 검사하는 것이 유리합니다. 2015 년 현재 공개 리졸버가 공격에 사용 될지 여부는 의문의 여지가 없습니다. 즉각적이지 않을 수도 있지만 확실히 일어날 것입니다.
  • DNS 소프트웨어 (예 : BIND)를 사용하여 ACL을 적용하더라도 서버가 응답 할 스푸핑 된 DNS 패킷을 제한하기 만하면됩니다. DNS 인프라를 사용하여 ACL의 장치를 공격 할뿐만 아니라 DNS 서버와 해당 장치 사이의 네트워킹 장치를 공격 할 수 있다는 것을 이해해야합니다. 데이터 센터를 소유하고 있지 않다면, 그 이상은 문제가 아닙니다.

Google과 OpenDNS 가이 작업을 수행하므로 왜 할 수 없습니까?

때로는 현실에 대한 열정을 평가해야 할 때가 있습니다. 다음은 스스로에게 어려운 질문입니다.

  • 이것은 당신이 변덕에 설정하고 싶습니까, 아니면 올바른 일을하기 위해 몇 백만 달러를 투자해야합니까?

  • 전담 보안 팀이 있습니까? 전용 학대 팀? 둘 다 새로운 인프라의 남용을 다루는주기와 외부 당사자로부터받을 불만이 있습니까?

  • 당신은 가지고 있습니까 법률 팀?

  • 이 모든 것이 말되고 행해질 때,이 모든 노력이 원격으로 스스로를 지불하거나 회사를 위해 이익을 돌리거나이 방향으로 인도 한 불편을 다루는 금전적 가치를 초과 할 것입니까?


마지막으로,이 스레드는 Q & A가 연결되어있는 대부분의 사용자에게 실망스러운 것임을 알고 있습니다. Serverfault는 답변을 제공하기 위해 여기에 있으며 "이것은 나쁜 생각입니다.하지 마십시오"라는 대답은 일반적으로 매우 유용한 것으로 인식되지 않습니다. 일부 문제는 처음에 나타난 것보다 훨씬 복잡하며 이는 그 중 하나입니다.

이 작업을 수행 하려는 경우 이러한 종류의 솔루션을 구현하려고 할 때 여전히 도움을 요청할 수 있습니다. 가장 중요한 것은 문제가 그 자체너무 커서 응답이 편리한 Q & A 형식으로 제공 되기 어렵다는 것 입니다. 이미 주제를 연구하는 데 상당한 시간을 투자하고 구현 과정에서 발생한 특정 논리 문제로 우리에게 접근 해야합니다. 이 Q & A의 목적은 더 큰 그림을 더 잘 이해 하고이 질문만큼 광범위한 질문에 대답 할 수없는 이유 를 이해하는 데 도움 이됩니다.

인터넷을 안전하게 유지하도록 도와주세요! :)


5
보완 적으로 사람들은 openresolver 프로젝트 를 통해 공개 범위에 공개 DNS 릴레이가 없는지 확인할 수 있습니다 . 인터넷에는 재귀 쿼리를 허용하는 약 2 천만 개의 공개 릴레이 가 포함되어 있습니다 . 결과의 예 : CloudFlare는이 중 0.1 %를 사용하여 300Gb / s DNS 증폭 공격을
Xavier Lucas

UDP를 비활성화하고 모든 쿼리가 TCP를 대신 사용하도록 강제 설정할 수 없습니까?
小 太郎

@ 小 太郎이 질문을 참조하십시오. 리졸버 라이브러리는 기본적으로 UDP 모드로 설정되며 많은 경우 응답이 잘린 경우 TCP를 사용하여 재 시도하지만 그에 관한 것입니다. 응용 프로그램이 OS를 무시하고 자체 조회를 수행하는 경우 작동하지만 일반적으로 사람들 이이 설정으로 수행하려는 목적을 무효화합니다.
Andrew B

0

개방형 DNS 되풀이를 실행하든 신뢰할 수있는 DNS 서버를 실행하든 문제는 동일하며 가능한 대부분의 솔루션도 동일합니다.

최고의 솔루션

DNS 쿠키 는 DNS 서버에 클라이언트 IP 주소가 스푸핑되지 않았 음을 증명하기 위해 클라이언트가 쿠키를 보내도록 요구하는 방법을 제안하는 표준입니다. 첫 번째 조회에는 추가 왕복 1 회가 소요되며 이는 솔루션이 제공 할 수있는 가장 낮은 오버 헤드입니다.

이전 고객을위한 대체

DNS 쿠키는 아직 표준화되지 않았으므로 현재와 향후 몇 년간 구형 클라이언트를 지원해야합니다.

DNS 쿠키 지원없이 클라이언트의 제한 요청을 평가할 수 있습니다. 그러나 속도 제한으로 인해 공격자가 DNS 서버를보다 쉽게 ​​수행 할 수 있습니다. 일부 DNS 서버에는 신뢰할 수있는 DNS 서버 전용으로 설계된 속도 제한 기능이 있습니다. 재귀 해결 프로그램에 대해 요청하므로 이러한 속도 제한 구현이 적용되지 않을 수 있습니다. 설계상의 속도 제한은 서버의 병목 현상이되므로 공격자는 속도 제한이없는 경우보다 합법적 인 요청을 제거하기 위해 트래픽을 적게 보내야합니다.

속도 제한의 한 가지 장점은 공격자가 DNS 요청으로 DNS 서버를 과도하게 사용하는 경우 서버에 ssh하고 상황을 조사 할 수있는 용량이 남아있을 가능성이 높다는 것입니다. 또한 속도 제한은 주로 많은 요청을 보내는 클라이언트 IP에서 요청을 삭제하도록 설계 될 수 있으며, 이는 스푸핑 클라이언트 IP에 액세스 할 수없는 공격자로부터 DoS로부터 사용자를 보호하기에 충분할 수 있습니다.

이러한 이유로 실제 용량에서 약간의 속도 제한은 실제로 증폭으로부터 보호하지 않더라도 좋은 생각 일 수 있습니다.

TCP 사용

UDP에 대한 응답이 너무 크다는 오류 코드를 전송하여 클라이언트가 TCP를 사용하도록 할 수 있습니다. 여기에는 몇 가지 단점이 있습니다. 두 번의 추가 왕복이 필요합니다. 그리고 일부 잘못된 클라이언트는이를 지원하지 않습니다.

두 번의 추가 왕복 비용은이 방법을 사용하는 첫 번째 요청으로 만 제한 될 수 있습니다.

클라이언트 IP가 확인되지 않으면 DNS 서버는 잘린 응답을 보내 클라이언트가 TCP로 전환하도록 할 수 있습니다. 잘린 응답은 증폭을 제거하는 요청 (또는 클라이언트가 EDNS0을 사용하고 응답이 사용하지 않는 경우 더 짧음)만큼 짧을 수 있습니다.

TCP 핸드 셰이크를 완료하고 연결에서 DNS 요청을 보내는 클라이언트 IP는 일시적으로 화이트리스트에 올릴 수 있습니다. 허용 된 IP는 UDP 쿼리를 보내고 최대 512 바이트 (EDNS0를 사용하는 경우 4096 바이트)의 UDP 응답을받습니다. UDP 응답이 ICMP 오류 메시지를 트리거하면 IP가 화이트리스트에서 다시 제거됩니다.

블랙리스트를 사용하여이 방법을 되돌릴 수도 있습니다. 이는 클라이언트 IP가 기본적으로 UDP를 통해 쿼리 할 수 ​​있지만 ICMP 오류 메시지로 인해 블랙리스트를 해제하려면 TCP 쿼리가 필요한 IP가 블랙리스트에 있음을 의미합니다.

모든 관련 IPv4 주소를 다루는 비트 맵을 444MB의 메모리에 저장할 수 있습니다. IPv6 주소는 다른 방법으로 저장해야합니다.

DNS 서버가이 방법을 구현했는지 여부는 알 수 없습니다.

또한 일부 TCP 스택은 증폭 공격에서 악용 될 수 있다고보고되었습니다. 그러나 이는 DNS뿐만 아니라 모든 TCP 기반 서비스에 적용됩니다. 이러한 취약점은 TCP 스택이 SYN 패킷에 응답하여 둘 이상의 패킷을 보내지 않도록 수정 된 커널 버전으로 업그레이드하여 완화해야합니다.


공평하게 말하면, 우리의 대답은 지금 우리 손에있는 상자 기술에 초점을 맞추고 있습니다. Serverfault에 대해이 질문을 한 대부분의 사람들은 고유 한 이름 서버 소프트웨어를 개발하거나 기존 이름 서버 소프트웨어 용 패치를 작성하려고하지 않습니다. Alnitak은 제안한 TCP + 화이트 리스팅 접근 방식이 특허를받은 것으로 보이지만 정확한 특허를 인용하지는 않았다고 조언했습니다 .
Andrew B

또한 RRL을 구현하는 현재 DNS 서버 소프트웨어를 사용하여 언급 한 DoS 공격을 만들거나 다른 사람이이를 수행 한 사례를 알고 있습니까? 나는 이것이 내가 구독 한 메일 링리스트에 올랐을 것이라고 확신한다.
Andrew B

@AndrewB 다른 사람의 서버에 홍수를 일으키고 싶지 않기 때문에 아직 테스트하지 않았습니다. 그리고 속도 제한을 언급하는 사람들 중 일부는 내 서버에서 결과를 믿지 않으면 결과를 신뢰할 수 없다고 생각하는 태도를 가지고 있습니다. 그러나 시도해 볼 것을 요청하므로 테스트를 위해 별도의 DNS 서버를 설정하면됩니다. Ubuntu LTS 14.04에서 기본 바인드 버전을 사용하는 것이 합리적인 설정처럼 들립니까? 그러한 테스트에 합리적이라고 생각하는 정식 서버의 정확한 설정은 무엇입니까?
kasperd

안타깝게도 설정을 요청하는 가장 좋은 사람은 아닙니다. 아직 실험실 테스트를 시작하지 않았습니다. 나는 여전히 당신이 제안 된 시나리오를 시도해 보길 권한다 : 당신이 대화하고있는 당사자들의 태도에 관계없이, 실제 소프트웨어 개발에 관심을 가질 여러 소프트웨어 설치 기지에는 수많은 당사자들이있다. 또한 SNMP를 사용하여 UDP 수신 큐 오버플로를 모니터링하여 그래프를 통해 소프트웨어가 패킷을 수락하는 능력을 성공적으로 저하시키는 지 보여주는 그래프를 작성하는 것이 좋습니다.
Andrew B

@AndrewB 방금 여기에 약간의 차이가 있음을 깨달았습니다. 이 질문은 재귀 해결에 관한 것입니다. 그러나 속도 제한은 재귀 해결 프로그램을 위해 설계된 것이 아닙니다. Deliberately open recursive DNS servers are outside the scope of this document.지금은 그것에 대해 경고를 추가했습니다. 순환 리졸버로 구성된 바인드에서 속도 제한을 사용할 수 있는지 그리고 올바르게 작동하는지 테스트해야합니다.
kasperd
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.