비박스를 이용한 웹 보안 실습 HTML 코드 인젝션 (Injection) 공격과 대응 비박스를 이용한 웹보안 실습OWASP / Injection Injection 이란 ? 공격자가 악의적으로 주입한 데이터 를 애플리케이션이 정상적으로 인식하여 실행 하여 공격하는 것 . 공격방법이나 사용언어에 따라 종류가 달라진다 . SQL Injection, HTML Injection, OS Command Injection, LDAP ( 디렉토리 서비스 ) Injection 등이 있다 . 비박스를 이용한 웹보안 실습HTML Injection Code Injection 의 하위 개념이다 . 취약한 매개변수에 악의적인 HTML 코드를 삽입하는 공격이다 . 공격자는 사용자가 연결을 요청한 페이지에 HTML Tag 를 삽입한다 . 의도하지 않은 내용을 보게 하거나 , 악의적인 사이트에 연결한다 . 비박스를 이용한 웹보안 실습반사 (Reflected) 기법 HTML Injection 기법중의 하나이다 . URL 에 악의적인 HTML Tag 를 삽입한다 . 링크를 클릭한 사용자의 PC 에서 HTML 태그가 실행되게 하는 공격이다 . Get 방식은 데이터를 전송할 경우 URL 에 변수명과 입력 값을 노출한다 . 비박스를 이용한 웹보안 실습로그인 후 - 접속하기 비박스를 이용한 웹보안 실습비박스를 이용한 웹보안 실습 HTML Injection – Reflected (GET)HTML Injection ( GET ) 특징 htmli_get.php URL 에 전송되는 데이터의 변수 값이 노출된다 .. 비박스를 이용한 웹보안 실습실습 레벨 : 하 (low) 예 1 First name : h1 Success / h1 Last name : img src =http://localhost/ bWAPP /images/ bee_1.png 비박스를 이용한 웹보안 실습실습 레벨 : 하 (low) 예 2 First name : TEST Last name : script alert(1) /script 비박스를 이용 , medium ) 비박스를 이용한 웹보안 실습실습 레벨 : 중 (medium) 예 1 First name : h1 Success / h1 Last name : img src =http://localhost/ bWAPP /images/ bee_1.png 비박스를 이용한 웹보안 실습실습 레벨 : 중 (medium) 예 2 First name : TEST Last name : script alert(1) /script 비박스를 이용한 웹보안 실습실습 레벨 : 중 (medium) 문제점 #1-1 First name, Last name 값을 Encoding( 엔코딩 ) 하여 입력해 보자 . 참고 ) URL Encoder Web Site: http:// urlencoder.org URL Encoding : ASCII( 아스키 ) 코드의 HEX 값에 % 를 붙인 값이다 . First name : h1 Success / h1 Firstname Encoding Value: % 3C h1 %3E Success %3C%2F h1 %3E Last name : img src =http://localhost/ bWAPP /images/ bee_1.png Last name Encoding Value: % 3C img src =http://localhost/ bWAPP /images/ bee_1.png %3E 결과를 확인해 보자 . 비박스를 이용한 웹보안 실습실습 레벨 : 중 (medium) 문제점 #1-2 비박스를 이용한 웹보안 실습중 (medium) 해결 #1 : 공격대응방안 난이도 하 HTML 태그를 입력하면 태그로 해석하지 않고 문자열을 출력한다 . 난이도 중 인코딩 되어 입력된 태그들을 실행하지 않고 문자열로 출력한다 . HTML 태그를 입력하여도 태그로 해석하지 않는 이유 우회단계를 거치기 때문이다 . 비박스를 이용한 웹보안 실습중 (medium) 해결 #2 : 공격대응방안 비박스를 이용한 웹보안 실습중 (medium) 해결 #3 : 공격대응방안 File: $HOME/ bWP 기본 제공함수 HTML 에서 사용하는 특수 문자를 UTF-8 로 반환한다 .비박스를 이용한 웹보안 실습 HTML Injection – Reflected (POST)HTML Injection (POST) 특징 htmli_post.php 데이터를 전송하기 때문에 전송되는 변수 값이 URL 에 노출 되지 않는다 . 비박스를 이용한 웹보안 실습실습 레벨 : 하 (low) 예 1 First name : h1 POST TEST / h1 Last name : script alert('post') /script 비박스를 이용한 웹보안 실습Burp Suite 활용한 패킷 확인하기 Burp Suite 을 사용하여 변수 값을 전달해보자 . Web Browser( 웹 브라우저 ) 에서 Proxy( 프록시 ) 를 설정한다 . Burp Suite 를 실행한다 . Burp Suite [Proxy] 탭에서 “intercept is on” 을 활성화시킨다 . 웹 페이지의 [Go] 버튼을 클릭한다 . Burp Suite 에서 클라이언트가 보내는 HTTP 요청 정보를 확인한다 . 비박스를 이용한 웹보안 실습실습 레벨 : 하 (low) 예 1 h1 Success / h1 img src =http://localhost/ bWAPP /images/ bee_1.png 비박스를 이용한 웹보안 실습실습 레벨 : 중 (medium) Level low 해결 실습 레벨 바꾸기 = ( 중 , medium ) 비박스를 이용한 웹보안 실습실습 레벨 : 중 (medium) 예 1 First name : h1 Success / h1 Last name : img src =http://localhost/ bWAPP /images/ bee_1.png 값이 인코딩 되어 넘어가지만 실행되지 않고 문자열로 출력 비박스를 이용한 웹보안 실습실습 레벨 : 중 (medium) 문제점 #1-1 더블 인코딩 (Double Encoding) 의 문제 First name % 3C h1 %3E Success %3C%2F h1 %3E :: ction – 저장 (Stored) Blog저장 (Blog) 특징 htmli_stored.php 블로그 형식의 페이지를 지원한다 . 텍스트 필드에 데이터를 입력하고 [Submit] 버튼을 클릭하면 htmli_post.php 로 이동한다 . 비박스를 이용한 웹보안 실습실습 레벨 : 하 (low ) – Textarea 입력 form action= / bWAPP / htmli_post.php method=POST p label for= firstname First name: /label br input type=text id= firstname name= firstname /p p label for= lastname Last name: /label br input type=text id= lastname name= lastname /p button type=submit name=form value=submit Go /button /form 비박스를 이용한 웹보안 실습실습 레벨 : 하 (low ) – 입력 결과 비박스를 이용한 웹보안 실습실습 레벨 : 하 (low ) – 이동 [Go] 버튼 클릭 htmli_post.php 로 이동한다 . 비박스를 이용한 웹보안 실습중 (medium) 해결 #1 : 공격대응방안 while($row = $ recordset - fetch_object ()) { if($_COOKIE[ security_level ] = = 1 or $_COOKIE[ security_level ] = = 2) { ? tr height=40 td align=center ?php echo $row- id; ? /td td ?php echo $row- owner; ? /td td ?php echo $row- date; ? /td td ?php echo xss_check_3 ($row- entry); ? /td /tr ?php } else {? tr height=40 td align=center ?php echo $row- id; ? /td td ?php echo 성 URL 을 삽입한 후 사이즈를 0 으로 설정하여 숨기는 방법을 사용한다 . 사용자가 의도하지 않은 악성 웹사이트에 접속하거나 경고창을 띄울 수 있다 . 비박스를 이용한 웹보안 실습iFrame Injection 특징 파일 : htmli_get.php Get 방식으로 데이터를 전송하므로 URL 변수에 노출된다 . http://127.0.0.1/ bWAPP / iframei.php? ParamUrl = robots.txt ParamWidth = 250 ParamHeight =250 변수는 ParamURL , ParamWidth , ParamHeight 총 세 가지다 . ParamUrl : 연결된 주소를 받아온다 . ParamWidth , ParamHeight : 출력할 크기를 저장한다 . 비박스를 이용한 웹보안 실습iFrame Injection 삽입 방법 비박스를 이용한 웹보안 실습 ParamUrl value “ robots.txt ” http://127.0.0.1/ bWAPP / iframei.php? ParamUrl = robots.txt ParamWidth = 250 ParamHeight =250주입할 악성코드 생성하기 ( bad.html ) 비박스를 이용한 웹보안 실습 html head h1 Iframe Injection / h1 script alert(Succeed) /script /head /htmliFrame 악성코드 주입하기 [ “ /iframe ] : 원래 페이지의 iframe 태그를 닫는다 . [ 확인 ] 버튼 클릭 robots.txt 내용 옆에 bad.html 파일이 추가된다 . 비박스를 이용한 웹보안 실습 http://127.0.0.1/ bWAPP / iframei.php?ParamUrl = robots.txt /iframe iframe src = bad.html width=250 height=250 /iframe ParamWidth = 250 ParamHeight =250Iframei.php 에 주입된 코드 비박스를 이용한 웹보안 실습중
시모스 설정하기1. 시모스 셋업 정의 CMOS(Complementary Metal-Oxide Semiconductor) : 읽고 쓰기가 가능한 반도체 형태 - 보통 시모스라고 읽음 . - 시모스는 아주 적은 전력만으로도 내용을 계속 유지할 수 있음 . ( 즉 , 메인보드의 플래시 바이오스 칩 옆에 있는 작은 전지가 계속해서 전력을 공급하기 때문에 전원을 내려도 시모스에 저장된 내용은 보관이 가능 ) 시모스 셋업 : 시모스에 저장되어 있는 일종의 프로그램 - 컴퓨터 사용자는 시모스 셋업에서 시모스에 저장된 하드웨어 설정 사항을 제어할 수 있음 . - 시모스 셋업이 제대로 이루어 져야 바이오스에서 시모스를 읽어 장착되어 있는 장치와 제어방법을 알게 됨 . - 시모스 셋업은 최소한만 설정해도 컴퓨터를 사용하는데 문제가 없음 .필수 시모스 셋업 - 날짜와 시간 설정하기 - CPU 환경 설정하기 - 메인보드에 내장된 컨트롤러 활성 및 비활성화하기 - 하드디스크 드라이브 설정하기 - 부팅 순서 설정하기2. 마우스로 설정할 수 있는 UEFI UEFI(Unified Extensible Firmware Interface) : 확장 펌웨어 인터페이스 - 기존 바이오스 인터페이스를 대체하는 새로운 인터페이스 . ( 마우스로 설정이 가능 , 화면 캡쳐 등 여러가지 인터페이스를 제공 ) -UEFI( 확장 펌웨어 인터페이스 ) 바이오스를 통해 사용자가 쉽게 메인보드 및 cpu 주요기능 설정레거시 바이오스와 UEFI 바이오스 차이점 구형 바이오스 기계어 사용 장치에 있는 옵션 롬이 64KB 제한 하드디스크 , SSD 와 같은 장치 사용 제약 옵션 롬이 128KB 의 주소 공간만 사용하도록 제한 ( 주소 공간 모두 사용시 ‘Option ROM Space Exhausted’ 라는 메시지를 나타냄 ) UEFI 바이오스 C 언어 사용으로 편리한 기능 추가 옵션 롬에 관한 제약이 없음 ( 드라이버 , 프로토콜을 통해 장치를 제어할 수 있어 기능 확장이 쉬움 )UEFI 바이오스의 새로운 기능 메인 테이블 (GPT) 을 사용함 . 기존 바이오스 셋업은 키보드 만으로 조작했지만 UEFI 바이오스 셋업은 마우스로 설정할 수 있는 그래픽 유저 인터페이스로 구성되어 편리함 .MBR, GUID 파티션 테이블 란 ? MBR(Master Boot Record) : 하드디스크의 맨 앞에 기록되어 있는 시스템 기동용 영역 . PC 에 전원을 인가하면 먼저 첫 번째 하드디스크의 MBR 에 기록되어 있는 프로그램이 읽힘 . GUID 파티션 테이블 (GPT) : 컴퓨터 하드웨어에서 GUID 파티션 테이블은 물리적인 하드 디스크에 대한 파티션 테이블 레이아웃 표준이다 . 확장 펌웨어 인터페이스 표준의 일부로 형성되어 있기는 하지만 MBR 파티션 테이블의 제한 때문에 일부 바이오스 시스템에 사용되기도 한다 .3. 시모스 셋업에서 날짜 설정하고 저장하기 - 전워켜기 - delete( 어워드 , 아미 , 피닉스 - 어워드바이오스 ) or f2( 이전 피닉스 바이오스 ) 로 셋업에 들어가기 - ’system’ 메뉴로 이동 - ’system data’ 와 ‘system time’ 메뉴에서 날짜와 시간을 설정 - f10 으로 저장 네 클릭 or ‘ 저장 및 종료 ’ 메뉴로 이동 ‘ save exit setup’ 선택4. 시모스 셋업에서 필요한 장치만 검색하도록 설정하기 PC 가 켜지면 F2 나 Del 을 눌러 시모스 셋업을 실행하기까지 단계인 포스트 작업 시간을 줄여 부팅 속도를 단축할 수 있습니다 . 시스템에 장착된 하드웨어를 점검하는 포스트 단계에서 불필욯나 기능 , 장치 등은 사용하지 않고 인식조차 하지 않도록 해서 처리 시간을 줄입니다 .Auto 보다 정확한 값 설정하기 하드디스크 , 광학 드라이브 등을 설정하는 항목은 ‘ Auto’ 로 지정되어 부팅할 때 어떤 장치가 있는지 알아챕니다 . 최근에는 IDE 채널과 SATA 채널을 합쳐 4~6 개는 기본이며 이 모든 채널을 부팅할 때 검사하므로 부팅 시간이 길어져 하드디스크가 장착되지 않은 채널은 검사하지 않도록 설정합니다 . 구형 보냅니다 . 입력 장치가 없으면 운영체제를 부팅해도 소용없기 때문입니다 . 최근에는 USB 키보드를 많이 사용하므로 검사가 필요 없습니다 . 부팅할 때 키보드 LED 가 켜졌다가 꺼지는 것은 키보드가 제대로 장착되었는지 검사하는 과정입니다 . 시모스 셋업을 지정하여 키보드 검사를 생략합니다 . 구형 바이오스의 경우 Standard CMOS Setup 의 Halt On 을 ‘ No Errors’ 로 지정합니다 . UEFI 바이오스의 경우 ‘ BIOS 기능’ 메뉴에서 부팅 할 때 Num Lock 상태를 ‘사용 안 함 (Disabled)’ 으로 지정합니다 .쓰지 않는 장치는 끄고 필요한 장치는 미리 읽기 메인보드에는 랜 , 사운드 , 레이드 컨트롤러 , IEEE 1394, USB 컨트롤러 , 시리얼 포트 등이 장착되어 있습니다 . 사용하지 않는 장치는 메모리와 리소스를 낭비하지 않기 위해 이들을 사용하지 않도록 비활성화하면 윈도우가 가벼워집니다 . 반대로 UEFI 바이오스의 경우 필요한 장치는 윈도우 부트 로더가 실행되기 전에 장치 드라이버를 읽도록 설정할 수 있습니다 . 구형 바이오스의 경우 ‘ Advanced’ → ‘ Onboard Devices Configuration’ → ‘ Intergrated Peripherals’ 에서 사용하지 않는 장치는 ‘사용 안 함 (Disabled)’, 사용하는 장치는 ‘사용 (Enabled)’ 으로 지정합니다 . UEFI 바이오스의 경우 ‘주변장치’ 메뉴에서 사용하는 장치는 ‘사용 (Enabled)’, 사용하지 않는 장치는 ‘사용 안 함 (Disabled)’ 으로 지정합니다 . Pre-Boot 는 ‘사용 (Enabled)’ , ‘ 사용 안 함 (Disabled)’ 으로 지정합니다 .부팅 장치 우선순위 결정하기 부팅에 사용할 수 있는 장치로 이전에는 하드디스크뿐이었지만 , 최근에는 USB 메모리 , SSD, 외장 하드디스크 등 다양합니다 . 또한 네트워크 어댑터 , PCI 장치 드으이 옵션 롬을 이용해 시스템을 부팅할 수도 있 . ‘ 저장 및 종료’ 메뉴에서 부팅할 장치를 직접 선택해 시스템을 시작할 수 있습니다 .모니터가 연결된 그래픽 우선 검색하기 – UEFI 바이오스 아이비 브리지 CPU 에 내장된 그래픽 코어는 3 대의 모니터를 지원하며 외장 그래픽 카드도 함께 사용할 수 있습니다 . 내 · 외장 그래픽 카드를 함께 사용하면 주 디스플레이로 사용하는 모니터가 연결된 그래픽 장치부터 우선 검색하도록 설정합니다 . ‘ 주변장치’ 메뉴에서 그래픽 카드 우선순위를 결정합니다 .플로피 드라이브를 검색하지 않도록 설정하기 - 구형 바이오스 플로피 디스크 드라이브가 없으면 플로피 디스크 드라이브를 검사하지 않도록 지정해서 장착되지 않은 플로피 디스크 드라이브를 찾는 데 걸리는 시간을 줄여 부팅 시간을 단축할 수 있습니다 . ‘Main’ 메뉴의 Standard CMOS Setup 을 실행하고 Floppy 관련 옵션을 ‘ None’ 으로 지정합니다 .메모리 검사 생략하기 – 구형 바이오스 부팅할 때 메모리 검사 등과 같은 점검 과정에서 첫 번째로 성공하면 재검사하지 않고 다음 과정으로 넘어가 부팅 시간을 단축할 수 있습니다 . ‘Advanced Features Setup’ 이나 ‘ Boot’ 메뉴의 Quick Power On Self Test( 또는 Quick Boot) 를 ‘사용 (Enabled)’ 으로 지정합니다 .5. 주변장치 활성 / 비활성하기 메인보드 백 패널에는 USB 포트 , 병렬 포트 , 그래픽 포트 , PS/2 포트 , 랜 포트 , 사운드 포트 등이 있습니다 . 시모스 셋업에서 사용 여부를 결정하며 사용하지 않는 컨트롤러는 과감하게 비활성화하는 것이 좋습니다 .USB 포트 조절하기 메인보드에는 4~10 개 이상 USB 포트가 존재합니다 . 이중 USB 3.0 이나 USB 2.0 인터페이스를 사용하는 포트도 있습니다 . 시스템을 시작할 때 USB 포트를 사용하는 키보드와 마우스를 이용하려면 레거시 USB 장치를 사용하도록 설정해야 합니다 . 구형 바이오스를 기준으로 ‘ Adv와 랜 컨트롤러 , 직렬 포트 활성화하기 구형 바이오스를 기준으로 ‘ Advanced’ → ‘ Onboard Devices Configuration’ → ‘ Intergrated Peripherals’ → ‘ Onboard Device Configuration’ 에서 ‘ HDA Controller’ 는 메인보드에 내장된 사운드 칩셋을 사용하려면 ‘ 사용’으로 지정합니다 . 별도로 장착도니 사운드 카드를 사용하면 ‘사용 안 함’으로 지정해야 사운드 카드 기능을 제대로 사용할 수 있습니다 .(2) 사운드와 랜 컨트롤러 , 직렬 포트 활성화하기 ‘ Onboard LAN’ 은 메인보드에 내장된 랜 컨트롤러를 사용하면 ‘ 사용’으로 지정합니다 . 메인보드에 내장된 랜 컨트롤러를 사용하지 않으면 ‘사용 안 함’으로 지정해 시스템 자원을 확보합니다 . NV LAN 은 엔비디아 랜 컨트롤러를 의미하고 , Marvell LAN 은 마벨 랜 컨트롤러를 의미합니다 . 최신 시스템에는 랜 컨트롤러가 2 개 이상 장착되어 있습니다 ‘ Serial Port Address’ 는 직렬 마우스나 외장형 모뎀이 연결되는 메인보드에 내장된 직렬 포트가 사용할 메모리 주소와 IRQ 번호를 설정합니다 . 직렬 포트를 이용하는 장치가 없으면 ‘사용 안 함’으로 지정하여 시스템 자원을 확보하는 것이 좋습니다 .6. 그래픽 장치 우선순위 결정하기 1.Init Display First 2. 내장된 그래픽 우선 3. 내장된 그래픽의 메모리 용량 4.DVMT 의 전체 메모리 용량7. 시모스 셋업으로 CPU 정보 확인하기 1.BCLK 2.Turbo Ratio/Turbo Frequency(MHZ) 3.Non-Turbo Ratio/Non-Turbo Frequency(MHZ) 4.Core Temperature 5.DIMM(s) 6.Memory Channel A/B8. 시모스 셋업 조절로 CPU 신기능 사용하기 바이러스 방지기술인 ‘ 데이터 실행방지‘ XD 비트 , 절전기능 - 스피드 스텝 (EIST) 와 같은 기술