Web Browser 0-day Hunting
 
강의 요약

    
    본 강의는 이미 오래전부터 현재까지도 심각한 보안 위협이 되어오고 있는 웹 브라우저 해킹에 대해 다루고 있습니다.
    웹 브라우저의 다양한 취약점 유형들과 발생 원리에 대해 알아보고, 특정 취약점을 분석하고 공격하는 것을 직접 실습해
    봄으로써 웹 브라우저 해킹 과정에 대해 구체적으로 이해할 수 있게 됩니다.
    기본적인 이해를 마친 후에는 0-day 헌팅 실습을 통해 추후 웹 브라우저 버그 헌터가 되기 위한 기초를 닦는 것을 목표로 하고 있습니다.
    


기본 정보


    • 강의명 : Web Browser 0-day Hunting
    • 강사 : 현성원 (sweetchip, 그레이해쉬 연구원)
        •Microsoft Internet Explorer 11 CMarkupPointer Use-After-Free Vulnerability (CVE-2014-1799, MS14-035)
        •Microsoft Internet Explorer 11 Ptls6::LsFmtText Out-Of-Bounds Read & RCE Vulnerability (CVE-2015-0037, MS15-009)
        •Microsoft Internet Explorer 9 Uninitialized Memory Reference (CVE-2015-1712, MS15-043)
        •Microsoft Internet Explorer 11 CTitleElement Use-After-Free.(CVE-2015-1714, MS15-043)
        •Microsoft Internet Explorer 11 Memory Corruption (CVE-2015-2447, MS15-079)

    • 강의 일정 : 2016년 5월 16일(월) ~ 5월 18일(수)
    • 강의 시간 : 매일 오전 10시~오후 6시
    • 강의 장소 : 분당구 정자동 Grayhash 트레이닝룸 [위치보기]
    • 수강 정원 : 12명 (최소 인원 8명)
    • 강의 비용 : 1,500,000원 (VAT 별도)
    • 중식 및 다과 제공
    


주요 교육 내용

    
    •웹 브라우저 해킹 기초 설명
    •과거 주요 공격 사례 소개
    •웹 브라우저 취약점 발생 유형 설명
    •웹 브라우저 해킹 실습
    •웹 브라우저의 작동 원리 이해
    •웹 브라우저 Fuzzer 제작 실습
    •웹 브라우저 보호체계 무력화
    •그 외 웹 브라우저 해킹 관련 이슈들 소개
    


상세 교육 내용


    1일차 - Web Browser Hacking (Basic)
    

    [OT]

    •트레이닝 소개
    •웹 브라우저 해킹 연구 시작 계기
    


    [기초 설명]

    •웹 브라우저 해킹 관련 기본 용어 소개
    •과거 주요 공격 사례 소개
    •웹 브라우저 취약점 발생 유형 설명
        •Buffer OverFlow
        •Out-Of-Bound Access
        •Use-After-Free
        •Type Confusion
        •그 외 (race condition, uninitialized memory, integer overflow)
    •웹 브라우저 취약점 공략 방법 설명
    •공개 웹 브라우저 취약점 찾아보기
        • Exploit DB, Chromium, Project Zero, ETC

    [웹 브라우저 해킹 실습]
    
    •Windows XP + IE8 취약점 공격 실습
        •취약점 발생 원리 설명
        •gflags.exe – full page heap, stack trace의 이해
        •Heap Spray의 이해
        •windbg를 이용한 디버깅 실습
        •쉘 코드 및 공격코드 작성 실습

     •Windows XP + IE8 메모리 보호기법 우회 실습
        •메모리 보호기법(DEP) 우회법 설명 및 실습
        •ROP(Return Oriented Programming) 공격 실습
    


    2일차 - Web Browser Hacking (0-day Hunting)

    [기반 지식 설명]

    •HTML, 자바스크립트 기초
    •웹 브라우저의 구조, DOM의 구조, Element의 이해
    •IE의 객체 생성 및 해제 구조, LFH에 대한 이해

    [Fuzzer 제작 실습]

    •Fuzzing 원리 설명
        •파일 생성형 Fuzzer
        •Javascript 실행형 Fuzzer

    • 공개 웹 브라우저 Fuzzer 작동원리 분석
        •온라인에 공개된 최신 Fuzzer들 소개
        •Grinder 소개
        •Fuzzer 사용 실습

     •Crash 분류하기
        •Crash 분류하기
        •Null-pointer dereferece Crash 이슈
        •다양한 Crash Case 소개
        •Reproduce Issue 설명

    •Fuzzer 제작 팁

    •Fuzzer Server (testcase 생성) 동작 설계
        •기본적인 틀 만들어보기
        •testcase 생성 아이디어

    •Fuzzer Client 동작 설계
        •Gflags - PageHeap, Memory Protection Issue

    


    3일차 - Web Browser Hacking (Advanced)

    [웹 브라우저 보호체계 무력화]

    •IE Memory Protection & Bypass
        •VTGuard 설명
        •VTGuard 우회법 설명
        •Isolated Heap 설명
        •Isolated Heap 우회법 설명
        •Protected Free 설명
        •Isolated Heap / Protected Free 우회 실습

    •다양한 Memory Leak 방법들
        •Memory Leak 취약점 Case Study
        •Memory Leak 취약점을 이용한 Exploit Case Study
        •OOB Read/Write 취약점 Case Study
        •Flash 등 3rd party 취약점 Case Study

    •Sandbox Escape에 대하여
        •Kernel Vulnerability 취약점 Case Study
        •Sandbox Vulnerability 취약점 Case Study


    [Case Study]

    •PWN2OWN에서 사용된 취약점들 분석

    [Bug Bounty 프로그램]

    •Bug Bounty 소개
        •HP ZDI 제보 방법 및 절차
        •MSRC 제보 방법 및 절차
        •그외 버그바운티 프로그램 소개

    


    * 상기 1~3일차 교육 내용은 상황에 따라 일부 변동될 수 있습니다.

