54
OWASP Kknock S5 권혁규

Owasp에 대하여

Embed Size (px)

Citation preview

Page 1: Owasp에 대하여

OWASP

Kknock S5 권혁규

Page 2: Owasp에 대하여

목차

• OWASP?

• OWASP!

Page 3: Owasp에 대하여

OWASP?

• “오픈소스 웹 애플리케이션 보안 프로젝트”

10대 웹 애플리케이션의 취약점인

OWASP TOP 10을 발표하기도 한다.

가장 최근 발표는 2013년.

Page 4: Owasp에 대하여

OWASP TOP 10?

Page 5: Owasp에 대하여

OWASP TOP 10

• A1 – 인젝션

• A2 – 인증/세션 관리 취약점

• A3 – XSS

• A4 – 취약한 직접객체 참조

• A5 – 보안 설정 오류

• A6 – 민감 데이터 노출

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

• A8 – CSRF

• A9 – 알려진 취약점이 있는

컴포넌트 사용

• A10 – 검증되지 않은 리다이렉트

및 포워드

Page 6: Owasp에 대하여

A1 - 인젝션

• Injection :: 주사, 삽입.

• 특정 입력폼에 SQL문을 삽입하여

비정상적인 입력을 하는 것.

Page 7: Owasp에 대하여

A1 - 인젝션

• 인젝션의 목표는 대부분 DB를 건드리는 것이 주.

• SQL 인젝션의 유형

– 일반적인 SQL Injection

– Blind SQL Injection

Page 8: Owasp에 대하여

A1 – 인젝션

• 원래는 다음과같이 쿼리를 날리는 코드.

• 근데, ID에 admin’ -- 라는 입력을 한다면??

• 쿼리는• select * from members where id='admin' -- AND pass='‘

• 이라고 날아갈 것 이다.

Page 9: Owasp에 대하여

A1 – 인젝션

Dㅔ모

Page 10: Owasp에 대하여

A1 - 인젝션

Page 11: Owasp에 대하여

A1 - 인젝션

• 장님처럼 더듬거리듯이 정보를알아내는 방법

• 쿼리가 참일 때, 거짓일 때 나오는 서버의 반응으로 데이터수집

• 많은 비교과정이 필요하므로.. 대부분 자동화함

Page 12: Owasp에 대하여

A1 - 인젝션

• Blind SQL Injection에서 필요한 함수들..

• SubStr 문자열 자르기…SubStr(“문자열”,시작 인덱스, 개수)

• Ascii 아스키코드로 변환해줌…ascii(문자)

Page 13: Owasp에 대하여

A1 - 인젝션

• 특정 DB명을 알아내고싶다!!

• Information_schema DB에 있는 SCHEMATA 테이블에는 존재하는 모든 DB 이름이 존재한다.

• 여기서, SCHEMA_NAME 컬럼에 있는 모든 값들을 가져온 후 특정 DB명을 알아내면 됨.

Page 14: Owasp에 대하여

A1 – 인젝션

• 특정 DB명을 알았다. 테이블명도 알아보자.

• Information_schema DB에 있는TABLE_CONSTRAINTS 테이블에는 DB명에 맞는테이블명이 존재한다.

Page 15: Owasp에 대하여

A1 - 인젝션

• 우선 SCHEMA_NAME부터 가져와보자.

• 다음과 같은 쿼리를 날리면, information_schema가 뜬다

– select schema_name from information_schema.SCHEMATA limit 0,1

Page 16: Owasp에 대하여

A1 - 인젝션

• 가져온 값은 information_schema 이다.

이 값을 한방에 바로 맞추면 최소 독심술사;

• 여기서 substr을 이용해 앞에 하나를 잘라준다.select substr((select SCHEMA_NAME from information_schema.SCHEMATA limit 0,1),1,1);

• 이러면 “i”가 나온다.

• 근데 i는 숫자가 아님.숫자로 바꿔주자.

Page 17: Owasp에 대하여

A1 - 인젝션

• 문자를 숫자로 표현할 땐 대표적으로 ascii코드를 쓴다.

• 그래서 ascii 함수를 씀.select ascii(substr((select SCHEMA_NAME from information_schema.SCHEMATA limit 0,1),1,1))

• 그럼 다음과 같이 i가 숫자인 105로 나오는데,

