ModSecurity를 활용한 웹 애플리케이션 방어 레시피
- 원서명Web Application Defender's Cookbook: Battling Hackers and Protecting Users (ISBN 9781118362181)
- 지은이라이언 바넷(Ryan Barnett)
- 옮긴이천민욱
- ISBN : 9788960779266
- 45,000원
- 2016년 11월 30일 펴냄 (절판)
- 페이퍼백 | 704쪽 | 188*235mm
- 시리즈 : 해킹과 보안
판매처
- 현재 이 도서는 구매할 수 없습니다.
책 소개
요약
한 기업의 보안담당자로서 “우리 회사의 웹사이트는 적절하게 보호되고 있는가?”라는 질문에 어떻게 답할 수 있을까? 이 책은 계속해서 진화하는 오픈소스 기반 웹 애플리케이션 방화벽(WAF)인 ModSecurity 를 활용해 현재의 방어 수준을 점검하고 개선할 수 있는 방안을 소개한다. 수년간 실무를 통해 접한 사례를 레시피 형태로 구성해 실제 업무에 즉각적으로 활용할 수 있도록 한다.
추천의 글
IT 시스템이 뚫리지 않도록 책임지는 방어자는 방어의 최전선이 될 수도 있고, 최후방이 될 수도 있다. 사실 일반적인 조직에서 일하는 방어자는 공격자와 머리기사에 오를 만한 데이터 유출 사이에 서 있는 유일한 방어선일 것이다. 더 나쁜 것은 아마도 사고가 대서특필되지 않고 방어자를 포함한 누구도 알아내지 못한 경우다.
말도 안 되는 새로운 웹 2.0 AJAX 기반의 HTML5 애플리케이션이 소프트웨어 개발 생명 주기를 횡단해 QA의 관문을 통과하든, 모든 보안 예외에 대해 관리자가 서명한 이후 외주 모의 침투 검사자가 사라지고 애플리케이션이 프로덕션 단계에 배포된 후에는 방어자의 지식 및 인가가 있든 없든 ‘보안’이라는 것은 전적으로 방어자의 책임이 된다. 취약점이 남아있거나 끝내 밝혀지는 점은 안심해도 된다. 따라서 모든 것을 고려해볼 때 방어자의 임무는 불안전한 부분의 안전을 확보하고, 들어오는 공격을 식별한 후 방해하며, 침입을 감지하는 것이다.
그러므로 방어자 역할의 중요성에 대해서는 의심의 여지가 없어야 한다. 방어자는 종종 수백만 건의 개인 데이터를 보호한다. 그들은 아마도 수백만, 혹은 수십억 달러의 온라인 거래를 보호하며 전체 비즈니스의 핵심 지적 자산을 보호한다. 우리는 누군가가 저장된 귀중한 정보를 훔치고 싶어 한다는 것을 확신할 수 있다. 더 크고 주목받는 시스템일수록 더욱 지속적이고 집요한 침입 공격이 있을 것이다.
공격자가 다양한 공격 방법을 선택할 수 있을수록 방어는 더욱 도전적인 작업이 된다. 그들은 원하는 아무 때나 시스템을 공격할 수도 있고 공격하지 않을 수도 있다. 따라서 방어자의 임무는 주말이나 휴가도 없이 1년 365일 잠시도 쉬지 않고 수행돼야 한다. 시스템과 방어자는 언제나 준비돼 있어야 한다.
방어자의 임무를 소개하는 내용은 어니스트 새클턴(Ernest Shackleton)이 남극 탐험에 동반할 사람을 모집하기 위해 만들었던 다음의 유명한 광고와 비슷하게 해석될 수 있다.
위험한 여행을 하기 원하는 남자. 낮은 임금, 추위, 완전한 암흑 속에서의 긴 시간. 무사히 귀환할 수 있을지는 보장할 수 없음. 성공 시에는 명예를 얻고 인정을 받을 수 있음.
방어자의 성공은 근무하는 운영 환경에 대한 몇 가지 주요 포인트를 이해하는 것으로 결정된다.
■ 웹사이트는 종종 개발, QA, 스테이징 단계에서 적절하게 실제 환경을 반영할 수 없는 방식으로 배포된다. 이는 실제 프로덕션 단계에 적용되고 실제적인 위험에 노출돼야만 실제적인 보안 포스처(security posture), 비즈니스에 대한 실제적이고 사실적인 위험을 파악할 수 있음을 의미한다. 이에 따라 방어자는 즉흥적으로 생각할 수 있어야 하며, 민첩하고 신속하게 대응해야 한다.
■ 방어자는 그들이 직접 개발하지 않아서 통찰력이 없거나 부족한 웹사이트를 보호할 책임이 있다. 관리자가 보안을 중요시하지 않고 확인된 취약점을 적시에 수정하는 것을 원하지 않을 수 있으며, 이것은 장기적인 표준 운영 절차가 될 수도 있다. 비즈니스의 위험과 소프트웨어 보안에 대해 예상되는 비용을 고려하면 이것은 올바른 결정일 수도 있다. 하지만 어떤 경우라도 방어자는 들어오는 공격을 식별할 수 있어야 하며, 정보 유출을 포함한 악용 가능한 많은 부분을 최대한 차단해야 한다.
■ 불씨를 진압하는 것과 일상의 위협에 대응하는 것은 마땅히 기대되는 역할의 일부다. 소프트웨어는 항상 취약점이 있기 때문에 비즈니스가 소프트웨어 보안에 완전히 열성적인지 아닌지는 중요하지 않다. 또한 모든 사람은 결국 공격당하게 된다. 방어자는 공격을 뒤늦게 확인하거나 유출에 대해 마지막으로 알게 되는 것을 원하지 않는다. 방어자에게는 공격 식별과 대응 시간이 중요하다.
■ 방어자들은 최전선에 있으므로 애플리케이션의 위험 프로파일과 공격자를 저지하는 데 필요한 보안 대응에 대해 많은 것을 배운다. 더욱 탄력적인 시스템을 만드는 데 관심 있는 개발자와 대화할 때 이와 같은 정보는 금과 같다. 또한 보안 평가 팀에게 QA 또는 프로덕션 단계에서 시스템을 테스트하는 경우 우선적으로 관심을 가져야 하는 취약점의 유형을 알려줄 때도 귀중한 정보다. 모든 사람은 실질적인 데이터가 필요하며 최상의 방어자는 이 정보를 가지고 있다.
이와 같은 방법을 사용하기 위해서는 전문화된 기술과 경험이 필요하다. 일반적으로 분석가가 되려는 사람은 이와 같은 방법을 제품의 README 파일이나 자주 묻는 질문(FAQs)에서 배우지 않는다. 역사적으로 보면, 지식은 동료와의 대화, 블로그 포스트, 메일링 리스트 대화에서 얻는다. 인터넷에 산재해 있는 정보들은 어떠한 실제적인 데이터로 꿰맞추기 힘들다. 또한 여러분이 이러는 도중에 이미 해킹됐을 수도 있다. 이것이 여러분이 이 책을 선택한 이유다. 웹 기반의 공격자는 멈추지 않고 매일매일 점점 적극적이면서 뻔뻔해지고 있다.
이와 같은 경험은 쉽고 빠르게 얻을 수 없다. 동시에 이와 같은 정보와 습득한 교훈은 문서화되고 체계화되며 공유된다. 이것이 라이언 바넷이 이 책에서 제공하는 방어를 위한 레시피이자 성공을 위한 레시피다.
모든 방어자에게 라이언의 성취점과 유능함을 남긴다. 그의 명성은 그 자체를 말해주고 있다. 라이언은 원조 방어자 중 한 명이다. 그는 방어자의 역할을 정의하기 위해 웹 보안 분야에서 누구보다 많은 기여를 했다. 또한 그는 내가 본 최고의 현장 실무자 중 한 명이다. 모두에게 행운을 빈다.
- 예레미야 그로스만(Jeremiah Grossman)/
화이트햇 시큐리티(WhiteHat Security, Inc.) CTO
이 책에서 다루는 내용
■ 사고 대응을 위한 전체(Full) HTTP 감사 구현
■ 식별된 취약점을 완화하기 위한 가상 패치 프로세스 활용
■ 악성 사용자를 식별하기 위한 허니트랩 배포
■ 사용자가 비정상적으로 행동하는 경우 탐지
■ 업로드된 파일 및 웹 콘텐츠 악성코드 분석
■ 웹 애플리케이션이 민감한 사용자 또는 기술 정보를 유출하는 경우 인식
■ 공격에 대한 다양한 수준의 대응
이 책의 대상 독자
이 책의 대상 독자는 웹 애플리케이션 방어자다. 여기서 방어자(defender)라는 용어는 실제 웹 애플리케이션을 공격으로부터 보호해야 하는 책임을 지닌 사람을 의미한다. 이들은 웹 애플리케이션을 만들지 않았지만 실제 네트워크에서 애플리케이션 관리를 책임진다. 웹 애플리케이션 방어자는 웹 애플리케이션의 전반적인 보안 상태에 기여하는 세 개의 중요 커뮤니티 중 하나다. 다른 두 개는 빌더(builder)와 브레이커(breaker)다. 빌더는 웹 애플리케이션의 실제 소스 코드와 기능을 담당하고 있는 개발 팀이다. 그들은 애플리케이션의 초기 생성자며, 향후의 기능 개선 및 유지 보수를 책임진다. 반면 브레이커는 소스 코드를 검토하고 실제 웹 애플리케이션을 공격하면서 애플리케이션을 평가하는 정보 보안 팀이다. 세 커뮤니티 모두 웹 애플리케이션의 전반적인 보안에 기여하고 있지만, 이 책은 전적으로 방어자가 지정된 임무를 수행하도록 돕는 데 초점을 맞추고 있다.
이 책의 구성
1부. 전투 공간 준비
이 책은 언젠가 발생할 공격을 위해 웹 애플리케이션 플랫폼을 준비하는 개념을 소개하며 시작한다. 이 부에서 다루는 레시피는 새로운 애플리케이션이 프로덕션 단계에 들어가기 직전 또는 들어간 직후에 완료해야 한다.
1장, ‘애플리케이션 요새화’에서는 공격 인식, 가시성 확보, 웹 트랜잭션에 대한 적절한 감사 로그 수행을 구현하기 위해 수행해야 할 초기 단계를 나열한다. 또한 여러분의 조직을 위해 공유된 공격 정보를 사용하고자 중앙 데이터 스토리지를 구현하는 방법을 배울 수 있다.
2장, ‘취약점 식별 및 완화’에서는 웹 애플리케이션 내에서 사전에 취약점을 식별하기 위한 중요한 방법을 설명한다. 이러한 취약점들이 식별된 후 가상 패치라고 알려진 절차를 통해 완화하는 방법을 배울 수 있다.
3장, ‘독을 품은 폰(해커 트랩)’에서는 악성 클라이언트를 빠르고 정확하게 식별하는 데 도움을 주고자 웹 애플리케이션에 부비트랩을 설치하는 다양한 방법을 설명한다.
2부. 비대칭 전력
애플리케이션이 프로덕션 네트워크에 배치돼 실제 사용자에게 노출된 후에는 이 부에서 소개하는 레시피들을 활용할 수 있다. 모든 레시피는 악성 행위에 대한 웹 트랜잭션을 분석하는 내용을 다룬다.
4장, ‘평판 및 타사 상관관계’에서는 알려진 악성 소스를 식별하고 접근을 제한하기 위해 타사 지리 데이터와 IP 주소 블랙리스트를 활용하는 방법을 보여준다.
5장, ‘요청 데이터 분석’에서는 데이터 획득, 정규화, 인바운드 HTTP 요청 분석을 위한 다양한 방법을 보여준다. 또한 비정상적인 요청 구조를 나타내는 일반적인 요청 이상 징후를 식별하는 방법도 설명한다.
6장, ‘응답 데이터 분석’에서는 5장과 유사한 기술을 보여주지만, 이번에는 HTTP 응답 데이터를 검사한다. 이 레시피에서 찾아낸 이상 징후들은 종종 애플리케이션 오류와 성공적인 애플리케이션 공격을 나타낸다.
7장, ‘인증 방어’에서는 사용자 계정을 열거하기 위한 무차별 대입 공격을 식별하고, 성공하거나 실패한 인증 시도를 추적하고, 사용자 애플리케이션을 추적하는 방법을 소개한다.
8장, ‘세션 상태 방어’에서는 애플리케이션 세션 관리와 관련된 보안 문제를 해결한다. 쿠키 변조와 세션 하이재킹 등의 공격을 설명한다.
9장, ‘애플리케이션 공격 방지’에서는 웹 애플리케이션 내에서 사용자의 입력 값을 어떠한 유효성 검증 없이 받아들이는 경우에 나타날 수 있는 문제점을 강조한다. SQL 인젝션, 원격 파일 포함, OS 명령 등의 공격에 대한 보호 정보를 제공한다.
10장, ‘클라이언트 공격 방지’에서는 크로스 사이트 스크립트, 사이트 간 요청 변조, 클릭 재킹과 같은 다양한 공격으로부터 웹 애플리케이션이 아닌 사용자를 보호하는 방법에 초점을 맞춘다. 또한 Zeus와 같은 뱅킹 트로이 목마에 대한 최첨단의 보안을 강조한다. 게다가 여러분의 웹 애플리케이션과 브라우저가 보안 정책에 협력할 수 있는 방법을 보여준다.
11장, ‘파일 업로드 방어’에서는 사용자가 여러분의 웹 애플리케이션에 파일을 업로드하도록 허용하는 것은 공격자가 악성코드를 사이트에 삽입할 수 있는 명백한 창을 제공하는 것임을 설명한다. 이 레시피들은 악성 데이터를 차단하기 위해 파일 첨부 업로드를 어떻게 분석하는지 보여준다.
12장, ‘접속률 및 애플리케이션 흐름 수행’에서는 비정상 요청률, 애플리케이션 흐름, 사용률 이상 징후를 식별하기 위해 다수의 클라이언트 요청으로부터 속성을 연관시키는 방법을 보여준다.
3부. 전술적 응답
여러분의 웹 애플리케이션 내에서 이뤄지는 악성 행위를 식별하고 나서 마주치는 논리적 질문은 ‘어떤 작업을 수행할 것인가’다. 이 책의 마지막 부에서는 서로 다른 응답 옵션을 잘 활용하는 방법을 강조한다.
13장, ‘수동적인 응답 액션’에서는 내부 로깅을 증가시키는 것과 같이 최종 사용자가 감지할 수 없는 다양한 애플리케이션 변화를 보여준다.
14장, ‘능동적인 응답 액션’에서는 트랜잭션 또는 최종 사용자에 대해 사용될 수 있는 좀 더 공격적인 방해 행동을 설명한다. 이는 연결을 드롭하거나 소스 IP를 일시적으로 블랙리스트 처리하거나 애플리케이션 사용자를 강제적으로 로그아웃시키는 것을 포함한다.
15장, ‘침입 응답 액션’에서는 기능을 검증하고 추가적인 소스 정보를 열거하기 위해 클라이언트 웹 브라우저 내의 정보를 검사하는 침입 방법을 설명한다.
목차
목차
- 1부. 전쟁 공간 준비
- 1장. 애플리케이션 요새화
- 레시피 1-1: 실시간 애플리케이션 프로파일링
- 레시피 1-2: 암호화 해시 토큰을 이용해 데이터 조작 방지
- 레시피 1-3: OWASP ModSecurity CRS 설치
- 레시피 1-4: 침입 탐지 시스템(IDS)의 시그니처와 통합
- 레시피 1-5: 베이지안(Bayesian) 공격 페이로드 탐지 사용
- 레시피 1-6: 전체 HTTP 감사 로깅을 활성화
- 레시피 1-7: 관련된 트랜잭션만 로깅
- 레시피 1-8: 정적 콘텐츠에 대한 요청인 경우 무시
- 레시피 1-9: 로그에서 중요한 데이터 난독화
- 레시피 1-10: Syslog를 사용해 중앙 로그 호스트에 경고 전송
- 레시피 1-11: ModSecurity의 AuditConsole 사용
- 2장. 취약점 확인 및 개선
- 레시피 2-1: 수동 취약점 확인
- 레시피 2-2: 능동적인 취약점 식별
- 레시피 2-3: 수동 스캔 결과 변환
- 레시피 2-4: 자동 스캔 결과 변환
- 레시피 2-5: 실시간 자원 평가 및 가상 패치
- 3장. 독을 품은 폰(해커 트랩)
- 레시피 3-1: 허니팟 포트 추가
- 레시피 3-2: ROBOTS.TXT에 가짜 DISALLOW 항목 추가
- 레시피 3-3: 가짜 HTML 주석 추가
- 레시피 3-4: 가짜 숨겨진 폼 필드를 추가
- 레시피 3-5: 가짜 쿠키 데이터를 추가
- 2부. 비대칭 전력
- 4장. 평판 및 서드파티 연관성
- 레시피 4-1: 클라이언트의 지리적 위치 정보 데이터 분석
- 레시피 4-2: 의심스러운 공개 프락시 사용 여부 식별
- 레시피 4-3: 실시간 블랙리스트 조회(RBL)
- 레시피 4-4: 자신만의 RBL을 실행
- 레시피 4-5: 악성 링크 탐지
- 5장. 요청 데이터 분석
- 레시피 5-1: 요청 바디 접근
- 레시피 5-2: 잘못된 요청 바디 식별
- 레시피 5-3: 유니코드 정규화
- 레시피 5-4: 다중 인코딩 사용을 식별
- 레시피 5-5: 비정상적인 인코딩 식별
- 레시피 5-6: 비정상적인 요청 메소드 식별
- 레시피 5-7: 잘못된 URI 데이터 검출
- 레시피 5-8: 비정상적인 요청 헤더 탐지
- 레시피 5-9: 추가 매개변수 탐지
- 레시피 5-10: 누락된 매개변수 탐지
- 레시피 5-11: 중복된 매개변수명 탐지
- 레시피 5-12: 비정상적인 매개변수 페이로드 크기 탐지
- 레시피 5-13: 비정상적인 매개변수 문자 클래스 탐지
- 6장. 응답 데이터 분석
- 레시피 6-1: 비정상적인 응답 헤더 탐지
- 레시피 6-2: 응답 헤더 정보 유출 탐지
- 레시피 6-3: 응답 바디 접근
- 레시피 6-4: 페이지 제목 변경 탐지
- 레시피 6-5: 페이지 크기 편차 검출
- 레시피 6-6: 동적 콘텐츠 변경 탐지
- 레시피 6-7: 소스 코드 유출 탐지
- 레시피 6-8: 기술적인 데이터 유출 탐지
- 레시피 6-9: 비정상적인 응답 시간 간격 탐지
- 레시피 6-10: 민감한 사용자 데이터 유출 탐지
- 레시피 6-11: 트로이 목마(Trojan), 백도어, 웹셸 접근 시도 탐지
- 7장. 인증에 대한 방어
- 레시피 7-1: 일반적/기본값을 가진 사용자 이름 제출 탐지
- 레시피 7-2: 다중 사용자명 제출 탐지
- 레시피 7-3: 실패한 인증 시도 탐지
- 레시피 7-4: 높은 비율의 인증 시도 검출
- 레시피 7-5: 인증 시도 상세 정보 정규화
- 레시피 7-6: 비밀번호 복잡성 강제화
- 레시피 7-7: 사용자명과 세션ID 연관
- 8장. 세션 상태에 대한 방어
- 레시피 8-1: 올바르지 않은 쿠키 탐지
- 레시피 8-2: 쿠키 임의 조작 탐지
- 레시피 8-3: 세션 타임아웃 적용
- 레시피 8-4: 세션 기간 동안 클라이언트 원본 위치 변경 탐지
- 레시피 8-5: 세션 유지 중 브라우저 핑거프린트 변경 탐지
- 9장. 애플리케이션 공격 방지
- 레시피 9-1: 비아스키 문자를 차단
- 레시피 9-2: 경로 탐색 공격 방지
- 레시피 9-3: 강제 브라우징 공격 방지
- 레시피 9-4: SQL 인젝션 공격 방지
- 레시피 9-5: 원격 파일 포함 공격 방지
- 레시피 9-6: OS 명령 공격 방지
- 레시피 9-7: HTTP 요청 스머글링 공격 방지
- 레시피 9-8: HTTP 응답 분할 공격 방지
- 레시피 9-9: XML 공격 방지
- 10장. 클라이언트 공격 방어
- 레시피 10-1: 콘텐츠 보안 정책 구현
- 레시피 10-2: 크로스 사이트 스크립팅 공격 방지
- 레시피 10-3: 사이트 간 요청 위조(CSRF) 방지
- 레시피 10-4: UI 리드레싱(클릭재킹) 공격 방지
- 레시피 10-5: 인터넷 뱅킹 트로이 목마 공격 탐지
- 11장. 파일 업로드 방어
- 레시피 11-1: 큰 파일 사이즈 탐지
- 레시피 11-2: 다수의 파일 탐지
- 레시피 11-3: 첨부된 파일에서 악성코드 검사
- 12장. 접속률 및 애플리케이션 절차 강화
- 레시피 12-1: 높은 애플리케이션 접속률 탐지
- 레시피 12-2: 요청/응답 지연 공격 탐지
- 레시피 12-3: 요청 간 시간 지연 이상점 파악
- 레시피 12-4: 요청 흐름 이상 식별
- 레시피 12-5: 리소스 사용률이 상당히 증가할 경우 탐지
- 3부. 전술적 응답
- 13장. 수동적인 응답 액션
- 레시피 13-1: 이상 징후 점수 추적
- 레시피 13-2: 감사 로그 트랩 및 추적
- 레시피 13-3: 이메일 경고 발행
- 레시피 13-4: 요청 헤더 태깅과 데이터 공유
- 14장. 능동적인 응답 액션
- 레시피 14-1: 오류 페이지로 리다이렉션 사용
- 레시피 14-2: 연결 드롭
- 레시피 14-3: 클라이언트 소스 주소 차단
- 레시피 14-4: 방어 조건 수준 변경을 통해 위치 정보별 접근을 제한
- 레시피 14-5: 강제적인 트랜잭션 지연
- 레시피 14-6: 성공적인 공격 스푸핑
- 레시피 14-7: 트래픽을 허니팟으로 프락싱
- 레시피 14-8: 애플리케이션 강제 로그아웃
- 레시피 14-9: 계정 접근을 일시적으로 잠금
- 15장. 침입 응답 액션
- 레시피 15-1: 자바스크립트 쿠키 테스트
- 레시피 15-2: CAPTCHA 테스트를 통한 사용자 검증
- 레시피 15-3: BeEF로 악성 클라이언트 후킹