추측 할 수없는 비공개 URL은 비밀번호 기반 인증과 동일합니까?


128

웹에서 리소스를 공개하고 싶습니다. 이 리소스를 보호하고 싶습니다. 특정 개인 만 액세스 할 수 있도록합니다.

일종의 암호 기반 인증을 설정할 수 있습니다. 예를 들어, 파일을 제공하기 전에 들어오는 요청에서 올바른 자격 증명 (아마도 일부 사용자 백업 데이터베이스에 대해)을 확인하는 웹 서버를 통해서만 리소스에 액세스 할 수있었습니다.

또는 개인 URL을 사용할 수도 있습니다 . 즉, 추측하기 어려운 경로에서 리소스를 간단히 호스팅 할 수 있습니다. 예를 들어 https://example.com/23idcojj20ijf...정확한 문자열을 아는 사람들에게 액세스를 제한합니다.

이 자원에 접근하고자하는 행악 자의 관점에서이 접근 방식은 동등합니까? 그렇지 않다면 무엇이 다른가? 그리고 유지 관리성에 관한 한, 하나 또는 다른 것을 구현하기 전에 알아야 할 장단점이 있습니까?


45
이 방법은 일반적으로 비밀번호 재설정과 같은 인증없이 사용됩니다 . 추측 할 수없는 링크는 일반적으로 짧은 시간 내에 만료되며 이미 반 인증 된 사람 만 사용할 수 있습니다 (예 : 웹 사이트는 이미 링크가 전송 된 이메일 주소를 알고 있음).
Robert Harvey

6
security.SE에 대한 관련 토론 : security.stackexchange.com/q/58215/37496
Mark

9
@MonkeyZeus 그것은 모호함을 통한 보안이 아닙니다. 일반적으로 비밀번호 인 비밀은이 경우 URL입니다.
Davidmh

16
@MonkeyZeus : Security-through-obscurity는 모호한 키를 사용하지 않고 메커니즘 구현 을 비밀 로 유지하는 것을 말합니다 . 추측 할 수없는 URL이 모호함을 통한 보안 인 경우 강력한 암호도 있습니다.
JacquesB

1
@GladstoneKeep URL 단축 기호를 명심하십시오. 악의적 인 사용자가 그 중 하나를 사용하면 링크를 추측 / 쓰기가 훨씬 쉬워집니다.
RookieTEC97

답변:


203

URL의 비트 크기가 자격 증명의 비트 크기와 동일하더라도 개인 URL은 자격 증명을 사용한 인증보다 다소 약합니다. 이유는 URL이 더 쉽게 "누설"될 수 있기 때문입니다. 브라우저에 캐시되어 서버에 로그온됩니다. 아웃 바운드 링크가 있으면 개인 URL이 다른 사이트의 리퍼러 헤더에 표시 될 수 있습니다. (어깨를보고있는 사람들도 볼 수 있습니다.)

유출 (사고 또는 사용자의 부주의로 인해) 된 경우 Google에서 공개하고 색인을 생성하여 공격자가 사이트에 유출 된 모든 URL을 쉽게 검색 할 수 있습니다.

이러한 이유로 개인 URL은 일반적으로 암호 재설정과 같은 원샷 작업에만 사용되며 일반적으로 제한된 시간 동안 만 활성화됩니다.


정보 보안에는 관련 스레드가 있습니다. 임의의 URL은 프로필 사진을 보호하는 안전한 방법 입니까? -하나의 답변이이 이야기를 공유합니다 : Dropbox는 세금 환급이 Google에 끝난 후 이전 공유 링크를 비활성화합니다 . 따라서 이것은 단지 이론적 인 위험이 아닙니다.


7
경미한 퀴즈이지만 "일반적으로 한 번의 작업에만 사용됨"은 Dropbox (및 다른 흐린 서비스)가 파일에 대한 액세스를 "보호"하기 위해이를 사용한다는 점을 고려할 때 과장된 것 같습니다.
Steve Jessop

4
본인은 암호를 보호하지만 URL을 보호하지는 못하도록 사용자에게 제한된 성공을 제공한다고 덧붙입니다.
svavil

