취약점 OAuth | 웹 응용 프로그램에서 안전한 승인을 구현하는 방법

Anonim
취약점 OAuth | 웹 응용 프로그램에서 안전한 승인을 구현하는 방법 2740_1

이 기사는 잘 알려진 OAuth 취약점을 처리합니다. 독자는 웹 응용 프로그램에서 안전하고 안전한 권한을 구현하는 방법을 배우게됩니다.

OAuth는 신뢰할 수있는 프로토콜이지만 보안 정도는 권한을 구현할 때 웹 개발자의 인식에 크게 의존합니다. 이로 인해 정보 보안 전문가 에게이 주제가 매우 중요합니다. 그들은 사용자의 높은 수준의 보호 수준을 제공해야합니다. 가난한 판매 OAuth의 위험을 줄이는 데 도움이되는 효과적인 실무자에게는 알 수있는 시간입니다.

소개

OAuth 2.0 프로토콜은 현재 다양한 응용 프로그램에서 널리 사용되고 있습니다. 이를 사용하면 편리한 사용자 인터페이스가 사용 가능하게되고 사용자 이름과 암호를 입력하는 기존 메서드와 비교하여 사용 가능하고 쉽게 인증 및 권한 부여가 있습니다. 적절하고 사려 깊은 구현으로 OAuth 프로토콜은 사용자가 타사 응용 프로그램과 공유 할 필요가 없기 때문에 특정 자원에 액세스 할 필요가 없기 때문에 기존 인증보다 안전합니다. 사용자는 일부 웹 사이트에 등록해야 할 때마다 새 계정을 만드는 대신 Google 계정, Facebook 또는 LinkedIn을 사용하여 Google 계정, Facebook 또는 LinkedIn을 사용하는 것을 선호하는 경우가 많습니다. 따라서 OAuth 프로토콜은 우리의 삶을 크게 단순화합니다.

일반적으로 인기있는 OAuth 서비스 제공 업체는 매우 신뢰할 수 있습니다. Google 또는 Facebook 계정으로 로그인하면 특정 보안 감각이 있으며 정확합니다. 프로토콜은 전문가가 신중하게 테스트합니다. 사용 가능한 모든 취약점은 항상 개발자 팀이 항상 신속하게 수정됩니다. 그러나 완전한 안전감이 거짓 일 수 있음을 주목할 가치가 있습니다.

OAuth 서비스 제공 업체는 응용 프로그램 개발자를 맡기면 프로그램의 안전을 주목할 이유가 많습니다. 실제로 처음에 보호 된 OAuth 서비스가 설치 프로세스에서 잘못 구현되며 침입자의 쉽게 표적이 될 수 있습니다. 이러한 선입관은 사용자의 개인 데이터 도둑질로 이어질 것입니다.

그런 다음 사용자를 인증하기 위해 OAuth 프로토콜을 구현하는 타사 응용 프로그램에서 가장 일반적인 취약점을 고려해야합니다. 프로토콜 자체가 안전하고 신뢰할 수 있음을 기억해야합니다. 잘못된 구현 후에 만 ​​해커 공격에 취약 해집니다.

루이트 Tockey 절 도르 래퍼 헤더를 사용합니다

응용 프로그램이 OAuth 서버에서 사용자를 대신하여 승인을 요청할 때, 사람은 이후의 검사를 위해 Enter를 입력하고 서버로 다시 보내도록 코드를 수신합니다. 작업 중에 사용자가 다른 페이지로 리디렉션되면 코드는 HTTP 요청의 "referer"헤더에서 코드가 표시됩니다. 따라서 코드는 OAuth 서버에 등록 된 사용자 데이터를 위협하는 외부 웹 사이트에 속할 것입니다.

참고 : 라이퍼 헤더는 HTTP 쿼리 헤더이며 요청이 전송되는 URL 호스트를 전송합니다.

이 취약점의 결과를 부드럽게하기 위해 개발자는 웹 응용 프로그램에 HTML 주입이 포함되어 있지 않은지 확인해야합니다. 주입이 감지되면 공격자는 이미지 태그를 웹 서버로 쉽게 설정하고 사용자를 리디렉션 할 수있는 방법을 찾을 수 있습니다. 따라서 그는 HTTP 요청의 "referer"헤더에서 코드를 훔칠 기회를 얻을 수 있습니다.

redirect_uri 매개 변수를 사용하여 OAuth Tockey 절도

응용 프로그램은 요청을 OAuth 서버에 보내는 권한 프로세스를 시작합니다.

https://www.example.com/signin/authorize? [...]&redirect_uri=httpps://demo.example.com/loginsuccessful.

쿼리는 항상 OAuth 서버가 사용하는 "redirect_uri"매개 변수가 사용자가 자신의 동의를 제공 한 후에 토큰을 응용 프로그램으로 되돌아 가게합니다. 이 매개 변수의 값이 제어되거나 확인되지 않으면 공격자는 쉽게 변경할 수 있으며 요청을 해당 웹 사이트로 리디렉션하고 제한된 자원에 대한 액세스를 얻을 수있는 특수 프로그램을 사용합니다.

