DNS Rebinding Attacks가 설명했습니다. 조회는 집 안에서 나옵니다!
저의 동료 인 Kevin Stubbs는 이전 블로그 게시물에서 DNS Rebinding 공격 주제를 언급했습니다. 그래도 아직 읽지 않았다면 걱정할 필요가 없습니다.이 기사에서는 DNS 개념을 처음부터 반복하여 어떻게 작동하는지를 모르고, 왜 심각한 브라우저 기반 보안 문제인지 탐구합니다.
우리는 웹 보안의 기본 부분 인 동일한 원래 정책을 다시 방문하고 DNS 리딩이 어떻게이를 우회하는지 보여줍니다. 공격자 가이 기술을 사용하여 해당 앱을 공개적으로 사용할 수없는 경우에도 로컬 컴퓨터 또는 네트워크에서 실행되는 내부 응용 프로그램에 액세스 할 수있는 실제 시나리오를 볼 수 있습니다. 우리는 DNS Rebinding이 지역 시스템에서 임의의 파일을 읽는 데 어떻게 사용되었는지 정확히 설명하면서 Deguge Bittorrent 클라이언트의 실제 취약성으로 뛰어들 것입니다. 마지막으로, 우리는 자주 볼 수 있지만 강력한 공격 벡터로부터 자신이나 응용 프로그램을 보호하기 위해 취할 수있는 실용적인 단계를 살펴 보겠습니다.
동일한 원래 정책
SOP (Same-Origin Policy)는 1995 년 Netscape가 도입 한 브라우저 보안의 초석입니다. 그 뒤에있는 아이디어는 간단합니다. 한 원점의 웹 페이지의 스크립트는 다른 원점의 웹 페이지에서 데이터에 액세스 할 수 없어야합니다. 예를 들어, 아무도 임의의 웹 페이지가 현재 로그인 한 웹 메일을 읽을 수 있기를 원하지 않습니다. 따라서 웹 사이트가 다음과 구별 할 수 있도록 할 수 있으므로 각각 프로토콜 (스키마), 호스트 (DNS 이름) 및 포트 번호의 조합으로 정의됩니다. 이 세 부분의 불일치는 원점을 다르게 만듭니다.
예를 들어 웹 페이지의 경우 : 가능한 원점 비교는 다음과 같습니다.
URL | 결과 | 이유 |
---|---|---|
https://www.somedomain.com:81/sub/page.html |
다른 | 포트 81은 443 (HTTPS의 기본값)과 일치하지 않습니다. |
https://somedomain.com/sub/page.html |
다른 | 정확한 www.somedomain.com 일치가 필요합니다 |
http://www.somedomain.com:443/sub/page.html |
다른 | 스키마 (프로토콜) HTTP는 HTTPS와 일치하지 않습니다 |
https://www.somedomain.com/admin/login.html |
같은 | 경로 만 다릅니다 |
공격 : DNS Rebinding
사람들은 Localhost에서 무언가를 달리는 것이 외부 세계에서 그것을 완전히 보호한다고 생각하는 경향이 있습니다. 그들은 로컬 브라우저에서 로컬 컴퓨터에서 실행중인 것에 액세스 할 수 있다는 것을 이해하지만 브라우저가 원치 않는 방문자가 동일한 컴퓨터 또는 로컬 네트워크의 웹 애플리케이션에 액세스 할 수있는 게이트웨이가 될 수 있다는 것을 놓쳤습니다.
불행히도 브라우저 보안 메커니즘과 네트워킹 프로토콜간에 연결이 끊어집니다. 웹 페이지 호스트의 해결 된 IP 주소가 변경되면 브라우저는이를 고려하지 않고 원점이 변경되지 않은 것처럼 웹 페이지를 처리합니다. 이것은 공격자에 의해 학대 될 수 있습니다.
예를 들어, 공격자가 도메인 이름을 소유 한 경우 somesite.com
공격자 제어하에있는 DNS 서버로 위임하면 처음에는 172.217과 같은 공개 IP 주소로 DNS 조회에 응답 할 수 있습니다. 22.14, 후 후속 조회를 192.168.0.1 또는 127.0.0.1 (예 : LocalHost)와 같은 로컬 네트워크 IP 주소로 전환하십시오. 원본에서로드 된 JavaScript somesite.com
브라우저에서 클라이언트 측면을 실행하며 모든 추가 요청이 somesite.com
새로운 지역의 IP 주소로 향할 것입니다. 그때부터 다른 IP 주소에서로드 된 문서 (동일한 호스트에서 해결 된)는 동일한 원점으로 간주됩니다. 이를 통해 공격자는 피해자의 브라우저에서 실행되는 JavaScript를 통해 피해자의 로컬 네트워크와 상호 작용할 수 있습니다. 이렇게하면 피해자의 브라우저가로드 된 스크립트에 액세스 할 수있는 것과 동일한 기계 또는 로컬 네트워크에서 로컬로 실행되는 웹 애플리케이션이 somesite.com
도.
하나의 캐치는 웹 응용 프로그램에 인증이 필요한 경우 쿠키가 공격자가 제공하지 않는다는 것입니다. 대상 사용자가 원래 열린 이후 somesite.com
– 후속 JavaScript 요청이 새로운 공격자 리바운드 인 IP 주소로 지정 되더라도 브라우저는 여전히 somesite.com
기원. 이는 피해자의 브라우저가 로컬로 대상 서비스 이름에 대한 저장된 인증 또는 세션 컨텍스트를 사용하지 않음을 의미합니다.
다른 시나리오에는 대상 사용자가 사용할 수있는 로컬 VPN 경로를 남용하는 공격자가 포함되어 예를 들어 회사 인트라넷 웹 애플리케이션에 액세스 할 수 있습니다.
응답 : 캐싱
브라우저는 DNS 응답을 캐싱하여 이와 같은 DNS를 반드시 저항하려고하지만 방어는 완벽하지 않습니다. 일부 브라우저는 새로운 W3C 사양의 새로운 초안 인 로컬 네트워크 액세스 (CORS-RFC1918이라고도 함)를 구현했습니다. 일부 방법은 일부 방법을 닫았지만 Linux 및 MacOS의 0.0.0.0 IP 주소와 같은 일부 우회를 남겼으므로 DNS Rebinding 동작은 매우 브라우저 및 운영 체제 (OS) 의존적입니다. 관련된 계층이 너무 많아서 (브라우저 DNS 캐시, OS DNS 캐시, DNS 네임 서버) 공격은 종종 신뢰할 수없는 것으로 간주되며 실제 위협으로 간주되지 않습니다. 그러나 Tavis Ormandy의 간단한 DNS Rebinding Service 또는 NCCGroup의 특이점과 같은 공격을 자동화 할 수있는 도구도 있습니다.
실제 취약성
이제 Bittorrent Client Deluge (v2.2.0에서 고정)에서 발견되는 실제 취약성의 기술과 DNS Rebinding이 어떻게이를 활용하는 데 사용되었는지에 대한 기술을 다루겠습니다.
Deluge BitTorrent 클라이언트는 시스템 부팅에서 Deamon과 Webui의 두 가지 서비스를 시작하는 것을 지원합니다. WebUI 웹 애플리케이션 서비스는 홍수 클라이언트의 환경 설정 대화 상자에서 WebUI 플러그인 (기본적으로 설치되었지만 기본적으로 비활성화)을 활성화하여 시작할 수도 있습니다. 또한 로컬 네트워크의 서버에서 WebUI 애플리케이션을 영구적으로 실행하는 것이 편리합니다. 우리는 자의적 파일을 읽을 수 있도록 웹 응용 프로그램의 무단 끝점에서 경로 트래버스를 발견했습니다.
def render(self, request):
log.debug('Requested path: %s', request.lookup_path)
lookup_path = request.lookup_path.decode()
for script_type in ('dev', 'debug', 'normal'):
scripts = self.__scripts[script_type]['scripts']
for pattern in scripts:
if not lookup_path.startswith(pattern): #
그만큼 /js
WebUI 구성 요소의 엔드 포인트는 인증이 필요하지 않았습니다. 목적은 UI에 대한 JavaScript 파일을 제공하는 것이기 때문입니다. 그만큼 request.lookup_path
알려진 키워드로 시작하도록 검증되었습니다 [1]그러나 그것은 우회되었을 수 있습니다 /js/known_keyword/../...
경로 횡단이 발생했습니다 [2]경로가 연결되어 나중에 파일을 읽는 데 사용했을 때 [3]. 유일한 제한은 mimetypes.guess_type
전화하십시오 [4]MIME 유형을 반환 한 경우 None
,,, request.setHeader
~에 [5] 예외를 던집니다.
경로 트래버스는 MIME 유형이 인식되는 한 시스템의 모든 파일에 대한 무단으로 읽을 수있었습니다.
공격자가 홍수 전용 파일로 제한하더라도 Deluge는 파일을 사용합니다. .conf
구성 설정을 민감한 정보로 저장하는 확장. 이 확장은 다음으로 식별됩니다 text/plain
~에 의해 mimetypes.guess_type
. 요청 /js/deluge-all%2F..%2F..%2F..%2F..%2F..%2F..%2F.config%2Fdeluge%2Fweb.conf
예를 들어, webui 관리자 암호 SHA1과 같은 정보를 소금과 세션 목록과 같은 정보를 반환합니다. 세션은 서비스 종료시 파일에만 기록되며 기본 1 시간 만료 후 업데이트되지 않습니다. 그러나 운이 좋으면 공격자들은 서비스에 자신을 인증하기 위해 유효한 세션을 찾을 수있었습니다. 그렇지 않으면 암호 해시를 강제로 강제해야합니다. Deluge는 느린 비밀번호 해싱 알고리즘을 사용하지 않기 때문에 간단하거나 짧은 암호에 대해 매우 빠르게 수행 할 수 있습니다.
공격자가 인증 된 세션을 얻으면 CVE-2017-7178의 악용 기술을 사용하여 취약한 컴퓨터에서 악의적 인 플러그인을 다운로드, 설치 및 실행하여 /json
엔드 포인트 웹 API.
그것을 악용합니다
Deluge Webui가 외부에서 호스팅되면 착취는 간단합니다. 그러나 서비스가 현지에서만 액세스 할 수 있더라도, 무단 엔드 포인트이기 때문에 공격자는 DNS Rebinding Attack을 사용하여 특수 제작 된 웹 사이트에서 서비스에 액세스 할 수 있습니다. 세그먼트 주소를 다른 주소 공간 (루프백, 로컬 네트워크 및 공개 네트워크 주소)으로 구현하는 CORS-RFC1918을 구현하는 브라우저의 경우 공격자는 알려진 Linux 및 MACOS 바이 패스 (0.0.0.0 IP 주소)를 사용하여 로컬 서비스에 액세스 할 수 있습니다.
단순화를 위해 공격자가 취약한 응용 프로그램의 포트 (8112)를 기본적으로 대출 한 webui의 포트를 알려주지 만 포트는 특이점으로 자동화 될 수 있음을 발견하자. Deluge Webui 사용자는 악성을 방문하여 여러 iframes의 웹 페이지를 엽니 다. somesite.com
. 각 프레임이 가져옵니다 http://sub.somesite.com:8182/attack.html
. SOP를 우회하려면 포트 번호는 공격 응용 프로그램과 동일해야합니다. DNS Resolver는 공격자 컨트롤이 0.0.0.0으로 교대로 응답 할 수 있으며 서버의 실제 IP 주소는 매우 낮은 시간 (TTL)입니다. DNS가 실제 IP 주소로 해결되면 브라우저는 요청하고 읽을 수 있는지 확인하여 DNS 항목이 만료 될 때까지 대기하는 스크립트와 함께 페이지를 가져옵니다. http://sub.somesite.com:8182/js/deluge-all/..%2F..%2F..%2F..%2F..%2F..%2F.config%2Fdeluge%2Fweb.conf
. 공격이 성공하면 스크립트가 구성 파일을 추방했습니다.
전체 소스를 위해 attack.html
이 자문을 확인하십시오.
DNS 공격으로부터 자신을 사전에 보호하는 방법
- DNS Rebinding은 HTTPS 서비스에서 작동하지 않습니다. TLS (Transport Layer Security) 세션이 설정되면
somesite.com
브라우저는 도메인에 대한 인증서의 주제를 검증합니다. IP 주소가 변경되면 브라우저는 새 세션을 설정해야하지만 로컬로 배포 된 웹 애플리케이션의 인증서가 도메인 이름과 일치하지 않기 때문에 실패합니다. - 이미 언급했듯이 인증 쿠키
somesite.com
로컬로 배포 된 웹 응용 프로그램에서는 허용되지 않습니다. 따라서 암호화되지 않은 HTTP를 초과하더라도 강력한 인증을 사용해야합니다. - 요청의 호스트 헤더를 확인하고 예상 값의 허용 목록과 엄격하게 일치하지 않으면 거부하십시오. 리바운드 요청에는 호스트가 포함됩니다
somesite.com
헤더 값.
이것을 당신과 함께 가져 가십시오
로컬로 웹 응용 프로그램을 실행하는 것은 개발자의 일반적인 관행입니다. 그러나 인증이 필요하지 않은 영구적으로 배포 된 로컬 네트워크 웹 애플리케이션은 TLS (즉, HTTPS 암호화)가 적기입니다. DNS Rebinding Attack은 브라우저 동작과 약한 네트워크 가정을 통해 어떻게 고립 된 지역 서비스가 노출 될 수 있는지에 대한 생생한 예입니다.
서비스가 “로컬로만 실행되기 때문에”서비스가 안전하다고 가정하지 마십시오. 내부 서비스 또는 개발 도구에도 불구하고 항상 강력한 비밀번호 기반 인증을 시행합니다. 엄격한 액세스 제어가없는 현지 서비스는 피해자의 브라우저를 통해 노출 될 수 있습니다. 확인하십시오 Host
헤더. 가능한 한 https를 사용하십시오.
DNS Rebinding은 네트워크 경계 및 브라우저 보안에 대한 가정이 위험하게 오도 될 수 있음을 보여줍니다. 다음 웹 애플리케이션을 개발할 때는 위협 모델에 DN을 리딩하는 것을 포함시켜야합니다.
작성자가 작성했습니다
Post Comment