1
또한 xzy.com/myDoc?auth=8502375의 개인 URL에 매개 변수를 사용하고 인증 체크 아웃 후 일반 URL로 자동 리디렉션하면 많은 기술적 문제를 완화 할 수 있습니다. -그러나 이것이 모든 가능한 문제를 해결하는 것은 아닙니다
Falco

3
TL; DR-비밀 URL과 같은 것은 없습니다. 일반적으로 HTTPS를 통해 URL을 보내더라도 WiFi 핫스팟에서 악의적 인 행위자에게 URL을 노출시키는 현재 공격이 있습니다. 이 공격은 WPAD (Web Proxy Autodiscovery)를 악용하여 브라우저가 모든 URL을 공격자에게 보내도록합니다. (예) arstechnica.com/security/2016/07/…
Harald

5
@JacquesB URL의 조각 부분 (예 : 스택 교환이 Oauth 인증 응답에 대해 수행하는 것처럼 "#"이후)에 개인 부분을 두어 식별 한 위험 중 일부가 완화되지 않았습니까? 예를 들어 참조 헤더 에는 조각을 포함 할 수 없습니다 .
Jason C

48

노트 :

많은 사람들이 "비공개"URL과 인증을 혼동하는 것 같습니다. 또한 신뢰할 수있는 엔터티를 통해 링크를 보내는 것이 이중 인증 시도라는 혼동이있는 것 같습니다. 분명히, 우리는 추측하기는 어렵지만 공개적으로 접근 가능한 자원에 대해 이야기하고 있습니다.

개인 URL을 사용할 때는 항상 URL이 손상 될 수 있다고 가정해야합니다. URL이 손상 되더라도 리소스가 공격자에게 정보를 유출하지 않도록 그러한 URL을 설계해야합니다.


추측하기 어려운 개인 URL은 암호 기반 인증과 동일하지 않습니다. 본질적으로 비공개 URL은 전혀 비공개가 아니며 공개적으로 액세스 가능한 리소스입니다. '비공개'URL이라는 용어는 잘못된 단어라고 생각합니다.

"비공개"URL을 사용하는 것이 허용되는 경우가 있지만 암호 인증 또는 키 기반 인증과 같은 기존 인증 방법보다 기본적으로 안전하지 않습니다.

내가 자주 사용하는 "비공개"URL은 다음과 같습니다.

  1. 비밀번호 재설정 이메일
  2. 인증서 생성 이메일
  3. 계정 / 이메일 확인 이메일
  4. 구매 한 콘텐츠 (전자 책 등) 제공
  5. 비행기 탑승 수속, 인쇄 탑승권, 기타 전통적인 URL 외에도 개인 URL을 사용하는 기타 기타 사항

여기서 공통점은 임의 URL은 일반적으로 한 번의 작업에만 적합하다는 것입니다. 또한 기존 인증과 임의 URL 은 상호 배타적이지 않으며 실제로는 리소스를 제공 할 때 추가 보안을 제공하기 위해 서로 함께 사용될 수 있습니다.


Robert Harvey가 지적했듯이 임의 / 비공개 URL을 안전하게 사용하는 유일한 방법은 페이지를 동적으로 생성하고 사용자가 반 인증 된 것으로 간주 될 수 있도록 URL을 사용자에게 제출하는 것입니다. 이메일, SMS 등이 될 수 있습니다.

임의로 생성 / 비공개 URL에는 일반적으로 몇 가지 속성이 있습니다.

  1. 적당한 시간이 지나면 만료됩니다
  2. 일회용 URL이어야합니다. IE 처음 액세스 한 후에 만료됩니다.
  3. 사용자의 인증을 신뢰하는 다른 엔티티에 대한 사용자의 인증을 연기해야합니다. (이메일이나 SMS 등을 통해 링크를 보내면)
  4. 현대의 컴퓨터는 리소스를 노출시키는 API를 제한하거나 추측 할 수없는 충분한 엔트로피를 가진 URL 엔드 포인트를 생성함으로써 만료 전 타임 프레임에서 URL을 무차별하게하는 것은 불가능합니다.
  5. 사용자에 대한 정보를 유출해서는 안됩니다. IE : 페이지가 비밀번호를 재설정하는 경우 : 요청자 계정 정보가 페이지에 표시되지 않아야합니다. Alice가 비밀번호 재설정 링크를 요청하고 Bob이 URL을 추측하는 경우 Bob은 자신이 재설정중인 비밀번호를 알 수있는 방법이 없어야합니다.
  6. 사용자에 대한 정보가 유출되는 경우 기존 인증 위에 사용해야합니다. 예를 들어, 쿠키가 설정되어 있거나 session_id가 여전히 유효한 경우 페이지에서 사용자를 인증 된 것으로 간주 할 수 있습니다.