교재 및 실습 장비 목록

    [교재]
    • 강의 PPT

    [기타]
    • 수료증(certificate) 발급

교육자 준비사항


    •노트북
    •Software : PowerPoint 혹은 Acrobat Reader, Vmware
    •사전지식 : 어셈블리어 기초
    



트레이닝 수강 후기

    * 김선우IE zeroday를 지속적으로 찾아왔던 깊은 내공의 강사님으로부터 노하우를 많이 배울 수 있었습니다. fuzzer로 찾은 crash가 나는 html로 부터 시작하여 ROP gadget 을 도출하고 ROP chain을 구성하여 외부 계산기 프로그램을 띄우는 것까지 실습을 하였고 DEP/ASLR 및 기타 메모리 보호기법이 사용되는 경우에도 exploit관련 내용을 배우는 유익한 시간이었습니다.
    * 김**국내 어디에서도 들을수 없는 강의라고 생각됩니다. 강사님은 교육 커리큘럼대로 충실히 강의 해주셨고, 교육생들에게 이해시켜 주기위해 노력한것 같습니다. 다만 아쉬점은 강의실에 있던 다과는 다양했으면 좋겠습니다. 3일간 같은 과자만 먹었더니 지겨웠습니다. ㅋㅋㅋㅋ
    * 신승민정말 황금연휴에 찾아가서 교육을 들은 보람이 있는 강의였습니다. 커리큘럼에 있는 내용을 정말 하나도 빠짐없이 강의해주시고 기본적인 개념 설명부터 해주셔서 저같이 잘 모르는 사람도 이해할 수 있었습니다. 물론 개념적으로... 이 강의를 완벽하게 이해하려면 리버싱이나 기본적인 취약점 원리에 대한 이해와 실습이 선행되면 좋을 것 같습니다. 3일간 수고하셨고 앞으로도 좋은 강의 계속 부탁드립니다.
    * 장**트레이닝 시작 전 이해를 못할 수 있는 상황 때문에 걱정을 했었으나, 결과적으로 3일 동안 강의를 들으면서 이해가 되지 않은 부분이 없었습니다. 강의를 진행하시면서, 이해가 되지 않은 부분을 질문하면 바로바로 친절하게 답변해주시고, 강의 내용처럼 정말 쉽게 이해시켜 주셨습니다. 또, 흥미로운 강의 내용뿐만 아니라, 강사님께서 브라우저 취약점을 찾으시면서 겪으신 경험도 알려주셨는데, 브라우저 버그 헌팅에 대해 알아가는 데에 정말 큰 도움이 되었고, 엄청 엄청 재밌었습니다.ㅋㅋㅋ 앞으로도 좋은 강의 부탁드려요!!
    * 이**버그 헌팅 초보인데, 많은 리버싱 팁과 노하우를 전해들을 수 있어서 좋았습니다. 브라우저 제로데이를 찾는 데 있어서 시야를 넓히는데 많은 도움이 된 것 같습니다. 질문도 많이 했는데 친절하게 답변해주셔서 감사합니다. 다음에 또 듣고 싶어지는 강의였습니다.
    * 박성현웹브라우저 버그헌팅에 관심있는 사람이라면 매우 유익한 강의가 될 것 같습니다. 보호기법이 적용되지 않은 기초적인 브라우저 해킹 기법부터, 방어기법 우회까지 모두 배울 수 있었습니다. 또 앞으로 웹브라우저 버그헌팅을 위해서 알아야할 여러가지 퍼징 기법들이나 공격방법 및 강사님의 노하우 등을 알 수 있는 유익한 시간이 되었습니다. 3일동안의 시간을 통해 앞으로 제가 공부해나가야할 방향등을 찾을 수 있다는 점이 제일 좋았습니다!
    * 이**교육듣기전에 버그 헌팅 개론에 대해서만 알았었습니다만 크래쉬부터 직접 계산기까지 뛰우는 실습을 통해 어떤식으로 Exploit하는지를 조금이나마나 이해가 되었고, 버그 헌팅을 어떻게 진행하고, 신고하는 절차에 대해 자세하게 배울 수 있었던 시간이였습니다. 앞으로 이런 강사님의 노하우를 듣는 수업이 많았으면 좋겠습니다.
    * 이**교육듣기전에 버그 헌팅 개론에 대해서만 알았었습니다만 크래쉬부터 직접 계산기까지 뛰우는 실습을 통해 어떤식으로 Exploit하는지를 조금이나마나 이해가 되었고, 버그 헌팅을 어떻게 진행하고, 신고하는 절차에 대해 자세하게 배울 수 있었던 시간이였습니다. 앞으로 이런 강사님의 노하우를 듣는 수업이 많았으면 좋겠습니다.
    * 오**단순한 IE Browser 버그헌팅 뿐만 아니라, 윈도우 프로그램 Exploit의 과정을 전반적으로 알 수 있었습니다.
