이 글은 "웹 애플리케이션 보안 - 정찰, 공격, 방어 세 단계로 배우는 웹 애플리케이션 보안의 모든 것"을 읽고 공부한 내용을 정리한 글입니다.
서브도메인 찾기
API 엔드 포인트를 테스트하기 이전에 도메인 구조에 익숙해져야 한다.
웹 애플리케이션은 단일 도메인으로 서비스하지 않는다.
서브도메인을 찾아내 기록하는 것은 웹 애플리케이션 정찰의 첫 단계이다.
우리가 궁금한 것은, "도메인이 인터넷에 연결되어 있을텐데, 이 인터넷에 액세스할 수 있는 다른 서버도 갖고 있는가?"이다. 그러므로 서브도메인 탐색을 통해 아직 방어가 덜 된 쉬운 타깃을 찾는다.
API와 end point
API(Application Programming Interface)는 다른 소프트웨어 시스템과 통신하기 위해 따라야 하는 규칙이다.
대표적인 설계 규칙으로 REST(Representational State Transfer)가 있다.
API의 예:
- Google Maps API: 웹 사이트 또는 앱에 지도를 추가할 수 있다.
- Facebook API: 웹 사이트 또는 앱에 Facebook 기능을 추가할 수 있다.
- Twitter API: 웹 사이트 또는 앱에 트윗 기능을 추가할 수 있다.
- YouTube API: 웹 사이트 또는 앱에 YouTube 동영상을 추가할 수 있다.
REST API
REST API는 자원을 중심으로 설계된다. 모든 자원은 고유한 식별자를 가지며, 이 식별자는 URI(Uniform Resource Identifier)로 표현된다. 또한 HTTP 동사(GET, POST, PUt, DELETE) 등을 사용해 자원에 대한 행위를 표현한다.
또한 클라이언트가 서버에 요청을 보낼 때 요청의 대상이 되는 객체나 수행하고자 하는 메서드를 구체적으로 명시해야 한다.
엔드 포인트(End Point)는 네트워크에 연결하고 네트워크를 통해 통신하는 모든 디바이스를 말한다.
API와 연관될 때는 API가 서버에서 리소스에 접근할 수 있게 하는 URL을 의미한다. 즉, 엔드포인트는 서버에서 제공하는 기능을 나타내는 URL이며, 클라이언트가 이를 통해 요청할 수 있는 메서드와 함께 구체적인 기능을 정의한다.
API를 사용하려면 API 엔드포인트와 올바른 인증 헤더를 포함하는 HTTP 요청을 보내야 한다.
브라우저에 내장된 네트워크 분석 도구
버프(Burp), 포트스위거(PortSwigger), 잽(ZAP) 등 강력한 도구가 있지만 브라우저에 내장된 개발자 도구도 충분하다.
브라우저에서 네트워크 트래픽을 분석할 때 흥미로운 결과는 XHR 탭에 많이 나타난다.
서버에 대한 HTTP 요청을 보여주고, 폰트, 이미지 등 의존성 파일은 걸러낸다.
Headers 탭의 General - Request URL 항목에서는 웹사이트가 어느 도메인에 요청했는지, 응답이 어디로부터 왔는지 볼 수 있다.
이를 통해 기본 웹사이트와 연계된 서버를 찾아낼 수도 있다.
공개된 레코드 이용
웹에 공개된 정보를 이용하는 것도 훌륭한 정찰 방법이다.
검색 엔진 캐시
검색 엔진에서 특수한 검색 연산자를 통해 구체적인 검색을 수행할 수 있다.
구글에서 제공하는 간단한 연산자로는
- site:<사이트명> - 특정 도메인에 대해서만 질의
- -inurl:<패턴> - 패턴과 일치하는 url 제외
정도가 있다.
아카이브
archive.org 등 공개 아카이브 유틸리티에서는 웹사이트의 스냅샷(snapshot)을 얻을 수 있다.
보통은 추억을 회상할 때나 들어가곤 한다. 그러나 아카이브를 통해서도 정찰이 가능하다.
현재는 공개되지 않지만 과거에 공개되었던 서브도메인을 아카이브를 통해 파악할 수 있다.
보안 취약점의 공개 시점을 알고 있으면 가치가 높은 정찰 방법이다.
소셜 스냅샷
소셜 미디어에 업로드된 글로부터 서브 도메인에 관한 정보를 얻는 것도 가능하다.
트위터 등 SNS에서 제공하는 API를 통해 데이터 검색 및 필터링을 할 수 있다.
마이크로소프트와 관련된 트윗 요청을 질의하면
careers.microsoft.com(구인)
support.microsoft.com(고객지원) 등의 결과를 얻을 수 있다.
자주 검색된 트윗은 검색 엔진에서도 찾을 수 있으므로 별로 인기를 끌지 못한 트윗을 찾을 때 유용하다.
존 전송 공격
DNS 시스템에서는 다른 DNS 서버와 DNS 레코드를 동기화하는 능력이 중요하다.
DNS 존 전송은 DNS 서버가 DNS 레코드를 공유하는 표준 방식으로, 동일한 DNS 존에 대한 정보를 가지고 있는 다른 DNS 서버로 DNS 레코드 정보를 전송하는 프로세스이다.
존 전송 공격은 특수한 포맷으로 DNS 서버인 척 DNS 존 파일을 요청한다.
올바르게 구성되지 않은 DNS 서버 정찰
존 전송 요청을 하는 방법은 DNS 네임서버를 알아내고, 네임서버로부터 존 전송 파일을 얻는 명령어를 실행하면 된다.
리눅스에서는 host 명령어를 사용하고, 윈도우에서는 nslookup이 유사한 기능을 수행한다.
만약 존 전송 요청이 성공하면 google.com 도메인 아래의 웹 애플리케이션과 공인 IP 주소 목록을 얻을 수 있을 것이다.
하지만 올바르게 구성된 서버는 존 전송 공격에 대해 위와 같은 응답을 보낸다. 존 전송 공격은 방어하기 쉬운 공격이다.
따라서 올바르게 구성되지 않은 DNS 서버를 정찰하는 데 쓸 수 있다.
브루트 포싱
일치하는 것을 찾을 때까지 서브도메인의 모든 가능한 조합을 테스트하는 방법이다.
잠재적 서브도메인 목록을 생성하고, ping을 요청하고, 살아 있는 도메인만 기록하여 찾아낸다.
가장 단순한 방법이지만 그만큼 시간이 오래 걸리고, 로그가 남아 관리자에 의해 차단될 수 있으므로 최후의 수단을 ㅗ여겨야 한다.
딕셔너리 공격
일반적으로 사용되는 서브도메인 리스트인 딕셔너리를 토대로 브루트 포싱을 진행하는 것이다. 그냥 무차별 대입하는 것보다 속도가 빠르다.
딕셔너리를 제공하는 스캐너로 dnscan이 있다.
dnscan에는 가장 많이 사용되는 서브도메인 1만 개를 포함한 파일을 제공한다.
https://github.com/rbsec/dnscan
정찰의 목적
- 정찰의 목적은 애플리케이션의 맵 생성에 있다. 맵은 공격 페이로드의 우선순위와 배치 결정할 때 사용한다.
- 정찰에 있어서 우선 수행해야하는 단계는 서브도메인을 검색하여 앱의 기능을 유지하는 서버를 알아내는 것이다.
- 메일 서버나 관리자용 백도어 등 드러나지 않는 서버는 버그가 많다. 이러한 백그라운드 서버의 API를 찾아내면 익스플로잇에 도움이 된다.
참고
'보안 > 웹해킹' 카테고리의 다른 글
웹 애플리케이션 정찰 - 서드파티 의존성 식별 (0) | 2023.05.14 |
---|---|
웹 애플리케이션 정찰 - API 분석 (0) | 2023.05.13 |
VM ware, Kali Linux, DVWA로 웹해킹 환경 구축하기 (0) | 2022.10.26 |