리소스마다 다른 수준의 보안이 필요합니다. 예를 들어, 친구와 비밀 레시피를 공유하려면 무작위 / 비공개 URL을 사용하여 공유 할 수 있습니다. 그러나 리소스를 사용하여 누군가의 신원을 도용하거나 다른 서비스 제공 업체와의 계정을 손상시킬 수 있다면 해당 리소스에 대한 액세스를 제한하는 데 훨씬 더 관심이있을 것입니다.


4
Coke의 비밀 레시피를 제품 개발 팀과 공유하려면 이웃 바베큐 파티에서 이웃에게 제공 한 감자 샐러드에 대한 레시피를 공유하려는 경우와 다소 다른 것이 필요합니다. 다시 문맥. :-)
CVn

7
@ MichaelKjörling 누군가가 내 게시물과 다른 점을 어떻게 추론하는지 잘 모르겠습니다. 다른 리소스에는 다른 수준의 인증이 필요하다는 것을 분명히 밝혔습니다. 코크스 요리법은 할머니의 쿠키 요리법보다 훨씬 더 가치가 있습니다.
Charles Addis

9
@CharlesAddis 분명히 당신은 내 할머니의 쿠키를 맛본 적이 없습니다!
Brian

1
@Michael은 비밀 URL이 가지고 있어야하는 속성에 대한 5 점 설명이 친구와 비밀 레시피를 공유하기에는 이미 과도하다고 생각합니다. 각각의 단일 사용 만들기 (따라서 조리법에 액세스 친구마다 별도의 URL 필요) 특히 것은이 특히, 무시할 이익을 위해 번거 로움을 많이 것 또한 만료 시간. 귀하의 답변은 "비공개 URL을 사용할 수는 있지만 비공개 URL에는 이러한 5 가지 속성이 있어야합니다"라는 의미와 약간 잘못된 IMO를 의미합니다.
Steve Jessop

1
정확히 # 5 항목의 이유 인 @BenjaminHodgson => 만약 링크 / URL이 잘못되면, 그것을 요청한 사용자에 대한 정보를 유출해서는 안됩니다.
Charles Addis

8

거의 모든 인증 체계가 비밀을 알고 있음을 증명합니다. 당신은 당신이 비밀 암호 또는 비밀 URL을 알고 있음을 증명함으로써 일부 서비스에 자신을 인증하거나 ...

더 고급 프로토콜 (예 : OAUTH, Kerberos 등)을 사용하면 실제로 비밀을 전송 하지 않고 비밀을 알고 있음을 증명할 수 있습니다 . 추측 할 수없는 "비밀 한"비밀을 얻는 더 많은 방법이 있기 때문에 이것은 중요합니다.

나는 당신과 같은 인터넷 카페에 앉아, 당신이 당신의 "믿을 수없는"URL을 입력 할 때 WiFi 연결을 도청 할 수 있습니다. 그 시점에서 SSL을 사용하지 않았거나 SSL 구현의 최신 버그를 악용 할 수 있다면 비밀도 알고 싶습니다.


1
공평하게도 이것은 인증 또는 모든 통신에도 적용됩니다.
Andy

URL, CSRF 보호 <form>, JavaScript 군용 암호화 데이터 (활성 스니핑이 필요할 수 있음) : "Wi-Fi 연결을 피하는 것" . 간단하게 고칠 수 있습니다 : HTTPS를 사용하십시오.
구스타보 로드리게스

@GustavoRodrigues 우선, 도청이 실제로 " 무엇이든 작동 "했다면 HTTPS에서 작동합니다. 그렇지 않으면 "무엇"이 무엇을 의미합니까? 아니면 다른 무엇보다 우선하는 HTTPS의 어떤 마술이라고 생각하십니까?
Solomon Slow