• 이걸 105인줄 모르는 상태에서 맞추려면 술게임인 업다운을 해야함

Page 18: Owasp에 대하여

A1 - 인젝션

• 우선 대부분 문자는 65 ~ 122까지 A-z임.• 97부터 소문자 a가 시작되므로 97부터

시도해 보는 게 좋음.• select ascii(substr((select SCHEMA_NAME from information_schema.SCHEMATA limit 0,1),1,1)) => 쿼리 결과값

• 쿼리 결과값 > 97 => True• 쿼리 결과값 > 110 => False• 쿼리 결과값 > 104 => False• 쿼리 결과값 > 107 => False• 쿼리 결과값 > 106 => False• 쿼리 결과값 = 105 => True

┐<┘

┐계속 반씩 나눠서 계<┘산해줌.

┐<┘

Page 19: Owasp에 대하여

A1 - 인젝션

• 그럼 이제 information_schema.SCHEMATA에있는 첫번째 테이블의 첫번째 값의 첫번째 알파벳을 알아낼 수 있음. 굳

Page 20: Owasp에 대하여

A1 - 인젝션

• 그럼 이제 이걸 코드를 짜보면,

admin' and (select ascii(substr((select SCHEMA_NAME from information_schema.SCHEMATA limit 0,1),1,1)) > ???);

• 가 된다. 이걸 로그인 창의 ID에 치면 된다.

Page 21: Owasp에 대하여

A1 - 인젝션

• 이런 식으로 하나하나씩 맞춰가면information_schema를 알 수 있고, 좀 더하면

• 전체를 알 수 있다.

• 근데 수동으로 하기엔 고행급이라 자동화해서함.

Page 22: Owasp에 대하여

A1 – 인젝션

데M

Page 24: Owasp에 대하여

A1 - 인젝션

<세상이 혼란하면 커지는 혼세마왕>

Page 25: Owasp에 대하여

A1 - 인젝션

• Php.ini 파일의 magic_quotes_gpc 옵션을 On으로 변경해준다.

• “ ’<>=,() ”등과 같은 특수문자 사용을 막는다.

• 등등…

• 근데 사실 완벽한 보안은 없어서 무조건 뚫린다.

Page 26: Owasp에 대하여

A2 – 인증 및 세션관리 취약점

세션

하이재킹

(납치)

Page 27: Owasp에 대하여

A2 – 인증 및 세션관리 취약점

• 세션은 다음과같이 생겼다.

Page 28: Owasp에 대하여

A2 – 인증 및 세션관리 취약점

• 세션 :: 각 클라이언트마다 고유값을 주고,그 값으로 클라이언트들을 구분함.

• 그 값이 PHP에선 바로 PHPSESSID

Page 29: Owasp에 대하여

A2 – 인증 및 세션관리 취약점

• 이 세션중, 관리자의 세션을 뺏어온 이후그 세션으로 인증을 한다면?

=> 관리자가 되어 뭐든지 할 수 있다.

Page 30: Owasp에 대하여

A2 – 인증 및 세션관리 취약점

• XSS를 통하여 세션을 얻은 후, 그 세션을저장하는 스크립트를 작성한다.

• down.php ->

Page 31: Owasp에 대하여

A2 – 인증 및 세션관리 취약점

• 그럼 이제 sess.txt 파일을 받으면 세션 정보가 들어있을 것이다.

• 쿠키는 클라이언트에 저장 되어있는 것 이므로 클라이언트가 수정할 수 있다.

• 따라서 자신의 세션을 관리자 세션으로 변경하면 끝.

Page 32: Owasp에 대하여

A2 – 인증 및 세션관리 취약점

데MO

Page 33: Owasp에 대하여

A2 – 인증 및 세션관리 취약점

<세상이 혼란하면 커지는 혼세마왕>

Page 34: Owasp에 대하여

A2 – 인증 및 세션관리 취약점

• 매 페이지마다 세션을 바꿔준다.

• 타임아웃 기능을 넣어서 아무것도 안하는 사용자는 일정 시간이 지나면 로그아웃 되게끔.

• 일정 회수 이상 인증 실패시 사용자 잠금.

Page 35: Owasp에 대하여

A3 – XSS

• Cross-Site Script 라서CSS이어야 하는데CSS는 이미 있는 단어라XSS가 됨..