또한 IE에서 발생하는 Heap관련 취약점을 분석하는 과정과 순서 및 디버깅 방법에 대해서 배울 수 있었습니다.
버그헌팅의 실질적인 절차와, Fuzzing 그리고 Mitigation Bypass까지 총체적으로 배울 수 있는 좋은 강의였습니다.
    * ㅇㅇTt
    * sdfssdf
    * **숙Exploit에 대하여 초급 부터 중상급까지 수강가능한 커리큘럼으로 구성되어져 있어 만족스럽게 수강하였습니다. 강사님의 친절하고 깊이 있는 설명으로 exploit 실습까지 경험 할 수 있는 좋은 기회였든거 같습니다. IE뿐만 아니라 다른 주제로 또 다른 강의를 기대해봅니다.
    * *지*브라우저 버그 헌팅이 굉장히 매력적이었습니다. 제로데이 취약점이 있는 IE 버전이나 크롬에서 퍼징을 통해 취약점을 찾고 분석한 다는 것이 매우 흥미로웠습니다. 사전 공부를 더 철저히 하고 덤벼 들었다면 3일을 30일처럼 활용할 수 있었을 텐데 저의 개인적인 역량이 아쉬울 뿐이었네요.
열정적인 강사님 수업 너무 감사했습니다.
    * 송재훈취약점과 메모리 보호기법 우회등 여러가지 최신정보 들을 잘들었습니다. 후에 IE외에도 여러 브라우저 취약점 분석 기회가 있었으면 더 좋겠습니다. 감사합니다.
    * pHqghUme555
    * pHqghUme555
    * pHqghUme555
    * pHqghUme555
    * pHqghUme555
    * pHqghUme555
    * pHqghUme555
    * pHqghUme555
    * pHqghUme555
    * pHqghUme555
    * pHqghUme555
    * pHqghUme555
    * pHqghUme555
    * pHqghUme555
    * pHqghUme555
    * pHqghUme555
    * pHqghUme555
    * pHqghUme555
    * pHqghUme555
    * pHqghUme555
    * pHqghUme555
    * pHqghUme555
    * pHqghUme555
    * pHqghUme555
    * pHqghUme555
    * pHqghUme555
    * pHqghUme555
    * pHqghUme555
    * pHqghUme555
    * pHqghUme555
    * pHqghUme555
    * pHqghUme555
    * pHqghUme555
    * pHqghUme555
    * pHqghUme555
    * pHqghUme555
    * pHqghUme555
    * pHqghUme555
    * pHqghUme555
    * pHqghUme555
    * pHqghUme555
    * pHqghUme555
    * pHqghUme555
    * pHqghUme555
    * pHqghUme555
    * pHqghUme555
    * pHqghUme555
    * pHqghUme555
    * pHqghUme555
    * pHqghUme555
    * pHqghUme555
    * pHqghUme555
    * pHqghUme555
    * pHqghUme555
    * pHqghUme555
    * pHqghUme555
    * pHqghUme555lkQDKuan
    * pHqghUme555
    * pHqghUme-1 OR 2+590-590-1=0+0+0+1 --
    * pHqghUme-1 OR 2+571-571-1=0+0+0+1
    * pHqghUme-1' OR 2+406-406-1=0+0+0+1 --
    * pHqghUme-1' OR 2+385-385-1=0+0+0+1 or 'ir3FqWG8'='
    * pHqghUme-1" OR 2+686-686-1=0+0+0+1 --
    * pHqghUme555*if(now()=sysdate(),sleep(15),0)
    * pHqghUme5550'XOR(555*if(now()=sysdate(),sleep(15),0))XOR'Z
    * pHqghUme5550"XOR(555*if(now()=sysdate(),sleep(15),0))XOR"Z
    * pHqghUme(select(0)from(select(sleep(15)))v)/*'+(select(0)from(select(sleep(15)))v)+'"+(select(0)from(select(sleep(15)))v)+"*/
    * pHqghUme555-1; waitfor delay '0:0:15' --
    * pHqghUme555-1); waitfor delay '0:0:15' --
    * pHqghUme555-1 waitfor delay '0:0:15' --
    * pHqghUme555XklvWzoM'; waitfor delay '0:0:15' --
    * pHqghUme555-1 OR 693=(SELECT 693 FROM PG_SLEEP(15))--
    * pHqghUme555-1) OR 252=(SELECT 252 FROM PG_SLEEP(15))--
    * pHqghUme555-1)) OR 657=(SELECT 657 FROM PG_SLEEP(15))--
    * pHqghUme555IwZTyQDI' OR 934=(SELECT 934 FROM PG_SLEEP(15))--
    * pHqghUme555JSk17vhm') OR 741=(SELECT 741 FROM PG_SLEEP(15))--
    * pHqghUme555Cnl2aucD')) OR 116=(SELECT 116 FROM PG_SLEEP(15))--
    * pHqghUme555*DBMS_PIPE.RECEIVE_MESSAGE(CHR(99)||CHR(99)||CHR(99),15)
    * pHqghUme555'||DBMS_PIPE.RECEIVE_MESSAGE(CHR(98)||CHR(98)||CHR(98),15)||'
    * pHqghUme555'"
    * pHqghUme555%2527%2522\'\"
    * pHqghUme@@xOonF
    * pHqghUme555
    * pHqghUme555
    * pHqghUmeBisy4GR8555
    * pHqghUme555
    * -1 OR 2+403-403-1=0+0+0+1 --555
    * -1 OR 2+144-144-1=0+0+0+1555
    * -1' OR 2+185-185-1=0+0+0+1 --555
    * -1' OR 2+461-461-1=0+0+0+1 or 'So5C9lXR'='555
    * -1" OR 2+236-236-1=0+0+0+1 --555
    * if(now()=sysdate(),sleep(15),0)555
    * pHqghUme0'XOR(if(now()=sysdate(),sleep(15),0))XOR'555
    * pHqghUme0"XOR(if(now()=sysdate(),sleep(15),0))XOR"555
    * (select(0)from(select(sleep(15)))v)/*'+(select(0)f555
    * pHqghUme-1 waitfor delay '0:0:15' --555
    * pHqghUmejnS4EClM'; waitfor delay '0:0:15' --555
    * pHqghUmez0U6gP39' OR 198=(SELECT 198 FROM PG_SLEEP555
    * pHqghUmeALK1hIUO') OR 264=(SELECT 264 FROM PG_SLEE555
    * pHqghUmeVG2UNq7Q')) OR 493=(SELECT 493 FROM PG_SLE555
    * pHqghUme'||DBMS_PIPE.RECEIVE_MESSAGE(CHR(98)||CHR(555
    * pHqghUme'"555
    * pHqghUme%2527%2522\'\"555
    * @@Lpp45555
    * pHqghUme555
  * 작성자:       * 소속:       * 이메일:
   (성함, 혹은 닉네임을 입력해주세요. 입력해주신 정보들 중 작성자와 후기만 공개됩니다.)