2012-06-12 6 views
9

웹 응용 프로그램이 있으며 Google이 Google 계정에 추가 한 것과 비슷한 보안 강화를 위해 보안 로그온을 추가해야합니다. 사용자가 로그인 할 때컴퓨터에 웹 응용 프로그램에 대한 액세스 권한 부여

는 사용 사례는

기본적으로, 우리는 사용자가 이전에이 컴퓨터를 인증 된 경우 감지합니다. 컴퓨터가 인증되지 않은 경우 사용자는 입력해야하는 일회용 암호 (전자 메일, SMS 또는 전화를 통해)가 전송되며 사용자는이 컴퓨터를 기억하도록 선택할 수 있습니다. 웹 응용 프로그램에서 승인 된 장치를 추적하여 사용자가 해당 장치에서 마지막으로 로그인 한 시간과 위치를 볼 수있게하고, 그렇게 선택한 경우 장치의 인증을 해제합니다.

매우 가벼운 터치 (클라이언트 측 소프트웨어 설치가 필요 없음)를 요구하며 Safari, Chrome, Firefox 및 IE 7+ (불행히도)와 호환되는 솔루션이 필요합니다. 우리는 적절한 보안을 제공하는 x509 보안을 제공 할 예정이지만 x509를 사용할 수 없거나 사용할 수없는 고객을위한 솔루션이 필요합니다.

제 의도는 쿠키를 사용하여 인증 정보를 저장하려는 것입니다 (또는 잠재적으로 로컬 스토리지를 사용하여 플래시 쿠키로 저하 된 다음 일반 쿠키로 저장). 언뜻

Initial secure sign-on sequence diagram 트랙 두 개의 값 (로컬 데이터 또는 쿠키) 안전한 사인온 토큰뿐만 아니라 디바이스 토큰을 나타내는 해시. 두 값은 웹 응용 프로그램에 의해 구동되고 기록되며 클라이언트에 지시됩니다. SSO 토큰은 장치 및 시퀀스 번호에 따라 다릅니다. 이는 효과적으로 장치의 인증을 해제하고 (모든 SSO 토큰이 무효화 될 수 있음) 순차 번호를 사용하여 재생을 완화합니다 (실제로이 질문을하는 이유는 아닙니다). 그리고 nonce를 사용합니다. 누군가가 단순히 장치 및 SSO 토큰을 복제 및 다른 요청에 사용하는

이 용액

문제는, 그것이 가능하다. 시퀀스 번호는 이러한 남용을 감지하고 장치의 인증을 해제하는 데 도움이되지만 유효한 장치와 악의적 인 요청이 모두 액세스를 시도한 후에 만 ​​감지 및 응답이 발생할 수 있습니다. 이는 손상이 발생할 충분한 시간입니다.

HMAC를 사용하는 것이 좋을 것이라고 생각합니다. 장치, 시퀀스를 추적하고 비공개 키를 사용하여 nonce, 타임 스탬프 및 해시를 만든 다음 해당 값을 일반 텍스트로 보내십시오. 서버는 장치 및 시퀀스의 유효성 검사 이외에 동일한 작업을 수행하고 비교합니다. 그것은 훨씬 더 쉽고 훨씬 더 안정적입니다. 우리가 안전하게 개인 키를 협상하고, 교환하고 저장할 수 있다고 가정합니다.

질문 그럼

, 어떻게 안전하게 인증 된 장치에 대한 개인 키를 협상 할 수 있습니다, 그리고 안전하게 그 키를 저장? 적어도 로컬 저장소 또는 플래시 쿠키를 사용하여 개인 키를 저장하는 데 동의하고 "충분 함"이라고 말하는 것이 더 가능합니까? 또는 설명하는 취약점을 완화하기 위해 원래 초안에 할 수있는 것이 있습니까?

답변

5

당신이 제공 할 수있는 시스템보다 더 많은 보안을 요구하는 것으로 의심됩니다. 간단히 말해 클라이언트를 제어 할 수 없다면 SSO와 장치 토큰을 무수히 (의도하지 않은) 방식으로 사용할 수 있습니다. 시스템의 다른 부분을 얼마나 잘 설계해야하는지는 중요하지 않습니다. 이것은 시스템의 Achilles 발 뒤꿈치입니다.

설명대로 시스템에서 장치 토큰과 SSO 토큰을 제공하기 위해 클라이언트의 웹 브라우저를 처리하고 신뢰합니다. 권리? 그렇다면이 토큰이 다른 장치로 이동하는 것을 어떻게 방지 할 수 있습니까? (아래의 완화 전략을 참조하십시오.)

을 이제 정면이와 마음에 당신의 질문에 대답 :

"그럼, 어떻게 안전하게 공인 장치에 대한 개인 키를 협상 할 수 있으며, 그 열쇠를 안전하게 보관하시오? "

위의 설명과 같이이 작업을 수행하는 데 상처를주지는 않지만 도움이되지는 않습니다.

은 "충분?

내가 말할 수 없습니다"더 가능, 적어도 내가 로컬 스토리지 또는 플래시 쿠키를 사용하여 개인 키를 저장 정착 그냥 말할 경우인가 " "이동 토큰"공격을 명확하게 전달하고 고객이 정보에 입각 한 결정을하도록 도와야합니다.

"또는 취약점을 완화하기 위해 원래 초안에 할 수있는 것이 있습니까? 나는 기술한다? "

사용자 설치 기반과 위험에 대한 내성에 따라 확실한 완화 전략이 있습니다.