2
...하지만 거기에 있습니다 도청을 병동 마법 : 그것은 공개 키 암호화입니다. 간단한 예를 들면 다음과 같습니다. 서비스 에서 임의의 숫자와 타임 스탬프가 포함 된 챌린지 를 보냅니다 . 개인 키로 챌린지에 서명하고 반환합니다. 등록 된 공개 키로 내 응답의 유효성을 검사 할 수 있으면 비밀을 알고 있음을 증명할 수 있지만 (비밀은 내 개인 키임) 잠재적 인 도청 자에게 공개하지 않고 증명했습니다. 서비스가 동일한 챌린지를 두 번 보내지 않기 때문에 도청자가 내 응답을 재생하는 데 도움이되지 않습니다.
Solomon Slow

HTTPS (즉, SSL을 통한 HTTP)는 공개 키 암호화를 사용하지만 가장 널리 사용되는 SSL 구현 인 FYI는 암호화에도 불구하고 도청자가 침입 할 수있는 버그 기록을 가지고 있습니다. 새로운 버그 (일명 "취약점")가 매년 2 ~ 3 회 발견되는 것으로 보이며 SSL을 사용하는 모든 제품의 모든 개발자는 최신 익스플로잇이 패치 될 때까지 불을 붙였습니다. (내가 어떻게 아는지 묻지마!)
Solomon Slow

3

이 스레드에는 이미 많은 좋은 답변이 있지만 질문을 직접 해결하기 위해 :

이 자원에 접근하고자하는 행악 자의 관점에서이 접근 방식은 동등합니까? 그렇지 않다면 무엇이 다른가?

정의를 설정하겠습니다. "인증"은 자격 증명을 증명하기 위해 자격 증명을 제공하는 것입니다. 액세스 제어는 일반적으로 사용자 식별을 기반으로합니다.

비밀 URL은 특정 사용자에게 바인딩되지 않습니다. 다른 사람들이 지적했듯이 프록시의 로그 파일이나 Google이 색인을 생성하는 검색 요청 또는 유출 될 수있는 다른 많은 방법으로 끝날 수 있습니다.

반면에 암호는 고유 한 사용자 계정에 연결되어 있습니다. 재설정하거나 사용자의 집 위치, 알려진 IP 주소 또는 기타 여러 컨트롤에서만 사용할 수 있습니다.

사용자 이름 / 암호를 사용하면 액세스를보다 세밀하게 제어 할 수 있습니다.

액세스 제어는 자원 (객체)에 대한 신원 (주체) 액세스를 허용합니다. 귀하의 URL 예에서 ID는 "어떤 수단을 통해 든 URL을 얻은 사람"입니다.

가능하면 사용자 이름 / 암호를 사용하십시오. URL은 시간이 지남에 따라 모든 종류의 예기치 않은 방식으로 유출됩니다.


1

비밀 URL은 비밀 암호와 마찬가지로 안전합니다. 그러나 암호는 URL보다 비밀을 유지하는 것이 더 쉽습니다. 모든 사람과 해당 프로그램은 암호를 비밀로 유지해야한다는 것을 알고 있기 때문입니다.

예를 들어, 브라우저는 화면에 비밀번호를 표시하지 않고 사용자의 권한으로 비밀번호 만 저장하며 해당 비밀번호 스토리지 (예 : 마스터 비밀번호로 잠금 해제 된 암호화 된 스토리지)를 보호하는 수단을 제공합니다. 반대로 항상 화면에 URL이 표시되고 리퍼러 헤더를 통해 URL이 유출 될 수 있으며 추가 보호없이 인터넷 사용 기록에 자동으로 저장 될 수 있습니다.

마찬가지로, HTTP 프록시는 일반적으로 비밀번호를 기록하지 않지만 URL은 일반적으로 기록됩니다.

인증에 URL을 사용하면 URL을 공유 할 때 인증이 공유되므로 액세스를 개별적으로 취소 (또는 기록)하기가 어렵습니다.

물론 비밀 URL은 비밀 암호의 모든 약점을 상속합니다. 특히, 인증에 비밀번호를 사용하면 해당 비밀번호가 서버 및 통신을 읽을 수있는 모든 사람에게 공개됩니다.


3
이 답변은 많은 가정을 잘못합니다. HTTPS를 사용하여 사이트에 로그인하고 사용자 이름과 비밀번호를 입력하면 사이에 홉이 들어오고 프록시가 비밀번호를 알 수 없습니다.
피터 B

