2008-10-23 8 views
3

본인은 회사와 보유한 고객의 가입 및 회원 자격을 모두 보여주는 '회원 센터'라는 사용자 계정을 가지고 있습니다. 이것은 https://secure.example1.com/membercenter/입니다.이 인증 모델은 얼마나 안전합니까?

본인은 실제 회원 사이트 인 다른 사이트가 있습니다. 이것은 http://www.example2.com/입니다. 이 같은 전용 서버 비록 다른 도메인 (각 사이트.

내가 링크에서 사용자의 사용자 이름과 암호를 포함하지 않고, 회원 사이트에 쉽게 로그인을 제공하고자합니다. 그래서 내가 '무엇을

다음과 같습니다.

사용자가 회원 가입을 위해 '로그인'링크를 클릭하면 userid + unix 타임 스탬프의 md5 해시를 만들고이를 자신의 userid 및 타임 스탬프와 함께 데이터베이스 테이블에 추가합니다

그러면 http://www.example2.com/login?hash=(the 해시로 리디렉션됩니다.

example2의 로그인 스크립트는 해시를 가져와 동일한 테이블에서 조회합니다. 해시가 있으면 해시와 함께 저장된 사용자 ID를 사용하여 고객 데이터베이스에서 사용자 이름과 비밀번호를 검색하여 사이트의 기존 로그인 기능에 전달하고 로그인합니다.

이 해시 로그인 스크립트가 실행되면 5 분보다 오래된 모든 행을 먼저 삭제 한 다음 전달 된 해시 값을 확인합니다. 해시를 찾으면 사용자를 기록한 다음 테이블에서 사용 된 해시를 삭제합니다. 즉, 5 분 이상 된 테이블에는 해시가 존재하지 않습니다. 거기에있는 유일한 해시는 테이블에 남아있는 해시 일뿐입니다. 사용자가 어떻게 든 secure.example1.com에서 링크를 클릭 한 후 www.example2.com으로 이동하면 (예 : 인터넷이 제대로 작동하지 않는다면) 두 번째, dns 문제 해결 example2.com 등). 만료 5 분은 그들이 자리에 앉아 들어갈 때까지 또는 5 분이 지날 때까지 리디렉션 된 URL을 다시로드 할 수 있음을 의미합니다.

사용자가 리디렉션되면 해시 값이 표시됩니다.

secure.example2.com에서 로그인 링크를 클릭 할 때마다 새 해시 값이 계산되어 저장됩니다.

내 질문은 ... 나는 명백한 것을 놓치고 있습니까? 이걸 어떻게 망가 뜨리거나 해킹하겠습니까? 나는 방금 내 사이트에 거대한 보안 구멍을 만들었습니까?

감사합니다. SO Hive Mind!

편집 : 이것은 www.example2.com으로 이동하여 사용자 이름/비밀번호를 사용하여 양식으로 로그인하는 일반적인 모델에 추가됩니다.

EDIT2 : tobyhede에 대한 응답 : 해시를 스니핑. 해시가 사용되면 삭제되기 때문에 공격자는 사용자가 www.example2.com의 로그인 스크립트에 도달하는 것을 중지해야합니다. 그들이 그 일을 막을 수 있다면 5 분 안에 해시를 사용해야 할 것입니다. 그렇지 않으면 자동으로 삭제됩니다.

EDIT3 : Re : 공격자가 자신의 해시를 생성합니다. 해커가 해시를 데이터베이스에 삽입하고 올바른 사용자 ID (사용자가 사용자 ID를 알지 못함)를 포함해야합니다. 그 사람들은 어떻게했을까요? 해시는 단 한 번 사용 된 후 즉시 삭제되므로 아래 공격이 효과가 있다는 것을 확신하지 못합니다.

+0

제목을 "GET/POST 보안 방식으로 임시 해시를 전송하여 사용자를 다시 인증하고 있습니까?"와 같은 내용을 변경하는 것이 좋습니다 ... – Bleadof

답변

3

누군가 해시로 URL을 가로 채고 시스템에 액세스 할 수 있어야합니다. HTTP POST를 사용하여 SSL을 통해 해시를 전달해야합니다.

0

공격자가 사용자가 로그인하려고한다는 것을 알고있는 경우 공격자는 해시 (또는 타임 스탬프가 약간 다른 일련의 해시)를 생성하고 사용자가 로그인하기 전에 로그인 할 수 있습니다. 약간 더 나은 해결책은 임의로 생성 된 토큰으로 해시를 바꾸는 것입니다. 그런 다음 침입자는 example2 사이트에 대한 사용자의 로그인 요청을 차단해야합니다.

example2 사이트에서 HTTPS 대신 HTTP를 사용하는 경우 스키마가 안전하지 않습니다. 예를 들어 secure라는 사이트 example2의 완벽한 로그인 구성표를 발견했다고 가정 해 보겠습니다. 그러나 로그인 후에 사용자의 요청은 URL 또는 요청 헤더 (예 : 쿠키)에 세션 정보를 전송합니다. 이러한 요청은 가로 챌 수 있으며 공격자는 세션 정보를 훔칠 수 있습니다. 최악의 경우 공격자는 세션을 소스 IP에 연결하고 공격자는 소스 IP를 가짜로 만들 필요가 있습니다.

2

당신은 완전 방수를 개선 할 수있는 일 수있다 계획의이 종류를 얻을 수는 없지만 : 키

  • 확인을 생성 할 때

    • 는 유닉스 타임 스탬프 대신 임의의 씨앗을 사용하여 그 두 번째 페이지에 대한 요청의 참조 자는이 개 요청의 소스가 같은

    crytographic 지식 증명 SCHE이 있다는 첫 페이지

  • 확인하다 문제에 대한 가장 안전한 접근을 위해이 상황에 적용 할 수 있습니다. 내 머리가 너무 어렴풋한 오늘 아침에 아무리해도 그들의 응용 가능성에 대해 지적인 말을하지 않았다면 :)

  • 0

    사용자 ID는 사용자가 해시에 사용하는 ID와 사용자가 사이트에 로그인하는 데 사용하는 ID ? 해시 생성으로 시스템을 공격 할 때 중요한 부분입니다. 고려해야 할 또 다른 사항은 숫자 나 단어와 같이 추측하기 쉬운 ID입니다.

    공격자가 쉽게 추측 할 수없는 것을 포함하는 솔루션을 찾아야합니다. 기본적으로 공격자가 추측 할 수없는 해시에 비밀이 있기를 원합니다. 그래서 해시에서 소금 (무작위 비트)을 사용하는 것이 좋습니다.

    MD5SHA-1 해시에 대한 공격을 알고 있다고 생각하십니까? MD5에는 해시 충돌 (http://merlot.usc.edu/csac-s06/papers/Wang05a.pdf)의 가능성이 있습니다. SHA-1은 여전히 ​​안전하지만, 해시 모두에 대해 rainbow table attacks이 있습니다.

    소금, 사용자 ID 및 타임 스탬프 사운드로 해시를 생성하는 것이 솔루션에 적합합니다. 또한 사용 후 해시를 삭제하는 것이 좋습니다.

    관련 문제