중요한 질문은 내가 알기로는 하나의 시스템에서 다른 시스템으로 토큰을 이동할 수있는 기술과 기능에 대해 생각해보십시오. 시스템을 저하시키지 않으면 서 완화 전략이 시스템의 성능을 크게 저하시킬 수 있습니까? "정직한"사용자를위한 성능과 유용성?

는 여기에 몇 가지 아이디어가 있습니다 :

  • 당신은 RSA SecurID의로, 두 요소 인증을 사용할 수 있습니다. 이것은 기계 토큰의 이동을 막지는 못하지만 TFA가 함께 이동해야합니다.

  • 이 토큰의 로컬 복사본을 난독 화하거나 숨길 수는 있지만이 기능은 모호성을 통해서만 보안이 유지되는 것처럼 보입니다.

  • 컴퓨터의 MAC 주소를 확인할 수 있습니다. MAC 주소를 복제하는 것이 장치 토큰을 이동하는 것보다 어렵다면 보안의 유용한 계층 일 수 있습니다.

  • 이러한 토큰에 대한 액세스를 "잠그는"사용자 지정된 브라우저의 사용을 요구할 수 있습니다. 이것은 단지 아이디어 일뿐입니다. 실용적인지 나는 모른다.

  • 기계가 실제로 움직이지 않아야한다는 것을 알고 있으면 네트워크 속성을 검사하여 기계가 다른 네트워크 위치, 즉 물리적 위치에 있다는 증거를 찾을 수 있습니다.

  • 컴퓨터 구성 정보를 쿼리하고 저장하면 (컴퓨터가 아닌 서버에서) 구성 정보가있는 컴퓨터에서 토큰이 다른 컴퓨터로 이동하는지 감지 할 수 있습니다. (물론이 접근법은 기계가 업그레이드 될 때 불평 할 것이다.)

  • 로컬 장치 토큰을 저장하는 대신 웹 응용 프로그램에 인증 API를 제공하는 응용 프로그램을 설치해야 할 수 있습니다. 이 응용 프로그램은 해킹하거나 뿌리 뽑거나 이동하기 어려운 컴퓨터의 어딘가에 내장 할 수 있습니다. 위의 아이디어에서 별도로 콘서트에서

  • (이 방법으로,이 응용 프로그램. 기계에 대해 "이중 인증"시스템 을 제공 할 것), 또는, 별도의 "집에 전화"응용 프로그램을 설치할 수있을뿐 장치에. 서버에서 수시로 "체크인"합니다. 네트워크 위치, 장치 구성을 변경하거나 응답하지 않으면 그에 따라 액세스가 거부 될 수 있습니다.

이 정보가 도움이되기를 바랍니다. 나 자신을 보안 전문가로 생각하지는 않지만 디자인 문제를 통해 생각하는 것을 즐긴다. https://security.stackexchange.com/에서 물어 보면 더 좋은 답변을 얻을 수 있습니다.

+0

"인식 할 수없는"기계 또는 소유권 주장에 실패한 기계에 일회용 비밀번호를 사용합니다. 다른 제안에 관해서는, 내가 질문에서 언급했듯이 "가벼운 터치"(추가 소프트웨어가 필요 없음을 의미)를 구현해야합니다. 그렇지 않으면 그 경로를 벗어 났을 것입니다. 저의 원래 솔루션은 당신이 말했듯이 내가 주어진 제약 조건 하에서 클라이언트를 제어 할 수 없다는 사실에 비추어 "최선의 노력"을 제안합니다. 다른 모든 것이 실패 할 경우 우리는 계정에 플래그를 지정하고 1TP 검증을 요구합니다. – HackedByChinese

+0

그러나 시스템이 움직 였을 때 감지하고 있습니다. 지리적 IP API를 사용하여 사용자의 대략적인 도시를 기록하는 방법에 대해 생각해 보았습니다. 이를 확장하면 아마도 클라이언트 IP 주소에 대한 경험적 방법을 사용하여 이상한 동작을 탐지하고 감지 할 수 있습니다. 일종의 불일치가 감지 될 때 1TP 검증으로 되돌아갑니다. 진정한 모바일 고객에게는 x509 인증 또는 클라이언트 소프트웨어 설치 만 필요할 수 있습니다. 어쨌든, 이것에 대해 생각해 볼 시간을 주셔서 감사합니다. – HackedByChinese

+0

도와 드리겠습니다. 난 그냥 당신에게 몇 가지 아이디어를 줄 수있는 다른 관련성이 높은 두 가지 질문을 발견 : [컴퓨터를 고유하게 식별] (http://stackoverflow.com/questions/671876/whats-a-good-way-to-uniquely-identify-a- 컴퓨터/671914 # 671914) 및 [네트워크를 통한 보안 클라이언트 액세스를위한 장치 지문] (http://stackoverflow.com/questions/7649074/device-fingerprint-for-secure-client-access-over-tls-network)을 참조하십시오. –

1

컴퓨터의 MAC 주소를 캡처하고 해당 정보를 데이터베이스에도 저장하는 방법은 무엇입니까? MAC 주소는 모든 컴퓨터에 고유하고 IP 주소와 구별됩니다.

Getting MAC address on a web page using a Java applet

웹 페이지 및 애플릿을 통해 MAC 주소를 캡처하는 방법에는 여러 가지가 온라인으로 찾고있다.

+0

Java 애플릿을 실행하는 경우 OS에서 개인/공개 키를 안전하게 브로커에 넣은 다음 거기에서 HMAC를 사용한다고 생각합니다. Java 애플릿을 사용하는 것은 흥미로운 아이디어이지만 기본적으로 "클라이언트 소프트웨어 필요"범주에 속합니다. 아마 내가 다시 방문 할 것이다. 감사. – HackedByChinese

관련 문제