ModSecurity 3장_독을 품은 폰(해커 트랩)
허니트랩이란?
: 허니팟 시스템이 실제 대상처럼 행동하도록 네트워크에 배포하는 별도의 호스트를 말한다면, 허니트랩은 웹 애플리케이션 전반에 걸쳐 심어져서 공격자에게 가상의 지뢰밭처럼 동작한다. 허니트랩의 장점은 정상적인 사용자로부터 악성적인 사용자를 빠르게 구별할 수 있다는 것이다.
세 가지 장점으로 높은 정확도의 경고, 적은 수의 경고, 미탐 식별이 있다.
◼ 허니팟 포트 추가
: 완전한 새로운 허니팟 시스템을 구축할 필요는 없다. 현재의 웹 서버 플랫폼을 재사용한다. 허니트랩을 구현하기 위해 HTTP 요청 트래픽을 받아들이는 네트워크 포트를 추가한다. 이 포트들은 정상적인 목적을 가지고 있지않아 수신한 어떠한 트래픽이라도 의심한다.
✔ 아파치 Listen 지시자
: 아파치의 위 지시자는 요청을 받아들이고자 하는 포트/IP 주소아 포트의 조합을 정의한다. 기본적으로 HTTP 80 포트를 받아들이는 하나의 Listen 지시자가 httpd.conf 파일에 활성화되어 있는 것을 확인할 수 있다. 아래는 일반적인 대안 HTTP 포트이다. SecRule SERVER_PORT "^(8000 | 8080 | 8888)$"
- 8000
- 8080
- 8888
허니트랩 포트 기술은 클라이언트가 요청을 보내자마자 악성인지 알 수 있기 때문에 실제 애플리케이션의 조기 경보 시스템 역할을 한다. 이 정보를 바탕으로 클라이언트를 즉시 차단하고, 감시 목록에 등록하여 이상징후 점수를 증가시킨다.
◼ 가짜 HTML 주석 추가
: HTML에서 마크업 선언 시작 구분자 "<!"와 주석 시작 구분자 "--" 사이의 공백은 허락되지 않지만 주석 종료 구분자와 마크업 선언 종료 구분자 사이의 공백은 허용된다. 주로 발생하는 오류는 주석 내용에 "---"를 포함하는 경우이다. 이 기능의 본래 목적은 도움이 되지만 종종 민감한 데이터를 누설한다. 사이트 정찰 단계에서 공격자는 자동화된 스파이 툴을 실행한다. 그 후, 사이트의 다양한 요소에 대해 검토하며 민감한 정보를 찾는다.
개발자가 html 주석 내에 스택 트레이스 디버깅 정보를 삽입하는 경우가 있는데, 이 정보는 애플리케이션의 내부 동작을 노출시키므로 클라이언트에 전송되어서는 안된다. 인젝션 포인트로 사용하는 중요 데이터 요소를 나타내는 FORM 태그 앞에 허니트랩 HTML 주석 데이터를 직접 삽입하여 클라이언트가 악의적인지를 식별한다.
◼ 가짜 숨겨진 폼 필드를 추가
: 가짜 숨겨진 폼 필드를 추가하고 데이터가 조작된 경우, 경고하는 방법을 보여준다. HTML의 숨겨진 폼 필드는 브라우저가 사용자에게 해당 필드를 보여주지 않는다는 하나의 명확한 차이를 제외하고는 일반 폼 피드와 동일하다. 숨겨진 필드는 내용이 변경되면 안된다. 브라우저는 폼 필드를 감추지만 사용자는 여전히 데이터에 접근할 수 있으므로 데이터가 조작될 수 있다. 그들은 소스 보기를 하거나 브라우저의 플러그인을 사용한다
✔ 가짜 HTML 주석을 추가했던 것처럼 가짜 HTML 숨겨진 폼 필드를 주입하려면 동일한 방법을 사용하면 된다.
</form> HTML에 집중해야한다. 허니트랩 데이터를 </form> 앞에 삽입한다.
◼ 가짜 쿠키 데이터를 추가
: HTTP 프로토콜은 기본적으로 세션을 인식하지 않는다. 각 트랜잭션이 다른 트랜잭션과 독립적임을 알 수 있다. 애플리케이션은 사용자가 누구이며 기존에 어떤 행위를 했는지 추적하는 방법이 필요하다. 쿠키 데이터는 브라우저에게 다음 요청 시 응답 헤더 데이터를 클라이언트 웹 브라우저에게 발행하여 클라리언트 웹 애플리케이션에 다시 전송되도록 지시한다.
✔ 언제 가짜 데이터를 발생시킬 것인가?
: 쿠키 허니 트랩 데이터가 무해한 것처럼 보이길 원하므로, 애플리케이션 자체적으로 정상적인 응답헤더를 발행할 때만 추가한다.
✔ 가짜 데이터의 이름을 무엇으로 할 것인가?
: 허니트랩 데이터가 잘 섞이기를 원하므로 현재의 쿠키 이름과 유사한 이름으로 시도한다.
출처: ModSecurity를 활용한 웹 애플리케이션 방어레시피_라이언 바넷 지음