API Security 101: 손상된 사용자 인증

API Security 101: 손상된 사용자 인증

OWASP 10대 취약점 또는 웹 애플리케이션을 위협하는 10대 취약점에 대해 들어보셨을 것입니다. 또한 OWASP는 OWASP API top 10이라고 하는 API를 위협하는 상위 10개 취약성 목록을 정기적으로 선택합니다. 현재 API 상위 10개 항목은 중단된 개체 수준 권한 부여, 손상된 사용자 인증, 과도한 데이터 노출, 리소스 부족입니다.

이러한 취약성의 대부분은 API 외에도 애플리케이션 구성 요소에 영향을 미치지만 API에서 드러나는 경향이 있습니다. 지난 시간에는 가장 일반적인 API 취약점 중 하나에 대해 말씀드렸습니다. 중단된 개체 수준 권한 부여입니다.

제 경험상 대부분의 API 구현이 적어도 하나의 Broken Object Level Authorization 인스턴스로 인해 어려움을 겪고 있다고 확신합니다. 이번에는 OWASP API #2: 손상된 사용자 인증에 대해 알아보겠습니다.

API의 경우 인증이 어렵습니다. API 호출 중에는 사용자 자격 증명을 요청하거나 다중 요소 인증을 사용하는 것이 불가능한 경우가 많습니다. 따라서 API 시스템의 인증은 액세스 토큰, 즉 사용자를 인증하기 위해 개별 API 호출에 포함된 토큰을 사용하여 구현되는 경우가 많습니다. 인증이 올바르게 구현되지 않으면 공격자는 이러한 잘못된 구성을 이용하여 다른 사람을 가장할 수 있습니다.

인증이 없는 API

첫째, API에 인증 메커니즘이 전혀 없을 수 있습니다. 때때로 API 개발자는 API 끝점이 인증된 애플리케이션에서만 액세스되고 다른 누군가에 의해 검색되지 않는다고 가정합니다. API는 끝점과 쿼리 구조를 알고 있는 모든 사용자가 사용할 수 있습니다. 이 경우 쿼리 구조를 파악할 수 있다면 누구나 API를 통해 데이터를 요청하거나 작업을 실행할 수 있습니다.

인증의 잘못된 구현

그러나 인증이 없는 API는 점점 더 보편화되고 있습니다. 대부분의 경우 손상된 사용자 인증은 대신 잘못된 액세스 토큰 설계 또는 구현으로 인해 발생합니다.

한 가지 흔한 실수는 액세스 토큰을 제대로 생성하지 못하는 것입니다. 무엇보다도 토큰이 짧거나 단순하거나 예측할 수 있는 경우 공격자는 토큰을 강제로 강제 적용할 수 있습니다. 토큰이 엔트로피 부족으로 생성되거나 취약한 암호화 또는 해싱 알고리즘을 사용하여 사용자 정보에서 파생될 때 발생할 수 있습니다. 예를 들어 다음 API 토큰의 문제는 무엇입니까?

access_token=dmlja2lbGk=

토큰은 단순히 사용자 이름 "비키엘리"의 base64 인코딩입니다!

단순 액세스 토큰 문자열을 사용하지 않는 API도 안전하지 않을 수 있습니다. 예를 들어 JWT(JSON Web Token)가 잘못 서명되거나 서명이 모두 누락될 수도 있습니다. 보안되지 않은 토큰을 사용하여 관리자 또는 특수 권한을 가진 다른 사용자를 API에 인증하는 경우 이 문제는 특히 위험합니다. JWT의 잠재적 함정에 대해 자세히 알고 싶으시다면 제 이전 게시물을 읽어보십시오.

장수 토큰

토큰이 제대로 생성되더라도 토큰 무효화가 잘못되면 문제가 발생할 수 있습니다. 수명이 긴 토큰은 많은 API 구현에서 큰 보안 문제입니다.

API 토큰은 로그아웃, 암호 변경, 계정 복구 및 계정 삭제와 같은 중요한 작업 후에 주기적으로 만료되어야 합니다. 액세스 토큰이 제대로 무효화되지 않은 경우 공격자는 토큰을 훔친 후에도 시스템에 대한 액세스를 무기한 유지할 수 있습니다.

토큰 유출

그리고 그것은 우리에게 토큰 유출의 문제를 가져온다. 때때로 개발자는 URL에서 또는 암호화되지 않은 트래픽을 통해 액세스 토큰을 불안정하게 전송합니다.

토큰이 URL을 통해 전송되는 경우 브라우저 확장 또는 검색 기록을 통해 URL에 액세스할 수 있는 모든 사용자가 토큰을 훔칠 수 있습니다.

https://api.example.com/v1.1/users/payment/show?user_id=12

또한 암호화되지 않은 트래픽을 통해 토큰이 전송되는 경우 공격자가 MITM(Man in the Middle) 공격을 시작하여 공격 대상자의 트래픽을 가로채 API 토큰을 훔칠 수 있습니다.

인증 손상 방지

단 한 번의 실수로 공격자가 사용자의 계정을 넘겨받아 제한된 데이터 및 기능에 액세스할 수 있기 때문에 손상된 사용자 인증은 API에 큰 타격을 입힙니다.

이 문제를 예방하려면 포괄적인 접근 방식이 필요합니다. 먼저 모든 중요 데이터 및 기능에 대한 액세스 제어를 구현하고 있는지 확인해야 합니다. 이 문제는 Broken Object Level Authorization에 대한 마지막 블로그 게시물에서 다룹니다. 시스템 액세스를 제한하는 데 사용하지 않는 한 인증은 무용지물입니다!

그런 다음 API 토큰이 길고 랜덤하며 예측할 수 없는 문자열인지 확인합니다. 사용자 정보에서 파생된 토큰을 사용하는 경우 강력한 알고리즘과 비밀 키를 사용하여 사용자가 자신의 토큰을 위조할 수 없도록 합니다. 마지막으로 API에서 JWT와 같은 서명 기반 인증을 사용하는 경우 토큰에 강력한 서명을 구현하고 적절히 검증하십시오.

로그아웃, 암호 재설정, 계정 복구 및 계정 삭제와 같은 작업 후에 주기적으로 토큰을 무효화합니다. 마지막으로 액세스 토큰을 기밀로 취급하고 URL 또는 암호화되지 않은 트래픽으로 전송하지 마십시오.

사용자 인증이 손상되면 심각한 보안 사고가 발생할 수 있으므로 이를 방지하는 것이 개발자로서 최우선 과제가 되어야 합니다. 다음에는 OWASP API top 10 #3, 과도한 데이터 노출, 즉 API에서 가장 자주 발견되는 취약성에 대해 살펴보겠습니다. 다음으로, 버그를 찾기 위해 항상 API 응답을 수집해야 하는 이유.

그 밖에 어떤 보안 개념에 대해 배우고 싶으십니까? 나도 알고 싶어. Twitter @vicieli7에서 자유롭게 접속하세요.

애플리케이션 보안에 대해 자세히 알아보시겠습니까? OWASP Top 10 과정은 https://www.shiftleft.io/learn/에서 무료로 수강하십시오.

from http://devcloset.tistory.com/152 by ccl(A) rewrite - 2021-07-07 07:00:00

댓글