• 글 내용과 같이 입력한 뒤 볼 수 있는 곳에 쓰며, 내용을 볼 때 스크립트를 작동 시키게 함.

Page 36: Owasp에 대하여

A3 - XSS

• 대부분 경고 창을 띄우게 하여 XSS 가능여부를 확인함.

<script>alert(‘XSS’)</script>

• 필터링이 되있다면 한번 꼬아도 된다.

<sc<script>ript>alert(‘XSS’)</sc<script>ript>

Page 37: Owasp에 대하여

A3 - XSS

<script>alert(document.cookie)</script>

Page 38: Owasp에 대하여

A3 - XSS

DE모

Page 39: Owasp에 대하여

A3 – XSS

<세상이 혼란하면 커지는 혼세마왕>

Page 40: Owasp에 대하여

A3 - XSS

• Htmlspecialchars와 같은 함수를 써서 막는다.

• 특수문자나, 스크립트 명령어들을 작성이 될 때막는다.

Page 41: Owasp에 대하여

A4 – 취약한 직접객체 참조

• 이전에 있던 Editor에서 글 수정을 할 경우타인의 글도 수정할 수 있던 현상 같은 것.

• 참조를 할 때, 참조의 주소를 꼬아놓는 것

• 등등과 같은 참조와 관련한 문제를 이용.

Page 42: Owasp에 대하여

A4 – 취약한 직접객체 참조

• 세션을 통하여 매 페이지마다 세션검증을하도록 함.

• 인가되지 않은 파일이 다운로드 되지 않도록 막는다.

Page 43: Owasp에 대하여

A5 – 보안 설정 오류

• 대부분 Php.ini에서 문제가 발생됨.

• 3가지만 해놓아도 절반이상은 막는다.

• Register_globals = Off

• magic_quotes_gpc = On

• allow_url_fopen = Off

Page 44: Owasp에 대하여

A5 – 보안 설정 오류

• Register_globals = Off

• 저걸 안하면 변수가 SESSION인지, GET인지, POST인지가 필요하지 않음.

• 따라서 $_SESSION[‘chmod’]=0 인데 URL 뒤에 ?chmod=1을 넣는다면 권한상승.

Page 45: Owasp에 대하여

A5 – 보안 설정 오류

• magic_quotes_gpc = On

• Sql injection이나, 혹은 싱글쿼터(‘)나 더블쿼터(“)가 들어가는 공격을 막아준다.

• ‘ -> \’

• “ -> \”

Page 46: Owasp에 대하여

A5 – 보안 설정 오류

• allow_url_fopen = Off

• Fopen과 같은 파일 관련 함수에서 URL로파일을 읽어오는 것이 불가능해짐.

Page 47: Owasp에 대하여

A6 – 민감 데이터 노출

• 비밀번호와 같은 민감한 데이터들이 노출될 것을 우려하여, 암호화를 하는 등의 일.

• SSL과 같은 암호화에 대한 내용들임.

• 혁보드는 현재 비밀번호를 MD5라는 해쉬방법을 사용하여 저장한다.

Page 48: Owasp에 대하여

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

일반 사용자는

http://203.249.25.64:8080/test/phpinfo.php

이런걸 못보게 해야한다.

혹은 관리자페이지와 같은것들..

Page 49: Owasp에 대하여

A8 - CSRF

• 사이트가 신뢰하는 사용자를 통해 공격자가 원하는 명령을 사이트로 전송함.

• 가령 editor.php?title=“저는 바보입니다 ㅋㅋ”&contents=“이거 리얼임” ….

• 등으로 되어있는 링크를 클릭하면 저런내용의 글이 작성될 것임..

Page 50: Owasp에 대하여

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

Page 51: Owasp에 대하여

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

• 컴포넌트를 사용하되, 보안패치가 나오면꼭 주기적으로 해준다.

• http://203.249.25.64:8080/index.php

• 에서는 현재 그누보드 5버전을 사용중…

Page 52: Owasp에 대하여

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

• 가장 쉬운 방법은 리다이렉트 혹은 포워드를 사용하지 않는 것이다.

• 서버 관리자보단, 유저들이 조심해야하는 부분..

Page 53: Owasp에 대하여

QnA질의응답

질문과답변

Page 54: Owasp에 대하여

감사합니다