이 글은 "웹 애플리케이션 보안 - 정찰, 공격, 방어 세 단계로 배우는 웹 애플리케이션 보안의 모든 것"을 읽고 공부한 내용을 정리한 글입니다.
API 분석
웹 애플리케이션의 구조를 탐색할 때, 다시 말해 맵을 만들 때 서브도메인 탐색에 이어 두 번째로 수행해야 하는 단계는 API 찾기이다.
네트워크에 API가 노출되는 이유를 이해하면 API가 어떤 목적으로 사용되는지 파악할 수 있다.
엔드포인트 탐색
오늘날 웹 앱은 대부분 REST API 구조를 따른다.
개발자 도구를 사용해 네트워크 요청을 분석하면 API가 어떤 방식으로 설계되었는지 파악할 수 있다.
REST API는 다음과 같은 특징이 있다.
- 요청 URL은 리소스를 나타내고 URI 경로 구분 기호('/')를 사용하여 리소스를 구성한다. URL 마지막에는 '/'를 붙이지 않는다.
- 소문자를 사용한다.
- GET, PUT 등의 행위를 URL에 표시하지 않는다
- 파일 확장자를 URL에 표시하지 않는다.
요청 URL: https://api.example.com/users
요청 메서드: GET
응답 코드: 200 OK
응답 본문: [
{
"id": 1,
"name": "John Doe",
"email": "johndoe@example.com"
},
{
"id": 2,
"name": "Jane Doe",
"email": "janedoe@example.com"
}
]
API의 구조를 파악했으면 엔드포인트를 추정할 차례다.
OPTIONS 메서드는 허용된 통신 옵션을 요청하는 메서드이다.
리눅스에서 위의 예시 URL에 대해 OPTIONS 메서드를 요청하려면
curl -i -X https://api.example.com/users
와 같이 curl 명령어를 사용하면 된다.
요청이 성공하면
Access-Control-Allow-Methods: GET, HEAD, POST, PUT, DELETE, OPTIONS
허용된 메서드가 어떤 것이 있는지 확인할 수 있다.
하지만 공개용으로 설계된 API에서만 사용할 수 있다. 일반적으로는 잘 노출하지 않는 요청이다.
실제로 트위터 API에 OPTIONS를 요청하면 일부 정보만 노출되고 허용된 메서드는 응답하지 않는다.
요청:
curl -i -X OPTIONS https://api.twitter.com/1.1/statuses/home_timeline.json
응답:
date: Sat, 13 May 2023 04:13:52 GMT
.
.
.
{"errors":[{"code":215,"message":"Bad Authentication data."}]}
인증 메커니즘
API 엔드포인트에 맞는 페이로드(전송되는 데이터)를 추측하기는 더 어렵다.
마구잡이로 시도했다가는 로그가 남을 수 있으므로, 일반적으로 로그인, 가입, 패스워드 재설정같은 엔드포인트부터 리다이렉트 분석을 시도하는 편이 최선이다.
로그인 세션을 인증하는 방식은 앱마다 다르므로 인증 스킴을 파악하는 것이 중요하다.
로그인 후 Request Header에서 Authorization 부분을 살펴보면
Authorization: Bearer am9l0jEyMzQ.......
과 같은 것을 볼 수 있다.
토큰 기반 인증은 쿠키나 세션을 사용하는 방법보다 더 효율적이고 보안성이 뛰어난 방법이다.
Basic, Digest, Bearer 등의 방식이 있으며 위에서는 Bearer 방식을 사용하고 있음을 확인할 수 있다.
엔드포인트 형상
서브도메인을 찾아내고, API도 알아냈으면 리소스별 HTTP 동사를 확인한 결과를 맵에 추가할 차례다.
일반적 형상
OAuth 2.0은 그 명세가 공개되어 많은 곳에서 구현했으므로 공개 문서 등을 통해 인증 엔드포인트에서 포함하는 데이터를 파악할 수 있다.
예를 들어 디스코드의 공개 문서에서 제시하는 구조는 다음과 같다.
POST /oauth2/authorize?
client_id={client_id}
&response_type=code
&state={state}
&redirect_uri={redirect_uri}
애플리케이션별 형상
안전하지 않은 앱은 401 not authorized 등 HTTP 오류 메시지를 통해 힌트를 줄 수도 있다.
특정 매개변수가 필요하다는 메시지처럼 자세한 오류를 설명해줄 수도 있다. 하지만 일반적으로는 상세하게 오류를 알려주지 않는다.
페이로드에 있을 것으로 예상되는 변수의 이름, auth_token이 10자로 이루어졌다는 규칙을 알고 있다면 브루트 포싱을 통해 값을 찾아낼 수도 있다.
'보안 > 웹해킹' 카테고리의 다른 글
웹 애플리케이션 정찰 - 서드파티 의존성 식별 (0) | 2023.05.14 |
---|---|
웹 애플리케이션 정찰 - 서브도메인 찾기 (0) | 2023.05.11 |
VM ware, Kali Linux, DVWA로 웹해킹 환경 구축하기 (0) | 2022.10.26 |