본문 바로가기
API

포스트맨을 이용한 보안 테스트

by Testengineer 2024. 1. 31.
반응형


Fuzzing test


Fuzzing 혹은 Fuzzing test라고 불리는 것은 프로그램이나 서비스에 무작위로 입력을 하여 예기치 않은 일이 발생하는지 확인하는 개념이다. 단순한 테스트 방법으로, 말이 되는지 안되는지에 대해서는 고려하지 않고 무슨 일이 발생하는지 보기 위해 다른 입력을 계속 시도한다. API가 프로그램적으로 상호작용하도록 설계되었기 때문에, 이러한 종류의 테스팅에 매우 적합한 테스트 방법이다.
아이러니한 점은 Fuzzing은 강력한 테스트 기법이지만 해킹 기법이기도 하다는 점이다. 해커들이 API에서 취약점을 찾을 수 있는지 확인하기 위해 Fuzzing을 시도해 볼 때가 있다. 


- Command injection, 명령어 삽입


API를 이용하면 웹 서비스에 명령어를 보낼 수 있다. 보통 이런 명령어는 특정 방식으로 보내도록 되어있지만 사용자가 문제를 일으킬 수 있는 방식으로 명령어를 보내는 것을 막을수는 없다. API 요청을 서비스에 보내면 해당 서비스가 클라우드에 있더라도 해당 요청은 컴퓨터 어딘가에서 실행될 것이다.

예를 들어, /content라는 엔드포인트를 가진 API를 가지고 있다면 이 엔드포인트를 사용하면 파일 이름을 쿼리 파라미터로 지정하여 특정 파일의 내용을 읽을 수 있다. 
/content?name=myfile.txt 
위와 같은 호출을 보내면 서버에서 myfile.txt라는 파일의 내용이 반환된다. 서버에서는 다음과 같은 명령어로 바뀔 수 있다.

cat myfile.txt 
ls


이 경우 파일의 내용 뿐만 아니라 디렉터리에 있는 다른 파일들의 목록도 가져오게 된다. 

이러한 경우가 운영체제에서 injection의 예시였지만 API 요청을 통해 발생할 수 있는 다른 injection의 유형도 있다.
예를 들어, API가 백엔드에서 데이터베이스 쿼리를 발생시키는 경우 SQL injection에 취약할 수 있다. 데이터를 injection 할 수 있는 다른 방법도 고려해야 한다. 쿼리 파라미터를 통해 injection 하는 예시를 들었지만 header, body, cookie를 통해서도 injection 데이터를 보낼 수 있다.



- Authorization testing, 인가 테스팅

API는 인증된 사용자가 특정 리소스나 명령어에 접근할 수 있는지 여부를 결정하기 위해 권한을 사용한다. 특정 유형의 사용자가 특정 리소스로부터 올바르게 연결되었는지를 확인하는 테스트를 진행해야 한다. 로그인 자격 증명을 통해 접근 허용되어서는 안 되는 리소스에 접근하려고 시도한다.
API가 모든 권한을 올바르게 설정하지 않은 경우 시스템의 모든 엔드포인트와 옵션을 종합적으로 테스트해야 하므로 테스트가 어려울 수 있다. 
API URL에서 사용자 ID나 기타 잠재적으로 민감한 정보와 같은 것을 사용할 때 해커나 다른 사람이 시스템에서 정보를 추론하기 어렵게 하기 위해서 일종의 무작위 값을 사용하는 것을 고려한다. 이는 적절한 보안 프로토콜을 대체하는 것은 아니지만, 상황을 조금 더 안전하게 만드는데 도움을 준다. 이를 security by obscurity라고도 한다.
security by obscurity라는 아이디어가 도움이 될 수 있지만 적절한 API 승인과 관련해서는 고려해야 할 점이 있다.
바로, 역할 기반 보안이다. 시스템 내의 사용자가 맡을 수 있는 다양한 역할이 있다. 인가 테스팅에서 다른 역할을 시도하는 것일 수 있다. 하지만 어떤 과정의 데이터에도 접근할 수 있어서는 안 된다. 자신이 등록한 특정 과정의 데이터만 볼 수 있어야 한다. 사용자 인터페이스가 사용자에게 권한이 없는 것을 올바르게 제한하지만 API에서 동일한 보안이 올바르게 적용되지 않아서 사용자가 권한이 없는 것을 볼 수 있다. 
그리고 테스트시, 부정적인 경우도 테스트를 반드시 해야 한다.



- Integrating with Burp Suite, Burp Suite와 통합

보안 테스트 방법 중에 네트워크 프록시를 사용하여 네트워크 트래픽을 이해하고 테스트하는데 도움을 받을 수 있는 방법이 있다. 그중 포스트맨과 통합하여 사용할 수 있는 방법이다.
https://portswigger.net/burp/communitydownload
해당 프로그램을 다운로드하고 Burp Suite를 구성하면 된다.
Burp Suite를 사용할 때 셋업으로 신경 써야 할 몇 가지 스텝이 있다.
1. Proxy tab > 서브탭에 있는 proxy settings를 선택해서 창을 열어준다.


2. Proxy Listeners 섹션에서 running 체크박스에 체크되어 있는지 확인한다.(127.0.01:8080)


3. Intercept 서브탭에서 Intercept is on 버튼을 클릭하면 인터셉팅이 켜진다.



그다음으로는 포스트맨에서 셋업해야 하는 부분이다.
Brup Suite는 인터넷 프록시이며, 포스트맨은 프록시를 통해 라우팅하도록 설정할 수 있으므로 프록시와 함께 사용할 수 있다.

1. 애플리케이션 상단 설정 톱니바퀴를 클릭하고 메뉴에서 설정을 선택한다.


2. 팝업에서 proxy 탭을 클릭한다.


3. Burp Suite 프록시를 사용할 사용자 지정 프록시로 지정한다. Use custom proxy configuration을 토글키로 연 다음, Proxy Server 박스에서 Burp Suite가 사용 중인 프록시 서버의 IP 주소를 입력한다.


이후 포스트맨에서 보내는 데이터가 Burp Suite를 통과하기 때문에 보안 인증은 Burp Suite에서 가져온 것임으로 신뢰하기 어렵다.
해결하기 위한 방법으로 SSL 인증서 확인 옵션을 해제할 수 있다.
4. Settings 팝업에서 General 탭으로 이동하여 SSL 인증서 확인 옵션을 해제한다.


5. 대화상자를 닫고 포스트맨에서 request을 보낸다.


request를 요청하면 Burp Suite에서 프록시를 통해 요청이 라우팅이 되었음을 알 수 있다.

Target > Sitemap 탭을 선택하면 여기서 API request 세부정보를 확인할 수 있다.


Burp Suite 홈페이지를 참고하면 다양한 테스트 플로우에 대해서 설명해 둔 문서가 있으니 테스트할 때, 참고하면 좋다.
https://portswigger.net/burp/documentation/desktop/testing-workflow

프록시 도구를 사용하면 데이터를 보고 조작할 수 있으며 보안테스트에 도움이 된다. 포스트맨 자체가 보안 테스트 도구는 아니지만 API에 보안 문제가 있는지 확인하는데 도움이 될 수 있다.

반응형

'API' 카테고리의 다른 글

포스트맨_데이터 기반 테스트  (1) 2024.09.10
포스트맨에서 테스트 스크립트 작성방법  (0) 2024.02.28
API_ Authorization & Authentication  (2) 2024.01.01
Open API와 API 명세  (2) 2023.12.08
API_용어와 유형  (0) 2023.10.25

댓글