"커뮤니케이션을 가로 챌"이라는 말은 내용을 재구성 할 수있는 능력을 의미했습니다. 이것은 HTTPS에 의해 방지되거나 방지 될 수 있습니다. 특히, 하나의 잘못된 인증서를 신뢰하면 (예 : 모든 설치에 동일한 개인 키를 사용하는 일부 회사 HTTPS 프록시에 의한) 공격자는 중간자에게 HTTPS 트래픽을 전달할 수 있습니다.
meriton

2
그러나 URL에 비밀을 인코딩하면 기본적으로 HTTPS를 완전히 사용할 수 없게됩니다. 클라이언트와 서버 사이의 모든 홉에는 비밀이 있으므로 손상된 인증서가 필요하지 않습니다.
피터 B

4
무의미한 말; HTTPS에서 URL은 암호화 된 스트림으로 만 전송됩니다. DNS 조회 및 IP 헤더 필드에 각각 표시되는 도메인 또는 IP와 혼동해야합니다.
meriton

1

어디에도 언급되지 않은 또 다른 항목은 '추측'의 조절입니다. 대부분의 비밀번호 인증 시스템의 경우 추가 인증 시도가 잠기거나 제한되기 전에 사용자의 비밀번호를 추측 할 수있는 횟수가 제한됩니다.

URL 체계에 대해 '추측'과 비슷한 것을 할 수는 있지만 구현하기가 다소 어렵습니다. URL 생성에 인식 가능한 패턴이있는 경우 '임의'URL 공간을 통해 작업하도록 누군가를 설정하는 것을 중지하기 어려울 수 있습니다.


0

아직 언급하지 않은 또 다른 측면이 있습니다-URL 단축기.

최근 간행물 (2016 년 4 월)에서 URL 단축 서비스는 무작위로 생성 된 "추측 할 수없는"URL이 제공하는 보안 강화를 완전히 무효화한다고 주장했습니다. 단축 서비스의 URL 공간은 임의로 생성 된 URL보다 상당히 작습니다. 즉, 단축 서비스와 공유되는 "보안"URL은 예상보다 쉬운 방식으로 추측 할 수 있습니다.

예를 들어, 임의의 URL 길이가 128 비트 (예 : guid)라고 가정 해 봅시다. 또한 난수 생성기가 실제로 강력하고 해당 비트를 균일 한 방식으로 생성한다고 가정합시다. 128 비트 숫자를 추측하는 것은 매우 어렵고 시간이 오래 걸릴 수 있습니다. URL은 효과적으로 128 비트 키로 보호됩니다.

그런 다음 누군가가 Google URL Shortener에서이 URL을 공유했다고 가정하겠습니다. 오늘날이 서비스는 문자와 숫자로 구성된 10 자 길이의 ID를 방출합니다. (26 + 10) ^ 10 ~ = 3.6 * 10 ^ 15 <2 ^ 52-따라서 키 강도를 128 비트에서 52 비트로 효과적으로 절반으로 줄였습니다.

또한 다른 고려 사항으로 인해 생성기가 전체 공간을 사용하지 않으며 무차별 대입 채널 (대부분 사전 할당 된 임의 URL 버퍼)을 결합하는 효과적인 공격을 수행 할 수 있습니다.

원본 기사 : http://arxiv.org/pdf/1604.02734v1.pdf 기사를
요약 한 블로그 게시물 (저자) : https://freedom-to-tinker.com/blog/vitaly/gone-in- 6 자 길이의 짧은 URL, 유해한 클라우드 서비스 /


2
글쎄, 그러나 민감한 데이터에 이러한 서비스를 사용하는 사람 은 단축 서비스를 포함하여 어디에서나 URL을 게시하는 것보다 더 잘 알기를 바랍니다 . 이것은 Gah! My password/private key is too long and complex. I know! I'll just write it in a text document and put that in a zip file with an easier password.모두 투명 실패 라고 말하는 것과 다르지 않습니다. 두 사람 모두 투명 실패입니다. 그러나 그렇습니다. 실제로 슬프게도 경고가 필요할 것입니다.;)
underscore_d

@underscore_d 그렇습니다. 여러분이이 주제를 충분히 상세하게 알고 있다면 블로그 가치가 없습니다.
Robert Grant
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.