□ ASP
1. include 파일을 보호하자.
- 일반적인 디렉토리(/lib, /include, /library등)를 사용하지 않도록 한다. include 파일들의
확장자를 .inc나 .lib등을 사용하는 경우 웹 페이지 상에서 텍스트 파일로 인식하지 않도록 .asp를
붙여서 사용한다.(예:config.inc.asp, lib.inc.asp등)
- 별도의 확장자를 사용할 경우 아래와 같이 해당 확장자를 처리할 수 있도록 웹 서버에서 설정하여 준다.
2. Server.HTMLEncode
- 용도 : 특정 문자열에 대한 HTML encoding을 수행한다. 사용자가 입력한 값으로 HTML 페이지를
구성하기 전에 사용하면 Cross-SiteScripting 공격 등에 효과적이다.
- 적용 가능한 IIS : IIS 5.0이상
- 사용법
<%= Server.HTMLEncode("<script>alert(document.cookie);</script>")%>
- 결과(암호화적용후)
<script>alert(document.cookie);</script>
3. Session.Abandon
- 용도 : Session 객체에 저장되어 있는 모든 정보를 삭제한다. 사용자 로그 아웃 프로세스에
사용해서 기존 세션 정보를 보호하기 위해서 사용할 수 있다.
- 적용 가능한 IIS : IIS 5.0이상
- 사용법
<% Session.Abandon %>
4. Session.Timeout
- 용도 : Session 객체에 Time-out 시간을 분단위로 지정한다. 사용자로부터 지정된 시간 동안 요청이
없을 경우 세션이 자동으로 끊어진다.
- 적용 가능한 IIS : IIS 5.0이상
- 사용법
. Session.Timeout : 세션 Timeout 시간을 기본값인 10분으로 설정한다.
. Session.Timeout = 15 : 세션 Timeout 시간을 명시한다.
(권장 시간 : 4분 ~ 20분)
5. ASPError 객체의 output을 사용자에게 전달하지 말자.
6. DB 접근을 위해서 COM+ 객체 사용을 고려하자
7. SQL 쿼리를 ASP에서 직접 생성하는 것을 지양하고, Stored procedure를 사용하도록 고려하자.
- 직접 생성 방식
strQuery = "SELECT something FROM table WHERE foo='" + var1 + "' AND bar="" +
var2 + "";
- Stored procedure를 사용한 생성 방식
strQuery = sp_somefunc(var1, var2)
□ PHP
1. [PHP 4.0 이상] 환경 설정(php.ini) 내용 중 register_global을 "on"으로설정할 경우, PHP 스크립트의변수 값을 임의로 변경할 수 있는 취약성이 있다.
따라서 register_global은 "off"로 설정한 후, $_GET,
$_POST 문을 사용해서 사용자가 전달한 값을 얻어야 한다.
register_global = Off
2. PHP 스크립트 오류를 사용자에게 보내지 않기 위해서 PHP 환경 설정파일(php.ini)에서 아래와 같이설정한다.
log_error = On
display_errors = Off
3. utf8_decode()
- 용도 : UTF-8 형식의 입력 값을 ISO-8859-1 형식으로 전환해준다. 필터링 규칙을 적용하기 전에
사용할 것을 권장한다.
- 적용 가능한 PHP 버전 : PHP 3.0.6 이상
4. strip_tags()
- 용도 : 문자열로부터 HTML 태그와 PHP 태그를 없앤다. 사용자가 입력한 값을 HTML 화면에 출력할
경우 사용해서 Cross-SiteScripting 공격에 대비할 수 있다.
- 적용 가능한 PHP : PHP 3.0.8 이상
- 사용법
. strip_tags('<script>'); : 모든 HTML에서 <script> 태그를 제거한다.
. strip_tags('<script>', '<script<iframe>')
첫 번째 인자로 전달된 문자열은 제거하고, 두 번째 인자로 지정된 태그는 허용한다.
5. htmlspecialchars()
- 용도 : 특정 문자열에 대한 HTML encoding을 수행한다. 사용자가 입력한 값으로 HTML 페이지를
구성하기 전에 사용하면 Cross-SiteScripting 공격 대비를 위해서 사용할 수 있다.
- 적용 가능한 PHP : PHP 3 이상
- 사용법
htmlspecialchars("<a href='test'>Test</a>")
- 결과
<a href='test'>Test</a;>
6. addslashes()
- 용도 : DB Query와 같이 인용된 부분앞에 역슬래쉬를 분여서 반환한다. 해당 문자에는 작은 따옴표,
큰 따옴표, 역슬래쉬, NULL이 있다. SQL Injection 공격을 위해서 사용한다.
- 적용 가능한 PHP 버전 : PHP 3 이상
7. include 파일을 보호하자.
- 일반적인 디렉토리(/lib, /include, /library등)를 사용하지 않도록 한다.
- include 파일들의 확장자를 .inc나 .lib등을 사용하는 경우 웹 페이지 상에서 텍스트 파일로 인식하지
않도록 .php를 붙여서 사용한다. (예:config.inc.php, lib.inc.php등)
- 별도의 확장자를 사용할 경우 아래와 같이 해당 확장자를 처리할 수 있도록 웹 서버에서 설정하여
준다.
Httpd.conf 중
AddType application/x-httpd-php .lib .inc .html .htm .php .xml
8. session_destroy
- 용도 : Session 객체에 저장되어 있는 모든 정보를 삭제한다. 사용자 로그 아웃 프로세스에 사용해서
기존 세션 정보를 보호하기 위해서사용할 수 있다.
- 적용 가능한 PHP 버전 : PHP 3 이상
- 웹 애플리케이션 취약성 점검 도구를 사용한다.
- 웹 애플리케이션 취약성 점검을 위해서 자동화 툴을 사용해서 일반적인취약점을 제거한다.
- 공개 도구들
. Nikto(공개프로그램) - http://www.cirt.net/code/nikto.shtml
. Whisker(공개프로그램) - http://www.wiretrip.net
. Retina(상용프로그램-eEye) - http://www.eeye.com
□ Java
1. Java Class 역 컴파일 문제
- Java 언어의 Byte-code 특성으로 인하여 Java class는 쉽게 역 컴파일이 가능하다. 만약 Java
Applet에 중요 정보 (예, 원격지 접속을 위한 ID/PW, DBQuery, 직접 제작한 암호화 알고리즘,
프로그램 로직등)을 hard-coding 했다면, 이를 발견한 공격자는 해당 정보를 악용할 수 있는 위험이
존재한다. 따라서 외부로 전송되는 Java class 파일에는 중요 정보를 hard-coding하는 것을 지양해야
한다.
- Sun Microsystems에서 Java 프로그램 개발 시 고려해야할 다양한 보안사항을 제공하고 있다.
- Secure Code guidelines(Sun Microsystems) :
http://www.java.sun.com/security/seccodeguide.html
'시스템/웹/포렌식 보안 > 웹 해킹/보안' 카테고리의 다른 글
접근 우회(통제) 취약점 (0) | 2014.05.10 |
---|---|
파일 업로드 취약점 점검 및 보안 (0) | 2014.05.10 |
Windows 2008 파일 시스템 보안설정 (0) | 2014.04.06 |
웹 진단(모의해킹) 가이드 라인 OWASP10 (0) | 2014.04.06 |
SQL Injection 취약점 점검 가이드 (0) | 2014.02.23 |