https://www.example.com/signin/authorize?, [...]&redirect_uri=httpps://localhost.evil.com.

때로는 유사한 URL이 차단됩니다. 공격자는 다음과 같이 Open URL에서 수신 된 데이터를 리디렉션 할 수 있습니다.

https://www.example.com/oauth20_authorize.srf?, [...[ /redirect_uri=httpps://accounts.google.com/backtouthsubtarget?next=httpset://evil.com.

아니면 이거:

https://www.example.com/oauth2/authorize? [...] % iRect_URI = https % 3a % 2F % 2FAPPS.Facebook.com % 2Fattacker % 2F.

OAuth를 구현할 때는 흰색 목록에 전체 도메인을 절대로 포함시키지 않을 수 있습니다. "redirect_uri"에 몇 개의 URL 만 추가되어야합니다. 리디렉션을 열 수있는 요청을 리디렉션하지 않습니다.

크로스 라인 요청의 위조

공격자가 피해자가 자신의 링크를 클릭 할 때 성공할 때, 그가 생성하지 않을 요청을 생성하는 데 성공할 때 intersight 요청의 위조가 발생할 수 있습니다. 교차 라인 요청 위조는 일반적으로 사용자 세션과 관련된 CSRF 토큰으로 부드럽게됩니다. 그것은 신청서가 요청을 보낸 사람의 사람을 확인하는 데 도움이됩니다. OAuth 프로토콜의 "state"매개 변수는 CSRF 토큰으로 사용됩니다.

OAuth에서 CSRF 공격이 어떻게 수행되고 "State"매개 변수를 사용하여 취약성의 효과를 완화하는 방법을 볼 가치가 있습니다.

해커는 웹 응용 프로그램을 열고 OAuth를 사용하여 서비스 공급자에 액세스하기위한 권한 프로세스를 시작합니다. 응용 프로그램은 서비스 제공 업체가 제공 해야하는 액세스를 요청합니다. 해커는 일반적으로 액세스 권한을 부여하기 위해 사용자 이름과 암호를 입력 해야하는 서비스 제공 업체 웹 사이트로 리디렉션됩니다. 대신 해커 가이 요청을 방지하고 URL을 저장합니다. 해커가 어떻게 든 피해자 가이 URL을 열게합니다. 피해자가 계정을 사용하여 서비스 제공 업체의 시스템을 입력 한 경우 자격 증명이 인증 코드를 발급하는 데 사용됩니다. 인증 코드는 액세스 토큰에 대한 액세스를 교환합니다. 이제 응용 프로그램의 해커 계정이 승인됩니다. 피해자의 계정에 액세스 할 수 있습니다.

따라서 "State"매개 변수를 사용 하여이 상황을 어떻게 방지 할 수 있습니까?

응용 프로그램은 소스 계정을 기반으로 해당 값을 작성해야합니다 (예 : 사용자 세션 해시 키를 사용하십시오). 중요한 것은 중요하지 않습니다. 주요 점은 가치가 원래 사용자에 대한 개인 정보를 사용하여 고유하고 생성 된 것입니다. "state"매개 변수에 할당됩니다.

이 값은 리디렉션 할 때 서비스 제공 업체로 전송됩니다. 이제 해커가 피해자를 초대하여 그가 보관 한 URL을 열어야합니다.

권한 부호는 "State"매개 변수와 함께 세션에서 클라이언트로 다시 발행됩니다.

클라이언트는 세션 정보를 기반으로 매개 변수 값을 생성하고 "상태"값과 비교하여 인증 요청에서 서비스 공급자로 전송되었습니다. 이 값은 현재 세션에 대한 정보를 기준으로 만 생성 되었기 때문에 쿼리의 "State"매개 변수와 일치하지 않습니다. 결과적으로 획득 된 값은 시스템에 의해 허용되지 않습니다.

OAuth를 구현할 때 탐지 된 다른 취약점은 "redirect_uri"매개 변수를 사용하여 XSS (교차 사이트 스크립팅)를 수행하는 기능이 포함될 때 OAuth 개인 키 설정 (모바일 응용 프로그램을 만들 때 발생할 수 있음) 및 권한 부여 코드 규칙 위반 (때로는 키를 획득 할 수 있습니다) 권한 부호는 여러 액세스 토큰을 발급하기 위해 한 번 이상 사용될 수 있습니다). 이러한 취약점은 위에서 설명한 것보다 덜 일반적이지만 더 이상 위험하지 않습니다. 개발자는 웹 응용 프로그램의 안정적인 작동을 보장하기 위해 필요한 모든 관행을 알아야합니다.

번역 된 기사의 저자 : Simon Saliba.

중대한! 전적으로 학업 목적을위한 정보. 법률을 준수하고 불법적 인 목적 으로이 정보를 적용하지 마십시오.

cisoclub.ru에 더 흥미로운 자료. 에 동의쳐 저희 : Facebook | VK | 트위터 | Instagram (Instagram) 전보 | 젠 | 메신저 | ICQ 새로운 | YouTube | 펄스.

더 읽어보기