이미 소장하고 있다면 판매해 보세요.
|
1장 Ajax 보안 소개
Ajax 첫걸음 Ajax란 무엇인가? 비동기 방식 자바스크립트 XML DHTML(다이내믹 HTML) Ajax 아키텍처로의 패러다임 전환 무거운 클라이언트 아키텍처 가벼운 클라이언트 아키텍처 Ajax: 아키텍처계의 금발 미녀 보안 관점에서 본 무거운 클라이언트 애플리케이션 보안 관점에서 본 가벼운 클라이언트 애플리케이션 보안 관점에서 본 Ajax 애플리케이션 보안 취약점의 재앙 복잡도, 투명성 그리고 규모의 확장 사회학적인 이슈 Ajax 애플리케이션: 매력적인 전략 목표 결론 2장 보이지 않는 도둑 이브 HighTechVacations.net 해킹 쿠폰 시스템 해킹 클라이언트단 데이터 바인딩 공격 Ajax API 공격 보이지 않는 도둑 3장 웹 공격 공격의 종류 리소스 열거 파라미터 조작 그 밖의 공격 방법 크로스 사이트 요청 변조 피싱 서비스 거부 공격 리소스 열거와 파라미터 조작으로부터 보호하라 보안 소켓 계층 결론 4장 Ajax 공격 영역 공격 영역의 이해 전통적인 웹 애플리케이션 공격 영역 폼 입력 쿠키 헤더 숨겨진 폼 입력 쿼리 파라미터 업로드 파일 전통적인 웹 애플리케이션 공격: 성적표 웹 서비스 공격 영역 웹 서비스 메소드 웹 서비스 정의 Ajax 애플리케이션 공격 영역 Ajax 애플리케이션 공격 영역의 근원 해커에게 최고의 먹잇감 적절한 입력 확인 블랙리스트와 특별 조치의 문제 병 대신 병의 징후 다루기 화이트리스트 입력 검증 정규 표현 입력 검증에 대한 숙고 리치 사용자 입력 검증 마크업 언어 검증 이진 파일 검증 자바스크립트 소스코드 검증 시리얼라이즈 데이터 검증 사용자 지원 콘텐츠의 신화 결론 5장 Ajax 코드 복잡도 다양한 언어와 구조 배열 인덱싱 스트링 연산 코드 주석 다른 사람의 문제 자바스크립트와 관련해 인터프리트, 컴파일이 아니야 약한 타입 체크 비동기 경쟁 상태 데드락과 철학자의 식사 문제 클라이언트단 동기화 누구의 조언을 듣느냐가 중요하다 결론 6장 Ajax 애플리케이션의 투명성 블랙박스와 화이트박스 예: MyLocalWeatherForecast.com을 'Ajax'로 비교 API로서의 웹 애플리케이션 데이터 타입과 메소드 시그너처 보안과 관련한 특정 오판 부당한 인증 기능이 나뉜 서버 API 자바스크립트에서의 세션 상태 저장 민감한 정보가 사용자에게 노출될 때 클라이언트단 코드에 있는 주석과 문서화 클라이언트단에서 수행하는 데이터 변환 모호함을 통한 보안 난독화 결론 7장 Ajax 애플리케이션 하이재킹 Ajax 프레임워크의 하이재킹 실수로 인한 함수 덮어쓰기 함수 덮어쓰기의 예 주문형 Ajax의 하이재킹 JSON API의 하이재킹 객체 리터럴의 하이재킹 JSON 하이재킹이 가능한 이유 JSON 하이재킹을 막자 결론 8장 클라이언트단 스토리지 공격 클라이언트단 스토리지 시스템 개관 일반적인 클라이언트단 스토리지 보안 HTTP 쿠키 쿠키 접근 제어 규칙 쿠키의 생존시간 쿠키 스토리지에 대한 추가 기억사항 쿠키 스토리지 요약 플래시 로컬 공유 객체9 플래시 로컬 공유 객체 요약 DOM 스토리지 세션 스토리지 글로벌 스토리지 DOM 스토리지의 구멍 DOM 스토리지 보안 DOM 스토리지 요약 인터넷 익스플로러 userData 보안 요약 일반적인 클라이언트단 스토리지 공격법과 대처법 크로스 도메인 공격 크로스 디렉토리 공격 크로스 포트 공격 결론 9장 오프라인 Ajax 애플리케이션 오프라인 Ajax 애플리케이션 구글 기어 자체 보안 기능과 구글 기어의 단점 작업풀의 이용 LocalServer 데이터의 노출과 감염 구글 기어 데이터베이스로의 직접 접근 SQL 인젝션과 구글 기어 클라이언트단 SQL 인젝션도 위험한가? DOJO.OFFLINE 키를 안전하게 데이터를 안전하게 패스워드의 선택이 멋진 키를 좌우한다 클라이언트단 입력을 검증하자 오프라인 애플리케이션에 대한 그 밖의 접근법 결론 10장 요청 출처 이슈 로봇, 스파이더, 브라우저, 크롤러 안녕, 내 이름은 파이어폭스야. 청크화된 인코딩, PDF도 좋아하고 해변에서 오랫동안 산책하는 것도 좋아해 요청 출처 불확정성과 자바스크립트 웹 서버 관점에서 본 Ajax 요청 당신일까, 당신을 가장한 누구쿀까 자바스크립트로 HTTP 요청 보내기 pre-Ajax 세계에서의 자바스크립트 HTTP 공격 XMLHttpRequest로 콘텐츠 사냥하기 XSS/XHR 조합 공격 방어 결론 11장 웹 매시업과 애그리게이터 머신에서 활용하는 인터넷 데이터 90년대 초기: 웹의 시대가 오다 90대년 중반: 머신 웹의 탄생 2000년대: 머신 웹의 성숙기 공개적으로 사용 가능한 웹 서비스 매시업: 웹의 프랑켄슈타인 ChicagoCrime.org HousingMaps.com 그 밖의 매시업 매시업 생성 매시업과 Ajax 브리지, 프록시, 게이트웨이 - 이런! Ajax 프록시 대안 Ajax 프록시 공격 HousingMaps.com? 매시업의 입력 검증 애그리게이트 사이트 보안과 신뢰가 떨어지는 상황 결론 12장 프리젠테이션 계층에 대한 공격 프리젠테이션의 콘텐츠 괴롭히기 프리젠테이션 계층에 대한 공격 캐스케이딩 스타일시트에서 정보 가져오기 해킹을 보고 느껴라 발전된 형태의 해킹을 보고 느껴라 삽입된 프로그램 로직 캐스케이딩 스타일시트 요소 브라우저 캐시 수정 프리젠테이션 계층 공격 방지 결론 13장 자바스크립트 웜 자바스크립트 웜 개요 기존의 컴퓨터 바이러스 자바스크립트 웜 자바스크립트 웜의 구성 자바스크립트의 한계 자바스크립트 웜의 복제 자바스크립트 웜 실행부 중간 정리 사례 연구: 새미 웜 어떻게 동작하는가 바이러스 실행부 새미 웜에 대한 결론 사례 연구: 야매너 웜(JS/Yamanner-A) 어떻게 동작하는가 바이러스 실행부 야매너 웜에 대한 결론 실제 자바스크립트 웜에서 배우는 교훈 결론 14장 Ajax 애플리케이션 테스트 블랙 매직 모든 사람이 웹 브라우저를 이용해 웹 서핑을하는 것은 아니다. Catch-22 보안 테스트 도구 ― 혹은 왜 실제 삶이 할리우드 같지 않은가? 사이트 목록 생성 취약점 탐지 분석 도구: Sprajax 분석 도구: Paros Proxy 분석 도구: LAPSE 분석 도구: WebInspect™ 보안 테스트에 대한 숙고 15장 Ajax 프레임워크 분석 ASP.NET ASP.NET AJAX(이전에 ATLAS) ScriptService 보안성 비교: UpdatePanel과 ScriptService ASP.NET AJAX와 WSDL ValidateRequest ViewStateUserKey ASP.NET 환경설정과 디버깅 PHP Sajax Sajax와 크로스 사이트 요청 변조 Java EE DWR 자바스크립트 프레임워크 클라이언트단 코드에서 주의할 사항 Prototype 결론 부록 A 새미 웜 소스코드 부록 B 야매너 웜 소스코드 |
|
안전하고 견고한 Ajax 웹 애플리케이션을 제작해야 하는 웹 개발자라면 누구나 꼭 알아야 할 Ajax 관련 보안 취약점을 알기 쉽게 설명한 실용 가이드. Ajax 애플리케이션의 잠재적 보안 문제를 제시하고 해결하며, 좀 더 견고하고 안전한 코드를 작성하기 위한 지침을 알려준다. 또 프로토타입, DWR, ASP.NET AJAX 등 잘 알려진 Ajax 프레임워크에서 지원하는 보안 프레임워크와 개발자가 추가로 개발해야 하는 사항도 다룬다.
★ 이 책에서 다루는 내용 ★ ■ 관련 기능을 세분화해 제공하는 웹 서비스에서 발생하는 문제, 애플리케이션 제어 절차 조작, 프로그램 로직 조작 등의 피해를 최소화하는 법 ■ 자바스크립트 하이재킹, 영속적인 스토리지 강탈, 매시업 악용 등 Ajax 공격 방지법 ■ 단 두 번의 요청으로 백엔드 DB 전체 내용을 추출할 수 있는 Ajax 기반 SQL 인젝션 변종 형태의 공격 등 XSS와 SQL 인젝션 기반 공격을 피하는 방법 ■ 구글 기어와 도조(Dojo)를 이용한 보안 오프라인 Ajax 애플리케이션 개발 방법 ■ 프로토타입(Prototype), DWR, ASP.NET AJAX 같은 Ajax 프레임워크에 보안 개념을 적용하고 프레임워크의 보안상 취약한 부분을 파악하고 보안 코드를 작성하는 방법 ■ 새로 작성하는 Ajax 코드를 좀 더 안전하게 작성하는 방법. 기존 코드에 있는 보안 문제를 감지, 수정하는 방법 ★ 이 책의 대상 독자 ★ 『Ajax 보안』은 Ajax 애플리케이션을 개발하고 유지보수할 사람이나, 새로운 Ajax 소프트웨어를 기획하고 설계할 사람, QA 전문가에서 문제를 점검하는 테스터에 이르기까지 모든 보안 전문가는 물론, 웹 개발자들도 꼭 읽어야 할 필독서다. ★ 저자 서문 ★ Ajax는 사람들이 웹 애플리케이션을 구성하고 배포하는 방식을 완전히 바꿨다. 웹 브라우저가 웹 서버 위에 구축된 강력한 애플리케이션을 사용하기 위해 단순한 벙어리 같은 터미널로서 동작하던 시대는 지나갔다. 오늘날에는 데스크탑 프로그램처럼 반응하는 Ajax 애플리케이션이 클라이언트와 서버의 기능을 모두 이용해 구현될 수 있다. 구글과 야후 같은 회사뿐만 아니라 오픈소스 커뮤니티의 개발자가 클라이언트 측 저장소, 오프라인 웹 애플리케이션, 풍부한 Web API 등 새로운 기능을 선보이며 Ajax의 지평을 넓히는 것을 날마다 보고 있다. 웹 프로그래머와 보안 연구자로서 우리는 쿨한 새로운 애플리케이션과 기술을 가능한 한 많이 배우려고 경주해왔다. 그러나 Ajax가 제공하는 모든 가능성에 흥분하면서도 한편으로는 찜찜한 기분을 떨쳐버릴 수가 없었다. 그 누구도 이 새로운 애플리케이션 구조의 보안상의 반향에 대해 이야기하는 사람이 없었기 때문이다. SQL 인젝션 또는 크로스 사이트 스크립팅과 같은 위험한 보안 취약요소에 좀이 먹힌 예제 코드, 별로 좋지 않은 조언을 해주는 전문가와 그들이 제시하는 자료는 그럴 듯하지만 문제점을 쉽게 찾을 수 있다. 좀 더 언급하자면 잘 알려진 웹 취약점을 무시하거나 부록으로 언급을 미루는 경우가 많다. 그뿐 아니라 너무 낮은 하위 레벨의 웹 서비스를 제공하거나 애플리케이션 흐름제어 조작, 안전하지 않은 방법으로 매시업 프로그램 개발, 우회 가능한 인증 메카니즘을 사용하는 등 더 큰 보안상의 문제가 있음을 알게 됐다. Ajax는 데스크탑과 웹 애플리케이션으로부터 사용성의 장점을 상속받은 동시에 두 세계의 보안 취약점을 모두 물려받았다. 대부분의 개발자에게 보안은 여전히 사후의 문제인 것 같다. 이제, 사고방식이 바뀌어야 한다. 이 책은 최신의 강력한 Ajax 기능을 자신의 애플리케이션에 적용해봄과 동시에 개인적, 금전적 목적을 위해 프로그램의 약점을 찾는 사악한 해커의 먹잇감이 되지 않도록 안전하게 개발하고 싶은 Ajax 개발자를 위한 책이다. 본문에서는 Ajax 애플리케이션의 잠재적 보안 문제를 제시할 뿐만 아니라 그 문제를 해결하고 좀 더 견고하며 안전한 코드를 작성하기 위한 지침을 주고자 한다. 또 프로토타입(Prototype), DWR, 마이크로소프트 ASP.NET AJAX 같은 잘 알려진 Ajax 프레임워크에서 지원하는 보안 프레임워크와 개발자가 추가로 개발해야 하는 사항도 다룰 것이다. 또한 품질 보증 엔지니어와 시장 점유율 테스터에게도 도움이 될 것이다. 우리는 Ajax 애플리케이션에서 자주 보이는 약점과 보안상 결함에 대한 정보를 제공하려고 노력해왔다. 이 책은 Ajax 애플리케이션 감사를 위해 테스트를 진행하면서 부딪칠 문제들, 즉 웹 애플리케이션의 저장 위치를 찾는다든지 결함을 탐지하는 방법에 대해서 기술한다. 이런 도전적인 과제를 완수하는 데 도움을 줄 수 있는 도구를 검토할 것이다. 마지막으로 자바스크립트 하이재킹, 영속적인 저장공간 훔치기, 매시업 공격과 같은 공격 기술도 살펴본다. 그리고 단 두 번의 웹 요청만으로 전체 백엔드 데이터베이스를 뽑아낼 수 있는 단순한 Ajax 기반의 SQL 인젝션 기법처럼 익숙한 공격에 대해 새로운 시각도 제시할 것이다. 이 책은 Ajax나 웹 프로그래밍에 대해 알려주는 책은 아니다. 기술적인 내용은 이미 어느 정도 알고 있으리라 가정한다. 여기서는 보안에 취약한 Ajax 애플리케이션을 설계하고 제작하는 것에 대한 문제점과 실수에 초점을 맞추고 어떻게 하면 안전한 Ajax 애플리케이션을 개발할 수 있는지 조언한다. 이 책은 특정 프로그래밍 언어를 한정하거나 서버 측 애플리케이션을 특정 언어로 작성하도록 유도하지 않을 것이다. 우리는 HTTP, HTML, CSS, 자바스크립트 등 모든 Ajax 애플리케이션이 공통으로 사용하는 컴포넌트를 기준으로 이야기를 진행할 것이다. 웹 서버 코드의 보안에 관해 조언을 할 경우에는 어느 언어로든 작성 가능한 정규 표현식 또는 문자열 연산 함수 같은 기법을 사용할 것이다. 이 책은 개발자와 테스트 모두에게 도움이 되는 자료를 많이 제공할 것이다. 마이스페이스(MySpace)의 새미(Samy)와 야후(Yahoo)의 야매너(Yamanner) 웜과 같은 사례를 가지고 실제 Ajax 애플리케이션과 그것들이 어떻게 해킹을 당했는지 살펴볼 것이다. 온라인 여행 예약 사이트 같은 샘플 애플리케이션과 예제를 가지고 어떻게 Ajax 애플리케이션을 안전하게 할 수 있는지 테스터와 개발자에게 지침을 제공할 것이다. 이 책은 처음부터 끝까지 통독하는 편이 좋지만 각 장은 독립적이다. 특정 Ajax 프레임워크의 보안 이슈 분석(15장 참조) 같은 특정 주제를 먼저 보고 싶다면 순서에 관계없이 바로 넘어가도 괜찮다. Ajax는 웹 애플리케이션을 제작하기 위한 흥미롭고 새로운 철학을 제시했다. 이 책은 보안의 관점에서 Ajax가 어리석거나 타당치 않은 기술이므로 버리자는 얘기를 하는 것이 절대로 아니다. 우리는 강력하고 풍부한 기능을 바탕으로 최대한 유용하면서도 악의적인 공격으로부터 견고한 Ajax 애플리케이션을 제작하는 방법을 제시할 것이다. 즐거운 시간이 되길 바라며, 빌리와 브라이언으로부터 ★ 옮긴이의 말 ★ 대학에 입학했을 무렵 터미널실에서 인터넷을 처음으로 사용해 봤습니다. 워크스테이션에 붙은 터미널에서 웹 브라우저를 띄워가며 세계의 여러 정보를 접할 수 있다는 사실이 신기했습니다. 너도 나도 인터넷 인터넷 하지만 정작 쓸 줄 아는 사람은 많지 않았고 대학교에서도 환경이 열악했기에 인터넷 환경을 접하기란 그리 쉽지 않았습니다. 하지만 지금의 인터넷 환경을 보면 정말 그런 시절이 있었나 하는 생각이 듭니다. 인터넷 환경이 발전하면서 사회 생활과 문화 전반이 엄청나게 바뀌었습니다. 웹으로 수업 등록도 하고 물건도 사고 TV도 볼 수 있는 시대가 됐습니다. 세월과 함께 사람들의 요구도 증대했습니다. 좀더 화려한, 좀더 풍부한 웹 콘텐츠를 원하는 사람들의 요구에 웹 기술도 발전해 왔습니다. 이 때 등장한 것이 바로 Ajax입니다. Ajax는 비동기성과 부분 업데이트로 인해 더 빠르고 동적인 콘텐츠를 제공하는 기술로 부각됐습니다. 검색어 자동완성이나 구글맵에 쓰인 기능을 보며 사람들은 감탄을 금치 못했습니다. 너도 나도 Ajax에 관심을 갖게 됐고 많은 책들이 쏟아져 나왔습니다. 그러나 새로운 기술에 열광하다 보면 자칫 기술이 갖는 문제점을 간과하기 쉽습니다. 'Ajax는 최신 기술인데 무슨 문제가 있겠어요?' 이런 생각에 일침을 가하는 것이 바로 『Ajax 보안』입니다. Ajax는 최신 기술이긴 하지만 기존 웹 애플리케이션과 웹 서비스가 지닌 보안 문제를 그대로 가지고 있습니다. 저자는 실제 발생했던 사례와 일상 생활의 비유를 들어가며 Ajax에서 발생하는 보안 문제를 설명합니다. 이 책의 전반부는 기존의 웹 애플리케이션과 웹 서비스가 갖고 있는 보안 취약성을 설명합니다. 그리고 Ajax에서도 여전히 해당 문제가 나타나고 있음을 보이고 있습니다. 후반부에는 Ajax를 쓰면서 발생하는 문제와 해법을 제시하고 있습니다. Ajax를 사용하는 개발자나 보안에 관심이 있으신 분은 이 책을 통해 보안과 관련된 폭넓은 지식을 얻고 문제가 발생하는 상황의 이해와 해결책을 찾을 수 있으리라 생각합니다. 이 책이 여러분의 애플리케이션을 좀더 안전하고 견고하게 만드는 데 도움이 되면 좋겠습니다. |