웹 애플리케이션 지도 작성
web application 을 공격하는 과정에서 첫 번째 단계는 공격 대상에 대해 좀 더 잘 이해하기 위한 정보들을 모으고 검사하는 것이다.
이렇게 말하면 너무 추상적이니 사진을 통해 알아보겠다.
웹 애플리케이션은 기본적으로 상위(기본) 도메인을 기준으로 트리구조로 폴더와 파일로 구성된다. 이 트리구조를 위 사진의 지도처럼 나타내는 작업을 웹 애플리케이션 지도 작성 이라고 한다.
1. 콘텐츠와 기능 수집
수작업으로 브라우징을 통해 대부분의 콘텐츠와 기능들을 확인할 수 있다. 그러나 수집한 것들을 기록하기 위해서는 tool을 이용한다.
1.1 웹 스파이더링
web spidering이란 web에 거미줄을 치듯이 위의 사진처럼 나타나도록 해주는 자동화 도구이다. 웹페이지를 자동으로 요청해서 페이지에 다른 콘텐츠로의 링크가 있는지를 parsing해서 이를 다시 요청하는 방식으로 계속해서 최종적으로 더 새로운 콘텐츠가 발견되지 않을 때까지 이런 작업을 반복한다.
(web spidering도구로 나는 burp suite를 쓰겠다.)
위에서 burp suite에서 target이라는 옵션과 spider옵션이 있는데 target은 사용자가 웹 애플리케이션을 수동으로 맵핑하는 방법으로 사용자가 브라우저를 검색해가면서 웹애플리케이션 구조를 파악하는구조이고 spider 옵션은 위에서 말한 자동화 기능(web spidering)을 가진다.
브라우저의 burp suite를 로컬 프록시로 설정했다. 그래서 프록시 서버를 내 루프백주소(127.0.0.1)로 하여 접속한 사이트를 자동으로 맵핑하도록 하였다.
많은 웹 서버에서 robots.txt라는 이름의 파일을 웹 루트에서 발견할수 있는 데, 이 파일은 web spidering으로 열어 보거나 검색 엔진들이 인덱스를 만들지 못하게 하고 싶은 사이트의 URL을 담고있다.
위 사진(이거 해도 되나?..)처럼 내가 다니는 항공대에 접속햇을때 항공대 사이트에 대한 기본적인 콘텐츠를 보여줌으로써 대상 애플리케이션의 구조를 한눈에 볼수 있다.
원래는 burp suite기능중 spider옵션을 사용하여 자동화 하지만 자동화 할경우 사용자를 삭제하고 데이터베이스를 종료시키거나 서버를 재시작시키는 관리용 기능이 있을지 모르니 실제로는 수동맵핑(target 옵션)으로 테스트 하였다.
자동화 도구의 한계점
- 복잡한 JS 코드를 이용해서 메뉴가 동적으로 생성되고 처리되는 경우 제대로 자동화 처리하지못한다.
- 플래시나 자바 애플릿 등 클라이언트 측 객체에 엮여있는 링크는 스파이더로 알아내지 못한다.
- 다단계 기능들은 매우 정교한 입력 값 검증을 위한 확인 작업을 거치는 경우에 스파이더링 도구는 제대로 발견,확인 하지못한다.
- URL에 실제 사용되는 Resource나 함수와는 무관하게 매개변수에 타이머나 난수 값과 같이 일회성 정보를 담고 있는 경우가 있을수 있는 있는데 이 경우 각 URL이 다른것으로 인식되어 이들 URL을 무한히 스파이더링하게 된다.
- 애플리케이션에 인증이 포함된 경우 스파이더를 이용해서는 인증 이후 세션을 잘 이어가지 못한다.
- 그 이유로는 실제가 아닌 자동화도구를 사용했음으로 토큰을 제대로 제시하지 못하기도 하고 스파이더가 URL을 따라가다가 로그아웃 URL을 처리하기도 하고 웹 애플리케이션에 민감한 입력값을 제공하면 애플리케이션이 자동으로 해당 세션을 끊기 때문이다.
1.2 User-Directed 스파이더링
이 방법은 자동화된 스파이더링 보다 더 많이 사용되는데 사용자가 일반적으로 브라우징 하듯이 애플리케이션의 모든 기능을 쭉 따라가게 되는데 이렇게 하는 동안 서버와 주고 받은 내용들은 프록시와 스파이더 도구가 결합된 도구(Burp suite)를 거치게 되고 이 도구(Burp suite)는 모든 요청과 서버의 대응 내용을 감시한다.
이런 도구(burp suite 의 target 옵션) 들은 브라우저로 방문했던 모든 URL을 바탕으로 애플리케이션 지동를 구축한다.
자동화된 스파이더링 접근 방법보다 나은점
- 정상적인 브라우징 방법을 통해 콘텐츠,기능을 수집가능
- 애플리케이션에서 제시되는 모든 데이터를 사용자가 정할 수 있기 때문에 모든 값들이 애플리케이션 조건에 맞게 제시될수 있다.
- 평상시 처럼 로그인가능하고 세션을 유지시킬수 있다. 세션이 강제 종료되면 다시 로그인하면 된다.
- 유저를 삭제하는 기능을 실행해볼지는 사용자가 정할 수 있다.
하지만 이 방법은 거대한 웹애플리케이션을 맵핑하려면 많은 시간이 걸린다는 단점이 있긴하다.
1.3 숨겨진 콘텐츠의 발견
애플리케이션은 흔히 보이는 주요 콘텐츠에 직접 연결되지 않거나 이들 콘텐츠를 통해 도달할 수 없는 어떤 콘텐트나 기능들을 많이 보유하고 있다. 즉, 앞에 설명했던 지도 작성 기법으로 다음과 같은 중요한 콘텐츠나 기능들을 확인 할 수없는 경우가 수없이 많을 것이다.
- 백업 파일
- 동적인 페이지의 경우 파일 확장자가 실행 파일이 아닐 때 이를 통해 페이지의 소스를 검토가능하므로 백업 파일들을 통해 발견한 취약점으로 메인 페이지를 공략가능하다.
- 백업 아카이브
- 웹 루트나 그 외의 경로에 담겨 있는 모든 파일의 스냅 샷을 담고 있는 백업 아카이브는 애플리케이션의 모든 콘텐츠와 기능들을 쉽게 확인가능하다.
- 서버에서 아직 제거되지 않은 예전 버전의 파일
- 동적인 페이지의 경우 새 버전에서는 고쳐진 취약점을 안고 있어 예전 버전을 통해 공략 가능할 수 있다.
- 데이터 베이스 접속에 사용되는 정보를 담고 있는 파일
- 사용자에게는 보이지 않지만 서버에 나타나는 기능들
- 현재 실행되고 있는 기능들에 대한 소스코드 파일들
무차별 대입 공격 기법
무차별 대입공격을 통해 숨겨진 콘텐츠를 발견가능하다. 쉽게 설명하면 하나씩 문자를 다 넣어보는 방식이다.(무식한방식) 예를 들어 설명하자.
위에서 사용한 사진을 이용해보자 만약 admission이라는 디렉토리에 숨겨진 콘텐츠가 있다고 추측하고 admission의 서브디렉토리나 서브디렉토리안의 파일을 찾고 싶다면 무차별 대입 공격을 통해서 찾을수 있다.
밑의 쓴 내용은 내가 상상으로 쓴 무차별 공격을 통해 나온 서브디렉토리의 예이다.(실제 무차별 공격하지 않음..)
http://www.kau.ac.kr/admissions/[무차별 대입 공격할 부분]
http://www.kau.ac.kr/admissions/About/
http://www.kau.ac.kr/admissions/Admin/
http://www.kau.ac.kr/admissions/Users/
....
위와같이 무차별 공격을 하게되면 모든 문자를 하나씩 넣어봐서(무식하게) 숨겨진 콘텐츠를 찾는 기법이다.
제시된 콘텐츠에서 추측
제시된 콘텐츠에서 추측
- 작성된 목록을 통해 사용되는 명명 규칙을 추측 해본다. 예를 들어 Adddocument.jsp 와 ViewDocument.jsp 파일이 존재할경우 EditDocument.jsp 나 Remove Document.jsp라는 페이지도 있을 수 있다.
- 콘텐츠를 구별하는 데 숫자나 날짜가 사용된 경우라면 다른 숨겨진 콘텐츠를 찾기 쉽다. Info2009.pdf 파일과 Info2010.pdf 파일을 발견했다면 당연히 다음 보고서의 이름을 추측(Info2011.pdf)가능하다.
- 임시 파일과 수많은 소프트웨어 도구에서 사용하는 .tmp 파일 확장을 찾아본다.
- 주어진 디렉토리에서 주요한 파일명(.js) 부분에 하나씩 있을지 모르는 확장자(.txt .bak .src)를 결합해서 요청해본다.
공개된 정보 이용
공개적으로 찾을 수 있는 정보가 2가지로 나누어져 있다.
- 구글, 야후나 MSN 같은 검색 엔진으로서 자체의 강력한 스파이더 도구를 통해 찾은 많은 콘텐츠에 대한 인덱스를 보유하고 있고 원본 콘텐츠가 지워졌더라도 캐시에 저장해 보존하기도 한다.
- WayBack Machine(www.archive.org/) 같은 웹 아카이브로서 매우 대량의 웹사이트의 과거 자료들을 보관하고 많은 경우 기존의 복제해 둔 스냅샷 정보를 통해 사용자가 원하는 사이트를 몇 년 이전 상태 그대로 브라우징 할수 있게 해준다.
구글에서 사용하는 고급 검색 옵션
site: www.naver.com
이 검색은 구글이 저장해 둔 대상 사이트 내에 있는 모든 자원의 내용에 대한 참조 값들을 반환
site: www.naver.com login
이 검색은 login 이란 표현을 담고 있는 모든 페이지를 반환한다.
link: www.naver.com
이는 대상 사이트에 대한 링크를 보유한 모든 다른 웹사이트나 애플리케이션을 알려준다.
related: www.naver.com
이는 대상과 비슷한 페이지를 알려주는 것이므로 관련이 없는 많은 것을 담고 있을 수 있다. 그러나 이를 통해 다른 사이트에 있는 같은 공격대상에 대한 정보를 얻을 수도있다.
또는 검색을 할때 구글의 웹 섹션에서만 하지말고 구글 그룹이나 구글 뉴스에서도 해보면 다른 결과를 찾을 수 있다.
1.5 애플리케이션 페이지와 기능 경로
POST /bank.jsp HTTP/1 .1
Host: wahh-bank.com
Content-Length : 106
servlet=TransferFunds&method=confirmTransfer&fromAccount=103581822&
toAccount=12398381234&amount=291.32&Submit=Ok
위와 같은 모든 요청은 하나의 URL을 통해 이루어진다. 해당 요청의 매개변수(fromAccount,toAccount,amount) 값들을 통해 실제로 애플리케이션에서 어떤 기능을 수행할 것을 명령하는데, 이는 실행할 자바 servlet과 메소드의 이름을 매개변수로 저장해 전달하기 때문이다.
그래서 URL이 아니라 위와 같이 매개변수명을 통해 기능이 정해지는 애플리케이션이라면 콘텐츠 수집 방식도 달라져야 한다. 이전에 단순한 콘텐츠 발견 기법으로는 숨은 콘텐츠를 찾을 수 없을 것이다.
예를 들어 /admin/DeleteUser.jsp 와 같이 애플리케이션 기능에 사응하는 특정 페이지를 요청해서 그 기능을 수행하는게 아니라 /admin.jsp?action=DeleteUser 와 같이 매개변수 값으로 전달하는 경우가 있다.
0 개의 댓글:
댓글 쓰기